Как создать вложенное дерево с терминами и узлами с представлениями 3?


Мне нужно создать что-то похожее на это:

Цвета (словарь)

  • Красный (термин)
    • Темный (термин)
      • Узел 1
      • Узел 2
    • Свет (термин)
      • Узел 3
      • Узел 4
  • Синий (термин)
    • Узел 5
    • Узел 6
  • Зеленый (термин)
    • Узел 7
    • Узел 8

(Маркированные точки являются отступами.)
Является есть способ сделать это с помощью Drupal 7 и просмотров 3? Если нет, есть ли другой способ сделать это?

Author: Pierre.Vriens, 2011-09-15

8 answers

Благодаря refino я нашел хорошее решение, используя следующие модули:

Ниже вы найдете объяснение:

  1. Сначала создайте новую таксономию (назовем ее "Папка")
  2. Затем создайте новый тип контента (назовем его "Элемент") с полем ссылки на термин в таксономии "Папка"
  3. Создайте новое представление "Содержимое" (назовем его "Представление элементов")
  4. Выберите поле Дисплей
  5. Добавьте контекстный фильтр в поле ссылки на термин
  6. Создайте новое представление "Таксономия" (назовем его "Дерево папок")
  7. Добавьте 2 поля (название термина и идентификатор термина). Второе поле может быть исключено из отображения
  8. В отношении: добавьте "родительский термин"
  9. Добавьте третье поле (идентификатор термина) и назначьте его своему родительскому отношению. Это поле может быть исключено из отображения
  10. Выберите формат "Дерево (модель смежности)" и выберите в параметрах: Упорядоченный список + Основной поле (ваш первый tid), Родительское поле (ваш tid, назначенный родительскому отношению). Теперь у вас должно быть красивое дерево со всеми вложенными терминами
  11. Добавьте 4-е поле "Глобальный: Представление" (оно поставляется с полем просмотра представлений) и выберите "Представление элемента", отобразите Мастер добавить [tid] в текстовом поле Аргументы

Надеюсь, это поможет

Приветствия

Редактирование Istryker: Вот что я получил. Единственное, что я изменил, это сделал Представление элементов табличным представлением и удалил классы по умолчанию (строки и полосы).

Image of the final product by iStryker

 15
Author: Fred, 2012-09-11 19:19:59

Я создал три представления в Drupal 7.8 и поле просмотров 3+, вложив одно представление в другое с помощью Include View, и получил такой результат (прилагается). enter image description here

Пошаговое описание того, как это сделать:

  1. Создайте словарь "Цвета" и заполните его тегами.

  2. Создайте новое представление цветов узлов таксономии - я называю его "Узлы цветов"

2.1 Формат таблицы, Настройки: Поле группировки: Термин таксономии: Название

2.2 Расширенный контекстуальный фильтры: Термин таксономии: Родительский термин

2.3 Расширенные отношения: Термин таксономии: Содержимое с использованием цвета

2.4 Набор полей: Термин таксономии: Идентификатор термина, термин таксономии: Имя, (цвет поля) Содержание: Заголовок

2.5 Критерии фильтрации: Термин таксономии: Словарь (=Цвета)

2.6 При желании вы также можете установить "Исключить из отображения" для идентификатора термина, термина таксономии: Имя

2.7 Задать путь:/узлы цветов/%

2.8 Поведение без результатов: Глобальное: Область просмотра (мы будем вернемся к этому позже) 2.9 сохранить

3. Создайте новое представление цветов узлов таксономии - я называю его "Узлы цветов 2"

3.1 Формат таблицы, Настройки: Поле группировки: отсутствует

3.2 Расширенные контекстные фильтры: Термин таксономии: Идентификатор термина

3.3 Расширенные отношения: Термин таксономии: Содержимое с использованием цвета

3.4 Набор полей: Термин таксономии: Идентификатор термина, термин таксономии: Имя, (цвет поля) Содержимое: Заголовок

3.5 Критерии фильтрации: Термин таксономии: Словарь (= Цвета)

3.6 При желании вы также можете установить "Исключить из отображения" для идентификатора термина, термина таксономии: Имя

3.7 Задать путь:/узлы цветов-2/%

3.8 Поведение без результатов: Глобальное: нет

3.9 Сохранить

Вернитесь назад и снова отредактируйте "Узлы цветов"

4.1 перейдите, чтобы Задать поведение без результатов: Глобальное: Область просмотра

4.2 Установите вид для вставки: Вид: nodes_of_colors2 Отображение: страница

4.3 установить наследование контекстных фильтров

4.4 сохранить

5 Вперед снова вернуться к представлениям (Введите термин)

5.1 Создайте новое представление цветов узлов таксономии - я называю его "Дерево цветов"

5.1 Формат таблицы, Настройки: Поле группировки: отсутствует

5.2 Расширенные контекстные фильтры: отсутствуют

5.3 Расширенные отношения: Термин таксономии: Родительский термин

5.4 Поля набора: Термин таксономии: Идентификатор термина, Термин таксономии: Идентификатор термина, термин таксономии: Имя, Представление: Включить представление (Включить представление)

5.5 Критерии фильтрации (1): Термин таксономии: Словарь (= Цвета)

5.6 Критерии фильтрации (2): (Родительский) Термин таксономии: Термин

5.7 При желании вы также можете установить "Исключить из отображения" для идентификатора термина и метки включения представления

5.8 Задать путь:/дерево цветов

5.9 Установить поведение без результатов: нет

5.10 сохранить

...и это должно быть, наконец-то.

 14
Author: Refineo, 2011-09-23 06:53:13

Я сам не пробовал версию D6 или D7, но я подумал, что упомяну об этом, если это то, что вы ищете: Модуль дерева представлений - прогресс D7

