【问题标题】:joomla override model for mod_bannersmod_banners 的 joomla 覆盖模型
【发布时间】:2013-05-04 20:52:24
【问题描述】:

我正在使用 Joomla 3.1,并且我正在使用模板黑客来覆盖 mod_banners -

/mytemplate/html/mod_banners/default.php

哪个工作正常。

但是,banners 模块调用文件:

/components/com_banners/models/banners.php

我似乎无法覆盖。我尝试将文件(和文件夹)移动到我的 /mytemplate/html 文件夹中,但这不起作用。

我还尝试将以下代码放入我的横幅 default.php 文件中:

JModelLegacy::addIncludePath(JPATH_ROOT.'/templates/home/com_banners/models/', 'BannersModel');
$model      = JModelLegacy::getInstance('Banners', 'BannersModel', array('ignore_request' => true));
$banners    = $model->getItems();

但这也不起作用。有什么方法可以覆盖 /com_banners/models/banners.php 中的查询而不更改核心文件?

我要做的只是提取每个横幅的描述,而不更改核心。

提前致谢!

【问题讨论】:

  • 您可以在覆盖 default.php 中编写数据库查询。这不是最好的方法,但是编写插件很费力,更改核心文件不是前进的方向

标签: joomla joomla3.1


【解决方案1】:

在 Joomla 中覆盖模型的唯一方法是制作您自己的原始版本,并通过系统插件加载(注册)它,第一次访问模型之前。对于您的用例,这太复杂了。

即使这不是好的做法,因为它破坏了 MVC 结构,我还是会从模板中获取数据。

$db    = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('id, name, description')
      ->from('#__banners');
$db->setQuery($query);
$banners = $db->loadObjectList();

现在您可以访问所有横幅说明,fx。在循环中:

foreach ($banners as $banner) {
    echo $banner->id, ': ', $banner->description;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2012-12-23
    • 2012-06-14
    • 2012-02-01
    • 2011-10-05
    • 2014-01-28
    相关资源
    最近更新 更多