Создание кастомного элемента zoo
В этом материале я разбирал возможность редактирования вывода настроек в админке кастоного элемента zoo. Записывал для себя, выкладываю как есть.
Настройки вывода полей сохраняются в файле media\zoo\applications\blog\templates\default\renderer\item\positions.config. Считывается этот файл helper:render.php вызывает helper:parameter.php метод create()проверка если нет то создаётся helper:loader.php register( json.php)
Пути к шаблонам сохраняются в файле /administrator/components/com_zoo/checksum
e5213087aa8c7cd9335fd64a3269bc60 media/applications/blog/templates/default/renderer/item/author/submission.php
В конструкторе json.php parent::__construct($data); $data->elements массив элеметов
подключает иклюдом administrator\components\com_zoo\views\manager\tmpl\assignsubmission.php в json.php в переменную
Задача создать объект AppEvent в конструктор которого передать извлеченные закрытые для записи поля у объекта события параметра извлечённого по ссылке.Присвоить ссылке новый объект.
Задача выполнима, но в дальнейшем, объект просто заменяется на другой, результата нет,можно разобрать более дитально.
При выводе страницы добавления в позици элементов например по адресу:
administrator/index.php?option=com_zoo&controller=manager&task=assignelements &group=business&type=organization&path=media%252Fzoo%252Fapplications%252Fbusiness%252Ftemplates%252Fuikit&layout=full
manager.php загружаются типы $this->type = $this->application->getType($type);
В самом классе Type извлекаются конфиг типов(элементов)
/media/zoo/applications/business/types/organization.config
сами поля fields собираются в ZlFieldHelper это строкой:$json = json_decode(include($path), true); переменная $path -plugins\system\zoo_zlelements\zoo_zlelements\elements\textpro\params\text.phpВ этом файле подключается require_once(JPATH_ADMINISTRATOR . '/components/com_zoo/config.php');и добвляется во view assignelement по пути:administrator\components\com_zoo\views\manager\tmpl\assignelements.phpв цикле в строке:echo $this->partial('assignelement', array('element' => $element, 'data' => $data, 'position' => $position, 'index' => $i++, 'core' => ($element->getGroup() == 'Core')));вызывается частиный вью:administrator\components\com_zoo\views\manager\tmpl\_assignelement.phpв котором и 'прорисовываются' все элементы данной страницы
Сами элементы бирутся из файла /media/zoo/elements/core.config той строкой
$elements = array_merge($this->type->getElements(), $this->type->getCoreElements());при этом тут $this->type->getCoreElements()
вызываются обработчики событий... один из которых plgSystemZlfamework:
coreConfig( $event, $arguments = array() ){ $config = $this->app->data->create(file_get_contents($this->app->path->path('elements:core.config')))->get('elements');$this->_core_elements_config = $this->app->event->dispatcher->notify($this->app->event->create($this, 'type:coreconfig')->setReturnValue($config))->getReturnValue();