Редактировать: Теперь есть версия D7, проверьте домашнюю страницу модуля Дерево представлений

 4
Author: nmc, 2012-09-11 18:03:38

Если вы хотите получить видео с URL-адреса, используйте следующий код.

$vid = $_GET['vid'];
$tid = 0;
$level = 0;
print taxonomy_tree($vid, $tid, $level);
function taxonomy_tree($vid, $tid = 0, $level) {
  $children = taxonomy_get_children($tid, $vid);
  $output = '';
  if ($children) {
    $output .= '<ul>'; 
    foreach ($children as $child) {
      $level++;
      $output .= '<li class="taxonomy-tree-lvl' . $level . ' ">'; 
print $level;
      $output .= l($child->name, 'taxonomy/term/'. $child->tid) . '(' . taxonomy_term_count_nodes($child->tid) . ')'; 
      $output .= taxonomy_tree($vid, $child->tid, $level);
      $output .= '</li>';

      $level--; 
    }
    $output .= '</ul>'; 
  }

  return $output;

}

Или используйте следующий код.

$vocabulary = taxonomy_vocabulary_load(2);//Here pass the vid
print $vocabulary->name;
$vid1 = $_GET['vid'];
if(!$vid1) {
$vid1 = 2;
print 'empty';
}
$vid = 2;
$parent = 0;
print get_child_terms($parent, $vid1);
 function get_child_terms($parent, $vid) {
      $sql = "SELECT td.tid, td.vid, td.name"
         . "  FROM {term_data} td"
         . "  JOIN {term_hierarchy} th on th.tid = td.tid"
         . " WHERE th.parent = %d"
         . "   AND td.vid = %d"
         . " ORDER BY td.weight, td.name";
    $terms = db_query($sql, $parent, $vid);
    $output = "";
    while ($aterm = db_fetch_object($terms)) {
        $output .= "<li>";
        $output .= l("$aterm->name", "taxonomy/term/$aterm->tid/all") . " ("
                .  taxonomy_term_count_nodes($aterm->tid) . ")</li>\n"
                .  get_child_terms($aterm->tid, $vid);
    }
    return ($output != "") ? "<ul style='list-style-type: none;
  margin: 0px 0px 0px 20px;
  padding: 0px;'>\n". $output ."</ul>\n" : "";
  }
 3
Author: Ahmad, 2011-09-26 12:26:13

Конечно, есть:

  1. Настройте свой иерархический словарь,
  2. Добавьте его в любой выбранный тип контента,
  3. Создайте представление со списком узлов из этого типа контента с помощью контекстного фильтра :

    • либо "Содержимое: Имеет идентификатор термина таксономии" - если вы хотите перечислить только узлы, назначенные определенному термину,
    • Или "Содержимое: Имеет идентификатор термина таксономии (с глубиной)" - если вы хотите перечислить узлы, назначенные определенному термину, а также его дочернему элементу условия.

      В этом случае в конфигурации фильтра вам нужно установить глубину - на сколько уровней ниже (или выше) вы хотите, чтобы этот фильтр работал.

Затем, предполагая, что URL-адрес вашего представления равен http://mysite.com/myview и "Красный" tid=1, если вы перейдете к http://mysite.com/myview/1 в нем будут перечислены все узлы, назначенные одному из терминов "красный", "темный" и/или "светлый".

 2
Author: Maciej Zgadzaj, 2011-09-21 12:27:30

Вы можете использовать модуль Меню таксономии . Вот цитата об этом (со страницы проекта модуля):

С легкостью преобразует ваши словари таксономии в меню!

Особенности:

  • Пользовательское меню для каждого словаря
  • Использует путь термина таксономии по умолчанию или пользовательские пути
  • Интеграция с представлениями
  • Интеграция с Pathauto: используйте псевдонимы URL/пути
  • Не мешает работе других модулей меню
 2
Author: dilari, 2020-06-15 09:13:00

Я пытаюсь сделать то же самое, но не нашел многого доступного в D7. Блоки таксономии модуль делает это в виде блоков, а не представлений.

 0
Author: uwe, 2011-09-22 16:58:22

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

Предполагая, что вы создали двухуровневый иерархический словарь (цвета) и тип контента со ссылкой на этот словарь, выполните следующие действия:

  1. Создайте новое представление и отфильтруйте его по "Словарю таксономии: Имя машины (=Цвета)"
  2. Добавить отношения: (1) Taxonomy term: Content using Color и (2) Taxonomy term: Parent term
  3. Добавьте поля в представление: (1) Title ( выберите field_color в разделе "Связь" и требуйте эту связь), (2) Taxonomy term name ( не используйте связь и исключайте из отображения) (3) Taxonomy term name ( да, снова, на этот раз выберите Parent для отношения и исключите из отображения).
  4. Теперь сгруппируйте его, нажав на Настройки формата: (1) группировка 1: (Parent) Taxonomy term: Name, (2) Taxonomy term: Name

Готово. Если у вас более двух уровней, просто добавьте еще одно отношение родителя, использующего родителя в качестве отношения отношений.

ИЗМЕНИТЬ: если вам не нужны отношения, вы окажетесь в дураках. Родители будут перечислены дважды, если у них есть дочерние термины, на которые ссылаются узлы. Таким образом, это немного ограничивает ответ в терминах верхнего уровня без узлов, которые ссылаются на него, не будут отображаться. Кроме того, поскольку сортировка, вероятно, важна, наличие любого контента, ссылающегося на термин верхнего уровня, потенциально может вызвать у вас проблемы в зависимости от потребностей отображения.

 0
Author: cdmo, 2017-05-26 17:21:54