到目前为止,我们的模板采用三列结构布局,而不管这一列中是否有内容。对于一个CMS网站来说是没有什么益处的,因为这部分内容不发生变化。但是因为需要管理员能够改变模块的位置,所有我们需要能够自动关闭或者折叠起一列来。这就是列隐藏。

在这篇文章中http://www.maycode.com/index.php/hotspot/28-joomla/406-joomla-template.html我们提到了Joomla! 1.5模板的新特征,请参考。在Joomla! 1.5的模板开发中,我们采用countModules来判断是够某列有模块需要显示。(Joomla2.5同样适用)
通常的代码如下:

<?php if($this->countModules(’left’)) : ?>
do something
<?php else : ?>
do something
<?php endif; ?>countModules支持关系运算以及部分数学运算,以下是例子:
countModules(’left’) //如果left有模块显示,则返回1
countModules(’left and right’) //left和right都有模块显示,返回1
countModules(’left or right’) //left或right之一模块显示,返回1
countModules(’left + right’) //left和right都有模块显示,返回1

使用这个函数,我们就可以实现隐藏不需要的列。通常有集中方式来实现,我们这里在页面的头部进行计算,代码如下:

<?php 
if($this->countModules(’left and right’) == 0) $contentwidth = "100";
if($this->countModules(’left or right’) == 1) $contentwidth = "80";
if($this->countModules(’left and right’) == 1) $contentwidth = "60";
?>

这样,如果左右都没有模块显示,那么我们采用100%列宽,如果左或者右右一列显示,那么我们采用80%列宽,如果都有,那么我们采用60%列宽。同时,我们把内容部分改为:

<div id="content">

这样我们就选择了合适的列宽。同时,我们在template_css.css文件中添加:

#content60 {float:left;width:60%;overflow:hidden;}
#content80 {float:left;width:80%;overflow:hidden;}
#content100 {float:left;width:100%;overflow:hidden;}

隐藏空的模块:同样我们也需要隐藏空的模块,示例代码如下:

<?php if($this->countModules(’left’)) : ?>
<div id="sidebar">
<div class="inside">
<jdoc:include type="modules" name="left" style="xhtml" />
</div>
</div>
<?php endif; ?>

这样,如果左边如果没有模块,那么 id=sidebar 自然也不会出现了。