Joomla文档中文翻译 - 如何在指定页面以外的所有页面中显示某模块
如需转载,请注明官方英文文档及本人译文的出处,谢谢。查看官方英文文档: Show a Module on all Menu Items except selected ones
这其实是一个很常见的需求,并且会在Joomla 1.6中作为原生功能添加进来。具体情况是,比如你希望在站点首页以外的所有页面中都显示某模块,并且每次有新的菜单对应的页面生成时,不需要再手动将该模块分配绑定给新的页面。
Joomla 1.5中并没有这个功能,但我们可以对PHP文件做一些改动,来实现我们的需求。
实例
设想我们要实现如上所述的需求(为首页以外的所有页面添加模块)。现在我们通过安装有Joomla范例内容的站点以及默认的huk_milkyway模板来进行操作演示。
1.按下面所示的方法创建一个新的模块位置(position),命名为“exclude_left”。我们也可以使用模板中现有的模块位置,但是最好新建一个单独使用。
- 找到并打开这个文件:Joomla根路径/templates/rhuk_milkyway/templateDetails.xml,在63行,“面包屑(breadcrumb)”代码的后面增加下面这行代码,用来添加新的模块位置:
<position>exclude_left</position> - 打开模板文件的索引页面:Joomla根路径/templates/rhuk_milkyway/index.php,在88行附近,将下面这段代码添加到<div id="leftcolum">的后面:
这段代码向模板文件中添加了我们需要的新模块位置,并且规定如果当前页面的菜单项ID不为“1”,则显示该模块。(注意,这里的“1”就是对应着首页的菜单项ID;可以在菜单项管理中找到菜单项对应的ID)<?php $Itemid = JRequest::getVar('Itemid'); // get the current itemid
// don't show this position if $Itemid is 1
if($this->countModules('exclude_left') && $Itemid != 1) : ?>
<jdoc:include type="modules" name="exclude_left" style="rounded" />
<?php endif; ?>
2.现在来处理我们的模块。我新建了一个Custom HTML模块,当然我们可以使用任何已有的模块。在模块设置中,将“位置”设置为我们之前新建的“exclude_left”,并且将该模块分配绑定给所有的菜单项。因为有了我们之前添加的代码,所以现在即使选择将模块分配给所有的菜单项,在首页中依然不会显示出来。
搞定;现在可以尝试为站点添加新的菜单项及相应页面,如果一切正常,我们的模块会自动出现在新菜单项对应的页面中。
更进一步
如何排除一组菜单项:例如,我们希望模块在首页(ID为1)以及ID为4和22的菜单项页面中均保持隐藏,那么可以将之前的代码修改为:
使用其他的判断条件:我们之前是根据当前页面所属菜单项的ID来判断是否显示某模块,其实也可以根据其他条件来判断,下面是一些示例代码(对应着之前代码中的$Itemid=...)
$option = JRequest::getVar('option'); // for example, "com_content"
$view = JRequest::getVar('view'); // for example, "article"
$task = JRequest::getVar('task'); // for example, "edit"
$layout = JRequest::getVar('layout'); // for example, "blog"
$article_id = JRequest::getVar('id'); // id of the current article being shown
出于相同的逻辑,你还可以使用“用户”或“用户组”等作为判定条件,来决定在哪些页面中显示指定的模块。
译者:viiiix.com
| < Prev | Next > |
|---|

评论刷新