2011-01-10 2 views
4

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

E.g. www.MySite.com/Hello Мир> www.MySite.com/Hello-World

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

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

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

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

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

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

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

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

ответ

4

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

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

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

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

+0

Спасибо, что идеально подходит для нас. –

3

Вы можете написать класс и поместить его в сохраненное событие item в файле 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> 
Смежные вопросы