【问题标题】:Joomla component : one view calling multiple models?Joomla 组件:一个视图调用多个模型?
【发布时间】:2026-02-01 15:25:01
【问题描述】:

我想要一个视图来调用 2 个不同的模型以供使用。

控制器.php

class StatsController extends JController {
    function display()
     {
        if( !JRequest::getVar( 'view' ) ) {
            JRequest::setVar('view', 'stats' );
        }
        parent::display();
    }
    ...
    ...
}

统计视图:(index.php?option=com_stats&view=stats)

class StatsViewStats extends JView
{
    function display($tpl = null)
    {
        $model_helpdesk = & JModel::getInstance('Helpdesk','StatsModel');
    //$model_chart =  & JModel::getInstance('Chart','StatsModel'); 
    //$model_chart =  &$this->getModel('Chart');
    var_dump($model_chart);
    ...
    ...
        parent::display($tpl);
    }
}

问题:获取 Helpdesk 模型 工作正常,但获取 Chart 模型 要么返回空白页面,要么在 var_dump 中返回 null。我怎样才能得到第二个模型来使用(不修改控制器)??

【问题讨论】:

    标签: model-view-controller joomla joomla-extensions joomla-component


    【解决方案1】:

    在您的控制器中,您需要执行以下操作:

    $view = &$this->getView('Stats', 'html');
    $view->setModel($this->getModel('Stats'), true);
    $view->setModel($this->getModel('Chart'));
    $view->setModel($this->getModel('Helpdesk'));
    $view->display();
    

    然后您可以使用以下命令访问每个模型:

    $chartModel = $this->getModel('Chart');
    $helpdeskModel = $this->getModel('Helpdesk');
    

    Source

    【讨论】:

    • 对不起,但我已经看到了,它没有帮助!我只需要保持控制器的显示功能不变,这样我就可以通过 index.php?option=com_stats&view=XXXX 直接访问视图
    • 这应该在控制器的什么位置?用什么方法?
    • 好的,我发现了。它应该在控制器 StatsController 的 display() 方法中(在这种情况下)。谢谢:)