Veröffentlichungsdatum: 03. August 2012
Änderungsdatum: 15. September 2015
listen sortierung bewertung filter callback
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.
//*********************************************************************************/
/**
* @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:
Über ein aktuelles Listen-Element steht Ihnen diese Auswahl somit in der "Sortieren nach" Auswahlbox zur Verfügung:
Die aufzulistenden Dateien werden so nach der durchschnittlichen Seitenbewertung (aufsteigend oder absteigend) sortiert:
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.
... <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> ...