问题是我有一个共同的“XHTML模板”,但不同的相对位置,然后一些页面不是css文件。
我试图在sitemap(cocoon)
上执行此操作<map:match pattern="index.html">
<map:generate src="data/courses-small.xml" type="file"/>
<map:transform src="xsl/department_listing.xsl" type="xslt2" >
<map:parameter name="relative_path" value="{baselink:SitemapBaseLink}"/>
</map:transform>
<map:serialize type="xhtml" />
</map:match>
然后在常见的xsl的顶部我有这个
<xsl:param name="relative_path"/>
后来我正在使用这样的参数:
<xsl:template match="/">
<html>
<head>
<title><xsl:value-of select="$displaytitle"/></title>
<link rel="stylesheet" type="text/css" href="http://localhost:8080/cocoon/assignment2/css/style.css" />
<link rel="stylesheet" type="{$relative_path}css/style.css" />
</head>
问题是$ relative_path没有产生任何值,变量是空的,我不知道如何修复它。
提前感谢您的帮助。
答案 0 :(得分:0)
$relative_path
会在逻辑上生成空字符串,如果您“匹配”位于您的cocoon应用程序根目录的网址,“文件夹方式”就像你在<map:match pattern="index.html">…</map:match>
然而,
$relative_path
将解析为../
字符串,例如类似于<map:match pattern="subfolder/index.html">…</map:match>
或{{的上下文1}} <map:match pattern="*/index.html">…</map:match>
上下文中的../
)../../../..
这应该是它。
我没有,那么你的设置可能还有其他的怪癖:
确保您拥有CSS的匹配器:如果您将其网址放入浏览器的地址栏,Cocoon是否成功投放?
不要输错;也许它只是在SO而不在你的代码中,但你应该在你的XSL中修复HTML:
<map:match pattern="foo/*/bar/*/index.html">…</map:match>
正如Dimitre Novatchev所指出,请确保您的<link rel="stylesheet" type="{$relative_path}css/style.css" />
<!-- should read: -->
<link rel="stylesheet" type="text/css" href="{$relative_path}css/style.css" />
位于XSL中的正确位置,例如:
<xsl:param name="relative_path"/>