Как создать вложенное дерево с терминами и узлами с представлениями 3?
Мне нужно создать что-то похожее на это:
Цвета (словарь)
- Красный (термин)
- Темный (термин)
- Узел 1
- Узел 2
- Свет (термин)
- Узел 3
- Узел 4
- Темный (термин)
- Синий (термин)
- Узел 5
- Узел 6
- Зеленый (термин)
- Узел 7
- Узел 8
(Маркированные точки являются отступами.)
Является есть способ сделать это с помощью Drupal 7 и просмотров 3? Если нет, есть ли другой способ сделать это?
8 answers
Благодаря refino я нашел хорошее решение, используя следующие модули:
Ниже вы найдете объяснение:
- Сначала создайте новую таксономию (назовем ее "Папка")
- Затем создайте новый тип контента (назовем его "Элемент") с полем ссылки на термин в таксономии "Папка"
- Создайте новое представление "Содержимое" (назовем его "Представление элементов")
- Выберите поле Дисплей
- Добавьте контекстный фильтр в поле ссылки на термин
- Создайте новое представление "Таксономия" (назовем его "Дерево папок")
- Добавьте 2 поля (название термина и идентификатор термина). Второе поле может быть исключено из отображения
- В отношении: добавьте "родительский термин"
- Добавьте третье поле (идентификатор термина) и назначьте его своему родительскому отношению. Это поле может быть исключено из отображения
- Выберите формат "Дерево (модель смежности)" и выберите в параметрах: Упорядоченный список + Основной поле (ваш первый tid), Родительское поле (ваш tid, назначенный родительскому отношению). Теперь у вас должно быть красивое дерево со всеми вложенными терминами
- Добавьте 4-е поле "Глобальный: Представление" (оно поставляется с полем просмотра представлений) и выберите "Представление элемента", отобразите Мастер добавить [tid] в текстовом поле Аргументы
Надеюсь, это поможет
Приветствия
Редактирование Istryker: Вот что я получил. Единственное, что я изменил, это сделал Представление элементов табличным представлением и удалил классы по умолчанию (строки и полосы).
Я создал три представления в Drupal 7.8 и поле просмотров 3+, вложив одно представление в другое с помощью Include View, и получил такой результат (прилагается).
Пошаговое описание того, как это сделать:
Создайте словарь "Цвета" и заполните его тегами.
Создайте новое представление цветов узлов таксономии - я называю его "Узлы цветов"
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 сохранить
...и это должно быть, наконец-то.
Я сам не пробовал версию D6 или D7, но я подумал, что упомяну об этом, если это то, что вы ищете: Модуль дерева представлений - прогресс D7
Редактировать: Теперь есть версия D7, проверьте домашнюю страницу модуля Дерево представлений
Если вы хотите получить видео с 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" : "";
}
Конечно, есть:
- Настройте свой иерархический словарь,
- Добавьте его в любой выбранный тип контента,
-
Создайте представление со списком узлов из этого типа контента с помощью контекстного фильтра :
- либо "Содержимое: Имеет идентификатор термина таксономии" - если вы хотите перечислить только узлы, назначенные определенному термину,
-
Или "Содержимое: Имеет идентификатор термина таксономии (с глубиной)" - если вы хотите перечислить узлы, назначенные определенному термину, а также его дочернему элементу условия.
В этом случае в конфигурации фильтра вам нужно установить глубину - на сколько уровней ниже (или выше) вы хотите, чтобы этот фильтр работал.
Затем, предполагая, что URL-адрес вашего представления равен http://mysite.com/myview и "Красный" tid=1, если вы перейдете к http://mysite.com/myview/1 в нем будут перечислены все узлы, назначенные одному из терминов "красный", "темный" и/или "светлый".
Вы можете использовать модуль Меню таксономии . Вот цитата об этом (со страницы проекта модуля):
С легкостью преобразует ваши словари таксономии в меню!
Особенности:
- Пользовательское меню для каждого словаря
- Использует путь термина таксономии по умолчанию или пользовательские пути
- Интеграция с представлениями
- Интеграция с Pathauto: используйте псевдонимы URL/пути
- Не мешает работе других модулей меню
Я пытаюсь сделать то же самое, но не нашел многого доступного в D7. Блоки таксономии модуль делает это в виде блоков, а не представлений.
Я считаю, что нашел еще один способ решения этой проблемы, и я думаю, что он проще, чем остальные из этих решений. Он не включает никаких дополнительных модулей, и вам нужен только один вид.
Предполагая, что вы создали двухуровневый иерархический словарь (цвета) и тип контента со ссылкой на этот словарь, выполните следующие действия:
- Создайте новое представление и отфильтруйте его по "Словарю таксономии: Имя машины (=Цвета)"
- Добавить отношения: (1)
Taxonomy term: Content using Color
и (2)Taxonomy term: Parent term
- Добавьте поля в представление: (1)
Title
( выберитеfield_color
в разделе "Связь" и требуйте эту связь), (2)Taxonomy term name
( не используйте связь и исключайте из отображения) (3)Taxonomy term name
( да, снова, на этот раз выберитеParent
для отношения и исключите из отображения). - Теперь сгруппируйте его, нажав на Настройки формата: (1) группировка 1:
(Parent) Taxonomy term: Name
, (2)Taxonomy term: Name
Готово. Если у вас более двух уровней, просто добавьте еще одно отношение родителя, использующего родителя в качестве отношения отношений.
ИЗМЕНИТЬ: если вам не нужны отношения, вы окажетесь в дураках. Родители будут перечислены дважды, если у них есть дочерние термины, на которые ссылаются узлы. Таким образом, это немного ограничивает ответ в терминах верхнего уровня без узлов, которые ссылаются на него, не будут отображаться. Кроме того, поскольку сортировка, вероятно, важна, наличие любого контента, ссылающегося на термин верхнего уровня, потенциально может вызвать у вас проблемы в зависимости от потребностей отображения.