URL-Parameter über WSL oder XSL ermitteln

Nutzbar ab: Version

Am Beispiel des Veranstaltungskalenders zeigen wir Ihnen, wie Sie URL-Parameter im Zeilentemplate auslesen können.

Ausgehend vom Weblic® Veranstaltungskalender zeigen wir Ihnen, wie Sie einen Wert aus den Objektdaten über das Zeilentemplate aus der URL auslesen können.

Im Beispiel wurde das Objekt einer Veranstaltung zusätzlich zu den Termindaten (von, bis) um eine Statusangabe (frei, belegt, etc.) erweitert. Auf die Pflegemaske wird an dieser Stelle nicht weiter eingegangen, sondern lediglich der Inhalt der Objektdaten angeführt.
Innerhalb des wd:data Bereiches mit der id="dates" wird zu jedem Termineintrag ein Status gesetzt (z.B. status="frei"):

Beispiel: Auszug aus einer Veranstaltung (z.B. /de/veranstaltungen/termine/fruehjahrskonzert-2012.php)

...
    <wd:object type="eventMulti">
      <wd:data id="title" type="char.text"/>
      <wd:data id="description" type="char.text"/>
      <wd:data id="keywords" type="char.text"/>
      <wd:data id="town" type="char.text"/>
      <wd:data id="dates" type="entries.text">
        <wd:entry from="2013-05-05 10:30:00" to="2013-05-05 12:00:00" status="frei" />
        <wd:entry from="2013-05-19 10:30:00" to="2013-05-19 12:00:00" status="belegt" />
      </wd:data>
      <wd:data id="text" type="text.standard"><![CDATA[<p>Jeden zweiten Sonntag im Mai verzaubern wir Sie mit einem breiten Angebot an klassischen Stücken von Strauss, Schostakowitsch oder Wagner. Bei schlechtem Wetter ist das Gelände überdacht.</p>]]></wd:data>
      <wd:data id="category" type="categories.default">
        <wd:category>678677678377</wd:category>
        <wd:category>647503647503</wd:category>
      </wd:data>
      <wd:data id="location" type="char.default">
        <wd:category>678677678377</wd:category>
      </wd:data>
      <wd:data id="enableClickAnalyzer" type="char.default">no</wd:data>
      <wd:data id="pageDisplayType" type="char.default"/>
    </wd:object>
...

Diesen Status lesen Sie über das Zeilentemplate des Veranstaltungskalenders aus. Den URL-Parameter können Sie entweder über wsl:php oder direkt über XSLT auslesen.

