name (required) 名字(必须)
这是用户可读的名字,与主题的Drupal内部名字可以分开单独进行设置.这在这里,字符的限制则很少.name=Un tema nombre de fantasiadescription (recommended) 描述(推荐)
主题的简短描述.你可以在页面"Administer>Site bui lding >themes"看到主题的描述.description=Tableless multi-column theme designed forblogs.screenshot截图
截图键时可选的,它告诉Drupal主题的缩略图在哪里,在选择主题页面(admin/bui ld/themes)里用到了缩略图.如果. info文件中忽略了该键,那么Drupal就会使用主题目录下面的"screenshot.png"文件.只有当你的缩略图不叫"screenshot.png",或者你不想把它放到你主题的根目录(比如 screenshot =images/screenshot.png)下面时才使用该键。screenshot=screenshot.pngversion (recommended)版本推荐
当发布一个新的版本时 drupal .org会自动为其添加一个版本号。当你为Drupal贡献主题时你可以忽略该值。如果你的主题没有放到d ru pa l .o rg上的话你可以为你的主题指定任意一个版本号。ve rs io n=1.0co re (req u ired) 内核必须
从Drupal 6.x开始模块和主题的. info文件都必须指明它们兼容的Drupal内核主版本号。这里设的值将与DRUPAL_CORE_COMPATIBILITY常量相比较。如果不匹配的话那么主题将被禁用。core=6.xdrupal .org的打包脚本将根据每个发布版本的Drupal内核兼容性设置 自动设置该值。所以从drupal .org下载下来的主题设置总是正确的。然而对于直接通过CVS部署的Drupal站点来说如果你将这一修改提交到你主题的. info文件中去的话将会很有帮助。它也能够非常方便的帮用户指出主题兼容CVS的HEAD中的哪些内核版本。engine (recommended)引擎推荐
主题引擎供主题使用。如果没有提供引擎的话那么主题就是独立的 比如实现一个".theme"文件。大多数主题都使用"phptemplate"作为默认引擎。
PHPTemplate负责查找主题用到的主题函数和模板。只有当你理解你在做什么的时候你才可以忽略这一设置。engine=phptemplatebase theme基主题
子主题可以声明一个基主题。这允许主题的继承也就是说基主题中的资源将被传递下来并在子主题中使用。子主题可以声明别的子主题作为其基主题也就是允许多重继承的存在。基主题的名字为其在Drupal内部的名字。下面是Garland的子主题Minnel l i的相应设置。base theme = garland 更多细节可参看子主题 它们的结构和继承http://drupal .org/node/225125。reg io ns区域
我们这样定义主题中的区域声明键'reg io ns' 紧跟着“[”接下来是内部名字接着是“]”,然后是一个等号右边是用户可读的区域名字。例如 regions[theRegion]=The region name.
如果没有定义区域的话那么使用下面的默认值。你可以根据自己的需要覆写这些值。
regions[left] = Left sidebarregions[right] = Right sidebarregions[content] =Contentregions[header]=Headerregions[foote r]=Footer更多细节可参看 “区块 内容和它们的区域” http://drupal .org/node/171224。features 特性
许多由主题控制输出的页面元素,可以在主题的配置页面启用或者禁用. "features"键控制着出现在主题配置页面上的复选框.对于一个主题,如果你不想为其定义某个复选框时,着非常有用.为了删去某个复选框,只需要在"features"中将其删除即可.如果一个也没有定义的话,那么会输出所有默认的复选框.
下面的例子列出了所有由features键控制的元素.通过注释掉primary_l inks和secondary_l inks元素,那么站点管理员就不会看到这两个复选框了.features[] = logofeatures[] = namefeatures[] = sloganfeatures[] =missionfeatures[] =node_user_picturefeatures[] = comment_user_picturefeatures[] = searchfeatures[] =favicon;These last two disabled by redefining the; above defaults with only the neededfeatures.; features[] =primary_l inks; features[] =secondary_l inks更多信息参看”定制主题设置”(http://drupal .org/node/221905).stylesheets样式表
传统方式主题可自动的使用默认的style.css并且可以在它们的te mplate.php文件中通过调用drupal_add_css()来添加其它样式表。从Drupal6开始主题也可以通过. info文件来添加样式表。stylesheets[al l][] = theStyle.css 更 多 信 息 可 参 看 “ 样 式 表 ” 一 节http://drupal .org/node/171209。scripts脚本
传统方式主题通过在template.php文件中调用drupal_add_js()来添加javascripts脚本。从Drupal6开始主题也可以通过. info文件来添加javascripts了scripts[]=script.js更多信息参看 JavaScript&jQuery一节。php
这个定义了主题支持的PHP最低版本。其默认值源自 DRUPAL_MINIMUM_PHP常量它是Drupal内核所需要的php最低版本。对于一个新的版本如果需要的话可以对其进行重新定义。而对于大多数的主题都不应该添加这一项。php=4.3.3
Garland:
; $Id:garland.info,v 1.52007/07/0123:27:32 goba Exp$name=Garlanddescription=Tableless,rec olorable,multi-c olumn, fluid width theme (default).version=VERSIONc ore=6.xengine=phptemplatestylesheets[all][] = style.c ssstylesheets[print][] = print.c ss; Information added bydrupal.org packaging script on 2008-02-13version = "6.0"project = "drupal"datestamp ="1202913006"
Minnelli sub-theme of Garland. :
; $Id:minnelli.info,v 1.72007/12/0420:58:44 goba Exp$name=Minnellidescription=Tableless,recolorable,multi-column, fixed width theme.version =VERSIONcore = 6.xbase theme =garlandstylesheets[all][] =minnelli.css; Information added by drupal.org packaging script on2008-02-13version="6.0"project="drupal"datestamp="1202913006"
注意从行“; Information added by drupal.org packaging script on 2008-02-13”开始直到结束这都是由drupal.org的打包脚本自动添加的。你一定不要手工添加project(项目)和datestamp
时间戳键。手工添加vers ion(版本)键第一个那么就可以允许直接从CVS建立起来的站点使用你的主题了。
下面是假定的默认值。如果它们没有被定义的话主题将自动使用这些值。
注意这些默认值是作为一个组来共同起作用的。换句话说仅仅使用regions[sub_header]=Su b-header来覆写一个区域的话将会造成其它默认区域的消失。为了使用它们必须对它们进行重新定义。对于"stylesheets"也是一样的。尽管从技术的角度来看 它不是一个组定义另外一个样式表除非你重新对"style.css"进行定义否则是找不到它的。regio nsregions[left]=Left sidebarregions[right]=Right sidebarregions[content]=Contentre gi o ns[he ade r]=He ade rregions[footer]=Footerfe aturesfeatures[]=logofe atures[]=namefeatures[]=sloganfeatures[]=mis sionfe atures[]=no de_user_pi cture
fe atures[]=c omment_user_picturefeatures[]=searchfeatures[]=faviconfe atures[]=primary_linksfe atur es[]=s e co ndary_linksstylesheetss tyl e s he et s[al l][]=s tyl e.cs ss cri ptss cripts[]=s cript.j sscreenshots creenshot=s creenshot.pngphp(minimum support) 支持的最低版本
DRUPAL_MINIMUM_P HP是一个常量。它指出了运行Drupal所需php的最低版本。php=DRUPAL_MINIMUM_P HP
覆写可主题化的输出
星期六, 2008-08-30 21:28—g089h515 r 806原文 http://drup al.org/node/173880
译者葛红儒, http://zhup o u.c n,
只有当你需要修改默认输出时,你才需要阅读本节.如果你的显示层是完全有CSS样式表负责的那么可以略过本节。
覆写主题输出需要掌握3个方面。首先你需要知道源头在哪里其次你要进行覆写最后你需理解它的类型。
注意Drupal使用主题注册表(theme registry)来缓存主题数据覆写完成后你必须清空缓存。
1. 寻找源头
寻找主题输出的源头是比较困难的这是由于主题系统的多层级结构造成的使得源头可能出现在系统的各个地方。
仅用来演示用。
大多数页面元素一般是由them e('p ag e')拉进来的在显示导航信息以后 它们被放置在p ag e.tp l.p hp模板中。页面元素包括主菜单、区块区域元素 区域中的区块等等。通常通过一个主题钩子来引用每个大块的主题化数据。
注意主题钩子现在包括主题函数和模板两部分。系统中的许多钩子都与主题无关。我们这
里提到的钩子都是特定于主题的。
现在使用devel模块(devel module)可以很容易的追踪特定内容的源头。 devel模块包含一个主题工具可以方便的查勘任何输出的源头类型以及其它主题相关数据。参看示范s creenc as t(http://drupal.org/node/209561)。 由于技术方面的限制它只能应用到Drupal6以及更高版本中。
2. 覆写机制
覆写机制有一个特定的级联顺序当然也包含一些特殊情况。Drup al内核和模块使用主题钩子提供了一个合理的默认输出。如果默认输出不符合主题的需求的话那么就可以对其进行覆写从而避免使用默认输出。这样默认的将被放到一边去我们不再管它而将所有的特定修改放到所用的主题目录下面。不要直接修改Drupa l内核和模块只在主题目录下面修改。
如果传统的覆写不能满足你的需要的话你可以使用主题注册表。
注意尽管在Drupal 6中PHPTemplat e.engine还存在但它已不再覆写主题函数了。在Drupal5中它允许使用模板来处理部分主题钩子。而现在则不必要这样了。
3.函数VS模板
正如前面所说实现特定的钩子有两种方式。通常的“函数”或者“模板”。根据要主题化的元素的特点选用最合适的方式。内核和模块可选用任何一种方式来构建输出。而上面的主题层可以使用同样的方式来覆写或者改变选用的方式。
Links to PDF.Flow mapfor 5 also availablefor comparison.
使用函数来实现主题钩子具有速度上的优势。通常比使用模板的快5倍但是对们对于涉及者来说就比较困难通常涉及者都比较熟悉直接的x HT ML而不是p hp函数。通常我们不需要考虑这样一点而是根据钩子的特点和在一个页面中被调用的次数来决定要选择的方式。
注意在Drup al5及以前版本 内核和模块只能使用函数来实现主题钩子。想要使用模板的话必须使用PHPTemplate来覆写钩子并在引擎层中进行转换。
下面是覆写的两个例子这里使用了devel themer.
函数方式
主题函数theme_menu_loc al_tasks是一个用来输出一级和二级标签的简单函数。这里的主题钩子就是"menu_loc al_tasks"。为了覆写它可将函数名中的前缀"theme"替换为你主题的名字或者所用主题引擎的名字。最好使用主题的名字这样可以避免潜在的与子主题http://drup al.or g/no de/225125的命名冲突。
本例中 Garland是使用引擎名来覆写的。如果你的主题是基于Garland的子主题那么你必须使用你的主题名了。
将下面的代码放到主题的temp late.php清空主题注册表缓存这样就覆写了默认输出。注意将"drop"改为你主题的名字。
<?p hpfunction drop_menu_loc al_tasks() {
$o utp ut=' ' ;if($primary=menu_primary_loc al_tasks()) {
$output .="<ol clas s=\"tabs primary\">\n". $primary."</ol>\n";
}if($s ec ondary=menu_s ec ondary_loc al_tasks()) {
$output .="<ol c las s=\"tabs secondary\">\n". $sec ondary."</ol>\n";
}r eturn$output;
}
?>
这里所做的唯一修改就是将<ul>标签改为了<o l>。
在api.drupal.org你可以找到所有的主题函数。
模板方式
如果默认是使用模板实现的那么你只需要简单得将模板源文件拷贝到主题下面然后清空主题注册表就完成了覆写。下面为s earc h-theme-form.tpl.php的一个例子。注意在这里主题钩子就是"search_theme_form"需要将连字符“-”替换为下划线“_”.
这就是你要做的。使用编辑器打开拷贝的模板对其进行修改。 内核中的所有.tp l.p hp文件都带有注释。根据注释你就可以做出具体的修改了。
注意模板可以放在主题下面的任何目录中。这样便于管理也避免了主题根目录下面的混乱。
相关页面
为了定制模板中的变量参看自页面“预处理函数” http://drupa l.org/node/223430。 可以在子页面“核心模板和建议”Core templates and suggestions找到所有的主题模板。
将函数转化为模板
将一个主题函数转化为一个模板开始是需要一点工作的但一旦完成便很好使用。如果你和设计者一同工作那么转化为模板将会使设计者更专注于设计而不是编码。在内核中 已有了很多模板而在将来的版本中将有更多的主题函数转化为模板。第3方模块为了与内核接轨最好也使用模板。本部分是为那些还没有使用模板的主题钩子准备的。Drupal以模板的方式识别主题钩子是自动完成的。下面是完成修改所需的所有必要条件 模板名必须与主题钩子匹配。
主题钩子中的下划线必须改为连字符。
模板文件必须使用扩展名".tp l.p hp"。 根据主题引擎的不同扩展名会有所不同假如主题函数为theme_us er_s ignature。这里的主题钩子就是"us er_s ignature"。创建一个名为"us er-s ignature.tpl.php"的文件清空注册表就会告诉Drup al现在钩子已改为模板方式了。现在该文件中的内容将替代相应的函数。这里的难点是设置模板文件中用到的变量这可以通过预处理函数来完成。
需要注意的一些点
可以在模板中直接放置代码但这种方式不好。所有的复杂逻辑都应该从.tp l.p hp文件中分离出来。这样使得模板文件更干净更便于管理。
这也有安全方面的考虑。将逻辑与显示分离可以避免潜在的恶意用户来创建内容从而减小CSS(cross-site scripting)攻击的机会.当让你的设计者处理模板文价时所有的输出都应该非常干净这样设计者就不用考虑安全问题了。
比较关于论坛的theming functions in 5和template conversions in 6。你可以使用这个作为例子来进行两种方式之间的转换。
更多关于预处理函数的信息http://drup al.or g/no de/223430。
Drup al的主体注册表维护了主题钩子相关的缓存数据包含主题钩子和如何处理它们的信息。
对于大多数主题开发者来说都不需要直接与注册表打交道。只需要记住当添加或者删除主题函数和模板时要清空它。编辑已有的函数和模板时则不需要清空。
博鳌云是一家以海外互联网基础业务为主的高新技术企业,运营全球高品质数据中心业务。自2008年开始为用户提供服务,距今11年,在国人商家中来说非常老牌。致力于为中国用户提供域名注册(国外接口)、免费虚拟主机、香港虚拟主机、VPS云主机和香港、台湾、马来西亚等地服务器租用服务,各类网络应用解決方案等领域的专业网络数据服务。商家支持支付宝、微信、银行转账等付款方式。目前香港有一款特价独立服务器正在促销,...
VPSMS最近在做两周年活动,加上双十一也不久了,商家针对美国洛杉矶CN2 GIA线路VPS主机提供月付6.8折,季付6.2折优惠码,同时活动期间充值800元送150元。这是一家由港人和国人合资开办的VPS主机商,提供基于KVM架构的VPS主机,美国洛杉矶安畅的机器,线路方面电信联通CN2 GIA,移动直连,国内访问速度不错。下面分享几款VPS主机配置信息。CPU:1core内存:512MB硬盘:...
棉花云官网棉花云隶属于江西乐网科技有限公司,前身是2014年就运营的2014IDC,专注海外线路已有7年有余,是国内较早从事海外专线的互联网基础服务提供商。公司专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,并引导云计算在国内普及。目前公司研发以及运营云服务基础设施服务平台(IaaS),面向全球客户提供基于云计算的IT解决方案与客户服务(SaaS),拥有丰富的国内BGP、双线高防...