Dateiliste nach durchschnittlicher Seitenbewertung (Ranking) sortieren

Nutzbar ab: Version

Zeigen Sie den Seitenbesuchern die am höchsten bewerteten Seiten Ihrer Präsenz.

Über das Weblic® "Aktuelle Seite bewerten" erlauben Sie es den Seitenbesuchern und Benutzern, eine Bewertung zu Seiten und Artikeln abzugeben. Die am besten bewerteten Seiten können Sie über eine Weblication® CMS Liste ausgeben, welche nach Ranking (durchschnittliche Bewertung) sortiert ist.

Um dies realisieren zu können, ist eine CMS-Version ab 007.001.120.000 erforderlich und das aktuelle Listen-Element (Weblic® "Liste Standard"). Die erforderlichen Anpassungen werden nachfolgend beschrieben.

Setzen Sie eine eigene Funktion über die wMyProject.php Datei, die mit der BASE mitgeliefert wird und über die pre.php des globalen Projektes eingelesen wird.

Beispiel: Auszug aus /[IHR-LAYOUT-PROJEKT]/wGlobal/scripts/php/wMyProject.php

//*********************************************************************************/
/**
* @method String sortByRating(String $file)
*
* @description Callback Funktion, um nach der Bewertung einer Datei zu sortieren
*
* @param file jeweilige Datei
*
* @return String
*
*/
//*********************************************************************************/

public static function sortByRating($file){
// Ermittelt die Bewertung der jeweiligen Seite, um danach sortieren zu können
$rating = wUserContent::getAverageRating($file);
//print $file.":".$rating."<br />";
return $rating;
}

Über die Projektkonfiguration verweisen Sie auf diese Funktion als zusätzliche Sortiermöglichkeit in Listen. Sofern diese Variableneinträge in der Projektkonfiguration in Ihrem Projekt nicht vorhanden sind, tragen Sie diese gem. der aktuellen BASE nach.

Im  Beispiel werden folgende Werte gesetzt:

  • Zusätzliche Sortiermöglichkeiten (xPath-Ausdrücke durch | getrennt):
    callback:wMyProject::sortByRating
  • Zusätzliche Sortiermöglichkeiten (Angezeigte Werte durch | getrennt):
    nach Ranking
Projektkonfiguration zu Listen: Zusätzliche Sortiermöglichkeiten
Projektkonfiguration zu Listen: Zusätzliche Sortiermöglichkeiten

Über ein aktuelles Listen-Element steht Ihnen diese Auswahl somit in der "Sortieren nach" Auswahlbox zur Verfügung:

Listenoptionen - Sortieren nach Ranking
Listenoptionen - Sortieren nach Ranking

Die aufzulistenden Dateien werden so nach der durchschnittlichen Seitenbewertung (aufsteigend oder absteigend) sortiert:

Liste, sortiert nach Ranking (absteigend)
Liste, sortiert nach Ranking (absteigend)

Die oben ersichtliche Listenausgabe setzt auf ein separates Darstellungstemplate der Liste auf, das zusätzlich die durchschnittliche Bewertung der jeweiligen Seite schon direkt in der Listenübersicht anzeigt.
Alle eingelesenen Dateien sollten das "Seite bewerten" Element im Inhalt eingebunden haben. Geplant ist, dass es hierzu einen weitergehenden Listen-Filter gibt, der nur Seiten in die Liste einliest, die Bewertungen haben.

Nachfolgend der entsprechende Auszug aus diesem Zeilentemplate.

