Чистый способ построения простого таксономического браузера произвольной глубины

Я потратил дни, пытаясь определить чистый способ сделать следующее:

  1. Отобразить список всех терминов верхнего уровня в словаре с ссылками на их дочерние термины
  2. После нажатия ссылки перейдите к списку дочерних элементов тех .
  3. Объявление бесконечно до самого низкого уровня, для которого будет отображаться список узлов, помеченных этим термином.

Кажется, что это была бы довольно часто требуемая функциональность, но я не могу найти решение, которое может обрабатывать произвольную глубину, особенно если не все деревья семян опускаются до одной и той же глубины.

Идеальное решение было бы тем, которое использует Views 3, Contexts, EntityFieldQueries или что-то еще, что хорошо поддерживается в Drupal 7.

Я могу сделать почти именно то, что я хочу, создав простой вид с тремя узлами: терминальными отношениями (термин, родительский термин и родительский родительский термин) и пользовательские для последовательных контекстных фильтров , Единственная проблема с этим заключается в том, что если есть узел с термом pathth слишком маленькой глубины, он становится указанным как «не классифицированный» и генерирует мертвую ссылку. Вместо того, чтобы делать это, мне хотелось бы, чтобы он ссылался на следующий доступный детский термин.

24 голоса | спросил beth 6 J000000Friday12 2012, 17:49:04

4 ответа


24

Я понял способ сделать это только с модулем Views. Это не идеально - это не создает приятный URL-адрес и сводку с таксономической линией, как это могло бы сделать мое решение для таксономии одной глубины.

Браузер статической глубины

Для таксономии статической глубины (где все члены имеют одинаковую глубину дочерних терминов), вы должны сделать следующее:

  1. Создайте представление узлов
  2. Добавить связь с термином таксономии (термин)
  3. Добавить связь с термином termonomy parent, доступным через Term (родительский)
  4. Добавить связь с термином таксономии parent, доступным через родителя (родительский родитель)
  5. Повторите шаг 4 столько раз, сколько необходимо для глубины вашей таксономии.
  6. Добавьте контекстные фильтры для каждого из них и убедитесь, что они находятся в правильном порядке. Установите для отображения сводки, когда фильтр не находится в URL.
  7. Вероятно, вы захотите переопределить палитру и заголовок для каждого фильтра.
  8. ??? литий>
  9. PROFIT

Браузер с переменной глубиной

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

  1. Добавьте новый термин верхнего уровня (Foo) в свой словарный запас и поставьте под него все остальные термины.
  2. Создайте представление терминов на странице с именами терминов
  3. Добавить контекстный фильтр: термин таксономии: родительский термин
  4. Если значение по умолчанию отсутствует в URL-адресе, укажите значение по умолчанию
  5. Установите значение по умолчанию для имени вашего верхнего уровня (Foo)
  6. Укажите критерии проверки
    • Валидатор: термин таксономии
    • Критерии: ваше имя словарного запаса
    • Тип значения фильтра: имя термина преобразуется в идентификатор термина
  7. Нажмите кнопку «+ Добавить» в верхней части панели «Виды», чтобы добавить вложение в представление.
  8. Добавить в это приложение только (переопределить) Отношения: Таксономический термин: Содержание с термином
  9. Добавить в это приложение только (переопределить) отображение: поля: названия узлов, связанные с узлами, и удалить (из этого вложения только!) display: fields: term name
  10. Добавить в это приложение только (переопределить) контекстный фильтр: таксономический термин: имя
  11. Если значение фильтра недоступно, укажите значение по умолчанию: Исходное значение из URL: компонент Path: 2 (или больше, если ваш путь к странице имеет> 1 компонент)
  12. Настройки вложения: Прикрепить к: [имя отображаемого вами отображения страницы]
  13. ??? литий>
  14. PROFIT

Скриншоты пользовательского интерфейса Views 'для справки: введите описание изображения здесь>> </p></body></html>

