Обработка события добавления поля компонента zoolenders.
Добавление нового поля
При клике на элементе Text Pro, выполняется ajax запрос (в папку administrator). После вызова события onAfterInitialise() (JEventDispatcher->trigger()), срабатывает подписаный на данное событие плагин plgSystemZooEvent->onAfterInitialise(); ( у меня в проекте тело этого обработчика почему-то закоментировано). Следом за плагином zoo (закоментирован), вызывается обработчик этого события plgSystemZlframework. Здесь, помимо регистрации событий и проверок, некоторые для переноса не важны, например для загрузки формы textpro достаочны эти строки обработчика этого события(
if (!(file_exists($path = JPATH_ADMINISTRATOR.'/components/com_zoo/config.php')
and JComponentHelper::getComponent('com_zoo', true)->enabled
and (include_once $path)
and class_exists('App')
and $this->app = App::getInstance('zoo')
and version_compare($this->app->zoo->version(), '2.5', '>=')
and require_once(JPATH_ROOT.'/plugins/system/zlframework/config.php'))
) {
return;
}
и
if (!defined('ZLFW_DEPENDENCIES_CHECK_OK')) define('ZLFW_DEPENDENCIES_CHECK_OK', true);
в первом if(...include_once $path...) особо важны подключения файлов .config, далее загружается хелпер zlfield.php в папке \plugins\system\zlframework\zlframework\zlfield\zlfield.php, в конструкторе которого создаются ссылки на экземпляры приложения таблицу joomla и zoo
$this->joomla = $this->app->system->application;
$this->appTable = $this->app->table->application;
// set data shortcut
$this->data = $this->app->data;
// set request shortcut
$this->req = $this->app->request;
В результате работы плагина, Загружается класс Elementtextpro , который и используется в контроллере manager компонента zoo, в task=addElement, при загрузки элемента:
$this->element = $this->app->element->create($element);
Функция ->create($element); есть helper com_zoo/helpers/element.php получает параметром переменную $element с значением 'textpro'. Создаёт объект класса ElementTextPro.
Создаётся уник идентификатор:
$this->element->identifier = $this->app->utility->generateUUID();
Этот элемент уже textpro и передаётся в view:
$this->getView()->setLayout('addElement')->display();
В HtmlView.php (libraries) в фунции:
loadTemplate($tpl = null)
подключается файл addelement.php (zoo)
в котором вызывается функция фреймворка zoo partial(), в теле этой функции подключается (наконец-то!) нужный частичный вид _editelement.php
Здесь и происходит создание html элемента textpro
---
include($__partial);
----}
подключается частичный вид.
В файле этого вида создаётся создаётся класс AppParameterForm, здесь вызывается рендер helper field->render() которому передаются парметры, значения которых извлечены из массива _xml(xml данные).
В функции
function display($tpl){
if ($result instanceof \Exception)
{
return $result;
}
echo $result;}
в переменную $result передаётся html разметка в виде строки и echo
Последняя функия
public function __destruct()
{
$this->disconnect();
}
в файле библиотеки driver.php
Сохранение нового поля
Новое поле сохраняется в файле:
media\zoo\applications\business\types\organization.config