4

我正在为一个链接到另一个组件的组件创建 XSLT TBB。

考虑我的组件名称是“A”,它链接到另一个组件“B”。

组件 A 的源代码如下所示:

<Content xmlns="Some UUID">
    <Name xlink:type="simple" xlink:href="tcm:184-1897" 
          xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title="B"></Name>
</Content>

组分 B 来源是:

<Content xmlns="Some UUID">
    <first>first filed</first>
    <second>second field</second>
</Content>

谁能帮我写一个 XSLT TBB 来输出这个链接组件的值?

谢谢你。

4

4 回答 4

4

请解释“处理此组件链接”的含义。

您的意思是要在内容管理器端的 TBB 中访问此链接的组件及其字段,还是您的意思是要在 HTML 中输出链接到您网站上的其他组件的锚标记?

于 2012-04-20T09:34:32.650 回答
4

为了访问链接组件中的字段,您需要使用文档函数加载它,请记住链接组件可能基于不同的模式,因此具有不同的名称空间,如下所示:

组分 A

<Content xmlns="Some UUID">
    <Name xlink:type="simple" 
        xlink:href="tcm:184-1897" 
        xmlns:xlink="http://www.w3.org/1999/xlink" 
        xlink:title="B"/>
</Content>

B组份

<Content xmlns="Some Other UUID">
    <Text>Some Value</Text>
</Content>

然后,您可以转换组件 A 并访问链接的组件 B,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:main="Some UUID" 
    xmlns:link="Some Other UUID" 
    xmlns:xlink="http://www.w3.org/1999/xlink" >
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <xsl:variable name="LINKED_COMPONENT" select="document(//main:Name/@xlink:href)"/>
        <xsl:value-of select="$LINKED_COMPONENT//link:Text"/>
    </xsl:template>
</xsl:stylesheet>

请注意,我在 XPath 中使用了“//”以使代码更易于阅读,但从性能的角度来看,这并不理想。

如果由于某种原因您不知道链接的组件将基于什么模式(因此命名空间),您也可以使用该$LINKED_COMPONENT//*[local-name()='Text']符号,但这又会带来性能损失。

于 2012-04-20T15:46:12.630 回答
3

要输出您的组件链接到的图像,请查看以下内容:http: //yoavniran.wordpress.com/2009/07/11/implementing-the-xslt-mediator-part-1

<xsl:element name="img">
    <xsl:attribute name="src">
        <xsl:value-of select="simple:image/@xlink:href"/>
    </xsl:attribute>
</xsl:element>

编辑:要输出链接组件的附加字段,请参阅本节:http: //yoavniran.wordpress.com/2009/07/11/implementing-the-xslt-mediator-part-1/#complink

那里的一个例子:

<xsl:attribute name="alt">
    <xsl:value-of select="document(simple:image/@xlink:href)/tcm:Component/tcm:Data/tcm:Metadata/image:Metadata/image:altText"/>
</xsl:attribute>

所以这会加载多媒体组件,然后从元数据字段中提取一个值。

于 2012-04-20T09:28:24.153 回答
1

这是从多值组件链接中提取一些字段的 XSLT 代码。请记住,组件链接属于同一架构。

<!-- language: xml -->
<xsl:for-each select="base:componentLink">
<xsl:element name="div">      
  <xsl:variable name ="LinkedComponent" select="document(./@xlink:href)"></xsl:variable>
  <xsl:value-of select="$LinkedComponent/tcm:Component/tcm:Data/tcm:Content/linked:Teaser/linked:LinkText"/>      
</xsl:element>
</xsl:for-each>
于 2012-07-11T10:49:19.287 回答