Меню показать Меню скрыть
Современные
проекты
от ПаЛыЧа
Белокопытов Константин Белокопытов Константин
3 г. назад

Не забывайка! Несколько моделей в одном вьювере

Цель: использовать в одном вьювере (view) несколько моделей (model).

В Joomla от версии 1.5.х стандартно подключается одна модель ко вьюверу, но часто бывают ситуации получения данных из другой модели. Не дублировать же функционал для этого!?

Какие могут быть варианты решения:

Вариант первый.

function doThis()
{
  // это действие (task) контроллера "user"
  // Нужно добавить модель "bills" 
  $model = $this->getModel ( 'user' ); // получаем модель по-умолчанию 
  $view  = $this->getView  ( 'user', 'html'  ); // получаем используемый вьювер 
  $view->setModel( $model, true ); // true чтобы использовать модель $model как основную во вьювере 
  $billsModel = &$this->getModel ( 'bills' ); // получаем вторую модель 
  $view->setModel( $billsModel ); // подключаем новую модель 
  $view->display(); // сейчас вьювер использует две модели 
} 

Во вьювере теперь можно легко обратиться к функционалу двух моделей

function display ($tpl = null) {
  $userModel = &$this->getModel(); // получаем модель по-умолчанию 
  $billsModel = &$this->getModel('bills'); // получаем вторую модель 
  // здесь происходят какие-либо действия с данными 
  parent::display($tpl); // а теперь выводим шаблон 
}

Но бывает, что подключить модель в контроллере невозможно! Что же делать?

Есть второй вариант.

function display($tpl = null) {
  // предположим, что класс модели имеет название MycomponentModelBills 
  // второй параметр это префикс 
  $actionsModel = & JModel::getInstance('bills', 'MycomponentModel');
  // но в этом случае необходимо обращаться к функциям модели напрямую
  // к примеру пусть в классе модели есть функция getBillsRows()  
  $rows = $actionsModel->getBillsRows(); 
} 

Добавить комментарий

Наверх