2012-04-04 9 views
0

Meine Absicht ist es, eine Liste von Nachrichten zu erstellen, und es wird ein Thumbnail (news_teaserimage) an einige Nachrichten angehängt. Das Problem ist, dass, wenn ich nur Medien in einigen der Knoten auswähle, bekomme ich einen xslt-Fehler, und kein Code wird generiert. Wenn ich Medien in allen Knoten auswähle, dann funktioniert es. Die Absicht ist, dass der Code die Knoten unabhängig davon, ob es ein Bild gibt oder nicht, generiert. Wenn kein Bild ausgewählt ist, wird es nicht angezeigt.Umbraco - zeigt Knoten, wenn nicht alle Medien ausgewählt werden

Was mache ich falsch?

<ul> 

<xsl:for-each select="umbraco.library:GetXmlNodeById($source)/* [@isDoc and string(umbracoNaviHide) != '1']"> 
<xsl:variable name="media" select="umbraco.library:GetMedia(news_teaserimage, 0)"/> 

    <li> 
    <h2><xsl:value-of select="@nodeName"/></h2> 
    <h5><xsl:value-of select="@createDate"/></h5> 

<xsl:if test="news_teaserimage"> 
<img src="{$media/umbracoFile}" width="70" height="70" style="float: left; padding-right: 10px; padding-bottom: 10px;" /> 
</xsl:if> 

     <xsl:value-of select="news_shorttext" disable-output-escaping="yes"/> 
    <xsl:if test="news_largetext"> 
     <br /> 
<a style="float: left; clear: both; margin-top: -10px;" href="{umbraco.library:NiceUrl(@id)}"> 
     Read more 
    </a> 

</xsl:if> 


    </li> 
</xsl:for-each> 
</ul> 
+0

Können Sie die genaue Fehlermeldung in Ihrer Frage sind auch . Ist es "Wert war entweder zu groß oder zu klein für einen Int32."? –

+0

Verschieben Sie die "umbraco.library: GetMedia (news_teaserimage, 0)" aus dem xsl: Variablen-Tag in das xsl: if-Tag und wickeln Sie dieses xsl: um den gesamten Rest des Codes in li –

Antwort

0

GetMedia aufrufen, wenn es nichts in der Variablen ist, dass Sie es auf (news_teaserimage in Ihrem Fall) sind Aufruf wird eine XSLT-Fehler verursachen, da es keine Medien ist das ein Medien Knoten zu erhalten, wenn wurde nicht ausgewählt. Sie müssen nur Ihren Code ein wenig nachrüsten, damit er funktioniert. Verschieben Sie die Codezeile, der Sie die Variable "media" zuweisen, in die if-Anweisung, in der Sie überprüfen, ob das Element news_teaserimage vorhanden ist. So wird es nur aufgerufen, wenn tatsächlich ein Wert vorhanden ist.

Sie müssen möglicherweise auch den if-Test in etwa wie folgt ändern: string-length (news_teaserimage) > 0, da es das if auslösen kann, wenn das Element vorhanden, aber leer ist.

0

Bewegen Sie den umbraco.library:GetMedia(news_teaserimage, 0) Anruf aus dem xsl:variable Tag in den xsl:if-Tag, und wickelt, dass xsl:if um die ganzen Rest des Codes in den li:

<ul> 
<xsl:for-each select="umbraco.library:GetXmlNodeById($source)/* [@isDoc and string(umbracoNaviHide) != '1']"> 

    <li> 
    <xsl:if test="umbraco.library:GetMedia(news_teaserimage, 0)"> 
    <h2><xsl:value-of select="@nodeName"/></h2> 
    <h5><xsl:value-of select="@createDate"/></h5> 

    <img src="{$media/umbracoFile}" width="70" height="70" style="float: left; padding-right: 10px; padding-bottom: 10px;" /> 

    <xsl:value-of select="news_shorttext" disable-output-escaping="yes"/> 

    <xsl:if test="news_largetext"> 
     <br /> 
     <a style="float: left; clear: both; margin-top: -10px;" href="{umbraco.library:NiceUrl(@id)}"> 
     Read more 
     </a> 
    </xsl:if> 
    </li> 
</xsl:for-each> 
</ul> 
Verwandte Themen