(Umbraco)可以从子节点到主页获取文本但不能获取图像

时间:2013-08-09 19:36:16

标签: xslt umbraco

我正在尝试从“精选”(Home / Featured / Article1,2,...,N)小节中的文章中获取文字和图片,但我没有得到图片。这个代码可以很好地从“特色”节点内的每篇文章中获取文本。

 <xsl:if test="position() &lt; $maxItems">
     <h3><a href="{umbraco.library:NiceUrl(@id)}">
         <xsl:value-of select="newsTitle"/>
         </a>
     </h3>
     <strong><xsl:value-of select="intro"/></strong>

     <br/>      
     <small>
         A: <xsl:value-of select="umbraco.library:FormatDateTime($currentPage/@updateDate, 'MMMM d, yyyy')"/> 
         Por:  <xsl:value-of select="author"/>
     </small>
 </xsl:if>

它运作得很好。但我无法从文章中获取图像。我正在尝试这种方式,其中包括:

<a href="{umbraco.library:NiceUrl(@id)}">
    <xsl:if test="count(./* [@isDoc]) > 0">
    <img src="{concat(substring-before(./*/thumbnail,'.'), '_thumb.jpg')}"/>
    </xsl:if>     
</a>

我不知道该怎么做,我正在使用'Upload'属性作为元素,也使用'MediaPicker'(别名:'thumbnail'),所以,我一直在测试这些属性类型但是还没有得到任何东西。我只想将文章的图像(如果存在)放在从childnode检索到的文本旁边的主页上。

我会感激你的帮助。提前谢谢!

[Umbraco 6.1.3]

3 个答案:

答案 0 :(得分:0)

这是一个例子:

<xsl:variable name="mediaId" select="number($currentPage/mediaId)" />
<xsl:if test="$mediaId > 0">
    <xsl:variable name="mediaNode" select="umbraco.library:GetMedia($mediaId, 0)" />
    <xsl:if test="$mediaNode/umbracoFile">
        <img src="{$mediaNode/umbracoFile}" alt="[image]" height="{umbracoHeight}" width="{umbracoWidth}" />
    </xsl:if>
</xsl:if>

How to use umbraco.library GetMedia in XSLT

答案 1 :(得分:0)

在你的情况下,这应该可以解决问题:

<a href="{umbraco.library:NiceUrl(@id)}">
  <xsl:if test="$currentPage/thumbnail != ''">
   <img src="{umbraco.library:GetMedia($currentPage/thumbnail, 0)/umbracoFile}"/>
  </xsl:if>     
</a>

请参阅this page以获取参考资料

答案 2 :(得分:0)

我认为错误是你需要选择一个属性,而不是一个节点。 您正在使用@isDoc属性,因此不会选择任何属性。

如上所述,“thumbnail”是数据类型“Upload”的节点上的属性(假设此处只有1个缩略图)(将路径的值保存为字符串):

<xsl:if test="string-length(./thumbnail) > 0">
<a href="{umbraco.library:NiceUrl(@id)}">
<img src="{concat(substring-before(./thumbnail,'.'), '_thumb.jpg')}"/>
</a>
</xsl:if>   

或使用“media picker”数据类型(将media-item的nodeid保存为int):

<xsl:if test="string-length(./thumbnail) > 0">
<xsl:variable name="image" select="umbraco.library:GetMedia(./thumbnail,0)"/>
<a href="{umbraco.library:NiceUrl(@id)}">
<img src="{concat(substring-before($image/umbracoFile,'.'), '_thumb.jpg')}"/>
</a>
</xsl:if>

由于发布的其他代码工作正常,并且它没有使用$ currentPage,我假设此代码包含在模板中,或者您正在迭代一组节点。

我还会将link元素放在if语句中,并在创建链接之前检查缩略图是否可用,只是为了避免空链接元素。