Comments 22
Хороший модуль. Часто нужно организовать синонимы подобным методом, приходилось не очень правильные решения использовать.
Если честно, не понял, что делает ваш модуль.
Если он генерирует алиас вида СЛОВАРЬ/ТЕРМИН/ТЕРМИН/ТЕРМИН/НОДА, то я сделал это намного проще.
Создаются синонимы для ноды относительно любого словаря. Выставляем в pathauto созданный токен и радуемся.
Если он генерирует алиас вида СЛОВАРЬ/ТЕРМИН/ТЕРМИН/ТЕРМИН/НОДА, то я сделал это намного проще.
Copy Source | Copy HTML
- // Список токенов
- function hook_token_list($type = 'all') {
- $tokens = array();
- if (module_exists('taxonomy')) {
- if ($type == 'node' || $type == 'all') {
- $vocs = taxonomy_get_vocabularies();
- foreach ($vocs as $voc) {
- $tokens['node']['term-'.$voc->vid.'-path'] = t('As [term], but including its supercategories separated by /. In vocabulary ' . $voc->name);
- $tokens['node']['term-'.$voc->vid.'-path-raw'] = t('As [term-raw], but including its supercategories separated by /. In vocabulary ' . $voc->name);
- $tokens['node']['term-'.$voc->vid.'-alias'] = t('The URL alias of the taxonomy term. In vocabulary ' . $voc->name);
- $tokens['node']['term-'.$voc->vid.'-alias-raw'] = t('The URL alias of the taxonomy term. In vocabulary ' . $voc->name);
- }
- }
- }
- return $tokens;
- }
-
- // Tokens logic
- function hook_token_values($type, $object = NULL, $options = array(), $label = NULL) {
- $values = array();
- switch ($type) {
- case 'node':
- if (module_exists('taxonomy')) {
- $node = $object;
- $vocs = taxonomy_get_vocabularies();
- foreach ($vocs as $voc) {
- $vid = $voc->vid;
- $terms = taxonomy_node_get_terms_by_vocabulary($node, $vid);
- foreach ($terms as $term) {
- if (!taxonomy_get_children($term->tid)) {
- break;
- }
- }
- if ($term) {
- $values = array_merge($values, pathauto_token_values('taxonomy', $term, $options, 'term-'.$vid.'-'));
- }
- else {
- $values['term-'.$vid.'-path'] = $values['term-'.$vid.'-path-raw'] = $values['term-'.$vid.'-alias'] = '';
- }
- }
- }
- break;
- }
- return $values;
- }
Создаются синонимы для ноды относительно любого словаря. Выставляем в pathauto созданный токен и радуемся.
Автор решил проблему с уродливой транслитерацией. Вы можете сами жестко написать, какой алиас для словаря или термина хотите видеть, не полагаясь на выродков транслита.
Так синонимы терминам и так можно было задавать вручную.
Я так понимаю, вы имеете ввиду стандартное поле формы taxonomy_form_term «Synonyms» (synonyms of this term, one synonym per line).
Во-первых, для этих синонимов нет токенов, которые можно было бы использовать. Они, по умолчанию, вообще никак не используются.
Во-вторых, существуют модули, которые используют это поле, расширяя возможности таксономии, и, дабы не возникало конфликтов, я использовал свое дополнительное поле.
Во-первых, для этих синонимов нет токенов, которые можно было бы использовать. Они, по умолчанию, вообще никак не используются.
Во-вторых, существуют модули, которые используют это поле, расширяя возможности таксономии, и, дабы не возникало конфликтов, я использовал свое дополнительное поле.
А я не совсем понимаю, что делает ваш код. Что именно он подставляет на места СЛОВАРЬ, ТЕРМИН и НОДА в пути СЛОВАРЬ/ТЕРМИН/ТЕРМИН/ТЕРМИН/НОДА?
Здорово, хорошая идея, и спасибо за реализацию. Anonym`у тоже спасибо, весьма изящно, хотя у автора, как я понял, чуть больше функционала.
Удобно для каталогов, спасибо за модуль!
Перевод бы: drupaler.ru/module/handyalias
От автора было бы лучше это увидеть ;)
От автора было бы лучше это увидеть ;)
а я очень похожую фишку сделал (для нод) через обычное текстовое поле cck, и перенос в филдсет для алиасов через form_alter.
pathauto из коробки поддерживает токены генерируемые из cck.
pathauto из коробки поддерживает токены генерируемые из cck.
псевдоним для нод — это скорее дополнительная фича этого модуля. На мой взгляд, основная фишка — это синонимы для терминов все-таки.
А чем не устраивает обычный синоним для терминов словаря?
Для pathauto можно дописать в token модуле простейший код, чтобы он тянул данные из синонима записи словаря.
Для pathauto можно дописать в token модуле простейший код, чтобы он тянул данные из синонима записи словаря.
Как быть в случае, если нода принадлежит нескольким терминам? Какой из них присвоит модуль?
Например, для Вашего примера ставим, например, для какой-то машины и джип, и SUV (безусловно, словарь позволяет выбирать множественные термины)
Например, для Вашего примера ставим, например, для какой-то машины и джип, и SUV (безусловно, словарь позволяет выбирать множественные термины)
Пункт четвертый в посте вы, видимо, пропустили
Я не пропустил, там лишь написано, что такая возможность есть. А как URL будет формироваться, я не понял, честно говоря. Для первого тега будет браться termpath?
в вашем предыдущем комментарии есть допущение «безусловно, словарь позволяет выбирать множественные термины», а в четвертом пункте, на который я сослался, написано, что после того, как вы включите функцию handy alias для словаря, вы не сможете использовать с этом словарем режимы «Tags», «Multiply select» и возможность выбрать несколько родителей для термина. Там, даже картинка есть )
UFO just landed and posted this here
ну а как, по-вашему, должен строиться путь из словаря, в котором до термина нельзя построить однозначный путь (т.к. у него может быть несколько родителей). Про теги я вообще молчу, у них в принципе другой смысл. Тут, конечно, есть над чем подумать, но пока мой вариант мне кажется логичным. Если переубедите меня, обновлю модуль )
Sign up to leave a comment.
Новый модуль Handy alias для гибкого создания синонимов страниц