2011-01-10 67 views
4

在Sitecore 6.2中使用多種語言站點我希望Sitecore能夠在帶有連字符的URL中替換「」(空格,傳統上用%20替換)。Sitecore URL優化和語言

E.g. www.MySite.com/Hello世界> www.MySite.com/Hello-World

到目前爲止沒有問題,我們只是另一項添加encodeNameReplacements

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

隨後阻止我們的內容創作者從創建項目在其名稱(這Sitecore的所理解的閱讀他們的網址時,有空間,導致404未找到),我們可以將連字符添加到項目名稱禁止文字列表中選擇一個連字符,使用

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

這一切都很好 - 直到我嘗試創建一個新的la語言定義。 Sitecore中的語言可以使用簡單的語言代碼(例如en,da,de等)或語言和區域代碼(ISO),例如en-GB,da-DK,de-DE等。對於我們的網站,我們需要因爲我們打算支持地區性語言變體(如瑞士法語和瑞士德語)。但是,我現在已經禁止項目名稱中的連字符(和語言,因爲Sitecore中的所有其他項都被定義爲項目)。實際上,Sitecore要求將語言名稱作爲文化標識符正確構建,因此我無法使用模板的ISO代碼字段中指定的iSO代碼爲語言指定描述性名稱(例如美式英語)。

任何人都可以提出一個合適的解決方案嗎?我應該從InvalidItemNameChars節點中刪除連字符,並編寫一個自定義代碼片段來捕獲試圖創建連字符的項目名稱i?如果是這樣,我應該如何參與創作活動?

我不喜歡自定義界面,特別是在我擔心這可能會導致Sitecore版本更新出現問題,所以如果有其他解決方案,我很樂意聽到他們。

在此先感謝。

回答

4

它使用規則引擎來替換特殊字符,如項目名稱空間:

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

如果你沒有更換,只是翻譯,處理URL時,Sitecore的項目解析會嘗試使用破折號而不是空格查找項目名稱,並且找不到匹配的項目。如果你實際上沒有替換字符,那麼你需要重寫項目解析器。

如果您希望將空格留給用戶可見的空間,但實際上用短劃線命名項目,則可以使用空格將該項目的顯示名稱設置爲原始值,當將空格重命名爲破折號時,但我會建議反對。

+0

謝謝,這對我們來說看起來很完美。 – 2011-01-14 19:11:09

3

您可以編寫一個類並將其放入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>