这个模板文件控制着节点的输出,和节点摘要的输出.它仅能影响page.tpl.php中的$content变量。
可用变量
$content
节点内容,如果是摘要的话,就是节点的teaser。
$date
格式化的节点创建日期。
$directory
主题所在的目录,比如themes/garland or themes/garland/minelli。
$id
被展示节点,在列表中的序列ID。
$is_front
如果当前页面为首页的话,返回true。
$links
节点链接。
$main (drupal4.6)
如果节点出现在上下文中,比如首页,在这里只展示teaser,此时为true。在drupal4.7及以后版本中,不再使用这个变量了。
$name
格式化的作者名。
$node (object)
节点对象。为了查看当前节点对象的所有属性,将下面的代码放到你的node.tpl.php中:
<pre><?php print_r($node); ?></pre>
$node_url
指向节点的链接。
$page
如果节点单独展示在一个页面时,返回true。
$picture
如果启用的话,返回用户图片的HTML。
$sticky
如果节点是sticky(粘的)的话,返回true.
$submitted
如果为这个节点类型启用了节点信息的展示的话,它将包含作者和节点创建日期等信息。
$taxonomy (array)
一个展示分类术语的HTML链接数组。
$teaser
布尔值,用来指示是否需要返回teaser,而不是整个节点文本。
$terms
分类术语的HTML。
$title
节点标题
$zebra
斑马线,odd/even二选一。
提示:输出可用的变量。
输出变量数组:
<?php
print '<pre>';
print_r(get_defined_vars());
print '</pre>';
?>
输出带有HTML的变量数组:
<?php
print '<pre>';
print htmlspecialchars(print_r(get_defined_vars(), TRUE), ENT_QUOTES);
print '</pre>';
?>
Drupal5.x的默认模板文件
<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?> clear-block">
<?php print $picture ?>
<?php if ($page == 0): ?>
<h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>
<div class="meta">
<?php if ($submitted): ?>
<span class="submitted"><?php print $submitted ?></span>
<?php endif; ?>
<?php if ($terms): ?>
<span class="terms"><?php print $terms ?></span>
<?php endif;?>
</div>
<div class="content">
<?php print $content ?>
</div>
<?php
if ($links) {
print $links;
}
?>
</div>
Drupal4.7的默认模板文件
<div class="node<?php if ($sticky) { print " sticky"; } ?><?php if (!$status) { print " node-unpublished"; } ?>">
<?php if ($page == 0): ?>
<h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>
<?php print $picture ?>
<div class="info"><?php print $submitted ?><span class="terms"><?php print $terms ?></span></div>
<div class="content">
<?php print $content ?>
</div>
<?php if ($links): ?>
<?php if ($picture): ?>
<br class='clear' />
<?php endif; ?>
<div class="links"><?php print $links ?></div>
<?php endif; ?>
</div>
如果你打算使用$is_front来检查当前页面是不是展示的单个节点的话,这里有篇好的帖子(尤其是帖子下面的评论更值得一读),讨论了变量$page和$is_front的不同.
只有当你处在drupal站点的首页时,变量$is_front才被设置,也就是为真,而当你处在其它页面时,$is_front为假。对于普通的节点列表页面,比如当你点击一个drupal分类术语后所得到的节点列表页面,在这里$is_front就为假(false)。
对于所有的节点列表页面,包括特定的分类术语下面的节点列表页面,$page都等于0。
如果你想为一个drupal节点使用一个特定的node.tpl.php模板文件的话,你可以将下面的代码拷贝或者合并到你的template.php中:
<?php
function _phptemplate_variables($hook, $vars = array()) {
switch ($hook) {
case 'node':
$vars['template_files'] = array('node-'. $vars['nid']);
break;
}
return $vars;
}
?>
现在,比如对于节点34,你就可以专门为它创建一个主题,名为node-34.tpl.php的模板文件.
本文是基于我的实践经验所写,我的客户向我提出了一个要求,如何让CCK定义的节点类型拥有一个他想要的主题外观。当然,有多种方式可以实现这一点:1)仅用CSS(并不是所有情况下都有效);2)使用Contemplate模块,(是不是的会让我挠头);3)一个自定义模块(根据他的情况,也不是一个好办法);4)主题模板。
随着他的需求的日益明确,我觉得主题模板模板应该是最好的办法。当然,这也是能够传授给他的最简单的方法。
具体要求和环境
新的节点类型已经用CCK定义好了,当然它还可以更精简一些。节点类型的名字是“agency”。
这个Drupal站点使用的主题为Garland。
站长对于外观没有太明确的要求,她只是想让我给他一个简单的教程,这样将来他好自己修改。他熟悉CSS,也了解一点PHP。
解决方案
首先,让我们看一下由CCK定义的节点类型。
在这个图片中,我们看到"Name"(名称)和 "Type"(类型);注意这些字段下面的说明:
为了构建主题模板文件,我们需要"Type"。
我们还需要注意,在这里我们把"body"字段叫作了什么。我们称它为"Description"。
当我们来到"Manage fields"(管理字段集)页面时,我们看到上图所示的页面。其中,"Name"列是我们需要的。然而,这里需要注意一点:我们这里没有字段叫作"body filter",这是Drupal内核中的一个表单技术,将“body”名称为"body_filter".
好了,现在全部信息我们都有了,让我们开始为这个节点类新定制主题。
打开你的文本编辑器,新建一个文件。在这里,我们将使用HTML 和PHP。首先,先输入一些基本的东西,以供将来定义CSS时使用。
<div class="content agency">
</div>
<div class="clear-block clear"></div>
它的意思是说,“下面的是这个节点的内容,节点类型为'agency'”。这里我选择使用了机器可读的节点类型作为内容标识,你也可以使用自己的标识。"content"是Drupal的标准用法,所以你需要保留它。第2行仅仅是一个结束标签。第3行也不是必需的,但是由于我们的节点中包含了图片,图片的大小可能会有所不同,加上这一行,能让浏览器返回“起点处”,从而保持统一的外观。
那么,现在我假设你想输出一些实际的内容?
节点中包含了一个图片,这里我们用的是使用了ImageCache模块的CCK "Image"字段。我们想把图片放在左上方。实际上,如果把公司名(标题)放在图片上方的话,效果可能会好一些,至于标题和图片的位置问题,我们现在先不管它,首先要做的是将它们显示出来。我们将这些东西插入到第一个<div>标签中。
ImageCache模块提供了一个非常方便的主题函数,让我们来使用它。
[顺便说一句,'echo'函数比'print'函数稍微快一点,所以我使用'echo'。不过大多数主题制作者都使用'print'。两者都能工作。
]
<?php echo theme('imagecache', 'thumbnail', $node->field_logo[0]['filepath'], $node->title, $node->title, array('align' => 'left', 'hspace' => '10')); ?>
在这个函数中,首先使用"thumbnail"(可以改为你自己要用的)来设置图片的大小。对于数据字段("$node->field_logo[0]['filepath']"),我将在下面作出解释。接下来的两个"$node->title"参数,它是告诉函数,对于"alt" 和"title"属性,在这里都使用公司名称。最后,我们使用了一个数组,它告诉ImageCache向IMG标签中添加属性'align="left"' 和'hspace="10"'。
好了,我们把图片插进去了,现在轮到标题了。在Drupal中,最标准的做法是使用<h2>标签。这个取决于你的习惯,不过在这里我将遵循Drupal标准。整个节点对象在主题中都是可用的,按照Drupal标准的,它叫作"$node"。在节点对象内部的标题(在这种情况下,就是公司名称),它的叫法就有点奇怪了,叫做 "title",而不是“company_name”。因此我们可以使用"$node->title"来引用它。
<h2><?php echo l($node->title, 'node/'. $node->nid, array('title' => t('View agency')));?></h2>
另一个标准的Drupal做法是,在标题上加一个指向节点本身的链接,这样你就可以进入节点页面,如果有权限的话,可对其进行编辑。所以我在这里使用l()函数。关于这个函数的更多信息,可参看这里。
在我的例子中,我使用表格(table)来对数据进行格式化。你也可以这样做,或者你也可以使用<div>+CSS。有些主题制作者就喜欢使用后者。你可以自由的选用你喜欢的技术。但一定要小心,不要与你的主题冲突了。
在我的例子中,我使用了CCK_Address模块,由于它与其它的CCK字段有点区别,所以我将讲解一下它的字段是怎么命名的。地址模块允许使用多个地址;多个地址构成一个名为"field_address"的数组,所以第一个地址是0,第2个地址是1,以此类推。这个模块还提供了几个子字段,它们的标签不需要与编辑页面的保持一致。比如,显示的"Address"字段,在内部为"street1";"Address continued"在内部为"street2";而"Apt/suite number"则简记为"apt."
我没有能够为这些字段使用"content_format"函数来格式化它们的内容。不知这是好是坏,但是它能工作。而普通的CCK字段有一个安全的"view"元素可用。
<tr><th>Address</th><td>
<?php
echo $node->field_address[0]['street1'];
if ($node->field_address[0]['apt']) { echo '; '. $node->field_address[0]['apt']; }
if ($node->field_address[0]['street2']) { echo '<br/>'. $node->field_address[0]['street2']; }
echo '<br/>'. $node->field_address[0]['city'] .', '. $node->field_address[0]['state'] .' '. $node->field_address[0]['zip'];
if ($node->field_address[0]['country'] != 'US') { echo '<br/><big>'. $node->field_address[0]['country'] .'</big>'; }
?>
</td></tr>
注意,我这里加了一点逻辑,从而将城市,州,和邮政编码连在一起(采用美国的格式)。由于我就在美国,所以也没有显示"US",如果加上这个的话,这里的邮递员会觉得别扭的。
现在,除了"body"字段(也就是这里的"description")以外,到目前为止,所遇到的所有字段的处理方式都是一样的。如果你参考一下你的“管理字段集”("manage fields")页面的字段名称,现在仅有几点需要你了解。
和前面的"address"一样,CCK所有字段可以是单独的,也可以是多个的,所以需要使用数足来管理它们,数组名就为“管理字段集”页面的字段名。例如,我们把电话号码定义为"field_agency_telephone",这个和前面的一样,第一个元素为field_agency_telephone[0],第2个元素为field_agency_telephone[1],以此类推。在我们这种情况下,不需要多个电话号码,如果需要的话,使用一个简单的"foreach"循环就可以做到了。
CCK提供了一个内容格式化工具(content formatter),但是你用不到它。每一个字段数组,都有一个‘view’,这个就是内容格式化工具生成的,但它已经为你做好了。这是展示数据的安全方式。而对于电子邮件地址和超链接等字段内容,CCK已经对其进行了正确的格式化处理。
让我们归者一下,引用一个字段的最好的方式就是"$field_name[0]['view'],"其中field_name可从“管理字段集”页面找到。
<tr><th>Phone</th><td><?php echo $node->field_phone[0]['view'];?></td></tr>
<tr><th>Email</th><td><?php echo $node->field_email[0]['view'];?></td></tr>
<tr><th>Web site</th><td><?php echo $node->field_website[0]['view'];?></td></tr>
那么,现在基本上就快完工了;现在就剩下"description"(或者body)字段需要考虑了。这个与前面所讲的不一样,所以你必须要小心一点。这个字段是这样引用的,"$node->content['body']['#value']",我看到一些人在帖子中建议,"$node->description"也应该可以工作,但是现在还不能。
那么,让我们将整个例子正合到一起,希望我的讲解还算清晰明了:
<div class="content agency">
<?php echo theme('imagecache', 'thumbnail', $node->field_logo[0]['filepath'], $node->title, $node->title, array('align' => 'left', 'hspace' => '10')); ?>
<h2><big><?php echo l($node->title, 'node/'. $node->nid, array('title' => t('View agency')));?></big></h2><br/>
<table border="2" cellpadding="5">
<tr><th>Address</th><td>
<?php
echo $node->field_address[0]['street1'];
if ($node->field_address[0]['apt']) { echo '; '. $node->field_address[0]['apt']; }
if ($node->field_address[0]['street2']) { echo '<br/>'. $node->field_address[0]['street2']; }
echo '<br/>'. $node->field_address[0]['city'] .', '. $node->field_address[0]['state'] .' '. $node->field_address[0]['zip'];
if ($node->field_address[0]['country'] != 'US') { echo '<br/><big>'. $node->field_address[0]['country'] .'</big>'; }
?>
</td></tr>
<tr><th>Phone</th><td><?php echo $node->field_phone[0]['view'];?></td></tr>
<tr><th>Email</th><td><?php echo $node->field_email[0]['view'];?></td></tr>
<tr><th>Web site</th><td><?php echo $node->field_website[0]['view'];?></td></tr>
</table>
<?php
if ($node->content['body']['#value']) {
echo '<p><big>'. $node->content['body']['#value'] .'</big></p>';
}
?>
</div>
<div class="clear-block clear"></div>
While I initially developed this on the Bluemarine theme, it worked without change on the
这个模板文件,我最初是在Bluemarine主题下面开发的,当我把它放在Garland主题下时,只需要在我的CSS中加入".agency table {width: auto;}"就可以了。其它都不用修改。这是由于Garland主题忽略了我的"width"属性,并将其强制为100%的缘故。
最后…
现在将你的工作保存,并检查它是否正常工作。
将文件保存到你主题的文件夹下,取名为"node-content_type.tpl.php",其中content_type是你在第一步中给节点类型起的内部名字。
展示一列节点
站点已经安装了Views模块,这样我就可以使用这个模块来选择资源了,尽管我觉得这样运行效率低一些。
由于所有字段在主题中都列出来了,那么我在Views中需要做些什么呢?对于"teaser view",我发现所有要做的就是选择节点中的字段,比如标题等等,然后你就得到了想要的节点。你可能还想排个序,但是这已经不是本文讨论的范围了。
模板文件node.tpl.php适用于所有类型的节点的主题化.这个文件覆盖了所有的节点类型,你可以按照手册的node.tpl.php页面的说明,对这个文件进行修改.为了对单独的节点类型分别进行主题化,你需要在你的主题文件夹下面创建一个node-$type.tpl.php文件,其中$type是节点类型的名称,从而为每种类型按照需要自定义主题.一些例子:
在一般情况下,你可以将$type替换为任何节点类型的名称.一种特殊情况是, flexinode模块,它在内部使用数字对类型进行命名. Flexinodes的主题化可参看http://drupal.org/node/31646.还有,你也不能使用 node-admin.tpl.php仅仅对管理页面进行主题化.(译者注:实际上,是可以这样用的,但是你需要加点东西,在template.php中加个函数,但是这种用法不常见,文中所讲的应该是,不能直接这样用.)
创建了这个文件以后,将node.tpl.php的内容拷贝进取,然后按照要求进行修改. node.tpl.php列出的所有变量都可以使用.当Drupal展示该类型的节点时,就会使用你新创建的模板文件来代替默认的node.tpl.php.
对于由flexinode创建的节点类型,你给节点类型的命名(也就是展示的节点类型名)与系统内部使用的节点类型名不一样.在系统内部使用的节点类型名为"flexinode-1", "flexinode-2",等等.查看节点类型名的一种方式是,直接查看数据库表“node”的name列。
例如,如果你使用flexinode创建了一个名为"info"的节点类型,如果你查看数据库的话,你就会发现其内部名称为"flexinode-1"。所以,你为"info"创建的模板文件应该命名为"node-flexinode-1.tpl.php"。
你也可以通过访问admin>>content>>content types页面,点击所选的节点类型,来查看flexinode后面的数字。这个数字将出现在url(比如,node/types/edit_type/1就意味着flexinode-1)。
在你的节点模板中(比如node-flexinode-1.tpl.php),你可以这样引用flexinode的不同字段:
<?php print $node->flexinode_1 ?>
导航到admin>>content>>content types页面,点击编辑所选字段链接,查看相应的url(比如node/type/edit_field/1,就意味着$node->flexinode_1),你会发现不同的字段的引用方式是类似的。
这种方式适用于文本输入框,文本字段,日期/时间。对于图片你可以这样:
<img src="/<?php print $node->flexinode_1->filepath ?>" />.
如果需要输出对象的话,你需要研究一下代码了。你可以使用下面的输出命令:
<?php print serialize($node->flexinode_1)?>
它看起来有点怪,但它是一序列的变量和它们的内容。你可以找出满足你需要的那个。如果你找出了特定字段的工作方式的话,你可以将代码贴到这里来。
我看到很多人发帖询问如何为OG首页定制主题.我自己也想对drupal4.7版本的旧式OG首页进行升级,但是我还不能找到一种像样的方式。文档中(至少我看到的是)看起来仅仅告诉我们如何为实际的group(组)节点类型定制主题(例如node-og.tpl.php),或者在默认的og_ghp_ron主题加点过滤器。这些都不是本文要讨论的。(译者注,这里所讲的首页,是小组的首页,而不是站点的首页,一个站点可以有n多个小组,每个小组有一个自己的首页面)。
让我们假定你想为你的OG首页展示的所有帖子定制主题的话。你想让这些在OG展示的帖子与它们独立的节点页面以及teaser列表页面有所区别。而对于所有的小组首页采用相同的主题方式。这是我所要讲解的(如果你想让每个小组的首页都不同的话,你仍然可以使用这个代码,或者你还可以使用views)。我觉得应该有更好的方式,我也听到有人说,这很容易,但是没有看到过讲解如何去实现的帖子。所以我只能采用我的笨方法了。
在本教程中,我们将定你的og节点类型叫做'og'。如果你不知道你的叫做什么,可以访问admin/og/og,并点击"group home page"。这里所选的就是你的og节点类型。
还有,你需要先备份你的站点,这样当你觉得不对劲的时候,还可以恢复原貌。
我想使用一种通用的方式,因为我不想,当我添加一个新的小组时,需要更新我的节点文件。我也不想让小组的创建者为小组创建一个路径别名。(当然,如果只有一个人能够创建小组,而且小组的数量也不多的话,你也可以手工的在小组编辑表单页面设置小组的路径别名,而不用安装pathauto模块;这取决于你)。
我首先要做的是安装Pathauto模块。Pathauto允许你为你的任何内容创建用户友好的url路径。按照Pathauto模块的readme里面的说明,进行安装,完成以后,访问admin/settings/pathauto,点击"node path settings"。如果你仅仅想为你的小组添加别名的话,那么在节点部分的顶部,删除"Default path pattern (applies to all node types with blank patterns below)"(默认路径模式(适用于所有的节点类型,如果下面的模式为空的话))下面的东西。
如果你没有设置这一项的话,所有的内容都将采用默认路径模式来设置别名。Pathauto是一个非常方便的模块,如果你想采用默认的模式的话,我鼓励你好好的读一下配置页面的说明文字。对于本教程,就放心把它删除了吧。
现在,在同一部分里面,找到"Pattern for all og paths"(根据你的og节点类型名会有所不同)。在下面的输入框中,输入:groups/[title-raw]。
把页面往下拉,选中复选框"Bulk generate aliases for nodes that are not aliased"(为已有的没有别名的节点批量生成别名)。保存。现在你的所有小组首页面应该都有一个自动的用户友好的别名了。好极了。
现在,我们已经找到了一种方式,帮助节点识别我们是否处于小组首页面,现在就可以编辑我们的模板文件了。进入你的主题文件夹下面,编辑名为node.tpl.php的文件。
与普通的node.tpl.php文件唯一不同的是,我们需要检查pathauto别名,来看看我们是不是处在小组首页面上。然而,我们仅需要URL的第一个参数(也就是"groups"部分),所以我们还需要使用PHP字符串函数对别名进行截取。下面的是我写的代码片断,最后为完整的代码。下面是如何决定我们是否处于小组首页面:
<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$url_alias = drupal_get_path_alias('node/'.arg(1));
} elseif (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))) {
$url_alias = drupal_get_path_alias('taxonomy/term/'.arg(2));
}
// We need to only take the first argument of the aliased path, so define the separator
$slash = '/';
// find out if the separator exists in the returned alias
$pos = strpos($url_alias, $slash);
// if the separator is not present, then just look at the URL alias; if it is present, strip the first argument only
if ($pos === false) {
$string = $url_alias;
} else {
$string = substr($url_alias, 0, $pos);
}
// if the first argument of the aliased path == 'groups', then we know it's a group home page
if ($string == 'groups'){ ?>
接下来,我们将格式化小组首页面的节点。在这里,我仅需要一个带有链接的标题,以及作者,发表日期,所以代码如下:
<?php if ($page == 0) { ?>
<div class="content"><a href="<?php print $node_url; ?>"><?php print $title?></a><span class="submitted"><?php print " ".$user_name. " " . $date; ?></span></div>
<?php }; ?>
接下来,如果别名不是'groups'的话,我将提供一个普通的teaser视图(view):
<?php
// if the first argument of the aliased path wasn't 'groups', then it's a normal teaser view
}else{ ?>
<div class="node<?php if ($sticky) { print " sticky"; } ?><?php if (!$status) { print " node-unpublished"; } ?>">
<?php if ($picture) { print $picture; }?>
<?php if ($page == 0) { ?>
<h2 class="title"><a href="<?php print $node_url; ?>"><?php print $title?></a></h2>
<?php }; ?>
<span class="submitted"><?php print $submitted?></span> <span class="taxonomy"><?php print $terms?></span>
<div class="content"><?php print $content?></div>
<div class="clr">
<?php if ($links): ?>
<div class="links"><?php print $links; ?></div>
<?php endif; ?>
</div>
</div>
<?php } ?>
接着,让我们添加独立的节点视图(view),从而完成我们的node.tpl.php文件。
下面是完整的可用的代码
(你可以根据需要自己定制外观):
<?php if ($teaser): ?>
<?php
// we just get the drupal path args so that we can look up the path alias
if (arg(0) == 'node' && is_numeric(arg(1))) {
$url_alias = drupal_get_path_alias('node/'.arg(1));
} elseif (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))) {
$url_alias = drupal_get_path_alias('taxonomy/term/'.arg(2));
}
// We need to only take the first argument of the aliased path, so define the separator
$slash = '/';
// find out if the separator exists in the returned alias
$pos = strpos($url_alias, $slash);
// if the separator is not present, then just look at the URL alias; if it is present, strip the first argument only
if ($pos === false) {
$string = $url_alias;
} else {
$string = substr($url_alias, 0, $pos);
}
// if the first argument of the aliased path == 'groups', then we know it's a group home page
if ($string == 'groups'){
// below this is where you need to put your node formatting for the og home page ?>
<?php if ($page == 0) { ?>
<div class="content"><a href="<?php print $node_url; ?>"><?php print $title?></a><span class="submitted"><?php print " ".$user_name. " " . $date; ?></span></div>
<?php }; ?>
<?php
// if the first argument of the aliased path wasn't 'groups', then it's a normal teaser view
}else{
// below this is where you need to put your normal node teaser formatting ?>
<div class="node<?php if ($sticky) { print " sticky"; } ?><?php if (!$status) { print " node-unpublished"; } ?>">
<?php if ($picture) { print $picture; }?>
<?php if ($page == 0) { ?>
<h2 class="title"><a href="<?php print $node_url; ?>"><?php print $title?></a></h2>
<?php }; ?>
<span class="submitted"><?php print $submitted?></span> <span class="taxonomy"><?php print $terms?></span>
<div class="content"><?php print $content?></div>
<div class="clr">
<?php if ($links): ?>
<div class="links"><?php print $links; ?></div>
<?php endif; ?>
</div>
</div>
<?php } ?>
<?php else:
// here is where your full node formatting goes ?>
<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?> clear-block">
<?php print $picture ?>
<?php if ($page == 0): ?>
<h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>
<div class="meta">
<?php if ($submitted): ?>
<span class="submitted"><?php print $submitted ?></span>
<?php endif; ?>
<?php if ($terms): ?>
<span class="terms"><?php print $terms ?></span>
<?php endif;?>
</div>
<div class="content">
<?php print $content ?>
</div>
<?php
if ($links) {
print $links;
}
?>
</div>
<?php endif; ?>
Hopefully that will help save somebody time.
希望本文对读者能有所帮助。
你可以在drupal主题的node.tpl.php模板文件中使用下面的条件语句,来为摘要创建一个独特的外观:
<?php
if ($teaser) {
//if node is being displayed as a teaser
//Anything here will show up when the teaser of the post is viewed in your taxonomies or front page
} else {
//all other cases
//Anything here will show up when viewing your post at any other time, e.g. previews
?>
或者,你想在条件语句中使用HTML,例如使用模板创建两个完全不同的布局:
<?php if ($teaser): ?>
<!-- teaser template HTML here -->
<?php else: ?>
<!-- regular node view template HTML here -->
<?php endif; ?>
注意$page变量用来判断节点是不是单独处在一个页面中,这与是否是作为摘要(teaser)显示的是有区别的:在节点的编辑预览页面, $page都为true的.