Pull to refresh

Comments 22

Хороший модуль. Часто нужно организовать синонимы подобным методом, приходилось не очень правильные решения использовать.
Если честно, не понял, что делает ваш модуль.
Если он генерирует алиас вида СЛОВАРЬ/ТЕРМИН/ТЕРМИН/ТЕРМИН/НОДА, то я сделал это намного проще.
Copy Source | Copy HTML
  1. // Список токенов
  2. function hook_token_list($type = 'all') {
  3.     $tokens = array();
  4.     if (module_exists('taxonomy')) {
  5.         if ($type == 'node' || $type == 'all') {
  6.             $vocs = taxonomy_get_vocabularies();
  7.             foreach ($vocs as $voc) {
  8.                 $tokens['node']['term-'.$voc->vid.'-path'] = t('As [term], but including its supercategories separated by /. In vocabulary ' . $voc->name);
  9.                 $tokens['node']['term-'.$voc->vid.'-path-raw'] = t('As [term-raw], but including its supercategories separated by /. In vocabulary ' . $voc->name);
  10.                 $tokens['node']['term-'.$voc->vid.'-alias'] = t('The URL alias of the taxonomy term. In vocabulary ' . $voc->name);
  11.                 $tokens['node']['term-'.$voc->vid.'-alias-raw'] = t('The URL alias of the taxonomy term. In vocabulary ' . $voc->name);
  12.             }
  13.         }
  14.     }
  15.     return $tokens;
  16. }
  17.  
  18. // Tokens logic
  19. function hook_token_values($type, $object = NULL, $options = array(), $label = NULL) {
  20.     $values = array();
  21.     switch ($type) {
  22.         case 'node':
  23.             if (module_exists('taxonomy')) {
  24.                 $node = $object;
  25.                 $vocs = taxonomy_get_vocabularies();
  26.                 foreach ($vocs as $voc) {
  27.                     $vid = $voc->vid;
  28.                     $terms = taxonomy_node_get_terms_by_vocabulary($node, $vid);
  29.                     foreach ($terms as $term) {
  30.                         if (!taxonomy_get_children($term->tid)) {
  31.                             break;
  32.                         }
  33.                     }
  34.                     if ($term) {
  35.                         $values = array_merge($values, pathauto_token_values('taxonomy', $term, $options, 'term-'.$vid.'-'));
  36.                     }
  37.                     else {
  38.                         $values['term-'.$vid.'-path'] = $values['term-'.$vid.'-path-raw'] = $values['term-'.$vid.'-alias'] = '';
  39.                     }
  40.                 }
  41.             }
  42.             break;
  43.     }
  44.     return $values;
  45. }


Создаются синонимы для ноды относительно любого словаря. Выставляем в pathauto созданный токен и радуемся.
Автор решил проблему с уродливой транслитерацией. Вы можете сами жестко написать, какой алиас для словаря или термина хотите видеть, не полагаясь на выродков транслита.
Так синонимы терминам и так можно было задавать вручную.
Я так понимаю, вы имеете ввиду стандартное поле формы taxonomy_form_term «Synonyms» (synonyms of this term, one synonym per line).
Во-первых, для этих синонимов нет токенов, которые можно было бы использовать. Они, по умолчанию, вообще никак не используются.
Во-вторых, существуют модули, которые используют это поле, расширяя возможности таксономии, и, дабы не возникало конфликтов, я использовал свое дополнительное поле.
к 1 они(token) добавляются в течении 5 секунд
2 возможно в этом есть смысл.
Как дополнение: imho было-бы полезно сделать тогда уже несколько синонимов (например 1 для пути второй для Title) и ещё попробовать интегрировать с NAT/
За модуль спасибо, ждем ещё перевод ;)
А я не совсем понимаю, что делает ваш код. Что именно он подставляет на места СЛОВАРЬ, ТЕРМИН и НОДА в пути СЛОВАРЬ/ТЕРМИН/ТЕРМИН/ТЕРМИН/НОДА?
Здорово, хорошая идея, и спасибо за реализацию. Anonym`у тоже спасибо, весьма изящно, хотя у автора, как я понял, чуть больше функционала.
Удобно для каталогов, спасибо за модуль!
а я очень похожую фишку сделал (для нод) через обычное текстовое поле cck, и перенос в филдсет для алиасов через form_alter.

pathauto из коробки поддерживает токены генерируемые из cck.
псевдоним для нод — это скорее дополнительная фича этого модуля. На мой взгляд, основная фишка — это синонимы для терминов все-таки.
А чем не устраивает обычный синоним для терминов словаря?
Для pathauto можно дописать в token модуле простейший код, чтобы он тянул данные из синонима записи словаря.
Выше сказали, говорят проблемы бывают. Хз, всю жизнь так делаю — новый токен сделать пять секунд, еще зело полезны бывают токены термин первого словаря, термин второго словаря — получаем совсем красивый каталог :)

Как быть в случае, если нода принадлежит нескольким терминам? Какой из них присвоит модуль?
Например, для Вашего примера ставим, например, для какой-то машины и джип, и SUV (безусловно, словарь позволяет выбирать множественные термины)
Пункт четвертый в посте вы, видимо, пропустили
Я не пропустил, там лишь написано, что такая возможность есть. А как URL будет формироваться, я не понял, честно говоря. Для первого тега будет браться termpath?
в вашем предыдущем комментарии есть допущение «безусловно, словарь позволяет выбирать множественные термины», а в четвертом пункте, на который я сослался, написано, что после того, как вы включите функцию handy alias для словаря, вы не сможете использовать с этом словарем режимы «Tags», «Multiply select» и возможность выбрать несколько родителей для термина. Там, даже картинка есть )
Да, простите, я прочитал «отключатся» как «включатся», удивился, и задал вопрос, пардон.
UFO just landed and posted this here
ну а как, по-вашему, должен строиться путь из словаря, в котором до термина нельзя построить однозначный путь (т.к. у него может быть несколько родителей). Про теги я вообще молчу, у них в принципе другой смысл. Тут, конечно, есть над чем подумать, но пока мой вариант мне кажется логичным. Если переубедите меня, обновлю модуль )
UFO just landed and posted this here
Sign up to leave a comment.

Articles