【问题标题】:How to render banners alongside featured items in home page如何在主页中的特色项目旁边呈现横幅
【发布时间】:2013-05-24 16:34:03
【问题描述】:

我正在为 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" />,但它也不起作用,所以我将不胜感激任何帮助解决这个问题。

提前致谢。

【问题讨论】:

    标签: joomla joomla2.5 joomla-template


    【解决方案1】:

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

    正确的方法

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

    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大于记录数的情况还是需要处理的。

    老套路

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

    $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);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 2014-06-07
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      相关资源
      最近更新 更多