我真的希望有人可以帮助我。
我需要能够在依赖于会话变量的类别中提供横幅广告 - 并且无法找到执行此操作的组件。所以我想扩展Joomla Banner组件,以便根据包含类别路径的会话变量选择横幅。
正确存储正确的会话变量。
为了做到这一点,我在横幅模块.xml
中添加了一个选项,以允许会话变量和会话变量的名称。这正确地存储在params
字段中的模块表中以及其他模块参数中。
然后我开始了
组件>横幅> com_banners>模型> banners.php
通过在getListQuery
中添加两行代码来组装SQL
。他们是:
$sess_vars = $this->getState('filter.sess_vars');
$sess_vars_name = $this->getState('filter.sess_vars_name');
但是两个变量都不包含任何内容,即使组件已经拥有的变量也可以被检索到。毫无疑问,我需要在其他地方改变一些东西 - 但却无法弄清楚要做什么。
非常感谢任何帮助。
答案 0 :(得分:1)
要做的第一件事是不破解核心文件,黑客核心会阻止您使用内置更新功能来应用Joomla发布的常规错误修复和安全补丁! (例如 recently released 2.5.9 version )。
而是复制它们并对其进行修改,以便将其称为com_mybanners
之类的其他内容。除了文件夹名称和入口点文件(即banners.php
变为mybanners.php
)之外,您还需要将组件banners.xml
更新为mybanners.php
。 />(您需要复制和修改前端/components/com_banners/
和/administrator/components/mybanners.php
。)
由于横幅的工作方式(即横幅显示在模块中),您还需要复制和修改/modules/mod_banners/
,/modules/mod_banners/mod_banners.php
和/modules/mod_banners/mod_banners.xml
。在每个位置将mod_banners
更改为mod_mybanners
。
在Joomla!组件state
通常在实例化JModel时填充,但是,在这种情况下,组件实际上是关于管理横幅和记录点击,显示由mod_banners
处理。因此,您需要向mod_mybanners.php
添加一些代码以使用您想要操作的会话变量。
通常,当查询模型状态时,您将通过{{3来收集变量并将它们添加到对象的状态,例如
protected function populateState()
{
$jApp = JFactory::getApplication('site');
// Load state from the request.
$pk = $jApp->input->get('id',0,'INT');
$this->setState('myItem.id', $pk);
$offset = $jApp->input->get('limitstart',0,'INT');
$this->setState('list.offset', $offset);
// Load the parameters.
$params = $app->getParams();
$this->setState('params', $params);
// Get the user permissions
$user = JFactory::getUser();
if ((!$user->authorise('core.edit.state', 'com_mycomponent')) && (!$user->authorise('core.edit', 'com_mycomponent')))
{
$this->setState('filter.published', 1);
$this->setState('filter.archived', 2);
}
}
populateState()
方法读取状态时调用getState
方法。
这意味着您必须更改/components/com_banners/models/banner.php
的副本以将变量捕获到对象状态,类似于上面的示例。
从那里开始,这是你自己的所有代码。
您可以在JInput
的Developing a Model-View-Controller tutorial中找到所有这些信息