一个umbraco上有多个网站,需要xslt宏

multiple websites on one umbraco, xslt macro required?

本文关键字:需要 xslt 网站 umbraco 一个      更新时间:2023-09-26

我是Umbraco的新手,没有做过xslt或java脚本。我有不止一个网站提供CMS。主要内容是相同的,但是横幅会有所不同。为了解决这个问题,我想运行一些宏或代码来检索网站的域名,并根据该域名在Umbraco模板中调用适当的横幅来显示。请让我知道它是否可行以及如何做。如果它不可行,那么正确的方法是什么。

谨致问候Brainbox

有几种方法可以做到这一点。


如果站点使用不同的模板但使用相同的宏(方法0):

在宏中添加一个参数(在开发人员部分),然后相应地更新代码。

模板:

<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也会根据其所在的Site节点找到适当的bannerUrl

XSLT:

<xsl:value-of select="$currentPage/ancestor-or-self::Site/bannerUrl" />