让模块只显示在文章列表页面,不显示在文章页面

Joomla的模块显示,可以使用菜单分配机制来控制。但当我们创建的某菜单项类型是文章分类,被指派模块后,该分类页面和文章页面都将会显示此模块。如果你希望该模块只显示在分类页面,不显示在文章页面,应该如何实现呢?

下面我们以k2组件为示例,如果是其他内容组件或joomla默认文章组件,都可以使用此方法,但相应的参数需要调整

一、查看页面参数

如果你的网站已经开启了SEF功能,请到网站后台 - 全局设置 - 网站 - SEO ,把搜索引擎友好链接的选项关闭掉。这样,你访问页面时,就可以通过url观察页面的一些参数信息。

例如:

index.php?option=com_k2&view=itemlist&layout=category&task=category&id=1&Itemid=312 (k2的分类页面)

index.php?option=com_k2&view=item&id=13:office-travel-mug-with-rubber-non-slip-bottom-vtm-ps-0305&Itemid=313 (k2的文章页面)

我们只需要获取两个参数值,分别是option和view

二、修改模板文件

假如模板文件中,你的模块的代码原来是这样的:

<?php if ($this->countModules('position-4') ):  ?>
<div>
<jdoc:include type="modules" name="position-4" />
</div>
<?php endif; ?>

接下来,我们可以在PHP条件判断语句中加入URL的参数

<?php if ($this->countModules('position-4') && JRequest::getVar('option') == 'com_k2' && JRequest::getVar('view') == 'itemlist'):  ?>
<div>
<jdoc:include type="modules" name="position-4" />
</div>
<?php endif; ?>

上面的代码,是在原来的基础上增加了两个条件,分别是“option的值是com_k2”和“view是itemlist”

只有同时满足了这三个条件,模块才输出,这样就可以根据不同的情况来输出模块

三、不同的情况

只显示在文章页面:

<?php if ($this->countModules('position-4') && JRequest::getVar('option') == 'com_k2' && JRequest::getVar('view') == 'item'):  ?>
<div>
<jdoc:include type="modules" name="position-4" />
</div>
<?php endif; ?>

除了在k2文章页面外,其他页面都显示:

<?php if ($this->countModules('position-4') && JRequest::getVar('option') == 'com_k2' && JRequest::getVar('view') != 'item'):  ?>
<div>
<jdoc:include type="modules" name="position-4" />
</div>
<?php endif; ?>