Друзья, рад представить вам новый модуль Handy Alias, который я здесь уже упоминал несколько раз. Наконец-то я зарелизил его стабильную версию на drupal.org.
Скажу сразу, это модуль для перфекционистов. Если в двух словах, то он позволяет аттачить к словарям, терминам и нодам псевдонимы, которые позже можно использовать для формирования адресов с помощью всеми любимого pathauto. Если термин имеет родителей, то с помощью токена [term-handy-alias-path]
можно получить цепочку терминов по аналогии со стандартным токеном [termpath-raw]
. Это решает проблемы с транслитерированными уродливыми адресами страниц и отображением структуры словаря в URL-е. Кроме этого, для заданных типов контента можно настроить добавление псевдо-расширения .html, но это уже для тех, кто знает толк в извращениях.
Ниже попробую изложить суть работы модуля в картинках и примерах.
Кстати, буду рад услышать ваши отзывы, предложения и пожелания. Кроме того, я намереваюсь использовать вас как бесплатных тестеров
Итак, пошаговое руководство к действию на примере сайта по автотематике:
- Скачиваем и устанавливаем модули Handy Alias, token, Pathauto 2.x
- Создаем тип материала «автомобиль». Для создаваемого материала включаем опцию «Enable handy alias for this content type» и «Attach .html pseudo-extension to node aliases». Это позволит нам при создании материалов типа «автомобиль» задавать алиасы, которые будт доступны под токеном
[node-handy-alias]
- Далее создаем словарь «Типы автомобилей». Включаем опцию «Enable handy alias for terms of this vocabulary». Здесь же необходимо указать типы контента, для которых данный словарь будет использоваться в качестве «поставщика» алиасов. В нашем случае, это «автомобиль». Поставщик алиасов... Госпади! Проще показать код, чем описать как и что он делает! Да, и кроме того, можно, но не обязательно, задать алиас самому словарю (он будет доступен под токеном
[vocab-handy-alias]
). Честно говоря, я не уверен, что сам до конца понимаю, для чего нужен этот токен, но он существует и работает, это факт! - Кстати, после того, как вы первый раз ткнете по галочке «Enable handy alias for terms of this vocabulary», автоматом отключатся такие возможности словаря как «Tags», «Multiply select» и возможность выбрать несколько родителей для термина.
- Теперь осталось наполнить словарь деревом терминов, задать для каждого из них по синониму и…
- …перейти к настройкам модуля pathauto. А именно, идем в раздел Patterns и задаем шаблоны алиасов для типа материала «автомобиль» и терминов словаря «Типы автомобилей» следующим образом:
[vocab-handy-alias]/[term-handy-alias-path]/[node-handy-alias]
и[vocab-handy-alias]/[term-handy-alias-path]
соответственно - Все! Подготовка закончена, время создавать контент. При создании материала мы можем наблюдать дополнительное поле под заголовком, где можно указать алиас для ноды. Если не указать, будет использован node id.
- Нажимаем сохранить и радуемся симпатичному урлу в адресной строке
- А дальше создаем пару представлений, одним из которых переопределяем стандартный системный путь «taxonomy/term/%» и т.д.
- Словом, еще несколько незначительных доработок и ваш новый прекрасный сайт практически готов!
Вот такой вот модуль. Я до сих пор не уверен, что он нужен кому-то, кроме меня, но он есть, залит на drupal.org и хочет быть использован людьми!
хабрапользователи могут прочитать то же самое на хабре.
---
Комментарии
Добавил в закладки. может пригодиться.
думаю пригодится
Классно. Спасибо.
Такой вопрос:
а можно ограничиться пунктом 7 и использовать Handy-alias только для изменения части синонима, соответствующей заголовку?
В смысле, такая логика: у меня есть новости и для них pathauto автоматом генерит синоним news/2010/09/24/zagolovok. Так, для новости с заголовком "Новость 1" будет news/2010/09/24/novost_1. Так вот, я правильно понимаю, можно использовать handy-alias просто чтобы novost_1 заменить на то, что напишу я, а первые 4 токена оставить без изменений?
И еще вопрос: модуль не будет конфликтовать, если я уберу галочку "генерировать синонимы" и введу синоним для отдельно взятой ноды руками?
Все верно, можно использовать только часть возможностей. В вашем случае, только псевдоним для нод без участия каких-либо словарей с терминами.
И да, если вы уберете галочку «Automatic alias» при создании ноды, то сможете задать произвольный путь к ноде. Т.е. стандартная функциональность модуля pathauto ни коим образом не нарушается.
поле в сск для формирования окончания... я так делаю всегда, ну и мне кажется полегче решение (все равно на 90% уверен что cck вы используете.)
А вот сильно мне понравилось как реализована такая же штука в битриксе - она использует гулопереводчик, те не просто транслитирует а переводит..
Здесь, в комментариях, уже предложили решения для интеграции с гуглопереводчиком. Думаю, в следующей версии прикручу этот возможность.
Вещь нужная, но в чем преимущество над PathAuto?
В чем преимущество магнитолы над автомобилем?
В чем преимущество автомобиля у которого есть магнитола над автомобилем у которого её нет - об этом и статья
пригодится
оно в дополнение к Pathauto, а в чем преимущесьво - про это целый пост=)
Очень полезный модуль, спасибо Особенно пригодится при переносе работающих сайтов на Друпал, у которых алиасы категорий уже созданы, и неохота ломать голову редиректами их на новые "друпальные" алиасы. Кто не понял, что я имел в виду, я не виноват
Жаль что это не работает...
Отвечаю на вопрос по поводу отключения функция Tags, Multiply select и множественного выбора родителей.
А как, по-вашему, однозначно построить путь до ноды из терминов словаря, когда включен множественный выбор или, тем более, тэги?
Т.е., скажем у нас есть нода, которая одновременно относится к двум терминам словаря. Какой из этих терминов использовать при генерации пути? Тем более с тэгами.
Ну и с несколькими родителями, думаю, тоже все ясно.
Можно, конечно, создавать всевозможные псевдонимы для одной ноды, но это плохо скажется на сайте, поскольку ни гугл ни яндекс таких фокусов не любит. Да и пользователь может запутаться.
Вы рассмотрели только один вариант использования своего модуля - генерацию пути при жестко заданной иерархии для конечно ноды.
Рассмотрите другой вариант использования:
Я проставляю теги для всех автомобилей и хочу использовать к ним handy-alias.
И хочу видеть, например, такие адреса:
/toyota/4wd
/nissan/hatchback
Поэтому ваш запрет - является искусственно вызванным и ненужным, он сильно уменьшает полезность модуля.
Честно говоря, не совсем понял, о чем вы. Если не затруднит, изложите ваши идеи более подробно: что именно вы хотите получить и как это должно работать.
дубльу вас термины toyota, nissan, 4wd, hatchback в одном словаре? как их порядок определить?
Обрадовался было, что наконец нашёл то, что нужно. Однако, модуль не работает совместно с Hierarchical Select.
Hierarchical Select автоматически ставит галочку на "Множественный выбор", а Handy Alias её убирает.
Делема.
А какого хрена спрашивается? Одно между прочим другому не мешает.
Вот этого модуля мне не хватало три месяца назад. весь мозг вынес тогда. спасибо Stutzer за решение!!
Респект
Отметил плюсом на Хабре, спасибо за модуль!
Отлично подойдёт для каталогов
Православно! Мне с pathauto очень неуютно, теперь скорее всего станет намного легче жить!
Спасибо, плюсанул на хабре )
Может ли кто поделиться со мной инвайтом на хабр?
Если вопрос не риторический, то, как вариант - так же, как в [termpath-raw]. Т.е. тупо выбирать первый термин.
Возможно, если изначально знать про токен [termalias], то не пришлось бы этот писать модуль.
С другой стороны, создание модуля - всёж развлечение!
Наконец-то! Этого модуля мне так нехватало
Блин... все еще не хватает
Прелесть таксономии как раз и заключается в том, что один материал может принадлежать нескольким категориям.
Хотелось бы вот так: множественный выбор терминов + определенный термин (например, первый по списку) — берется в качестве основы для создания адреса.
Сам пока остановился на том, что алиасы нод отдельно, алиасы категорий отдельно, хотя колупался долго.
хэнди-алиасы можно использовать в views, в качестве аргументов?
после включения модуля:
PHP Version 5.2.8
Спасибо, исправил у себя, включу в следующий релиз. Если мешает уберите в названных вами строках знак & перед параметром &$vocab
у меня тоже такие ошибки были. убрл & перед $vocab
Сейчас в логах постоянно такие ошибки:
[Fri Nov 19 10:53:22 2010] [warn] mod_fcgid: stderr: PHP Warning: Call-time pass-by-reference has been deprecated in /httpdocs/sites/all/modules/handyalias/handyalias.lib.inc on line 61
[Fri Nov 19 10:54:20 2010] [warn] mod_fcgid: stderr: PHP Warning: Call-time pass-by-reference has been deprecated in /httpdocs/sites/all/modules/handyalias/handyalias.lib.inc on line 61
[Fri Nov 19 10:55:25 2010] [warn] mod_fcgid: stderr: PHP Warning: Call-time pass-by-reference has been deprecated in /httpdocs/sites/all/modules/handyalias/handyalias.lib.inc on line 61
За модуль Респект
А для D7 планируется?
Честно говоря, по серьезному до семерки еще руки не дошли, много проектов на 6-ке. В следующем году, думаю, сделаю веточку для 7.
Возможно реализовать такое поведение?:
* если юзер ввел хенди-алиас, ставим для тайтла хенди
* если юзер не ввел хенди (на странице ноды), то делаем транслитерацию (вместо nid)
Я сам ненавижу уродливые урлы. Поэтому конечно буду стараться ставить нормальные алиасы.
Но кроме меня сайт будут наполнять другие юзеры, которые могут и забить на это поле для ручного алиаса, и вот для них, хотелось-бы сделать транслитерацию.
Я понимаю, что в pathauto это разные подстановочные шаблоны:
[node-handy-alias]
и стандартный[title-raw]
.Спрашиваю потому что нормальные урлы все-таки нужны, не только для поисковиков, но и для аськи (я делаю для корпоративной системы документооборота), так вот, гораздо приятнее получить по аське ссылку как минимум на транслитерацию юзер-генерейтед-заголовка.
PS.
Автору респект - очень полезный плагин и серьезное поползновение к действительно полезному и универсальному решению.
Ну а если прикрутить гугл-транслейт - это вообще была-бы сказка. Жаль у меня нет времени и достаточного количества знаний чтобы помочь автору в этом.
Вроде бы хороший модуль, дополняющий функционал терминов таксономии, который, по идее, должен был быть "из коробки". Но есть и непонятные моменты. В частности, опция "Free content types" в настройках словаря. Если в ней ничего не выбрано, то в свойствах терминов этого словаря не появляется поле "Term Alias". А если выбрать какой-то тип контента, то в настройках других словарей этот тип пропадет
Пример: делаем некий каталог товаров. В нем заведен тип ноды "товар" и два словаря: "Типы продукции" и "Бренды". Два отдельных словаря потому, что один и тот же бренд может производить несколько разных типов продукции. Соответственно, каждой конечной ноде, описывающей один товар, присваивается один тип и один бренд. В итоге хочется видеть URL вида: site.com/type_alias/brand_alias/item_alias.html.
Что нужно для этого сделать?
Дело в том, что один тип контента может быть связан только с одним handyalias-словарем. Тем не менее, простых словарей, связанных с типом контента, может быть сколько угодно. Сделано это по той причине, что у ноды должен быть всего один адрес. Соответственно, если нода принадлежала бы двум handyalias-словарям, то не понятно, по какому принципу модулю выбирать словарь для построения пути. По этой причине, типы контента, связанные с одним handyalias-словарем уже недоступны в других handyalias-словарях. Надеюсь, понятно объясняю.
По этой причние, ваш случай, к сожалению, с помощью текйщей версии модуля не решается. Но, спасибо за идею, постараюсь учесть ваши требования в следующей версии модуля.
Как это непонятно? У нас же есть порядок следования словарей, который можно изменять в /admin/content/taxonomy. Он как раз и предназначен для однозначного формирования URL'а.
По поводу уникальности адреса ноды: если пользоваться базовым функционалом pathauto (не устанавливая handyalias), то мы можем присвоить ноде термины из двух словарей, и все отлично работает. Плюс в любом случае остается возможность открыть ноду непосредственно по ее собственному алиасу или id. Для исключения этих ситуаций существует модуль globalredirect, который отдает 301 по всем дублирующим URL'ам.
Что я хочу сказать: дополнительные ограничители, встроенные в handy alias, конечно, полезны, но было бы здорово иметь возможность их отключения, чтобы свести деятельность модуля к простому добавлению поля "handy alias" ко всем терминам всех словарей.
не подскажете новичку, как с помощью базового функционала pathauto сделать алис вида /vocabulary1-term/vocabulary2-term/node-title
в Content paths я не вижу токенов для терминов словарей ...
уточню, пользуюсь 7 версией
все это здорово а под 7 ку будет ? или может есть другое решение ?
Очень хороший модуль.
Но у меня есть вопрос - При добавлении ноды, я отмечаю её каким либо термином из словаря, который является дочерним. Так вот в этом случае товар не отображается на странице термина-родителя. И ещё по хлебным крошкам - стандартные функции не позволяют отображать дерево терминов словаря к которому относится нода, т.е. не видно хлебных крошек при просмотре страницы с полным описанием ноды.
Может быть, есть решение этих вопросов?
Спасибо.
У меня никак не получалось вывести алиасы для терминов ([termalias-raw])
Token 6.x-1.19
CCK 6.x-2.9
Drupal 6.26
И только установив Ваш модуль настроил синонимы как надо и получил красивые урлы, спасибо!
аналогичной функциональности можно добиться с помощью Entity API + Entity token
пруф
UPD
Поясню.
Нужно создать дополнительное поле, в нем вручную писать алиас (например термина), при сохранении ноды для генерации компонента пути урла будет браться не транслитерация этого компонента, а тот алиас который мы сами написали в термине таксономии на который ссылается нода, которую мы сохраняем.
Если у термина на который ссылается нода нет ручного алиаса, то тогда этот компонент пропускается.
В общем это то-же самое что и HA, только средствами Entity Token. Наверное поэтому автор и не стал делать модуль для семерки, только скромно умолчал о том что функциональность можно повторить с помощью другого контибовского модуля
Честно не могу понять смысл поста, Pathauto, Token и Transliteration зачем тогда? Использую их на всех проектах. К чему усложнять?