【问题标题】:How can I theme the taxonomy/term/x page? [closed]如何为分类/术语/x 页面设置主题? [关闭]
【发布时间】:2010-04-16 16:35:00
【问题描述】:

虽然很容易在网上找到一些关于如何为其他内容设置主题的信息(例如搜索结果),但要找到一篇关于如何为分类/术语/247 页面的输出设置主题的简单文章是不可能的?

我该怎么做?

【问题讨论】:

    标签: drupal themes taxonomy drupal-taxonomy


    【解决方案1】:

    在 Drupal 6 中,您可以使用主题中的 node-taxonomy.tpl.phppage-taxonomy-term.tpl.php 文件来模板分类页面,因为第二个是第一个的包装器。表现node-taxonomy.tpl.php 喜欢node.tpl.phppage-taxonomy-term.tpl.php 喜欢page.tpl.php。例如:

    page-taxonomy-term.tpl.php

    <?php require 'header.tpl.php'; ?>
        <body class="<?php echo $body_classes; ?>">
            <div id="page">
                <?php require 'page-navigation.tpl.php'; ?>
                <div id="main">
            <h2>Taxonomy term page</h2>
            <div class="taxonomy-content">
                <?php if ($tabs): echo '<div id="tabs-wrapper" class="clear-block">'; endif; ?>
                <?php if ($title && !$node): echo '<h2'. ($tabs ? ' class="with-tabs"' : '') .'>'. $title .'</h2>'; endif; ?>
                <?php if ($tabs): echo '<ul class="tabs primary">'. $tabs .'</ul></div>'; endif; ?>
                <?php if ($tabs2): echo '<ul class="tabs secondary">'. $tabs2 .'</ul>'; endif; ?>
                <?php if ($show_messages && $messages){ echo $messages; } ?>
                <?php echo $help; ?>
                <?php echo $content; // contains the output of node-taxonomy.php, that's why I call this wrapper template file. ?>
            </div> <!-- #taxonomy-content -->                   
                </div> <!-- #main -->           
            </div> <!-- #page -->
            <?php echo $closure; ?>
        </body>
    <?php require 'page-footer.tpl.php'; ?>
    

    node-taxonomy.tpl.php

    <div id="node-<?php echo $node->nid; ?>" class="node<?php if($sticky) echo ' sticky'; ?><?php if(!$status) echo ' node-unpublished'; ?>">
      <div class="taxonomy-node">
          <div class="node-body">
            <a class="node-title" href="<?php echo $node_url ?>" title="<?php echo $title ?>">
              <?php echo $title ?>
            </a>
            <span class="node-cck-field">
              <?php echo $node->field_cck_blah[0]['view']; ?>
            </span>                             
          </div>                
      </div>
    </div>
    

    嗯,最重要的部分:默认情况下,Drupal 不知道 node-taxonomy.tpl.php,因此我们需要在主题的 template.php 文件中将其作为 模板建议 引入,这里我们去:

    /**
     * Adding custom PHPTemplate suggestions on taxanomy pages.
     *
     * @param $vars
     *   A sequential array of variables to pass to theme template.
     */
    function phptemplate_preprocess_node(&$vars) {
      if(arg(0) == 'taxonomy'){
        $suggestions = array('node-taxonomy');
        $vars['template_files'] = array_merge($vars['template_files'], $suggestions);
      }
    }
    

    还有一个关于 Drupal 7 的 taxonomy-term.tpl.php
    这是一个代码示例,不要忘记在打印输出上使用check_plain()check_url()

    【讨论】:

    • 感谢 Sepehr!这可行,但我在页面上的所有视图块都得到相同的格式处理......(它们显示为节点预告片)有没有办法停止破坏我的视图?
    【解决方案2】:

    分类页面并不神奇,因为它需要一些特殊的主题。有一个模板文件、一个预处理函数和一些主题函数,就像任何页面一样。

    如果您想控制有点原始的默认分类页面的输出,您可以使用视图覆盖默认页面。然后,您可以使用视图仅显示节点预告片、进行一些自定义排序、使用寻呼机等。

    如果你想做更具体的事情,你应该编辑你的问题,告诉我们你想做什么。

    【讨论】:

      【解决方案3】:

      你最好在 template.php 中使用以下代码

        foreach ($vars['node']->taxonomy as $term) {
          $vars['template_files'][] = 'node-term-'. $term->tid;
        }
      

      因为您可以为每个术语使用诸如 node-term-YOUR-TERM-ID.tpl.php 之类的文件名。

      如果你想让它更有效地使用:

        if ($hook == 'node') {
             if (arg(0) == 'taxonomy') { 
              foreach ($vars['node']->taxonomy as $term) {
              $vars['template_files'][] = 'node-term-'. $term->tid;
             }
          }
        } //if bracket close
      

      【讨论】:

        猜你喜欢
        • 2015-10-23
        • 2015-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-01
        • 1970-01-01
        • 2020-06-27
        相关资源
        最近更新 更多