Як створити вкладене дерево з термінами та вузлами за допомогою Views 3?


22

Мені потрібно створити щось подібне:

Кольори (лексика)

  • Червоний (термін)
    • Темний (термін)
      • Вузол 1
      • Вузол 2
    • Світло (термін)
      • Вузол 3
      • Вузол 4
  • Синій (термін)
    • Вузол 5
    • Вузол 6
  • Зелений (термін)
    • Вузол 7
    • Вузол 8

(Пункти з куль - це відступи).
Чи є спосіб зробити це за допомогою Drupal 7 та переглядів 3? Якщо ні, чи є інший спосіб зробити це?


Для уточнення - як, можливо, я неправильно зрозумів ваше запитання - ви хочете відобразити таку структуру на одній сторінці?
Maciej Zgadzaj

Так, лише на 1 сторінці
iStryker

Відповіді:


15

Завдяки refino, я знайшов приємне рішення за допомогою наступних модулів:

Нижче ви знайдете пояснення:

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

Сподіваюся, що це допоможе

Ура

Редагувати iStryker : Це те, що я отримав. Єдине, що я змінив - це зробити елемент Element View таблицю та видалити типові класи (рядок і смуги).

Зображення кінцевого продукту від iStryker


Чудова допомога від цього коментаря. Лише незначне зауваження: ви можете перейменувати поля (адміністративні назви), оскільки в спадному меню налаштувань VT обидва поля "Ідентифікатор терміна" будуть не відрізнятими.
Артур

Ця відповідь отримала мене там на 90%. Мені потрібно було видалити класи за замовчуванням у кожному полі; Видалити класи таблиць у вікні «Перегляд елементів»; Тема трохи
iStryker

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

Чи можливо це зробити, але не з органічними групами замість таксономії?
IamOnStage

14

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

Крок за кроком, як це зробити:

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

  2. Створіть новий вигляд вузлів таксономії Colors - я називаю це "Nodes of Colors"

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 Встановити шлях: / вузли кольорів-2 /%

3.8 Не встановлюйте результатів поведінки: глобально: немає

3.9 Зберегти

Поверніться та відредагуйте "Вузли кольорів" ще раз

4.1 перейдіть до пункту Встановити відсутність результатів: Глобальний: область перегляду

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

4.3 встановити контекстні фільтри Inherit

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 зберегти

... і це повинно бути, нарешті.


Ви можете уточнити "5.4 заданих полів ... перегляд: включити перегляд" трохи більше. Я ніде не бачу варіанту для цього. Дякую
uwe

Вибачте, що не написав, що використовував Перегляди 7.x-3.0-rc1 + Поле переглядів 7.x-1.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

І саме це я описав.
Maciej Zgadzaj

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

Зроблено. Якщо у вас більше двох рівнів, просто додайте ще одне відношення батьків, використовуючи батьків як стосунки.

РЕДАКТУВАТИ: якщо вам не потрібні стосунки, ви закінчитеся з дурпами. Батьки будуть перераховані двічі, якщо у них є дочірні терміни, на які посилаються вузли. Таким чином, це трохи обмежує відповідь у тих термінах верхнього рівня без вузлів, на які вона посилається, не відображатиметься. Крім того, оскільки сортування, ймовірно, важливо, наявність будь-якого вмісту, що посилається на термін верхнього рівня, потенційно може спричинити проблеми для вас залежно від потреб у екрані.


Немає фільтра "Лексика таксономії: Назва машини (= Кольори)", поки не додається співвідношення. Я підозрюю, що перший крок - це другий. Також я не міг зрозуміти, як додати заголовок поля при виборі field_color у "Відносини".
Діметрія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.