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

时间:2012-01-13 17:15:34

标签: c# javascript xslt umbraco

我对Umbraco很新,并没有完成xslt或javascripting。我有多个网站提供CMS。但主要内容相同,横幅会有所不同。为了解决这个问题,我想运行一些宏或代码来检索网站的域名,并根据该域名调用Umbraco模板中的相应横幅进行显示。如果可行以及如何操作,请告诉我。如果不可行,那么正确的做法是什么。

亲切的问候 Brainbox

1 个答案:

答案 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" />