我对Umbraco很新,并没有完成xslt或javascripting。我有多个网站提供CMS。但主要内容相同,横幅会有所不同。为了解决这个问题,我想运行一些宏或代码来检索网站的域名,并根据该域名调用Umbraco模板中的相应横幅进行显示。如果可行以及如何操作,请告诉我。如果不可行,那么正确的做法是什么。
亲切的问候 Brainbox
答案 0 :(得分:2)
有几种方法可以做到这一点。
如果网站使用不同的模板但使用相同的宏(方法0):
将一个paremeter添加到宏(在开发人员部分),然后相应地更新代码。
模板:
<umbraco:Macro Alias="MyMacro" runat="server" MyParam="Hello, world" />
XSLT:
<xsl:value-of select="/macro/MyParam" />
如果网站使用相同的模板以及宏(方法1):
您可以使用umbraco的库来检索主机名并根据它执行不同的代码。在每个不同站点的内容部分中创建一个节点并在那里上传横幅,然后通过各自的节点ID在XSLT中引用它们
XSLT:
<!-- this gets the domain name -->
<xsl:variable name="domainName">
<xsl:value-of select="umbraco.library:RequestServerVariables('HTTP_HOST')" />
</xsl:variable>
<!-- determine which banner to show -->
<xsl:choose>
<xsl:when test="$domainName = 'www.websiteone.com'">
<!-- get the node for website one -->
<xsl:variable name="websiteOneHeaderNodeId" select="1001" />
<xsl:variable name="websiteOneHeaderNode" select="umbraco.library:GetXmlNodeById($websiteOneHeaderNodeId)" />
<!-- display the banner for website one -->
<img src="{$websiteOneHeaderNode/banner}" />
</xsl:when>
<xsl:when test="$domainName = 'www.websitetwo.com'">
<!-- get the node for website two -->
<xsl:variable name="websiteTwoHeaderNodeId" select="1002" />
<xsl:variable name="websiteTwoHeaderNode" select="umbraco.library:GetXmlNodeById($websiteTwoHeaderNodeId)" />
<!-- display the banner for website two -->
<img src="{$websiteTwoHeaderNode/banner}" />
</xsl:when>
<xsl:otherwise>
<!-- display the default banner -->
<img src="/media/1001/defaultBanner.jpg" />
</xsl:otherwise>
</xsl:choose>
如果网站使用相同的模板以及宏(方法2):
这种方式更清洁,并利用了Umbraco的优点。我建议在表示每个站点的根节点的文档类型中添加属性。假设此文档类型的别名为Site
,属性的别名为bannerUrl
。然后,您可以将不同的横幅上传到每个Site
的内容节点,然后在XSLT中访问它。根据用户当前正在查看的页面,甚至具有不同文档类型的子页面(并假设它具有您的宏),以下XSLT将找到相应的bannerUrl
依赖于它所在的Site
节点。 / p>
XSLT:
<xsl:value-of select="$currentPage/ancestor-or-self::Site/bannerUrl" />