zenglcms v1.2.0可以设置栏目类型,例如"关于我们"这种单页形式的栏目类型,还有外链栏目类型等等,可以为不同的栏目类型设置特定的模板,以及特定的行为。     栏目...

    zenglcms v1.2.0可以设置栏目类型,例如"关于我们"这种单页形式的栏目类型,还有外链栏目类型等等,可以为不同的栏目类型设置特定的模板,以及特定的行为。

    栏目类型可以在系统配置中进行设置,系统默认的栏目类型如下:

图1
 
    这些栏目类型必须配合mydefined主题风格里的模板和模板处理程式才能显示出效果,所以v1.2.0安装时默认的网站当前主题风格就是mydefined主题

    栏目类型的配置信息保存在数据库的setting表中:
 
图2
 
    如上图所示,在setting表中set_group字段为section,name字段为section_type的记录中,value字段里存放就是栏目类型的配置信息。

    每个栏目类型都由两部分组成,通过冒号隔开,如"关于我们:aboutus",左侧是栏目类型名称,右侧是栏目类型标识符,栏目类型名称会显示在添加编辑栏目时的下拉框中,模板处理程式则会根据栏目类型标识符来判断某个栏目是什么类型,并对应不同类型产生不同的输出。如果要新增自己的栏目类型,可以在系统配置如图1里的栏目类型编辑框中输入自定义的栏目名称和栏目标识符,不同的栏目类型之间通过回车符分隔开,请确保栏目类型名称和栏目类型标识符的唯一性(不要和其他栏目类型相冲突)。

    下面以关于我们栏目类型为例,来说明如何在模板处理程式中使用自己的栏目类型。

    在tpl/mydefined/class/list_articles_class.php文件中,有如下代码:

............................................  //省略N行代码

if(!isset($rvar_tpl_action) || $rvar_tpl_action == '') $rvar_tpl_action = 'default';
$list_tpl_class_pre = 'list_articles_';
//关于我们栏目的模板处理程式文件名前缀
$list_tpl_aboutus_class_pre = 'aboutus_';
//模板处理程式文件名后缀
$list_tpl_class_suffix = '_class.php';
$section = new section(false,false);
$section->sql = $section->permis->sql = &$this->sql;
if($this->all == null)
{
    $section->getall();
    $this->all =&$section->all;
}
//section栏目表中新增的type字段存放的就是栏目类型标识符
switch($this->all[$rvar_sec_ID]['type'])
{
    //aboutus为关于我们的栏目类型标识符
    case 'aboutus':
        //tpl_action可以为指定栏目类型定义多种行为和输出方式
        switch($rvar_tpl_action)
        {
            //default默认tpl_action对应的处理方式
            case 'default':
                $sql = &$this->sql;
                //从数据库中将关于我们栏目中的第一篇文章读取出来作为关于我们的单页内容
                $sql->query("select * from {$sql->tables_prefix}articles where sec_ID={$rvar_sec_ID} ".
                            "limit 0,1");
                $sql->parse_results();
                $rvar_articleID = $sql->row['articleID'];
                if($sql->row === false)
                    die('you have no aboutus article!');
                $i_am_in_list = true;
                //include来加载aboutus关于我们的模板处理程式文件,此处为aboutus_default_class.php
                include $list_tpl_aboutus_class_pre . $rvar_tpl_action . $list_tpl_class_suffix;
                break;
            default:
                die('unknown tpl_action in list_articles_class.php when type is aboutus');
        }
        break;
............................................  //省略N行代码
 
   
    此处的注释只是为了方便说明额外添加的,在源码中没有。从上面的代码可以看出,当栏目类型为aboutus关于我们时,则默认加载aboutus_default_class.php文件,由该文件来进行处理,该文件部分代码如下:


............................................  //省略N行代码

else
{
    $filetpl = $zengl_cms_tpl_dir . $zengl_theme .'/aboutus.tpl';
    $filecache = $zengl_cms_tpl_dir . 'cache/aboutus_cache.php';
}

if(!file_exists($filetpl))
    die('tpl file '.$filetpl.' does not exist!');

if(file_exists($filecache) &&( filemtime($filecache) > filemtime($filetpl) ) &&
    (filemtime($filecache) > filemtime($zengl_cms_tpl_dir . 'filetpl')) )
    include $filecache;
else
{
    $tpl = new tpl($filetpl, $filecache);
    $tpl->template_parse();
    $tpl->cache();
    include $filecache;
}

............................................  //省略N行代码
 

    当栏目没有设置自定义的栏目模板时,aboutus_default_class.php处理程式默认会解析aboutus.tpl模板。这样当用户访问关于我们类型的栏目时,就会由list_articles_class.php加载aboutus_default_class.php,再由该文件解析aboutus.tpl模板,从而输出关于我们的单页内容。

    栏目添加和编辑时还可以自定义栏目列表模板和栏目内容页模板:

图3
 
    在section栏目数据库表中,v1.2.0新增的tpl字段存放的就是上图中的栏目列表模板文件名信息,article_tpl字段存放的是上图中的栏目内容页模板文件名信息:
 
图4

    这样同一类型的不同栏目就可以自定义不同的模板输出。

    OK,休息,休息一下 o(∩_∩)o~~
上下篇

下一篇: zenglcms v1.2.0 数据库结构

上一篇: zenglcms v1.2.0 水印功能和进度条类

相关文章

zenglcms sqlite和mysql数据库操作类

zenglcms v1.2.0 正则表达式模板引擎

zenglcms v1.2.0 数据库结构

zenglcms CKEditor在线编辑器

zenglcms v1.0.0的安装

zenglcms v1.2.0 水印功能和进度条类