Как использовать несколько моделей в компоненте joomla MVC

Я использую другую модель в joomla, чем собственная модель представления, которая похожа на свое имя, назначая ее из контроллера, например:

         $view->setModel($this->getModel('user'));

Теперь, как я могу использовать его метод getSingleUser($user_id) в представлении. В примере в документации joomla используется что-то вроде этого:

$this->get("data1","model2");

Итак, я предполагаю, что data1 - это имя метода в модели2? Если да, то как я могу передать аргумент, который в моем случае является идентификатором пользователя. Я знаю, что это простая вещь, которую сделали многие разработчики joomla, но я своего рода мастер всех видов разработчиков и новичок в joomla, поэтому я ожидаю, что вы, ребята, расскажете мне.


person Hafiz    schedule 23.08.2011    source источник
comment
Ваш заголовок не совсем соответствует вашему вопросу. Вы пытаетесь загрузить несколько моделей в представление или пытаетесь изменить загруженную модель?   -  person udjamaflip    schedule 24.08.2011
comment
Я пытался загрузить несколько моделей и использовал другую модель, чем по умолчанию.   -  person Hafiz    schedule 24.08.2011


Ответы (1)


Первый подход

Я сделал это, изменив контроллер следующим образом (это контроллер для пользователя)

function doThis(){ // the action in the controller "user" 
    // We will add a second model "bills"
    $model = $this->getModel ( 'user' ); // get first model
    $view  = $this->getView  ( 'user', 'html'  ); // get view we want to use
    $view->setModel( $model, true );  // true is for the default model  
    $billsModel = &$this->getModel ( 'bills' ); // get second model     
    $view->setModel( $billsModel );             
    $view->display(); // now our view has both models at hand           
}

В представлении вы можете просто выполнять свои операции с моделями.

function display($tpl = null){              
    $userModel = &$this->getModel(); // get default model
    $billsModel = &$this->getModel('bills'); // get second model

    // do something nice with the models

    parent::display($tpl); // now display the layout            
}

Альтернативный подход

В представлении напрямую загрузите модель:

function display($tpl = null){
 // assuming the model's class is MycomponentModelBills 
 // second paramater is the model prefix    
        $actionsModel = & JModel::getInstance('bills', 'MycomponentModel'); 
}
person hbit    schedule 31.08.2011
comment
как вы получаете переменную из этой модели?. $this->var = $this->get('Msg'); Как указать, где искать функцию getMsg? - person ValRob; 26.10.2018