2012-01-13 45 views
1

我是Umbraco的新手,並沒有完成xslt或javascripting。我有多個網站提供CMS。但主要內容相同,橫幅會有所不同。爲了解決這個問題,我想運行一些宏或代碼來檢索網站的域名,並根據該域名在Umbraco模板中調用適當的橫幅來顯示。請讓我知道這是否可行,以及如何去做。如果這是不切實際的做法。一個umbraco上的多個網站,需要xslt宏?

親切的問候 Brainbox

回答

2

有幾個方法可以做到這一點。


如果站點使用不同的模板,但相同的宏(方法O):

添加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

XSLT:

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

您好,感謝您的help.I嘗試使用方法2但是,它並沒有爲我工作,因爲只有網站的頁眉和頁腳將是不同的,我需要有因此,我使用了方法1.現在,我爲不同的網站製作了2個文件夾,我在這裏爲頁眉和頁腳存儲了不同的標題(不同的網站顯然不同)。我沒有讓它們成爲根目錄節點,那麼他們將不得不結合主頁模板和主,我相信這將是客戶端的重複。 – brainbox 2012-01-19 17:19:48

+0

現在,我想知道如何獲得保存在這些不同文件夾中的橫幅或文本。即我將如何爲網站1和網站2提供xsl宏的路徑。請指教。親切的問候,莎拉 – brainbox 2012-01-19 17:23:34

+0

@brainbox - 嗨,莎拉。方法1應該適合您需要實現的功能。您只需要在內容部分添加一棵樹,所以沒有重複的內容。然後有一個主模板調用兩個宏(一個用於頁眉,一個用於頁腳)。然後使用XSLT'choose'邏輯顯示適當的內容。您可以將圖像上傳到媒體部分,只需使用XSLT代碼內嵌文本即可。如果橫幅和頁腳文本需要由客戶端進行內容管理,則可以始終爲根網站節點上的每個網站創建屬性,並以此方式引用它們。 – 2012-01-20 07:09:25