将 Joomla 模块转换为在现有组件中查看
Posted
技术标签:
【中文标题】将 Joomla 模块转换为在现有组件中查看【英文标题】:Converting a Joomla module to view in existing component 【发布时间】:2017-06-04 20:32:45 【问题描述】:我们有一个定制的 Joomla!我们开发的组件用于向客户显示各种类型的报告。在 Admin 后端,您将在所述组件中配置服务和报告。然后,我们为每个客户添加一个自定义模块,该模块指向报告并将其加载到一个空白页面中。
这适用于必须根据客户偏好定制和几乎完全重新设计每个报告,但我们希望可以选择使用不带模块的视图来实现任何标准化。我已经开始将一种特定类型的报告转换为它自己的视图,并且没有问题地设置了管理员端。我遇到的问题是前端显示。
据我所知,前端视图应该先加载view.html.php
和metadata.xml
。但是,view.html.php
上的代码似乎没有执行(正如在每行之前和之后使用 print 语句测试的那样)。下面是该文件的净化版本,它是 XML。作为参考,我们正在运行 Joomla! 3.6.5.
PHP:
<?php
// No direct access to this file
defined('_JEXEC') or die;
// import Joomla view library
jimport('joomla.application.component.view');
class [ComponentName]ViewDashboard extends JViewLegacy
public function display($tpl = null)
/*[Large code block here, removed for sanitization]*/
parent::display($tpl);
?>
XML:
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<!-- View definition -->
<view title="Dashboard">
<!-- Layout options -->
<options>
<!-- Default layout's name -->
<default name="Dashboard" />
</options>
</view>
</metadata>
【问题讨论】:
【参考方案1】:您在视图文件中的类名错误。应该是
class YOUR_COMPONENT_NAMEViewDashboard extends JViewLegacy
public function display($tpl = null)
/*[Large code block here, removed for sanitization]*/
parent::display($tpl);
将 YOUR_COMPONENT_NAME 替换为您的组件名称。
查看此链接https://docs.joomla.org/J3.x:Developing_an_MVC_Component/Adding_a_view_to_the_site_part
【讨论】:
它实际上在文件中。我在发帖时忘记把那一点括号括起来。将更新原件以反映。【参考方案2】:搞定了。尽管存在其他逻辑,但我必须在前端添加一个模型才能显示。清理后的文件如下,在root\components\com_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;
【讨论】:
以上是关于将 Joomla 模块转换为在现有组件中查看的主要内容,如果未能解决你的问题,请参考以下文章