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

Мне нужно создать нечто подобное:

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

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

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

22 голоса | спросил iStryker 15 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 15 Sep 2011 09:18:46 +0400 2011, 09:18:46

8 ответов


15

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

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

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

Надеемся на эту помощь

Приветствия

Изменить iStryker . Это то, что я получил. Единственное, что я изменил, это сделать Element View табличное представление и удалить классы по умолчанию (строка и группа).

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

ответил Fred 7 WedEurope/Moscow2011-12-07T14:24:12+04:00Europe/Moscow12bEurope/MoscowWed, 07 Dec 2011 14:24:12 +0400 2011, 14:24:12
14

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

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

<ol>
<li> <p> Создайте словарь «Цвета» и заполните его тегами. </p> </li>
<li> <p> Создать новый вид узлов таксономии. Цвета - я называю это «Узлы
Цвета

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

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

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

2.4. Установить поля: таксономический термин: термин ID, таксономический термин: имя,     (field_color) Содержание: Заголовок

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

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

2.7 Set Path: /nodes-of-colors /%

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

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

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

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

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

3.4 Задать поля: таксономический термин: идентификатор срока действия, термин таксономия: имя, (поле_цвет) Содержание: заголовок

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

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

3.7 Set Path: /nodes-of-colors-2 /%

3.8 Не устанавливайте поведение результатов: Global: none

3.9 Сохранить

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

4.1 перейдите в «Установить поведение результатов»: Глобальный: область просмотра

4.2 Установить вид для вставки: Вид: nodes_of_colors2 Дисплей: страница

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

4.4 сохранить

5 Вернитесь к просмотрам еще раз (Type Term)

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

5.1 Таблица формата, настройки: поле группировки: none

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

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

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

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

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

5.7 Если вы хотите, вы также можете установить «Исключить из отображения» для идентификатора срока и метку «Включить просмотр»

5.8 Set Path: /colors-tree

5.9 Не устанавливайте поведение результатов: none

5.10 сохранить

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

ответил Refineo 21 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 21 Sep 2011 19:15:45 +0400 2011, 19:15:45
4

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

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

ответил nmc 15 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 15 Sep 2011 17:10:53 +0400 2011, 17:10:53
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" : "";
  }
ответил Ahmad 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 26 Sep 2011 16:26:13 +0400 2011, 16:26:13
2

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

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

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

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

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

ответил Maciej Zgadzaj 21 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 21 Sep 2011 16:27:30 +0400 2011, 16:27:30
2

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

  

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

     

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

     
  • Пользовательское меню на словарный запас
  •   
  • Использует путь терминов таксономии по умолчанию или настраиваемые пути
  •   
  • Интеграция с представлениями
  •   
  • Интеграция с Pathauto: использование псевдонимов URL /пути
  •   
  • Не мешает другим модулям меню
  •   
ответил dilari 21 MaramWed, 21 Mar 2012 01:23:50 +04002012-03-21T01:23:50+04:0001 2012, 01:23:50
0

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

ответил MotoTribe 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 18 Sep 2011 08:20:03 +0400 2011, 08:20:03
0

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

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

  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

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

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

ответил cdmo 26 Maypm17 2017, 19:19:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132