跳转到主要内容
东方龙马 提交于 3 November 2009

原文链接:http://drupal.org/node/225125

子主题(Sub-theme)和其它主题一样,唯一不同之处在于:它们继承来自于父主题的资源.对于多重继承,则没有限制.一个子主题可以是另一个子主题的子主题,允许存在分支和层级结构,只要你觉得合适就可以了.这使得子主题具有巨大的潜力.

sub-themes and dependancies   假如开始我们用基主题(base theme)勾画出主题的轮廓,那么在子主题中我们要做的就是描绘出所有的细节。接着,从同一基主题出发,创建另一个子主题分支,用来尝试另一种设计。如果你要建立的是多站点的话,但是你想要一个统一的外观,那该怎么办呢?使用子主题,就可以在各个自站点中分享共同的设计资源。子站点相关的修改放在子主题里,而共享的设计资源则可以放在基主题中,这样一旦修改了之后,就可以应用到所有的子站点中了。如果仔细规划,那么就具有无限的可能。   为了声明一个父主题或者“基主题”("base theme"),那么在子主题的.info文件中设置下面一项,其中" themeName"(“主题名”)为父主题在Drupal内部的名字: base theme = themeName 下面的将被继承:
  1. 所有在父主题中定义的样式表(http://drupal.org/node/171209),但可以进行选择(http://drupal.org/node/171209#styles-override-parent),所以这是可以控制的。
  2. 所有在父主题中定义的JavaScripts。
  3. 所有的模板文件(.tpl.php)。
  4. "template.php"文件中定义的所有东西。包括覆写的主题函数,预处理器,或者其它东西。每个子主题都包含它自己的template.php文件和其父主题的template.php文件。
  5. 如果子主题中.info文件和父主题的设置相同的话,父主题的截图(Screen shot)也是可以继承的。
  下面的不能被继承:
  1. 主题的logo.png。不包括上传的logo,因为这是总被用到的。
  2. .info文件中的一些设置。包括区域。如果你没有使用默认区域的话,那么子主题的"page.tpl.php"文件中用到的区域,一定要在.info文件中定义过。每个基主题和子主题都可以拥有自己的区域设置。
  3. 在高级主题设置(http://drupal.org/node/177868)中,"theme-settings.php"文件中的所有东西。
注意,子主题可以放在基主题目录的外面,也可放在里面。而在Drupal6以前的版本中,它们只能放在父主题目录的里面。