Практическое применение таксономии для сайта по фильмам (и не только)

Главные вкладки

Аватар пользователя Serg_M Serg_M 6 ноября 2009 в 12:24

Долгое время обходил стороной таксономию. Пока не начала душить жаба. Как так, у конкурентов при клике на актера выдается список его фильмов, а у меня статичный текст. Засел за изучение. Вроде ничего страшного - это всего лишь метки позволяющие упорядочивать материал ("юношам, обдумывающим житье" читать здесь). Но как только дело доходит до практики, начинаешь "плавать".

Синонимы в терминах.
Техническая информация по фильмам (год выпуска, страна, актеры...) у меня на сайте заносится пользователями. Следовательно, термин-актеры создаются как "теги" (термины будут создаваться пользователями при создании материала, путём набора слов, разделённых запятыми.)
Но тут появляются "грабли". Взять, например, японского актера Shintaro Katsu. Русских вариантов перевода имени несколько: Синтаро Кацу, Шинтаро Катцу, Шинтаро Катсу... Если использовать таксономию по умолчанию, то получится несколько несвязанных друг с другом терминов, хотя все они указывают на одного и того же человека. Что в корне неправильно.

Но какой-то светлый ум при создании таксономии придумал для терминов СИНОНИМЫ. Смысл, выбираем правильный/красивый перевод имени актера главным, а остальные неблагозвучные/неправильные заносим в "Дополнительные настройки" поле Синонимы. Например, основной термин будет - Синтаро Кацу, а остальные варианты Шинтаро Катцу, Шинтаро Катсу (список можно пополнять) становятся синонимами основного термина. Соответственно когда пользователь будет вводить Шинтаро Катцу, Шинтаро Катсу, программа автоматически будет заменять синонимы на главный термин Синтаро Кацу.

Собственно то что надо, вот только синонимы не работают в "коробочном" Друпале! Из версии в версию синонимы терминов перекочевывают "мертвым" кодом (утверждают что практическая реализация сего чуда напрочь отсутствует).

Нашелся другой пытливый ум, который создал модуль "Synonym collapsing", исправляющий это досадный баг. Правда последняя его версия нерабочая (прилагается пропатченная dev версия). После установки модуля в меню Таксономии появляется вкладка "Synonym collapsing", где можно указать словарь для которого будут активированы синонимы. Вуаля, теперь все работает!

Покажем это красиво.
Еще один фактор, сдерживавший меня на пути освоения таксономии, это некрасивый (для моего сайта) стандартный вывод и самих терминов и материалов в виде анонса при клике на термин (смотри drupal.ru).

Мне бы больше подошел стандартный вывод актеров: Джеки Чан, Мэгги Чеунг, Чо Йен, Билл Тунг, Бриджит Лин. Чему способствует другой модуль "Term Display", переопределяющий вывод терминов - через разделитель, списком... При темизации вывод осуществлять так:
print $node->content[term_display_№_словаря]['#value'];

Как писал выше, стандартный вывод материалов при клике на термин меня не вдохновил. Поиски привели к модулю Views, вернее к его предустановке "taxonomy_term", которая уже настроена на вывод материалов, остается только подправить его по своему вкусу: сделать табличный вывод с полем по "названию ноды". Ура, собственно то что надо!

Но через пару дней радость тускнеет, начинает чего-то не хватать. Хочется большего, например чтобы помимо списка фильмов была информация о самом актере, его фотографии и еще, что там фантазия нарисует.
Что делать, искать или заказывать модуль, позволяющий это выполнить? Хотя, если хорошо подумать, то все нужное уже имеется. Необходима связка темизация Ноды + Views + Path.

Настраиваем Views: клонируем "taxonomy_term", называем допустим persona. Можно поудалять в нем Core feed и Views 1 feed оставив только Page. Подстраиваем вывод под себя, например, в виде таблице с полем "Название материала".
Создаем новый тип материала "Персона" (машинное имя persona), настраиваем на свой вкус, ну там фото + видео + тексты. Для ее темизации также создаем node-persona.tpl.php в своей теме. Для того чтобы "пристегнуть" views используем следующий код:

<?php   $number = drupal_substr($node->path, 14, NULL);
             print views_embed_view('persona', 'page', $number);  ?>

При создании ноды "Персона" в "Настройки адресов" (необходимо чтобы модуль Path был установлен) заносим путь термина, например: taxonomy/term/19. Вроде все должно работать.

