Оптимизация URL сайта и языки - PullRequest
4 голосов
/ 10 января 2011

Работа с многоязычными сайтами в Sitecore 6.2 Я бы хотел, чтобы Sitecore заменял "" (пустое место, традиционно заменяется на% 20) в URL-адресах с дефисом.

Например, www.MySite.com/Hello World> www.MySite.com/Hello-World

Пока проблем нет, мы просто добавляем еще одну запись в encodeNameReplacements

<replace mode="on" find=" " replaceWith="-" />

Затем, чтобы наши авторы контента не могли создавать элементы с дефисом в именах (который при чтении их URL-адресов Sitecore понимал бы как пробел, в результате чего 404 Not Found), мы можем добавить дефис в список символов, запрещенных вимена элементов, используя

 <setting name="InvalidItemNameChars" value="\/:?&quot;&lt;&gt;|[]-"/>

Это все работает нормально - пока я не попытаюсь создать новое определение языка.Для языков в Sitecore можно использовать простой код языка (например, en, da, de и т. Д.) Или код языка и региона (ISO), например en-GB, da-DK, de-DE и т. Д. Для наших сайтов нам понадобитсярегиональные коды, поскольку мы намереваемся поддерживать региональные языковые различия (например, швейцарский французский и швейцарский немецкий).Но, конечно, я теперь запретил дефис в именах элементов (и языки, как и все остальное в Sitecore, определяются как элементы).На самом деле Sitecore требует, чтобы имя языка было правильно сконструировано как идентификатор культуры, поэтому я не могу присвоить языку описательное имя (например, американский английский) с кодом iSO, указанным в поле кода ISO шаблона.

Может кто-нибудь предложить подходящее решение для этого?Должен ли я удалить дефис из узла InvalidItemNameChars и написать собственный фрагмент кода, который прерывает попытку создания имен элементов с переносами i?Если да, то как мне узнать событие создания?

Мне не хочется настраивать интерфейс там, где он не нужен, особенно потому, что я обеспокоен тем, что это может создать проблемы для обновлений версии Sitecore, поэтому, если есть другие решения, я бы хотел их услышать.

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 14 января 2011

Используется механизм правил для замены специальных символов, таких как пробелы в именах элементов:

https://marketplace.sitecore.net/en/Modules/Item_Naming_rules.aspx

Если вы не заменили, а просто перевели, при обработке URL, Sitecoreраспознаватель элементов будет пытаться искать имена элементов с тире, а не пробелами, и не будет находить соответствующие элементы.Если вы на самом деле не заменяете символы, вам нужно переопределить средство разрешения элементов.

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

3 голосов
/ 10 января 2011

Вы можете написать класс и поместить его в событие сохранения элемента в файле web.config. Просто напишите метод OnItemSaved и попросите его проверить дефис в имени. Я думаю, вам нужно будет сделать это и при переименовании, и при копировании.

<event name="item:saved">
  <handler type="Sitecore.Links.ItemEventHandler, Sitecore.Kernel" method="OnItemSaved" />
  <handler type="Sitecore.Tasks.ItemEventHandler, Sitecore.Kernel" method="OnItemSaved" />
  <handler type="Sitecore.Globalization.ItemEventHandler, Sitecore.Kernel" method="OnItemSaved" />
  <handler type="Sitecore.Rules.ItemEventHandler, Sitecore.Kernel" method="OnItemSaved" />
  <handler type="YourAssembly.ItemEventHandler, YourAssembly" method="OnItemSaved" />
</event>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...