Что такое UserKey в Kooboo и почему в URL появились символы на русском языке


23.08.2012 || Раздел: || Контент KooBoo


Представьте ситуацию: Вы только что установили сайт на kooboo и создали несколько статей через административную панель, согласно документации. При просмотре результатов своей работы Вы неожиданно обнаруживаете, что URL-адреса у созданных Вами статей оказываются частично на русском языке (к тому же преобразованные в Юникод). Причиной этого является UserKey.

Попробую рассказать, что это и какие есть способы обойти эту маленькую неприятность.

При работе с системой KooBoo CMS Вы будете постоянно сталкиваться с UserKey.

UserKey - это поле, которое автоматически присваивается элементу содержимого, оно уникально для каждого элемента. Чаще всего его можно видеть при работе с правилами данных и в URL адресах.

В системе KooBoo UserKey - это ключ URL-адреса, который при обращении к элементу содержимого на сайте сравнивается с ключевым параметром в URL строке (query string). Его можно использовать для фильтрации при отображении контента и в любых местах, где необходимо однозначно идентифицировать элемент содержимого.

Рассмотрим все это на примере сайта SampleSite, входящего в kooboo по умолчанию.

Сначала еще раз посмотрим в корень проблемы. Создаем статью, например, такую:

create article kooboo

Сохраняем статью и переходим на сайт. Смотрим, что получилось:

view-list-article-kooboo

А теперь перейдите на страницу просмотра статьи и Вы увидите примерно следующее:

view-article-kooboo

Т.е. мы получили такой адрес:
localhost:89/Articles/Detail/%D0%AD%D1%82%D0%BE-%D0%BC%D0%BE%D1%8F-%D0%BF%D0%B5%D1%80%D0%B2%D0%B0%D1%8F-%D1%81%D1%82%D0%B0%D1%82%D1%8C%D1%8F-%D0%BD%D0%B0-kooboo

Совсем не Friendly URL получается!

Адрес статьи сформировался следующим образом:
http://<домен>/Articles/Detail/<UserKey статьи>

А UserKey в свою очередь формируется на основе заголовка статьи (title), который мы как раз указали на русском языке. Если говорить точнее, то он формируется из того поля, у которого в параметрах типа содержимого (Content Type) указано "Обобщающее поле (Summary field)". Он генерируется при создании статьи и в дальнейшем не меняется.

Что же делать, если нужен адрес вроде:
localhost:89/Articles/Detail/eto-moya-pervaya-statya-na-kooboo

Сама система Kooboo не умеет транслитеровать текст в UserKey.

Существует несколько путей обхода данной проблемы.

Рассмотрю их опять же на примере статей, но они применимы к любому типу содержимого (контента).

1) Первый и самый банальный способ - вообще отказаться от использования UserKey в URL-адресах и, например, применять идентификатор статьи (UUID). Как это сделать читайте здесь.

2) Второй, довольно просто способ, но не для ленивых:  создавать сначала статью с английским названием, а после сохранения переименовывать на русское.

3) Третий способ похож на второй, но позволяет задавать оба названия одновременно, используя одну недокументированную возможность Kooboo. Для этого в тип содержимого статьи нужно добавить поле с названием "UserKey":

create-field-article-kooboo

Таким образом при создании статьи Kooboo увидит, что поле UserKey уже имеет значение, и не будет генерировать свое:

create-userkey-article-kooboo

 

Четвертый и пятый способы предполагают использовать транслитерацию.

4) Четвертый - похож на третий, но поле UserKey заполняется автоматически транслитом на основе введенного в заголовок статьи текста с применением скрипта транслитерации на javascript. Суть не меняется, но работу это существенно может облегчить, при чем оставляя возможность подкорректировать UserKey вручную.
Чтобы реализовать данный способ, необходимо изменить стандартный шаблон типа содержимого, т.е. использовать "Произвольные шаблоны (Custom template)". Как это сделать читайте в будущих статьях.

5) Пятый способ заключается в автоматической транслитерации UserKey без участия пользователя. Это может быть удобно, если человек, заполняющий базу данных не готов вводить UserKey вручную. Чтобы реализовать этот способ, нужно использовать триггер-расширение, который будет срабатывать при создании элементов содержимого (контента).  Как это сделать читайте в будущих статьях.

На данный момент это все способы, которые мне удалось собрать. Если у Вас есть другие предложения, пожалуйста, опубликуйте их в комментариях.

©Элла (Автор: Ella Sea)

< Предыдущая статья

Общие понятия и термины, необходимые при работе с Kooboo CMS

Следующая статья >

Создание динамического SiteMap для сайта Kooboo CMS (sitemap.xml)