Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Добрый день!
Нужна ваща помощь,столкнулся с трудностью при продление actin -действия.
Например имеется некий класс , как продлить акшен едит в дочернем классе.
Код:
Xenforo_ControllerPublic_Member
{
public function editAction()
{
//this is code
}
}
Порядок, в общем, такой:
в админке, на вкладке Development, в разделе Code Event Listeners, создаете новый листенер на событие load_class_*, где * это тип расширяемого вами класса, или же можно выбрать просто load_class. В event hint вводите название расширяемого класса, если нужно работать только с ним, или оставляете пустое, тогда можно будет выбирать в коде, какой класс расширить.
В execute callback вписываете название класса и имя метода (метод должен быть статическим), который будет действовать как каллбек загрузки классов, с параметрами $class и &$extend - в первом будет имя загружаемого класса (из поля event hint, или любое имя класса, который загружается в данный момент, если хинт оставили пустой). $extend - массив по ссылке, в который нужно будет добавить имя класса, которым будете расширять.
Сам класс с каллбеком выглядит примерно так:
PHP:
class MyAddon_Listener
{
public static function load_class($class, array &$extend)
{
// это тот класс, который нужен?
if ($class == 'XenForo_ControllerPublic_Member')
{
// добавляем в массив имя класса, который расширит его
$extend[] = 'MyAddon_ControllerPublic_Member';
}
}
}
Потом создаете сам класс, который будет расширять. С вот такой сигнатурой:
PHP:
class MyAddon_ControllerPublic_Member extends XFCP_MyAddon_ControllerPublic_Member
{
}
То-есть, расширять он должен несуществующий класс, который имеет имя XFCP_ВашКласс. Эту хитрость обработает внутренний загрузчик классов, это уже его работа.
Остается только создать в своем классе такой же метод, как в расширяемом, и возвращать из него такие же типы результатов.
PHP:
class MyAddon_ControllerPublic_Member extends XFCP_MyAddon_ControllerPublic_Member
{
public actionEdit()
{
// получить "ответ" родительского класса, если нужно
$response = parent::actionEdit();
// ваши действия
// возвратить либо родительский ответ с изменениями, либо другой объект типа XenForo_ControllerResponse
return $response;
}
}