到目前为止,我们的模板采用三列结构布局,而不管这一列中是否有内容。对于一个CMS网站来说是没有什么益处的,因为这部分内容不发生变化。但是因为需要管理员能够改变模块的位置,所有我们需要能够自动关闭或者折叠起一列来。这就是列隐藏。
在这篇文章中http://www.maycode.com/index.php/hotspot/28-joomla/406-joomla-template.html我们提到了Joomla! 1.5模板的新特征,请参考。在Joomla! 1.5的模板开发中,我们采用countModules来判断是够某列有模块需要显示。
通常的代码如下:
<?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<?php echo $contentwidth; ?>">
这样我们就选择了合适的列宽。
同时,我们在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 自然也不会出现了。
至此,我们就完成了一个基本模板的开发过程,接下来我们给出一个真是模板的开发过程。