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


22

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

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

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

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


Чтобы уточнить - возможно, я неправильно понял ваш вопрос - вы хотите отобразить такую ​​структуру на одной странице?
Мацей Згадзай

Да, только на 1 странице
iStryker

Ответы:


15

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

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

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

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

ура

Редактировать iStryker : это то, что я получил. Единственное, что я изменил, - это сделал Element View табличным представлением и удалил классы по умолчанию (row & strip).

Изображение конечного продукта от iStryker


Отличная помощь из этого комментария. Небольшое замечание: вы можете захотеть переименовать поля (административные заголовки), потому что в выпадающих меню настроек VT оба поля «Term ID» будут неразличимы.
Артур

Этот ответ получил меня 90% там. Мне нужно было удалить классы по умолчанию для каждого поля; Удалить классы таблицы в представлении «Представление элемента»; Тема немного
iStryker

Я добавил шаг для уменьшения дубликатов в представлении «Содержимое». Кроме того, поле «Аргументы» в Global: View теперь помечено как «Контекстные фильтры», а токен для использования - «[! Tid]».
машины

Можно ли сделать это, но с органическими группами вместо таксономии?
IamOnStage

14

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

Шаг за шагом, как это сделать:

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

  2. Создайте новый вид узлов таксономии Цвета - я называю это «Узлы цветов»

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

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

2.3 Продвинутые отношения: термин таксономия: контент с использованием цвета

2.4 Поля набора: термин таксономии: идентификатор термина, термин таксономии: имя, (field_color) содержимое: название

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

2.6 Если вы хотите, вы также можете установить «Исключить из отображения» для Термин ID, Термин таксономии: Имя

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

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

3. Создайте новый вид узлов цветов таксономии - я называю это «Узлы цветов 2».

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

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

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

3.4. Поля набора: термин таксономии: идентификатор термина, термин таксономии: имя, (field_color) содержимое: название

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

3.6 Если вы хотите, вы также можете установить «Исключить из отображения» для Термин ID, Термин таксономии: Имя

3.7 Установить путь: / node-of-colors-2 /%

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

3.9 Сохранить

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

4.1 перейти к настройке поведения без результатов: Global: область просмотра

4.2 Установите View для вставки: View: node_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 Если вы хотите, вы также можете установить «Исключить из отображения» для Term ID и метку Включить представление

5.8 Задать путь: / colors-tree

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

5.10 сохранить

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


Можете ли вы уточнить "5.4 set fields ... view: include view" немного подробнее. Я не вижу возможности для этого нигде. Спасибо
Уве

Прошу прощения, что не написал, я использовал Views 7.x-3.0-rc1 + Поле
зрения

Спасибо. Я следовал некоторые инструкции по их очереди вопроса, а drupal.org/node/1171604
Uwe

Ух ты, этот ответ получил огромное одобрение за последние 7 дней. Кто-нибудь проверял это, или вы / они просто проголосовали, потому что @Refineo дал самый подробный ответ?
iStryker,

Я попробовал это прохождение снова, и не сработало. Я ненавидел всех вас, кто проголосовал за этот вопрос на прошлой неделе без тестирования
iStryker


3

Если вы хотите получить VID из 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" : "";
  }

2

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

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

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

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

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


Я не ищу ответа на конкретный термин. Я ищу представление для всего словаря
iStryker

И это именно то, что я описал.
Мацей Згадзай

2

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

Превратите ваши словари таксономии в меню с легкостью!

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

  • Пользовательское меню для словаря
  • Использует путь термина таксономии по умолчанию или пользовательские пути
  • Интеграция с представлениями
  • Интеграция с Pathauto: используйте псевдонимы URL / пути
  • Не мешает другим модулям меню

Добро пожаловать в Drupal SE! taxonomy_menu - это классный проект, и он может сделать это красиво. ОП хочет сделать это в представлениях, хотя.
АйешК


0

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

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

  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

Выполнено. Если у вас есть более двух уровней, просто добавьте еще одно Отношение Родителя, используя Родителя в качестве отношения.

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


Нет фильтра «Словарь таксономии: имя машины (= цвета)», пока не будет добавлено отношение. Я подозреваю, что первый шаг должен быть вторым. Также я не мог понять, как добавить поле Title при выборе field_color в «Relationship».
Диметрия
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.