Drupal 7 开发内部培训资料, 分头诗人

请教Drupal多页面使用同一个模板的问题。

赞成!
0
否决!

比如一个网站中有几个列表页面:公司新闻列表页面(路径:/news1),员工新闻列表页面(路径:/news2),行业新闻列表页面(路径:/news3)。这几个列表页面的样式相同,就是某一区的文字不同和页面的title不同。那么在实际开发中。

要建立page--news1.tpl.php,page--news2.tpl.php,page--news3.tpl.php这几个模板吗?还有可能建立一个模板?

我建了一个叫news的Views,在这个views下,建了三个显示页面,分别是/news1,/news2,/news3。让他们分别显示,公司新闻列表,员工新闻列表,行业新闻列表。这是正常的。

然后我想复写page页面,建立page--news.tpl.php,这个模板对吗?

我这样做了后,这个page的模板没有起作用?

我再建立page--news1.tpl.php的模板,他是对这个/news1起了作用,但他对/news2是不起作用的(这是意料中的)。那还是没有达到一个模板复写所有 的文章列表的目的。

进一步的,还有一个后继问题:这里有三个内容类型(公司新闻,员工新闻,行业新闻),这三个内容类型对应的内容页面的样式不一样。node页面要分别被复写的话,这个内容模板应该怎么命名呢?

3 个回答

赞成!
0
否决!

你可以看看Drupal 7 模板改写建议中page.tpl.php 那栏,

基模板:page.tpl.php
page--[front|internal/path].tpl.php
查找顺序(例子http://www.example.com/node/1/edit):
page--node--edit.tpl.php
page--node--1.tpl.php
page--node.tpl.php
page.tpl.php

你会发现,他是可以根据地址去做模板的。这个你能联想到,其实views 也可以这样做

你开始的做法是/news1 , /news2 , /news3

现在改成 /news/list1 , /news/list2 , news/list3

那么page--news.tpl.php 就能控制三个地址了

赞成!
0
否决!

内容类型 重命名规则是默认没的,但你可以通过在模板template中增加一句:

function yourtheme_preprocess_page(&$variables, $hook) {
    if (isset($variables['node']->type)) 
	{
    	$variables['theme_hook_suggestions'][] =  'page__type__' .  $variables['node']->type;
	}
}

然后可以通过 page--type--[contypename].tpl.php 命名,记得清空缓存

赞成!
0
否决!

谢谢,我马上去试试。

学习了