View 将Joomla模块转换为现有组件中的视图

View 将Joomla模块转换为现有组件中的视图,view,joomla,module,components,code-conversion,View,Joomla,Module,Components,Code Conversion,我们有一个定制的Joomla!我们开发的组件用于向客户显示各种类型的报告。在管理后端,您将在所述组件中配置服务和报告。然后,我们为每个客户机添加一个定制的模块,该模块指向报告并将其加载到一个空白页面中 这对于必须根据客户的偏好定制和几乎完全重新设计每个报表来说很好,但是我们希望能够选择使用没有模块的视图来实现任何标准化。我已经开始将一种特定类型的报告转换为它自己的视图,并在没有问题的情况下设置了管理员端。我遇到的问题是前端显示器 据我所知,前端视图应该先加载view.html.php和metad

我们有一个定制的Joomla!我们开发的组件用于向客户显示各种类型的报告。在管理后端,您将在所述组件中配置服务和报告。然后,我们为每个客户机添加一个定制的模块,该模块指向报告并将其加载到一个空白页面中

这对于必须根据客户的偏好定制和几乎完全重新设计每个报表来说很好,但是我们希望能够选择使用没有模块的视图来实现任何标准化。我已经开始将一种特定类型的报告转换为它自己的视图,并在没有问题的情况下设置了管理员端。我遇到的问题是前端显示器

据我所知,前端视图应该先加载
view.html.php
metadata.xml
。但是,
view.html.php
上的代码似乎没有执行(通过每行前后的print语句进行测试)。下面是该文件及其XML的净化版本。作为参考,我们正在运行Joomla!3.6.5

PHP:


XML:


视图文件中的类名错误。应该是

class YOUR_COMPONENT_NAMEViewDashboard extends JViewLegacy
{       

    public function display($tpl = null)
    {
        /*[Large code block here, removed for sanitization]*/
        parent::display($tpl);
    }

}
用组件名称替换组件名称


检查此链接,使其正常工作。我不得不在前端添加一个模型以便显示,尽管存在其他逻辑。经过清理的文件如下所示,位于root\components\com\u ComponentName\models\modelName.php中,其中modelName与视图匹配

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
ini_set('memory_limit','1024M');

// import Joomla modelitem library
jimport('joomla.application.component.modelitem');


class ComponentNameModelDashboard extends JModelItem
{

    protected function populateState()
    {
        // Load the parameters.
        //print_r(JFactory::getApplication()->getParams());
        $this->setState('params', JFactory::getApplication()->getParams());
        parent::populateState();
    }

    public function getItem()
    {
        if (!isset($this->item)) 
        {
            $params    = clone $this->getState('params');
            $params->merge($this->item->params);
            $this->item->params=$params;
            $params = new JRegistry;
            $params->loadString($this->item->params,'JSON');
            $report=$params['report'];
            $db    = JFactory::getDbo();
            $query = $db->getQuery(true);
            $query->select('*')
                  ->from('#__DBTABLEHERE')
                  ->where('dashboard_name=\'' . (string)$report.'\'');
            $db->setQuery((string)$query);
        }
        return $this->item;
    }
}

它实际上在文件中。我在发帖时忘了把那一点括起来。将更新原始以反映。
class YOUR_COMPONENT_NAMEViewDashboard extends JViewLegacy
{       

    public function display($tpl = null)
    {
        /*[Large code block here, removed for sanitization]*/
        parent::display($tpl);
    }

}
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
ini_set('memory_limit','1024M');

// import Joomla modelitem library
jimport('joomla.application.component.modelitem');


class ComponentNameModelDashboard extends JModelItem
{

    protected function populateState()
    {
        // Load the parameters.
        //print_r(JFactory::getApplication()->getParams());
        $this->setState('params', JFactory::getApplication()->getParams());
        parent::populateState();
    }

    public function getItem()
    {
        if (!isset($this->item)) 
        {
            $params    = clone $this->getState('params');
            $params->merge($this->item->params);
            $this->item->params=$params;
            $params = new JRegistry;
            $params->loadString($this->item->params,'JSON');
            $report=$params['report'];
            $db    = JFactory::getDbo();
            $query = $db->getQuery(true);
            $query->select('*')
                  ->from('#__DBTABLEHERE')
                  ->where('dashboard_name=\'' . (string)$report.'\'');
            $db->setQuery((string)$query);
        }
        return $this->item;
    }
}