1

我真的希望有人能帮助我。

我需要能够在依赖于会话变量的类别中提供横幅 - 并且找不到这样做的组件。所以我想扩展 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');

但是这两个变量都不包含任何内容,即使可以很好地检索组件已经拥有的变量。毫无疑问,我也需要在其他地方改变一些东西——但就是不知道该怎么做。

任何帮助将不胜感激。

4

1 回答 1

1
  1. 首先要做的是不要破解核心文件,破解核心会阻止您使用内置更新功能来应用 Joomla 发布的常规错误修复和安全补丁!(例如最近发布2.5.9 版本2.5.9 版本)。

  2. 而是复制它们并对其进行修改,以便将其称为其他名称,例如com_mybanners. 除了文件夹名称和入口点文件(即banners.php变为mybanners.php)之外,您还需要将组件更新banners.xmlmybanners.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使用您想要操作的会话变量。

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

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以将变量捕获到与我上面的示例类似的对象状态中。

从那里它是你自己的所有代码。

您可以在Joomla 文档网站上的开发模型-视图-控制器教程中找到所有这些信息

于 2013-02-08T00:44:09.403 回答