扩展Joomla 2.5 Banner组件

时间:2013-02-07 14:15:17

标签: joomla

我真的希望有人可以帮助我。

我需要能够在依赖于会话变量的类别中提供横幅广告 - 并且无法找到执行此操作的组件。所以我想扩展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');

但是两个变量都不包含任何内容,即使组件已经拥有的变量也可以被检索到。毫无疑问,我需要在其他地方改变一些东西 - 但却无法弄清楚要做什么。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

  1. 要做的第一件事是不破解核心文件,黑客核心会阻止您使用内置更新功能来应用Joomla发布的常规错误修复和安全补丁! (例如 recently released 2.5.9 version )。

  2. 而是复制它们并对其进行修改,以便将其称为com_mybanners之类的其他内容。除了文件夹名称和入口点文件(即banners.php变为mybanners.php)之外,您还需要将组件banners.xml更新为mybanners.php。 />(您需要复制和修改前端/components/com_banners//administrator/components/mybanners.php

  3. 由于横幅的工作方式(即横幅显示在模块中),您还需要复制和修改/modules/mod_banners//modules/mod_banners/mod_banners.php/modules/mod_banners/mod_banners.xml。在每个位置将mod_banners更改为mod_mybanners

  4. 在Joomla!组件state通常在实例化JModel时填充,但是,在这种情况下,组件实际上是关于管理横幅和记录点击,显示由mod_banners处理。因此,您需要向mod_mybanners.php添加一些代码以使用您想要操作的会话变量。

    通常,当查询模型状态时,您将通过{{3来收集变量并将它们添加到对象的状态,例如

  5. 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中找到所有这些信息