20. Dezember 2010
liste kategorien sortierung sortieren priorität
Dieser Artikel beschreibt, wie Sie eine Liste umsetzen, die Dateien einer bestimmten Kategorie auflistet und diese nach Priorität ordnet.
Wie Sie eine kategorisierte Liste nach der Priorität der Einträge sortieren, zeigen wir Ihnen anhand folgendem Fallbeispiel.
Es besteht eine Anwendung, die die Bearbeitung und strukturierte Ausgabe von Personendaten ermöglicht. Die Personen sind unter anderem bestimmten Fachgebieten zugewiesen, was über eine kategorisierte Liste ausgegeben wird. Innerhalb der Fachgebiete haben die Personen unterschiedliche Qualifikationen. Sie wollen nun zu den Fachgebieten die jeweils zuständigen Personen auflisten, aber nach Priorität sortieren. Die Person, die sich am besten im Fachgebiet auskennt, soll auch zuoberst in der Liste erscheinen.
Als Grundlage für dieses Fallbeispiel verwenden wir das Weblic® Personenverzeichnis und passen diese Anwendung entsprechend an.
Legen Sie die Kategoriendatei an, die die Fachgebiete abbildet. Hierzu legen Sie über die Kategorienverwaltung eine neue Datei an (z.B. fachgebiete.wCategories.php). Die Struktur der Kategorien kann z.B. wie folgt aussehen:
Erweitern Sie die contactPerson.wObject.php um die Auswahl der Fachgebiete und Vergabe einer Priorität. In der Bearbeitung erhalten Sie zu jeder Kategorien-Auswahlbox eine Auswahlbox für die Priorität. Folgende Möglichkeiten stehen Ihnen zur Verfügung:
Diese Umsetzung erfordert, dass die jeweilige Inhaltsdatei bereits mindestens einen wd:category Eintrag beinhaltet (siehe Schritt 3). Im Screenshot unterhalb des folgenden Quelltext-Beispieles sehe Sie, wie die Bearbeitenmaske des Objektes bei dieser Umsetzung aussieht.
... <div class="wEditorExtensionLabel">Fachgebiete / Priorität</div> <div class="wEditorExtensionValue"> <xsl:for-each select="/wd:document/wd:extension/wd:object/wd:data[@id='fachgebiete']/wd:category"> <xsl:variable name="allowDelete"><xsl:if test="position() = 1">hidden</xsl:if></xsl:variable> <!--web:row:start delete="<xsl:value-of select="$allowDelete" />"--> <div style="overflow:hidden;clear:left"> <!-- web:text:start editor="categories" pathCategories="/wGlobalProject/wGlobal/content/categories/fachgebiete.wCategories.php" inputStyle="float:left;width:60%"--><xsl:value-of select="text()"/><!-- web:text:stop --> <!-- web:text:start editor="select" values="1|2|3|4|5|6|7|8|9" inputStyle="float:left;width:40px"--><xsl:value-of select="@prio"/><!-- web:text:stop --> </div> <!-- web:row:stop--> </xsl:for-each> </div> ...
Das Festlegen der jeweiligen Kategorie und zugehörigen Priorität erfordert in der Inhaltsdatei die Angabe von mindestens einer Kategorie. Tragen Sie daher in evtl. schon bestehende Inhaltsdateien innerhalb des wd:object Blockes zumindest eine wd:category Angabe zu wd:data id="fachgebiete" ein.
Um dies auch gleich bei neu anzulegenden Dateien/Personen verfügbar zu haben, tragen Sie dies auch in das Template ein, das als Grundlage zum Erstellen dient.
... <wd:object name="Person" type="person"> ... <wd:data id="fachgebiete" type="char.default"> <wd:category prio="3">1292841280146</wd:category> <wd:category prio="1">1292841265325</wd:category> </wd:data> </wd:object> ...
Zur Ausgabe der kategorisierten Liste kopieren Sie sich das Listen-Element aus dem Beispielprojekt (list.standard.wItem.php) und legen dies unter eigenem Namen ab (z.B. list.fachgebiete.wItem.php). Achten Sie darauf, auch die type-Angabe im öffnenden xsl:template Tag anzupassen!
Passen Sie nun die Stellen an, über die die Sortierung ("Sortieren nach") und der Kategorie-Filter definiert sind.
Um auf dieses Listen-Element auch über den Struktureditor zugreifen zu können, legen Sie auf Basis des Mastertemplate-Items (list.standard.wItemMastertemplate.php) das neue Mastertemplate-Element (z.B. list.fachgebiete.wItemMastertemplate.php) an. Passen Sie auch dort die type-Angabe und den Namen an, siehe Quelltextbeispiel zum Mastertemplate-Element.
... <xsl:template match="wd:item[@type = 'list.fachgebiete']"> <!-- web:item:start name="Liste" ... ... <!-- Bereich Pflege --> ... <div class="wEditorElementLabel"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_list_order_by_order_dir')"/></div> <div class="wEditorElementValue"><!-- web:text:start editor="select" inputStyle="width:142px;margin-right:4px" values="prio|/wd:extension/wd:meta/wd:modification/@time|/wd:extension/wd:meta/wd:title/text()|/wd:stat/wd:path/text()|/wd:extension/wd:meta/wd:publication/@time|/wd:extension/wd:object/wd:data[@id='dateFrom']/text()|random()" texts="Priorität|<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_list_order_by_modification')"/>|<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_list_order_by_page_title')"/>|<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_list_order_by_path')"/>|<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_list_order_by_publication_time')"/>|<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_list_order_by_dateFrom')"/>|<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_list_order_by_random')"/>"--><xsl:value-of select="wd:fragment[@id='orderBy']/text()"/><!-- web:text:stop --><!-- web:text:start editor="select" values="asc|desc" texts="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_list_order_dir_asc')"/>|<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_list_order_dir_desc')"/>" inputStyle="width:84px"--><xsl:value-of select="wd:fragment[@id='orderDir']/text()"/><!-- web:text:stop --></div> <div class="wEditorExtensionLabel"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_list_filter_categorie')"/></div> <div class="wEditorExtensionValue"><!-- web:categories:start multiple="1" valuePre="" textPre=" " pathCategories="/wGlobalProject/wGlobal/content/categories/fachgebiete.wCategories.php"--><xsl:copy-of select="wd:fragment[@id='categories']"/><!-- web:categories:stop --></div> <wsl:buttonEdit path="/wGlobalProject/wGlobal/content/categories/fachgebiete.wCategories.php" showInEditor="1" icon="edit" title="{php:functionString('wTexts::getTextUser', 'editor_page_categories_edit')}" style="float:right;margin:0 0 2px 0"/> ... ... <!-- Bereich Ausgabe --> <wsl:php> ... // Filter für Fachgebiete if('<xsl:value-of select="php:functionString('wStringconverter::maskApos', wd:fragment[@id='categories']/wd:category)"/>' != ''){ $listParameters['filterset'] = array('type' => 'and'); $filtersSpecialistArea = array('type' => 'or'); $filtersSpecialistArea[] = array("wPath" => "/wd:extension/wd:object/wd:data[@id='fachgebiete'][wd:category/text() = '<xsl:value-of select="wd:fragment[@id='categories']/wd:category/text()"/>']", "operator" => "", "condition" => ""); $listParameters['filterset'][] = $filtersSpecialistArea; if($listParameters['orderBy'] == 'prio'){ $listParameters['orderBy'] = "/wd:extension/wd:object/wd:data[@id='fachgebiete']/wd:category[text() = '<xsl:value-of select="wd:fragment[@id='categories']/wd:category/text()"/>']/@prio"; } } ...
<?php $version="1.0"; $encoding="UTF-8"; ?> <?php exit; ?> <wd:document xmlns:wslMastertemplate="http://weblication.de/5.0/wslMastertemplate" xmlns:en="/en" xmlns:fr="/fr" xmlns:wsl="http://weblication.de/5.0/wsl" xmlns:wd="http://weblication.de/5.0/wd" version="1.0" type="page.standard"> <wd:extension type="weblication" version="5.0" uid="3bb403668279d4b193ef278a653807a8"> <wd:meta> <wd:title>Personenliste mit Kategorie/Prio</wd:title> ... <wd:cache expires="{wGetValueOfDefaultExtension()}"/> </wd:extension> <wd:group> <wd:item name="Personenliste mit Kategorie/Prio" en:name="List Person" icon="/wGlobalProject/wGlobal/layout/images/element-icons/element_list.gif" type="list.fachgebiete"> ...
Innerhalb der gewünschten Seite fügen Sie nun das zuvor erstellte Mastertemplate-Element ("Personenliste mit Kategorie/Prio") ein und stellen die Listenoptionen ein.