Drupal覆写模板实现不同栏目不同主题

论坛: 

 我常用的就是zen主题,这个主题就是一个主题框架,代码写得很规范,架构合理非常灵活,所以,我做的网站基本都选用这个主题。
当然,代码高手自己写主题更好。

zen主题展示的页面,大致是page+node+block这种形式。

一、先说page部分,这个部分是每一个页面的主框架,用于主题框架的排版,我们能在前台看到的页面,基础部分以及各部分的位置都是由他来控制的。而我在标题中写的,不同栏目实现不同主题,也主要在这部分实现。下面说说我的做法。
1、将page.tpl.php复制一份,改名page.default.tpl.php。
2、将page.tpl.php覆写,做成一个引导页面。也就是指定那种内容类型调用哪个page页面。部分代码如下:

<?php
    if ($is_front) {/* 判断是否为首页 */
    include 'page-front.tpl.php'; /*如果是首页则调用 page-front-page.tpl.php */
    return; }
 
    if ($node->type == 'news') {/* 判断内容类型,如果内容类型是news */
    include 'page-news.tpl.php'; /*调用 page-news.tpl.php */
    return; }
 
    if ($node->type == 'jobs') {/* 判断内容类型,如果内容类型是jobs */
    include 'page-jobs.tpl.php'; /*调用 page-jobs.tpl.php */
    return; }
 
    if ($node->type == 'node_gallery_image') {/* 判断内容类型,如果内容类型是node_gallery_image */
    include 'page-node_gallery_image.tpl.php'; /*调用 page-node_gallery_image.tpl.php */
    return; }
     
    /* ……此处可以根据自己的内容类型添加不同的模板文件 */
 
    include 'page-default.tpl.php'; /*如果不是上述内容类型则调用 page-default.tpl.php */
    return;
  ?>

3、 创建相关page页面。根据以上代码及注释,我们不难发现,我们还需要创建page-front-page 、 page-news-page 、page-jobs-page 、page-node_gallery_image-page这几个页面。对,就是这样,可以复制page.default.tpl.php然后改名。
4、修改每一个page页面。最终在根据每个页面的排版需求,定制自己所需的代码。参考区块排版及css的规范,别写乱了就行。同时还可以根据需求,加入一些静态的代码,如广告位,flash条等。当然,css也可以根据自己的需求编写。

二、 然后说node部分,node是每一个页面的内容展示部分,也可以说是整个网页的焦点。而我们在代码中往往只看到简单的 print $content 一句代码就全部囊括了。这是drupal对其进行了封装。如果你有个性化的需求,要根据不同的内容类型输出不同的字段,那么你就应该首先创建不同的 node.xxx.tpl.php文件,然后在不同的文件中调用相应的内容。
这里需要注意,要熟悉字段的调用方法,知道每个字段如何输出。当然,很多朋友不知道这一点,不用怕,用一个模块也可以解决这个问题,它就是 contemplate。建议开发网站的时候安装此模块,可以从这个模块中了解到每个字段的输出代码。这样就可以写出自己需求的node模板了。
关于栏目的node,还有个方法可以覆写,就是直接写代码,例如在首页,需要调用的板块很多,并没有content可以调用,这时候就是要自己写代码调用比较方便。

三、最后还有一些其他的小部件,模板也可以覆写。drupal自带的有block、comment。区块和评论的模板可以根据区块和页面的名称进行覆写。还有一些模块如views,他的模板也可以根据提示覆写,就不多说了。

Drupal 7 好像有点问题。

Tags: