我正在制作一个自定义模板形式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" />
并且它也没有用,所以我将非常感谢您解决这一问题。
提前致谢。
答案 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
大于记录数的情况。
检索代码只有一个端口可以注入条件 - 文档的关键字。 因此,您可以(在您的模板文件中)存储原始关键字,并使用关键字替换它们以标识横幅。在这种情况下,横幅必须具有相同的关键字。
$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);
无论哪种方式,缓存可能会阻止其工作,因此您可能需要将其关闭(我没有检查)。