Beispiel (wsl:php): Auszug aus /[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/lists/eventsMulti.wFilelist.php

...
<p class="listEntryDate">

  <wsl:php>
    $showTimeOnSingleDayDates= "<xsl:value-of select="/wFilelist/wData/data[@name = 'showTimeOnSingleDayDates']/text()"/>";
    $param       = "<xsl:value-of select="@param"/>";
    $text_oClock = "<xsl:value-of select="php:functionString('wTexts::getText', 'o_clock')"/>";
    
    // Status von Veranstaltungen auslesen:
    $path   = "<xsl:value-of select="@path" />";
    $from   = wURL::getParameter($param, 'from');
    $to     = wURL::getParameter($param, 'to');
    $status = wDocumentData::getData($path, "/wd:extension/wd:object/wd:data[@id = 'dates']/wd:entry[@from = '".$from."' and @to = '".$to."']/@status");
    print "Status (wsl:php): ".$status;
    
    <![CDATA[
    if(preg_match("/from=([^&]+)/", $param, $matches)){
      $from = $matches[1];
      print date("d.m.Y", strtotime($from));
    }
    $isSingleDate = true;
    if(preg_match("/to=([^&]+)/", $param, $matches)){
      $to = $matches[1];
      if(substr($from, 0, 10) != substr($to, 0, 10)){
        print " - ".date("d.m.Y", strtotime($to));
        $isSingleDate = false;
      }
    }
    if($showTimeOnSingleDayDates == '1'){
      if($isSingleDate){
        if(preg_match("/from=([^&]+)/", $param, $matches)){
          $from = $matches[1];
          print ", ".date("H:i", strtotime($from))." ".$text_oClock;
        }
        if(preg_match("/to=([^&]+)/", $param, $matches)){
          $to = $matches[1];
          if($to != $from){
            print " - ".date("H:i", strtotime($to))." ".$text_oClock;
          }
        }
      }
    }
    ]]>
  </wsl:php>
  <xsl:variable name="locationID"><xsl:value-of select="wd:extension/wd:object/wd:data[@id='location']/wd:category/text()"/></xsl:variable>
  <xsl:if test="$locationID != '' and php:functionString('wRepository::documentExists', /wFilelist/wData/data[@name = 'pathLocations']/text())">, <xsl:value-of select="document(concat($wDocumentRoot, /wFilelist/wData/data[@name = 'pathLocations']/text()))//category[@id = $locationID]/@text"/></xsl:if>
</p>
...

Beispiel (xslt): Auszug aus /[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/lists/eventsMulti.wFilelist.php

...
<p class="listEntryDate">

  <wsl:php>
    $showTimeOnSingleDayDates= "<xsl:value-of select="/wFilelist/wData/data[@name = 'showTimeOnSingleDayDates']/text()"/>";
    $param       = "<xsl:value-of select="@param"/>";
    $text_oClock = "<xsl:value-of select="php:functionString('wTexts::getText', 'o_clock')"/>";
    
    <![CDATA[
    if(preg_match("/from=([^&]+)/", $param, $matches)){
      $from = $matches[1];
      print date("d.m.Y", strtotime($from));
    }
    $isSingleDate = true;
    if(preg_match("/to=([^&]+)/", $param, $matches)){
      $to = $matches[1];
      if(substr($from, 0, 10) != substr($to, 0, 10)){
        print " - ".date("d.m.Y", strtotime($to));
        $isSingleDate = false;
      }
    }
    if($showTimeOnSingleDayDates == '1'){
      if($isSingleDate){
        if(preg_match("/from=([^&]+)/", $param, $matches)){
          $from = $matches[1];
          print ", ".date("H:i", strtotime($from))." ".$text_oClock;
        }
        if(preg_match("/to=([^&]+)/", $param, $matches)){
          $to = $matches[1];
          if($to != $from){
            print " - ".date("H:i", strtotime($to))." ".$text_oClock;
          }
        }
      }
    }
    ]]>
  </wsl:php>
  <xsl:variable name="locationID"><xsl:value-of select="wd:extension/wd:object/wd:data[@id='location']/wd:category/text()"/></xsl:variable>
  <xsl:if test="$locationID != '' and php:functionString('wRepository::documentExists', /wFilelist/wData/data[@name = 'pathLocations']/text())">, <xsl:value-of select="document(concat($wDocumentRoot, /wFilelist/wData/data[@name = 'pathLocations']/text()))//category[@id = $locationID]/@text"/></xsl:if>

  <!-- Status von Veranstaltungen auslesen (xslt): -->
  <xsl:variable name="paramFrom"><xsl:value-of select="php:functionString('wURL::getParameter', @param, 'from')" /></xsl:variable>
  <xsl:variable name="paramTo"><xsl:value-of select="php:functionString('wURL::getParameter', @param, 'to')" /></xsl:variable>
  <xsl:variable name="statusEntry"><xsl:value-of select="wd:extension/wd:object/wd:data[@id = 'dates']/wd:entry[@from = $paramFrom and @to = $paramTo]/@status"/></xsl:variable>
  <xsl:variable name="statusCSS">
    <xsl:choose>
      <xsl:when test="$statusEntry = 'frei'">green</xsl:when>
      <xsl:when test="$statusEntry = 'belegt'">red</xsl:when>
      <xsl:otherwise>grey</xsl:otherwise>
    </xsl:choose>
  </xsl:variable>
  Status: <span style="color:{$statusCSS}"><xsl:value-of select="$statusEntry" /></span>

</p>
...

In der generierten Liste kann das z.B. wie folgt aussehen:

Veranstaltungskalender mit Status-Angabe
Veranstaltungskalender mit Status-Angabe