01/10/2018, 17:05

Gọi nhiều model trong cùng view

Trong quá trình phát triển ứng dụng trên nền Joomla, chúng ta không ít thì nhiều cũng gặp trường hợp gọi model A trong view B. Nếu trong view B gọi model B thì vấn đề rất đơn giản. Để gọi được model A, B, C trong view A, chúng ta cần phải ghi đè hàm display trong controller của view A. Ví dụ ...

Trong quá trình phát triển ứng dụng trên nền Joomla, chúng ta không ít thì nhiều cũng gặp trường hợp gọi model A trong view B. Nếu trong view B gọi model B thì vấn đề rất đơn giản. Để gọi được model A, B, C trong view A, chúng ta cần phải ghi đè hàm display trong controller của view A.
Ví dụ mẫu:

defined('_JEXEC') or die('Restricted access');
jimport('joomla.application.component.controller');
class MyControllerStory extends JController {
  function __construct($config = array())
  {
    parent::__construct($config);
  }
  function display()
  {
    $name = JRequest::getVar('view', 'story');
    $layout = JRequest::getVar('layout', 'default');
    $document = &JFactory::getDocument();
    $type = $document->getType();

    //Get/Create the view
    $view = &$this->getView( $name, $type);

    // Get story model
    if ($model = &$this->getModel($name)) {
      $model->increaseView();

      // Push the model into the view (as default)
      $view->setModel($model, true);
    }
    if ($model = &$this->getModel('authors')) {
      $view->setModel($model, true);
    }
    if ($model = &$this->getModel('characters')) {
      $view->setModel($model, true);
    }
    if ($model = &$this->getModel('comment')) {
      $view->setModel($model, true);
    }
    if ($model = &$this->getModel('comments')) {
      $view->setModel($model, true);
    }

    // Set the layout
    $view->setLayout($layout);
    $view->display();
  }
}

0