Чем хороша данная "система". Пока нода "Персона" не готова при клике на термин будет выводиться просто список материалов. Но как только создается нода, то список становится частью ноды.

Модули которые могут помочь:
synonyms - синонимы в терминах становятся доступны для поисковой индексации
tagorder – теги выводятся не в алфавитном порядке, а в том как их заносили
term merge - заменяет термин на указанный, причем старый термин добавляется в синонимы нового
taxonomy_vocab_relate – связывание двух словарей
content_taxonomy – скрещивает поля cck и таксономии
taxonomy manager – облегчает управление терминами таксономии

Ввиду того, что на хосте ограничение php в 32Мб запустить и показать таксономию в действии даже и не пытаюсь. Все работы проводились на localhost. Решил вот поделиться добытой информацией, чтобы не пропала.

Это мой первый труд по Друпалу, поэтому просьба оценить его.

Комментарии

Аватар пользователя Химический Али Химический Али 6 ноября 2009 в 13:06

Спасибо, всегда интересно как те или иные задачи решают другие. Иногда решения, казавшиеся естественными и обыденными, вдруг оказываются громоздими или неполными и свежий, чужой, другой взгляд открывает глаза.

Аватар пользователя Oleksa@drupal.org Oleksa@drupal.org 6 ноября 2009 в 13:50

"Serg_M" wrote:
Для того чтобы "пристегнуть" views используем следующий код

в этом месте можно попробывать использовать views attach и аргументы и обойтись без кодов.
А вообще многое из этого можно было бы решить с помощью nodereference

в любом случае решение понравилось, спасибо что поделились

Аватар пользователя Dimm Dimm 11 ноября 2009 в 17:34

Спасибо.
Я делаю немного по другому:
Привязал к словарю Panel.
В блоках панели вывожу материалы как мне надо.

Аватар пользователя Strycker Strycker 12 ноября 2009 в 23:40

Отличный материал!
Как раз думал как облагородить вывод связанных с термином нод (тоже не нравится вывод анонсами), а тут как раз ваш материал Smile

Аватар пользователя T-34 T-34 15 ноября 2009 в 15:20

Подобная функция есть также в модуле Unitag:
Enable synonym replacement.
Synonyms will automatically be replaced by the base term.

А для пятерки на д.ру выклыдывали патч для таксономии.

Аватар пользователя Arturus Arturus 15 декабря 2009 в 16:02

Не понятно, а как Вы планируете для каждого актера (сколько их?) в ручную делать основное имя актера и перечислять все возможные синонимы?

Аватар пользователя Serg_M Serg_M 15 декабря 2009 в 18:26

"Arturus" wrote:
Не понятно, а как Вы планируете для каждого актера (сколько их?) в ручную делать основное имя актера и перечислять все возможные синонимы?

Актеров - тысячи. Похоже делать все ручками, титанический обезьяний труд. Иного пути не вижу, никакие маски и шаблоны здесь не помогут. Начать с мировых звезд, затем с известных - получится несколько сотен, до малоизвестных руки скорее всего не дойдут, а может их и не надо. Несколько помочь в работе могут модули приведенные в статье.
А можно все бросить на самотек...

Аватар пользователя Arturus Arturus 16 декабря 2009 в 4:31

Может отказаться от свободного ввода? найти базу имен актеров, думаю, не проблема, конвертнуть в словарь таксономии и подвязать к материалу, если надо несколько актеров, то сделать несколько полей для ввода актера

Аватар пользователя Serg_M Serg_M 16 декабря 2009 в 7:36

Русские названия азиатских актеров тема неблагодарная. Даже если и найдешь базу, все равно она будет не полная, а через пару месяцев и не актуальная, т.к. появляются новые имена. Это нужно будет постоянно следить за ней. Да и русские варианты переводов актера везде разные Yuen Biao = Юэнь Бьяо = Йен Бяо = Йен Биао...
Народ ленив, даже в том простом виде, каким сделан ввод - по типу копи-паст, никто не хочет заносить информацию. Приходят, читают, копируют контент... Проект не коммерческий, а хобби и уделять ему все свободное время, чтобы содержать базу данных в надлежащем виде не охота...

Аватар пользователя Arturus Arturus 17 декабря 2009 в 11:55

А не встречали модуль, чтобы при вводе терминов можно было разделять их не только через запятую но, к примеру, через "-".
У меня пользователи часто заносят термины разделяя их именно через "-".