All infos - Обработка события добавления поля компонента zoolenders.
13
нояб

Обработка события добавления поля компонента 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

Share this post