您可以通过两种方式解决此问题。
正确的方式
复制并重命名横幅模块(fx. to 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);
无论哪种方式,缓存都可能会阻止它工作,因此您可能必须将其关闭(我没有检查)。