SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




RSS-Anzeige - Filter einbinden

Unbeantwortet Dieser Beitrag hat 3 Antworten

Ohne Rang
6 Beiträge
Sabrina erstellt 22 Sept. 2015 11:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

ich habe auf einer SharePoint-Website (V2013) ein Webpart „RSS-Anzeige“ eingebunden, das auf die Feeds einer Liste anzeigt. Soweit funktioniert das auch. Ich möchte nun gerne definieren wie alt die Einträge maximal sein dürfen, d.h.  Feeds, die älter als einen Monat sind sollen nicht mehr angezeigt werden.

Hierzu habe ich mich am XSL-Editor versucht, der unter der Bearbeitung des Webparts „Eigenschafen der Datenansicht“ zu finden ist. Leider ohne Erfolg.

Daher nun meine Frage: Weiß jemand von euch wie man so eine Filter-Funktion mit Datumsberechnung (also spätmöglichstes Datum im betrachteten Bereich) einbaut?

Ich vermute, dass das im RSSMainTemplate.body eingebunden und das pubDate aus dem RSSMainTemplate.description zur Realisierung genutzt werden muss. Hier deshalb der XSL-Teil zum Webpart:

<xsl:template name="RSSMainTemplate.body" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
            <xsl:param name="Rows"/>
            <xsl:param name="RowCount"/>
   <!-- 2015-08-20 SSc: choose, um Meldung darzustellen, wenn keine RSS-Feeds vorliegen -->
   <xsl:choose>
   <xsl:when test="$RowCount &gt; 0">

            <xsl:for-each select="$Rows">
                <xsl:variable name="CurPosition" select="position()" />
                <xsl:variable name="RssFeedLink" select="$rss_WebPartID" />
                <xsl:variable name="CurrentElement" select="concat($RssFeedLink,$CurPosition)" />
                <xsl:if test="($CurPosition &lt;= $rss_FeedLimit)">
                    <div class="item link-item" >
                            <a href="{concat(&quot;javascript:ToggleItemDescription('&quot;,$CurrentElement,&quot;')&quot;)}" >
                                <xsl:value-of select="title"/>
                            </a>
                            <xsl:if test="$rss_ExpandFeed = true()">
                                <xsl:call-template name="RSSMainTemplate.description">
                                    <xsl:with-param name="DescriptionStyle" select="string('display:block;')"/>
                                    <xsl:with-param name="CurrentElement" select="$CurrentElement"/>
                                </xsl:call-template>
                            </xsl:if>
                            <xsl:if test="$rss_ExpandFeed = false()">
                                <xsl:call-template name="RSSMainTemplate.description">
                                    <xsl:with-param name="DescriptionStyle" select="string('display:none;')"/>
                                    <xsl:with-param name="CurrentElement" select="$CurrentElement"/>
                                </xsl:call-template>
                            </xsl:if>
                    </div>                           
                </xsl:if>
            </xsl:for-each>
   </xsl:when>
   <xsl:otherwise>
   <h5 style="color: #002b7f;">In der letzten Zeit wurden keine neuen Elemente erstellt.</h5>
   </xsl:otherwise>
   </xsl:choose>

        </xsl:template>

 <xsl:template name="RSSMainTemplate.description" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
            <xsl:param name="DescriptionStyle"/>
            <xsl:param name="CurrentElement"/>
     <div id="{$CurrentElement}" class="description" align="{$rss_alignValue}" style="{$DescriptionStyle} text-align:{$rss_alignValue};">
                <xsl:choose>
                    <!-- some RSS2.0 contain pubDate tag, some others dc:date -->
                    <xsl:when test="string-length(pubDate) &gt; 0">
                        <xsl:variable name="pubDateLength" select="string-length(pubDate) - 3" />
          <xsl:value-of select="ddwrt:FormatDate(substring(pubDate,0,$pubDateLength),number($rss_LCID),3)"/>
                    </xsl:when>
                    <xsl:otherwise>
                     <xsl:value-of select="ddwrt:FormatDate(string(dc:date),number($rss_LCID),3)"/>
                    </xsl:otherwise>
                </xsl:choose>

                <xsl:if test="string-length(description) &gt; 0">
                    <xsl:variable name="SafeHtml">
                        <xsl:call-template name="GetSafeHtml">
                            <xsl:with-param name="Html" select="description"/>
                        </xsl:call-template>
                    </xsl:variable>
                     - <xsl:value-of select="$SafeHtml" disable-output-escaping="yes"/>
                </xsl:if>
      <div class="description">
          <a href="{ddwrt:EnsureAllowedProtocol(string(link))}">Weitere...</a>
         </div>
        </div>
        </xsl:template>

Ich hoffe jemand hat eine Idee zur Lösung meines Problems. Bei Fragen oder Verständnisproblemen gebe ich gerne mehr Infos

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Sept. 2015 13:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das ist nicht ganz trivial. Hier findet man das Datum:

[quote user="Sabrina"]<xsl:choose>
                    <!-- some RSS2.0 contain pubDate tag, some others dc:date -->
                    <xsl:when test="string-length(pubDate) &gt; 0">
                        <xsl:variable name="pubDateLength" select="string-length(pubDate) - 3" />
          <xsl:value-of select="ddwrt:FormatDate(substring(pubDate,0,$pubDateLength),number($rss_LCID),3)"/>
                    </xsl:when>
                    <xsl:otherwise>
                     <xsl:value-of select="ddwrt:FormatDate(string(dc:date),number($rss_LCID),3)"/>
                    </xsl:otherwise>
                </xsl:choose>[/quote]

Das kannst Du im .body-Template hinter die Zeile <xsl:if... setzen. Baue dabei ganz außen drumrum, also so daß <xsl:choose> ... </xsl:choose> komplett darin steht, <xsl:variable name=myDate> hier das choose </xsl:variable>

Jetzt hast Du das Datum in der Variablen $myDate und kannst daraus noch eine Bedingung erstellen:

<xsl:if test="ddwrt:DateTimeTick($myDate) &lt; ddwrt:DateTimeTick(ddwrt:GenDisplayName(string('Today')))-30">

Die -30 am Ende geben an, wie alt ein Beitrag maximal sein darf.

Disclaimer: das ist ungetestet und muß bestimmt noch an ein paar Stellen getunt werden.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
6 Beiträge
Sabrina Als Antwort am 22 Sept. 2015 14:21
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

danke für die schnelle Antwort, leider habe ich die nur nicht ganz verstanden:

  1. Meinst du das erste "if" im Body (<xsl:if test="($CurPosition &lt;= $rss_FeedLimit)">) oder das zweite (<xsl:if test="$rss_ExpandFeed = true()">)?
  2. Soll das Choose, das if umklammern oder in dem if stehen und den Zusatzcode umklammern?
Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Sept. 2015 14:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

1. ich meinte das erste if

2. sorry, ich war hier ungenau. Das if hat nicht direkt mit dem choose zu tun . Es kommt hinter das schließende </xsl:variable>, das Du gerade eingefügt hast und umklammert quasi den ganzen Rest. Mit der Bedingung gibst Du an, welche Zeilen überhaupt ausgegeben werden.

Viele Grüße
Andi
af @ evocom de
Blog