Beispiel: Auszug aus /[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/lists/ranking.wFilelist.php

...
<xsl:choose>
  <!-- Darstellung einer Meldung -->        
  <xsl:when test="wd:extension/wd:object[@type = 'news']">                                    
    <h2 class="listEntryTitle"><xsl:if test="not(wd:extension/wd:object/wd:data[@id = 'hidePublicationDate'] = '1')"><span class="listEntryDate"><xsl:value-of select="php:functionString('wDate::formatDate', 'd.m.Y', wd:extension/wd:meta/wd:publication/@time)"/></span> </xsl:if><xsl:choose><xsl:when test="not(wd:extension/wd:object/wd:data[@id = 'showOnlyTeaser'] = '1')"><a href="{$linkDetails}"><xsl:value-of select="wd:extension/wd:meta/wd:title/text()"/></a></xsl:when><xsl:otherwise><xsl:value-of select="wd:extension/wd:meta/wd:title/text()"/></xsl:otherwise></xsl:choose></h2>

    <wsl:php>
    
      $documentPath = '<xsl:value-of select="@path"/>';
      $showRatings  = '<xsl:value-of select="document(concat($wDocumentRoot, @path))/wd:document/wd:group[@id = 'content1']/wd:item[@type = 'userContent.ratings']/wd:fragment[@id = 'showRatings']"/>';
      $ratingMax    = '<xsl:value-of select="document(concat($wDocumentRoot, @path))/wd:document/wd:group[@id = 'content1']/wd:item[@type = 'userContent.ratings']/wd:fragment[@id = 'ratingMax']"/>';
      $ratingType   = '<xsl:value-of select="document(concat($wDocumentRoot, @path))/wd:document/wd:group[@id = 'content1']/wd:item[@type = 'userContent.ratings']/wd:fragment[@id = 'ratingType']"/>';
      $subId        = '<xsl:value-of select="document(concat($wDocumentRoot, @path))/wd:document/wd:group[@id = 'content1']/wd:item[@type = 'userContent.ratings']/wd:fragment[@id = 'subId']"/>';
    
      <![CDATA[
      // Optionale Abfrage auf die Bewertungseinstellung, falls diese in jeder Seite direkt gesetzt ist:
      //if($showRatings == 'always' || $showRatings == 'ifIsLoggedIn' && wUserCur::getName() != ''){
    
        $averageRating = wUserContent::getAverageRating($documentPath, $subId);
    
        print '<span class="listEntryDate">Bewertung: ';
        for($i = 1; $i <= $ratingMax; $i++){
          if($averageRating >= $i){
            print '<img alt="" width="13" height="12" src="/[IHR-LAYOUT-PROJEKT]/wGlobal/layout/images/icons/rating_star_full.gif" />';
          }
          else if($averageRating >= $i - 0.5){
            print '<img alt="" width="13" height="12" src="/[IHR-LAYOUT-PROJEKT]/wGlobal/layout/images/icons/rating_star_half.gif" />';
          }
          else{
            print '<img alt="" width="13" height="12" src="/[IHR-LAYOUT-PROJEKT]/wGlobal/layout/images/icons/rating_star_default.gif" />';
          }
        }
        print ' ('.wUserContent::getNumberRatings($documentPath).' Bewertungen) ';
        print '</span>';
      //}
      ]]>
    </wsl:php>

    <xsl:if test="not(/wFilelist/wData/data[@name = 'showThumbnails']/text() = '0')">
      <wsl:thumbnail class="listEntryThumbnail" cut="{wd:extension/wd:meta/wd:thumbnail/@area}" src="{$thumbnail}" width="{$widthThumbnails}" height="{$heightThumbnails}" quality="{$qualityThumbnails}" mode="default" alt="{php:functionString('htmlspecialchars', wd:extension/wd:meta/wd:title/text())}"/>
    </xsl:if>
    <p class="listEntryDescription"><xsl:value-of select="wd:extension/wd:meta/wd:description/text()"/>   </p>
  </xsl:when>
...
Beachten Sie, daß die Auflistung und Sortierung der Dateien auf Grundlage des Verzeichnis-Index erfolgt. Bei manuellen Anpassungen an den einzulesenden Dateien müssen Sie danach auch den Verzeichnis-Index erneuern, was durch Klick auf den Aktualisieren-Button des Verzeichnisses im Dateiexplorer erfolgen kann.