Как включить несколько моделей в одно представление для компонента Joomla 3.x, созданного с помощью Component Creator

Компоненты Joomla используют модель MVC. Component Creator — широко используемый инструмент, платный уровень которого поддерживает создание многотабличных представлений с импортом SQL. Также разработчики создают компоненты с нуля в соответствии с документацией Joomla.

Я хочу создать продвинутый компонент, который функционирует как «панель мониторинга», отображающая данные из нескольких таблиц базы данных со всеми возможностями Joomla для администратора и внешнего интерфейса для посетителей CRUD (CREATE, READ, UPDATE, DELETE). Это означает, что мне нужно несколько моделей (из философии MVC), рисующих из нескольких таблиц базы данных, показанных на экране одновременно.

Joomla Документация предлагает сделать следующий код в «метод задачи контроллера», чтобы сделать информацию доступной:

$view = $this->getView( 'model-a', 'html' );
$view->setModel( $this->getModel( 'model-a' ), true );
$view->setModel( $this->getModel( 'model-b' ) );
$view->display();

а затем вызовите эти модели с методом отображения в представлениях:

$item1 = $this->get( 'data1' );
$item2 = $this->get( 'data2', 'model-b' );

Тем не менее, эти инструкции, приведенные в документации Joomla, недостаточны или несовместимы с компонентом, созданным при соблюдении предоставленной Joomla. Hello World Tutorial учебник или компоненты, созданные на основе широко используемого и популярного инструмента Component Creator. Либо компонент не сможет загрузить страницу при вызове, либо не передаст данные в представление с простым копированием и вставкой в ​​любой из нескольких контроллеров, созданных создателем компонента, или Joomla hello world tutorial.

Как я могу вызвать несколько моделей в одном представлении для компонента Joomla 3.X?

2

Решение

Мне удалось успешно использовать несколько моделей из одного представления, совершая вызовы непосредственно в двух Посмотреть файлы для правильно сформированных моделей. Я не следовал документации Joomla, потому что я не мог изменить ни один из возможных контроллер (один является контроллером для всего компонента, а другой — специфичным для вида). Я также не использовал функции, представленные в документации Joomla, так как они вызывали ошибки.

Согласно надлежащему соглашению Joomla MVC, представление создается двумя файлами в соответствующей директории представления и подпапке:

  • / Сайт / просмотров /multiviewname/view.html.php (который передает модель в представление)
  • / Сайт / просмотров /multiviewname/tmpl/default.php (который имеет шаблон HTML)

Оба они должны быть изменены, чтобы просматривать данные более чем из одной модели одновременно. Это работает при условии, что все ваши другие виды, контроллеры и модели построены правильно, как это делается автоматически при использовании инструмента «Создатель компонентов». У моего компонента были сотни файлов, в том числе css, администрирование бэкэнда, установка, язык и т. Д. Все они были собраны в одно мгновение с помощью инструмента создания компонентов.

Сокращенный, но все еще полностью функциональный код выглядит следующим образом:

/ Сайт / просмотров /multiviewname/view.html.php

<?php

jimport('joomla.application.component.view');

class ComponentnameViewMultiviewname extends JViewLegacy
{
//  $items is for the default model
protected $items;
//  $ItemsOtherModel is for second model. Notice the '$' used here but not elsewhere
protected $ItemsOtherModel;

public function display($tpl = null)
{
$app = JFactory::getApplication();
$this->state = $this->get('State');
$this->items = $this->get('Items');
$this->pagination = $this->get('Pagination');
$this->params     = $app->getParams('com_componentname');

//  sets default model
$this->setModel( $this->getModel( 'model-a' ), true );
//  sets second model & uses 'JModelLegacy,' contrary to documentation
$this->setModel(JModelLegacy::getInstance('model-b', 'componentnameModel'));
//  assigns array from the second model to 'ItemsOtherModel.' there is no '$' sign used.
$this->ItemsOtherModel = $this->get('Items','model-b');

parent::display($tpl);
}

}

/ Сайт / просмотров /multiviewname/tmpl/default.php

<?php

echo "<h3>Items from default model</h3> ";
echo var_dump($this->items);

echo "<h3>items from secondary model</h3> ";
//  notice that the '$' is absent from 'ItemsOtherModel'
echo var_dump($this->ItemsOtherModel);

Этот прорыв был возможен только после нескольких дней исследований. Платный Создатель компонентов инструмент был неоценим, чтобы начать меня с хорошо сформированного кода, который соответствует стандартам компонентов Joomla MVC. Проработав несколько дней и изучив все файлы, я обнаружил, что мне нужно эта ветка гугл групп, обращая мое внимание на JModelLegacy класс, найденный при поиске в Google терминов из сообщения об ошибке PHP PHP Notice: Undefined index: оставил на моем сервере при попытке использовать официально документированные методы.

Эта страница, отображаемая в браузере, просто выводит всю информацию из таблицы базы данных на страницу, но дальнейшее развитие может создать отформатированную и функциональную панель инструментов, которая мне в конечном счете понадобится.

Этот код предназначен для отображения списков информации, а не нескольких отдельных элементов. Документация Joomla для добавления нескольких моделей в одно представление настроена для нескольких отдельных элементов, а не для массивов элементов, показанных здесь.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector