2015-04-03 25 views
2

我有一個名爲Products的部分,其中每個產品都由Text InputMultilingual Text Box定義。我創建了超過100種具有自定義描述的產品。在某些時候,我需要本年度放置在Multilingual Text Box如何在Symphony中的XML內使用XSL CMS

Lorem ipsum dolor <xsl:value-of select="$this-year" /> ipsum <a href="{$root}">Link to root</a> 

這給:

'長說明' 包含無效的XML。返回以下錯誤:loadXML的():名稱空間前綴XSL的價值是不是在實體

或定義我想從數據源打印數據:

Lorem ipsum 
<xsl:variable name="products" select="/data/products" /> 
<xsl:for-each select="$products"> 
    //... do other XSL stuff in XML 
</xsl:for-each> 

這當然會引起錯誤也是。

請注意,我完全是Symphony/XSLT的初學者,並且一些概念仍然不被我理解。

+0

XSL通常用於轉換已經創建的XML文檔(通常稱爲XSLT)。您可能需要閱讀該基礎知識。 http://www.w3schools.com/xsl/xsl_languages.asp – 2015-04-03 23:43:19

+0

這很讓人傷心,直到我知道Symphony沒有提供任何其他合理的方式來創建引用網站內容(變量,數據源等)的複雜條目,在管理面板中。我們真的可以把Symphony叫做CMS嗎? – 2015-04-04 00:04:04

+0

沒有線索。從來沒有聽說過交響樂。我是一名Java軟件工程師,碰巧對XSLT有一些背景知識,並且根據您的代碼(而不是在這裏粗魯),看起來您做錯了。只是想讓你知道。也許有更多Symphony或其他CMS工具經驗的人可以提供更多幫助。 – 2015-04-04 00:06:57

回答

1

交響樂團社區幫助我這個問題,所以讓我報價jonmifsud

這樣做會使用什麼所謂的XSLT忍者技術的最簡單方法。最簡單的方法(...)將創建將被替換的html標籤。例如,我們可以要求他在您希望今年顯示的文本中輸入<this-year/>,這意味着當您輸出使用的文本時<xsl:apply-template select=‘your-text’ mode=‘html'/>。現在用XSLT的伎倆將是以下幾點:您將需要匹配您的變量來創建新的「標籤」,取而代之的是你想要的值

<xsl:template match="this-year" mode="html"> 
    <xsl:value-of select="/data/params/this-year"> 
</xsl:template> 

<xsl:template match="*" mode="html"> 
    <xsl:element name="{name()}"> 
     <xsl:apply-templates select="* | @* | text()" mode="html"/> 
    </xsl:element> 
</xsl:template> 

<xsl:template match="@*" mode="html"> 
    <xsl:attribute name="{name()}"> 
     <xsl:value-of select="."/> 
    </xsl:attribute> 
</xsl:template> 

這種方法幾乎是無限的。