如何在主页中与特色项目一起呈现横幅

时间:2013-05-29 12:08:31

标签: joomla joomla2.5 joomla-template

我正在制作一个自定义模板形式joomla 2.5,开发的目标之一是在每个特色文章迭代后包含一个横幅。

经过长时间的研究,我可以使用以下代码将横幅呈现为 /template_name/html/com_content/featured/default_item.php

$document = JFactory::getDocument();
$renderer = $document->loadRenderer('modules');
$position = "nota";
$options = array('style' => 'raw');
echo $renderer->render($position, $options, null);

但问题是,每次迭代都会重置横幅列表,因此每个特色文章都会重复相同的横幅。

我尝试在 /template_name/html/com_content/featured/default.php 中使用相同的代码包含横幅模块,但没有成功。最近我尝试使用<jdoc:include type="modules" name="nota" style="raw" />并且它也没有用,所以我将非常感谢您解决这一问题。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以通过两种方式解决此问题。

正确的方式

复制并重命名横幅模块(fx。到mybanners),更改帮助文件中的getList()方法,以便在每次调用时检索不同的横幅。这可能是fx。是:

class modMybannersHelper
{
    static function &getList(&$params)
    {
        static $index = 0;

        JModelLegacy::addIncludePath(JPATH_ROOT.'/components/com_banners/models', 'BannersModel');
        $document = JFactory::getDocument();
        $app      = JFactory::getApplication();
        $keywords = explode(',', $document->getMetaData('keywords'));

        $model = JModelLegacy::getInstance('Banners', 'BannersModel', array('ignore_request'=>true));
        $model->setState('filter.client_id', (int) $params->get('cid'));
        $model->setState('filter.category_id', $params->get('catid', array()));
        $model->setState('list.limit', 1);
        $model->setState('list.start', $index++);
        $model->setState('filter.ordering', $params->get('ordering'));
        $model->setState('filter.tag_search', $params->get('tag_search'));
        $model->setState('filter.keywords', $keywords);
        $model->setState('filter.language', $app->getLanguageFilter());

        $banners = $model->getItems();
        $model->impress();

        return $banners;
    }
}

这只是一幅草图;你仍然需要处理$index大于记录数的情况。

hacky方式

检索代码只有一个端口可以注入条件 - 文档的关键字。 因此,您可以(在您的模板文件中)存储原始关键字,并使用关键字替换它们以标识横幅。在这种情况下,横幅必须具有相同的关键字。

$document = JFactory::getDocument();
$keywords = $document->getMetaData('keywords');
$renderer = $document->loadRenderer('modules');
$position = "nota";
$options  = array('style' => 'raw');
$document->setMetaData('keywords', 'banner_key');
echo $renderer->render($position, $options, null);
$document->setMetaData('keywords', $keywords);

无论哪种方式,缓存可能会阻止其工作,因此您可能需要将其关闭(我没有检查)。