我们在前面提到,在节点模板中,模板使用$content变量将正文,以及由CCK创建的字段一股脑的输了出来,怎么才能将其单独的输出来,放到定制的html中呢?
在文章的最后面,我们提到了print_r()这个函数的应用,这个函数在制作模板文件中,用处可大了,又专门的支持主题制作的drupal模块,不过我没有用过,我觉得print_r已经够用了。让我们在节点模板中,插入<?php print_r($node) ?>,访问首页,发现里面的内容全乱套了。
stdClass Object ( [nid] => 8 [type] => front_page [language] => [uid] => 1 [status] => 1 [created] => 1224493166 [changed] => 1224493166 [comment] => 2 [promote] => 0 [moderate] => 0 [sticky] => 0 [tnid] => 0 [translate] => 0 [vid] => 8 [revision_uid] => 1 [title] => Drupal国内新闻 [body] =>。。。。。。。
这么多东西,怎么办,我们要做的就是直接在这里找到对应的变量,怎么找,先找内容阿。先把那一大串复制到一个文本文件中,然后慢慢的找,最后找到了
<?php //print_r($node->title) ?>
<?php //print_r($node->body) ?>
<?php //print_r($node->field_news[0]['value']) ?>
<?php //print_r($node->field_news_body[0]['value']) ?>
<?php //print_r($node->field_security[0]['value']) ?>
<?php //print_r($node->field_security_body[0]['value']) ?>
怎么找出来的?慢慢的试出来的,最后发现$node->field_news[0]['value']可以,很快其它的也一样,搞定。找到了这些具体的字段,我们就可以将其放到我们的html片段中了。放置的过程中,发现不能使用$node->body,因为同样输出所有的正文加上所有的CCK字段。这里应为使用<?php print $node->content['body']['#value'] ?>,注意这里的value前面有个“#”号。我咋知道的?试了好几遍才试出来。最开始学习drupal的时候,都是这样试错试出来的。这样我们就可以将
<div class="content clear-block">
<?php print $content ?>
</div>
替换为了
<div class="content clear-block">
<div><h2><?php print $node->title ?></h2> <?php print $node->content['body']['#value'] ?> </div>
<div><h2><?php print $node->field_news[0]['value'] ?></h2> <?php print $node->field_news_body[0]['value'] ?> </div>
<div><h2><?php print $node->field_security[0]['value'] ?></h2> <?php print $node->field_security_body[0]['value'] ?> </div>
</div>
这样我们把CCK创建的节点类型就完整的输出来了。最终首页节点模板的文件内容如下:
<?php
// $Id: node.tpl.php,v 1.5 2007/10/11
?>
<?php //print_r($node) ?>
<?php //print_r($node->title) ?>
<?php //print_r($node->body) ?>
<?php //print_r($node->field_news[0]['value']) ?>
<?php //print_r($node->field_news_body[0]['value']) ?>
<?php //print_r($node->field_security[0]['value']) ?>
<?php //print_r($node->field_security_body[0]['value']) ?>
<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?>">
<?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="content clear-block">
<div><h2><?php print $node->title ?></h2> <?php print $node->content['body']['#value'] ?> </div>
<div><h2><?php print $node->field_news[0]['value'] ?></h2> <?php print $node->field_news_body[0]['value'] ?> </div>
<div><h2><?php print $node->field_security[0]['value'] ?></h2> <?php print $node->field_security_body[0]['value'] ?> </div>
<?php //print $content ?>
</div>
<div class="clear-block">
<div class="meta">
<?php if ($taxonomy): ?>
<div class="terms"><?php print $terms ?></div>
<?php endif;?>
</div>
<?php if ($links): ?>
<div class="links"><?php print $links; ?></div>
<?php endif; ?>
</div>
</div>
还差最后一个问题没有解决,那就是如何去掉“Add new comment ”这一链接,其实这个很简单,那就是编辑该节点,在编辑页面的“comment settings”部分选中“Disabled”就可以了。好了最终的效果图如下:
你可能说,怎么还是这么丑,将3个div排成什么样的样式,是美工的活,CSS的东西我不大懂,在这里就不多讲了。讲的就是这个流程,如何把CCK的字段提取出来,如何将CCK创建的节点设为首页。有点累了,歇会先。