Drupal Taxonomy Block,词汇表

时间:2010-09-27 16:59:25

标签: drupal drupal-6 taxonomy

我正在寻找实现一个列出某个词汇表所有术语的块的最佳方法。每个术语都应链接到列出与该术语关联的所有节点的页面。任何帮助将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:3)

请参阅此处获取精彩教程以实现您想要的内容

http://chrisshattuck.com/blog/how-add-block-menu-tags-or-other-taxonomy-terms-drupal-site

答案 1 :(得分:1)

解决此问题的最简单方法可能是使用Views,只需创建“term”类型的新视图即可。这是一个快速示例,假设您对Views UI有一些基本的了解:

  1. 访问视图>添加(构建/视图/添加),为新视图命名,然后从“视图类型”单选按钮中选择术语
  2. 在下一页上,首先添加 Taxonomy:Vocabulary 过滤器,然后在过滤器设置中选择词汇表。
  3. 添加分类:术语字段,并在字段设置中启用将此字段链接到其分类术语页面选项。您可能还想删除该字段的标签,因为这只是一个简单的列表。
  4. 您可能希望显示器在词汇表中显示所有条款,因此请更改“要显示的项目” 0(无限制)。默认情况下,新视图一次只显示10个项目。
  5. 查看下方的实时预览,看看它是否正在输出您需要的内容。
  6. 使用视图用户界面左侧的下拉列表添加新的阻止显示。
  7. 在“阻止设置”区域中为新块命名。这是将出现在Drupal的块管理页面上的描述。
  8. 保存您的视图并访问admin / build / block以放置和配置您的块。
  9. 值得注意的是,Views确实有一些开销,但根据我的经验,它的灵活性和易用性远远超过相对较小的性能影响。

    如果您想避免使用Views,可以使用hook_block()编写一个非常简单的自定义模块并调整http://drupal.org/node/247472。如果您愿意,我可以使用基于此的示例模块编辑此答案。

答案 2 :(得分:1)

(将此作为另一个答案,因为这是与我的第一个答案不同的方法。)

正如我上面提到的,这是另一种涉及基于http://drupal.org/node/247472代码的自定义模块的方法。您也可以将该代码放入选择了“PHP”输入格式的自定义块中,但这通常被认为是不好的做法。

在名为 vocabulary_block 的sites / all / modules中添加一个新文件夹。自定义并添加以下两个文件:

<强> vocabulary_block.module

<?php
/**
 * @file
 * Exposes a block with a simple list of terms from [vocabulary]. 
 * Each term is linked to its respective term page.
 */

/**
* Lists terms for a specific vocabulary without descriptions.
* Each term links to the corresponding /taxonomy/term/tid listing page.
*/
function vocabulary_block_get_terms($vid) {
  $items = array();

  $terms = taxonomy_get_tree($vid,  0, -1, 1);
  foreach($terms as $term) {
    $items[]= l($term->name, "taxonomy/term/$term->tid");
  }
  if(count($items)) {
    return theme('item_list', $items);
  }
}

/**
 * Implementation of hook_block().
 */
function vocabulary_block_block($op = 'list', $delta = 0, $edit = array()) {
  switch ($op) {

    case 'list':
      $blocks[0]['info'] = t('List of [vocabulary] terms');
      return $blocks;

    case 'view':
      if ($delta == 0) {
        $vid = 43;
        $block['subject'] = t('[Vocabulary]');
        $block['content'] = vocabulary_block_get_terms($vid);
      }

      return $block;
  }    
}

<强> vocabulary_block.info

name = Vocabulary Block
description = Exposes a block with a simple list of terms from [vocabulary]. Each term is linked to its respective term page.

; Core version (required)
core = 6.x

; Package name (see http://drupal.org/node/101009 for a list of names)
package = Taxonomy

; Module dependencies
dependencies[] = taxonomy

备注

  • 务必将$vid = 43;更改为 反映词汇的ID 你想加载。你可以找到 通过访问VID 管理员/内容/分类和看 编辑的目的地 你的词汇链接 词汇。 VID将是最后一个 该网址的片段: 管理/内容/分类/编辑/词汇/的 [VID]

    我通常不会硬编码 $ vid进入模块本身。然而, 设置必要的Drupal 变量和管理形式(到 允许用户选择词汇表 从Drupal接口)将是 这个答案有点过头了。

  • 出于自己的文档目的, 不要忘记搜索/替换 [词汇]在这两个文件中 使用你自己的词汇名称 代替。

  • 此方法可能不一定更高效 比我描述的Views方法 更早,特别是一旦你开始考虑缓存, 优化等 由于表现是一个优先事项, 我建议彻底测试一下 本页面上有各种不同的方法 选择哪一个对你来说最快。