You are here

6.5 改造CCK节点模板node-front_page.tpl.php

g089h515r806 的头像
Submitted by g089h515r806 on 星期一, 2008-10-20 14:21

我们在前面提到,在节点模板中,模板使用$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 09:51:29 goba Exp $

?>

<?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创建的节点设为首页。有点累了,歇会先。

Drupal版本:

评论

月之审判者 的头像

为什么图片都没有显示出来了?