我使用以下代码生成xslt中项目的链接:
<sc:link select=".">
<xsl:value-of select="sc:fld('SomeField',.)" />
</sc:link>
不幸的是,当项目名称中包含空格时,生成的URL包含空格,而不是%20。 我希望有一些设置我可以调整来解决这个问题。有人知道解决方案吗?
答案 0 :(得分:4)
一种解决方案是使用Sitecores encodeNameReplacers。
在web.config中找到该部分并添加:
<replace mode="on" find=" " replaceWith="-" />
此处有更多信息:http://sitecoreninja.blogspot.co.uk/2013/03/replace-space-with-dash-in-url.html
答案 1 :(得分:0)
只需使用“翻译”功能:
<sc:link select=".">
<xsl:value-of select="sc:fld('SomeField',translate(., ' ', '-'))"/>
</sc:link>
答案 2 :(得分:0)
回答我自己的问题,因为我比Mark更喜欢我的解决方案。
我已将一个公共静态方法public static string UrlPathEncode(string)
添加到作为xsl扩展类添加的类中:
public static string UrlPathEncode(string url)
{
return HttpUtility.UrlPathEncode(url);
}
将此添加到web.config:
<xslExtensions>
<extension mode="on" type="MyProject.Xsl.XslHelper, MyProject"
namespace="http://www.myproject.net/sc" singleInstance="true" />
..
添加对xslt文件的引用:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:mp="http://www.myproject.net/sc"
..
现在您可以像这样使用UrlPathEncode函数:
<a href="{mp:UrlPathEncode(sc:path(.))}">
<xsl:value-of select="sc:fld('SomeField',.)" />
</a>
不是一个优雅的解决方案,但它会对URL路径中不允许的每个字符进行编码。