在Sitecore 6.2中使用多语言站点时,我希望能够让Sitecore用连字符替换URL中的“”(空格,传统上用%20替换)。
例如: www.MySite.com/Hello World > www.MySite.com/Hello-World
到目前为止,没有问题,我们只需向encodeNameReplacements添加另一个条目
<replace mode="on" find=" " replaceWith="-" />然后,为了防止我们的内容作者创建名称中带有连字符的项目( Sitecore会将其理解为在读取其URL时有一个空格,从而导致404 Not Found),我们可以将连字符添加到项目名称中禁止的字符列表中,使用
<setting name="InvalidItemNameChars" value="\/:?"<>|[]-"/>这一切都很好--直到我尝试创建一个新的语言定义。Sitecore中的语言既可以使用简单的语言代码(例如en、da、de等),也可以使用语言和区域代码(ISO),例如en-GB、da-DK、de-DE等。对于我们的网站,我们需要区域代码,因为我们打算支持区域语言变体(例如瑞士法语和瑞士德语)。当然,我现在已经禁止在项目名称中使用连字符(和Sitecore中的其他所有语言一样,都被定义为项目)。事实上,Sitecore要求将语言名称正确构造为文化标识符,因此我不能使用模板的iSO代码字段中指定的ISO码为语言分配描述性名称(例如,美国英语)。
有没有人能给出一个合适的解决方案呢?我是否应该从InvalidItemNameChars节点中删除连字符,并编写一个自定义代码片段来捕获尝试创建连字符项目名称的行为?如果是这样,我应该如何处理创建事件?
我不喜欢在不必要的地方定制界面,特别是我担心这可能会给Sitecore版本更新带来问题,所以如果有其他解决方案,我很想听听他们的意见。
提前谢谢。
发布于 2011-01-14 22:43:56
这将使用规则引擎替换项目名称中的特殊字符,如空格:
https://marketplace.sitecore.net/en/Modules/Item_Naming_rules.aspx
如果您在处理URL时不进行替换,而只是进行翻译,Sitecore的项目解析器将尝试查找带有破折号而不是空格的项目名称,并且不会找到匹配的项目。如果您不实际替换字符,则需要覆盖项目解析器。
如果您希望将名称保留为用户可见的空格,但实际为项目命名时使用短划线,则可以在将空格重命名为短划线时将项目的显示名称设置为原始值,但我建议您不要这么做。
发布于 2011-01-11 03:13:57
您可以编写一个类并将其放入web.config的item saved事件中。只需编写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>https://stackoverflow.com/questions/4646616
复制相似问题