Блок Таксономии Drupal, Перечисление Словаря - PullRequest
2 голосов
/ 27 сентября 2010

Я искал лучший способ реализовать блок, в котором перечислены все термины определенного словаря. Каждый термин должен ссылаться на страницу со списком всех узлов, связанных с этим термином. Любая помощь будет принята с благодарностью. Спасибо!

Ответы [ 3 ]

3 голосов
/ 27 сентября 2010

См. Здесь отличный учебник для достижения именно того, что вы хотите

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

1 голос
/ 27 сентября 2010

(Публикация этого как другого ответа, поскольку этот подход отличается от моего первого ответа.)

Как я уже упоминал выше, здесь есть еще один подход, включающий пользовательский модуль, основанный на коде http://drupal.org/node/247472.. Вы также можете просто перетащить этот код в пользовательский блок с выбранным форматом ввода «PHP», но это обычно считается быть плохой практикой.

Добавить новую папку в sites / all / modules с именем vocabulary_block . Настройте и добавьте следующие два файла:

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; на отражать идентификатор словаря, который Вы хотели бы загрузить. Вы можете найти VID, посетив админ / контент / таксономия и глядя на пункт назначения редактирования словарь ссылка для вашего запас слов. VID будет последним фрагмент этого URL: админ / содержание / таксономия / редактировать / словарь / [VID] .

    Я бы не стал жестко кодировать $ VID в самом модуле. Тем не мение, настройка необходимого Drupal переменная и административная форма (для разрешить пользователям выбирать словарь из интерфейса Drupal) будет перегиб для этого ответа.

  • Для ваших собственных целей документации, не забудьте найти / заменить [словарный запас] в этих двух файлах и используйте название своего собственного словаря вместо этого.

  • Этот метод не обязательно может быть более производительным чем метод Views, который я описал раньше, особенно когда вы начнете рассматривать кеширование, оптимизация и т. д. Поскольку производительность является приоритетом, Я рекомендую тщательно протестировать Разнообразие различных методов на этой странице и выбрать тот, который быстрее для вас.

1 голос
/ 27 сентября 2010

Самый простой способ достичь этого, вероятно, состоит в том, чтобы использовать Представления и просто создать новое представление типа "термин".Вот краткий пример, который предполагает, что вы немного знакомы с пользовательским интерфейсом Views:

  1. Посетите Views> Add (build / views / add), дайте вашему новому представлению имя и выберите Термин из переключателей «Вид».
  2. На следующей странице начните с добавления фильтра Таксономия: Словарь и выбора своего словаря в настройках фильтра.
  3. Добавьте поле Таксономия: Термин и включите параметр Свяжите это поле с его страницей термина таксономии в настройках поля.Возможно, вы также захотите удалить метку поля, поскольку это простой список.
  4. Возможно, вы хотите, чтобы на вашем дисплее отображалось всех терминов в вашем словаре, поэтому измените «Элементы для отображения»." 0 (неограниченно) .По умолчанию в новых представлениях одновременно отображается только 10 элементов.
  5. Ознакомьтесь с приведенным ниже Предварительным просмотром , чтобы узнать, выводит ли он то, что вам нужно.
  6. Добавить новый Блок отображается с использованием раскрывающегося списка в левой части пользовательского интерфейса Views.
  7. Дайте вашему новому блоку имя в области «Настройки блока».Это описание, которое появится на странице администрирования блока Drupal.
  8. Сохраните ваш вид и зайдите в admin / build / block, чтобы разместить и настроить ваш блок.

Стоит отметить, что Viewsдействительно имеет некоторые накладные расходы, но по моему опыту, его гибкость и простота использования намного перевешивают относительно незначительный удар по производительности.

Если вы хотите избежать использования Views, вы можете написать довольно простой пользовательскиймодуль с использованием hook_block () и адаптацией http://drupal.org/node/247472. Если вы хотите, я могу отредактировать этот ответ с помощью примера модуля на его основе.

...