ответил beth 10 J000000Tuesday12 2012, 17:25:03
8
  1. Создать вид типа Таксономия
  2. Добавить контекстный фильтр типа Таксономический термин: Родительский термин
  3. Установите Укажите значение по умолчанию и сохраните его как фиксированное. введите идентификатор термина верхнего родительского термина
  4. Добавить Идентификатор терминов таксономии как поле и исключить его из дисплея
  5. Добавить Имя терминов таксономии нажмите на это поле как ссылку; дайте ссылку как «path-you-set-in-view /[tid]»
    Примечание. . Вы должны снять флажок «Связать это поле со своей страницей терминов таксономии»

Когда вы посещаете страницу просмотра, вы увидите детей верхнего родителя; в соответствии с примером, который вы получите:

  • term1
  • term2

Когда вы нажмете на term1, вы получите детей. Пока вы не достигнете срока1.1.1. Вы не получите никакого результата, если вы нажмете на term1.1.1. Для этого нам нужно создать еще один блок просмотра в приведенном выше представлении.

  1. Добавить блок
  2. Удалить существующий контекстный фильтр и поле
    Примечание. . Когда вы удаляете их, убедитесь, что вы выбрали This Page (Over Ride) из раскрывающегося списка вверху рядом с Для других полей также исчезнут поля и контекстные фильтры, созданные на странице.
  3. Добавить новый контекстный фильтр Термин таксономии: идентификатор срока
  4. Добавить связь Термин таксономии: содержание с термином
  5. Добавьте Заголовок контента , и вы используете связь из раскрывающегося списка вверху.
  6. Сохраните представление и вернитесь к странице, которую мы создаем (это важно, так как вы не сможете выполнить следующий шаг
  7. Добавьте поле в НОЖНИК ИЛИ HEADER
  8. Выберите «Global: View area» из списка и выберите блок, который мы создали, из раскрывающегося списка Вид для вставки , пока вы там проверяете Наследовать контекстные фильтры , чтобы мы также можем передать значение из этого представления в блок
  9. Проверьте Отобразить, даже если представление не имеет результата , так что, когда это представление не покажет результат, блок все равно будет отображаться

Сохраните представление, и все готово.

ответил Mohammed Shameem 22 Jpm1000000pmTue, 22 Jan 2013 21:12:38 +040013 2013, 21:12:38
3

Я думаю, что вы хотите Дерево представлений , модуль Contrib, который использует Виды для построения дерева терминов таксономии.

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

По-видимому, этот модуль имеет проблему , не позволяя ему работать с терминами таксономии. Boo.

Тем не менее, я нашел следующий код, который, кажется, делает то, что вы хотите (вы можете заставить его отображать /скрывать элементы через некоторый довольно рудиментарный код 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";

Через " Вложенные списки категорий со ссылками на страницы ".

ответил aendrew 6 J000000Friday12 2012, 18:12:24
0

Если вы просто хотите иметь набор страниц динамической таксономии, то я бы пошел следующим образом, требуя 3 вида + « Отображение таксономии », который позволяет использовать« Представления »для отображения содержимого страниц taxonomy/term/%:

  1. Условия верхнего уровня - список терминов, родительский элемент которых имеет значение null
  2. Условия среднего уровня - список терминов, родительский элемент которых НЕ равен нулю. Нет результата: отображение Просмотр # 3
  3. Узлы с условиями - список узлов с тегами терминов.

Поскольку представления 1 и 2, вероятно, будут тематически подобным образом, вы можете подумать о слиянии их как дисплеев в один вид - это было бы легче управлять.

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

Конечно, это «псевдокод». Вы хотите настроить проверки и фильтры и красивые, логически выглядящие шаблоны pathauto, чтобы отразить структуру.

ответил Artur 22 Jpm1000000pmTue, 22 Jan 2013 21:36:39 +040013 2013, 21:36:39

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

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

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