使用hook_view()显示笑话妙语(1)

老葛的Drupal培训班 Think in Drupal

你需要清除主题注册表的缓存,这样Drupal就能找到你的主题钩子了。清除缓存有多种方式,一种是使用devel.module,还有一种是简单的访问“管理➤站点构建 ➤模块”页面。现在你的笑话输入和查看系统,应该可以完整工作了。继续前进,输入一些笑话来测试一下。现在你应该可以看到你的笑话了,它看起来外观有点朴素,如图7-4和7-5所示:
 
7-4 笑话节点的简单主题
 
 
7-5.节点以摘要形式显示时,没有添加笑话妙语
 
    尽管这也可以工作,但还存在一个更好的方式,让用户可以在查看完整节点页面时能够立即看到笑话妙语。我们想要的是,使用一个可伸缩的字段集,当用户点击时再展示笑话妙语。在Drupa中,可伸缩字段集的功能已经存在了,所以你只需要使用现有的就可以了,而不需要创建你自己的Javascript文件了。把这个交互放到你站点主题的模板文件中,比放到主题函数中更好一些,因为它依赖于标识字体和CSS类。你的设计者很乐意看到你这样做,因为如果要修改笑话节点的外观的话,只需要简单的编辑模板文件就可以了。
    你需要创建一个名为node-joke.tpl.php的模板文件,并将其放到你当前使用的主题的目录下面,下面是该文件中的内容。如果你使用的主题为bluemarine,那么node-joke.tpl.php将被放到themes/bluemarine下面。由于我们将会使用一个模板文件,那么就不再需要实现钩子hook_theme()和函数theme_joke_punchline()了,所以我们就可以把它们注释掉了。记住,要像前面所讲的一样,再次清除主题注册表缓存,这样Drupal就不再查找函数theme_joke_punchline()了。由于模板文件将负责笑话妙语的输出,所以在joke_view()中,我们还可以将笑话妙语指定到$node->content中的那段代码注释掉(否则,笑话妙语会被显示两次)。
 
注意:访问“管理➤站点构建 ➤模块”页面以后(将会自动重构主题注册表),主题系统将会自动发现node-joke.tpl.php,Drupal将使用该模板文件来修改笑话的外观,而不是默认的节点模板文件node.tpl.php。更多关于主题系统方面的知识,请参看第8章。
 
<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?>
            <fieldset class="collapsible collapsed">
                <legend>Punchline</legend>
                <div class="form-item">
                    <label><?php if (isset($node->punchline)) print check_markup($node->punchline)?></label>
                    <label><?php if (isset($node->guffaw)) print $node->guffaw?></label>
                </div>
                </legend>
            </fieldset>
        </div>
    <?php if ($links) { ?><div class="links">&raquo; <?php print $links?></div>
        <?php }; ?>
</div>
 
    Drupal将会自动地包含进来启用可伸缩功能的JavaScript文件。misc/collapsible.js中的JavaScript将为字段集查找可伸缩的CSS选择器,并且在找到以后知道如何处理它,如图7-6所示。这样,在node-joke.tpl.php中它将找到下面代码并激活它自己:
 
<fieldset class="collapsible collapsed">
 
    这就可以得到我们想要的笑话交互体验了:
 
7-6 使用Drupal内置的可伸缩CSS支持,来隐藏笑话妙语
 

Drupal版本: