Чистий спосіб побудови простого браузера таксономії довільної глибини


23

Я витратив дні, намагаючись визначити чистий спосіб зробити наступне:

  1. Відобразить список усіх термінів вищого рівня у словниковому запасі із посиланнями на їх дочірні терміни
  2. Натиснувши на посилання, перейдіть до списку дітей цих термінів.
  3. Ad infinitum до терміну найнижчого рівня, для якого буде показаний список вузлів, позначених цим терміном.

Здається, це було б досить необхідною функціональністю, але я не можу знайти жодного рішення, яке б обробляло довільну глибину, особливо якщо не всі термінові дерева спускаються на одну глибину.

Ідеальним рішенням буде рішення, яке використовує Views 3, Contexts, EntityFieldQueries або все інше, що добре підтримується в Drupal 7.

Я в змозі зробити майже саме те, що хочу, склавши простий перегляд з трьома вузлами: термінові відносини (термін, батьківський термін та батьківський батько терміна) та користувацькі для послідовних контекстних фільтрів. Єдина проблема з цим полягає в тому, що якщо є вузол з терматом занадто малої глибини, він потрапляє до списку як "без категорії" і генерує мертве посилання. Замість того, щоб робити це, я хотів би, щоб він посилався на наступний доступний термін дитини.

Відповіді:


23

Я придумав спосіб зробити це лише за допомогою модуля Views. Це не ідеально - це не генерує приємну URL-адресу та сукупність із таксономічною лінією так, як моє рішення для таксономії однієї глибини.

Статичний глибинний браузер

Для систематики статичної глибини (де всі терміни мають однакову глибину дочірніх термінів), ви зробите наступне:

  1. Створіть вигляд вузлів
  2. Додати відношення до терміна таксономія (Термін)
  3. Додати відношення до батьківського терміна таксономії, доступний через Term (Parent)
  4. Додайте відношення до батьківського терміна таксономії, доступний через Parent (Parent Parent)
  5. Повторіть крок 4 стільки разів, скільки потрібно для глибини вашої таксономії.
  6. Додайте контекстні фільтри для кожного та переконайтесь, що вони в належному порядку. Встановити, щоб відобразити зведення, коли фільтр не знаходиться в URL.
  7. Ви, ймовірно, захочете замінити сухарі та назву кожного фільтра.
  8. ???
  9. ПРИБУТ

Браузер із змінною глибиною

Для систематики різної глибини (де деякі термінові дерева мають більш глибокий рівень гніздування, ніж інші), це трохи складніше:

  1. Додайте до свого словника новий термін вищого рівня (Foo) і покладіть під нього всі інші терміни.
  2. Створити уявлення про вираженні зі сторінкою , яка відображає термін імена
  3. Додати контекстний фільтр: Термін Таксономія: Батьківський термін
  4. Якщо встановлено значення за замовчуванням не в URL, забезпечує за замовчуванням значення
  5. Установка значення за замовчуванням для вашого терміну імені верхнього рівня (Foo)
  6. Вкажіть критерії перевірки
    • Валідатор: термін таксономії
    • Критерії: назва вашого словника
    • Тип значення фільтра: ім'я терміна, перетворене в ідентифікатор терміна
  7. Натисніть кнопку «+ Додати» у верхній частині панелі Views, щоб додати вкладення в поданні.
  8. Додайте до цього прихильності тільки (корекція) Сімейний стан: в області таксономії термін: Вміст з терміном
  9. Додайте до цього вкладеного відображення (переопределення): поля: заголовки вузлів, пов’язаних із вузлами, та видаліть (лише з цього вкладеного файлу!) Відображення: поля: назва терміна
  10. Додайте до цього прихильності тільки (корекція) контекстна фільтра: таксономії термін: Ім'я
  11. Коли значення фільтра не доступний, забезпечити замовчуванням значення: значення Raw з URL: компонент Path: 2 (або більше, якщо ваш шлях сторінка> 1 компонент)
  12. Налаштування Додатки: прикріпіть до: [назвою сторінки дисплея, який ви тільки що зробили]
  13. ???
  14. ПРИБУТ

Скріншоти інтерфейсу інтерфейсів перегляду: введіть тут опис зображення


Чудово зроблено! Оголошення як питання, так і вашої відповіді - це здається досить поширеною справою, і ваше рішення краще, ніж усе, що я знайшов, спочатку намагаючись відповісти.
aendrew

8
  1. Створити уявлення про тип області таксономії
  2. Додайте контекстний фільтр типу терміна Таксономія: Батьківський термін
  3. Установіть Надати значення за замовчуванням та збережіть його як фіксований. вкажіть ідентифікатор строку верхнього батьківського терміну
  4. Додайте ідентифікатор терміна Таксономія як поле та виключіть його з відображення
  5. Додати таксономії термін Ім'я шпалери з покласти це поле в якості сполучної ланки; надати посилання як "path-you-set-in-view / [tid]"
    Примітка. Потрібно зняти прапорець "Зв’язати це поле зі своєю сторінкою терміна таксономії"

Під час відвідування сторінки перегляду ви побачите дітей головного батька; відповідно до, наприклад, ви отримали б:

  • термін1
  • термін2

Якщо натиснути на термін1, ви отримаєте дітей. До тих пір поки ви не досягнете term1.1.1. Ви не отримаєте жодного результату, якщо ще не натиснете на термін1.1.1. Для цього нам потрібно створити ще один блок перегляду у наведеному вище поданні.

  1. Додати блок
  2. Видаліть існуючий контекстний фільтр і поле
    Примітка. Коли ви видаляєте їх, переконайтесь, що ви виберіть цю сторінку (Over Ride) зі спадного меню вгорі поруч із пунктом " Для інших мудреців" поля та контекстні фільтри, створені на сторінці, також не зникнуть .
  3. Додати новий контекстний фільтр термін Таксономія: Ідентифікатор терміна
  4. Додавання відносини таксономії термін: Вміст з терміном
  5. Додайте контент Тема і використовувати відносини в списку у верхній частині.
  6. Збережіть подання і поверніться до створеної нами сторінки (Це важливо, якщо ви не змогли виконати наступний крок
  7. Додавання поля в нижньому колонтитулі АБО ЗАГОЛОВОК
  8. Виберіть у списку "Глобальне: область перегляду" та виберіть блок, який ми створили зі спадного списку " Вставити", щоб вставити, поки ви там, перевірте спадкові контекстні фільтри, щоб ми могли передати значення з цього виду також блоку.
  9. Перевірка монітора , навіть якщо вид не має ніякого результату , так що , коли ця точка зору не показує результат блок все одно буде показано

Зберегти точку зору, і ви зробили.


Я дотримувався чіткого пояснення Мухаммеда Шамема. Дякую, працює чудово !!
Стівен

3

Я думаю , що Ви бажаєте , є Перегляди дерева , модуль вно , яке використовує перегляди побудувати дерево термінів таксономії.

(Дайте мені секунду, і я напишу коротке запитання щодо її використання, щоб переглянути податкові поля)

По- видимому , що модуль має проблему , запобігаючи його від роботи з точки зору таксономії. Бу

Однак, я знайшов наступний код, який, здається, робить те, що ви хочете (ви можете змусити його відображати / приховувати елементи за допомогою досить гарного рудиментарного коду jQuery):

<?php

// The ID of the taxonomy vocabulary for which you'd like to create a nested list
$vid = 10;

$depth = 0;
$num_at_depth = 0;
$tree = taxonomy_get_tree($vid);

print "<ul class=\"menu\">\n<li>";
foreach ($tree as $term) {
  $diffdepth = 0;
  if ($term->depth > $depth) {
    print "\n<ul>\n<li>";
    $depth = $term->depth;
    $num_at_depth = 0;
  }
  if ($term->depth < $depth) {
    $diffdepth = $depth - $term->depth;
    while ($diffdepth > 0) {
      print "</li>\n</ul>\n";
      $diffdepth--;
    }
    $depth = $term->depth;
  }
  if (($term->depth == $depth) && ($num_at_depth > 0)) {
    print "</li>\n<li>";
  }
  print l($term->name, 'taxonomy/term/' . $term->tid);
  $num_at_depth++;
}
print "</li>\n</ul>\n";

Через " Вкладені списки категорій із посиланнями на сторінки ".


Я ввімкнув цей модуль і спробував експериментувати з ним, і у мене є дві проблеми: 1. Я підозрюю, що він просто дає вам плоский список, а не багатосторінковий досвід перегляду і 2. Я не можу його працювати. Як допомогти було б найбільш корисно.
beth

Оновлена ​​відповідь. Вибачення, мабуть, у Дерева відкритих питань щодо використання термінів таксономії. Альтернативна відповідь розміщена.
aendrew

Це, мабуть, надає простий вкладений список, а не послідовно заповнений браузер.
beth

@beth - Було б достатньо, якщо я натиснув який-небудь jQuery, який показує / приховує елементи цього списку, коли клацають предмети батьків / дітей?
aendrew

Я не хочу, щоб це залежало від JavaScript.
beth

0

Якщо ви просто хочете мати набір сторінок динамічної систематики перегляду, я б пішов наступним способом, вимагаючи 3 модуля перегляду + таксономічний дисплей, який дозволяє використовувати представлення для відображення вмісту taxonomy/term/%сторінок:

  1. Умови верхнього рівня - перелічіть терміни, батько яких є нульовим
  2. Умови середнього рівня - перелічіть умови, батько яких НЕ є нульовим. Немає результату: відображення перегляду №3
  3. Вузли з Умови - список вузлів з міткою умовах.

Оскільки перегляди 1 і 2, ймовірно, будуть тематизовані аналогічним чином, ви можете розглянути об'єднання їх як дисплеї в один перегляд - це було б легше керувати.

Я успішно використовував такий підхід для своєї таксономії. На щастя, це було однорідним на кожному рівні - дана гілка закінчувалася або листям (вузлами), або гілками (термінами), але не обома. Якщо це буде обмеженням, спершу протестуйте його.

Звичайно, це "псевдокод". Ви хочете встановити валідації та фільтри, а також приємні, логічно виглядаючі патаутові візерунки для відображення структури.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.