vtSelect

(Pro, Master ab 1.2)

Stellt eine Auswahl von Seiten zusammen, die bestimmte Bedingungen erfüllen.

Verwendung

<!--{{vtSelect: 
        -origin="%Ausgangsseite", 
        -type="%Seitentyp", 
        -filter="%Filter",
        -search="%Suchbegriff",
        %Feld="%Feldsuchbegriff",
        -mode="%Suchmodus",
        -ftmode="%Volltextmodus",
        ‑sortfield="%Sortierfeld", 
        -sortorder="%Sortierfolge",
        -skip="%Sprung", 
        -max="%Maximum", 
        -depth="%Tiefe",
        -countonly="%NurZählen",
        -name="%Name"
}}-->
...
<!--{{vtEndSelect}}-->
%Ausgangsseite

(optional) Die Seite, die den Ausgangspunkt der Suche bildet. Es werden nur Seiten in die Auswahl aufgenommen, die dieser Ausgangsseite untergeordnet sind. Wenn Sie den Parameter weglassen, bildet die aktuelle Seite die Ausgangsseite. Um alle Seiten zu durchsuchen, setzen Sie die Ausgangsseite auf 1.

%Seitentyp

(optional) Angabe, ob die Suche auf Seiten eines bestimmten Typs beschränkt werden soll. Der Seitentyp entspricht dem Namen des Templates, auf dem die Seiten basieren, nur ohne die Endung .html. Ist kein Seitentyp angegeben, werden alle Seiten berücksichtigt. Wenn Sie die Auswahl nach einem template-spezifischen Feld filtern oder sortieren wollen, ist die Angabe des betreffenden Seitentyps zwingend.

%Filter

(optional) Bedingungen, die eine Seite erfüllen muss, um in die Auswahl aufgenommen zu werden. Wenn Sie mehrere Bedingungen angeben wollen, können Sie diese durch .and., .or. oder Kommas verknüpfen. Ein Komma ist dabei gleichbedeutend mit einer .and.-Verknüpfung, hat aber eine geringere Priorität als .or. (während .and. die höchste Priorität hat).

Jede Bedingungen besteht aus einem Feldnamen in geschweiften Klammern, einem Vergleichsoperator und einem Vergleichswert.

Mögliche Feldnamen sind: {vtName}, {vtPageType}, {vtAlias}, {vtContainerId}, {vtCreationDate}, {vtCreationTime}, {vtId}, {vtModificationDate}, {vtModificationTime}, {vtName}, {vtPageOwnerId} (ab Version 3.0), {vtPageType}, {vtPageUserId} (ab Version 3.0), {vtSortValue} sowie alle Platzhalter, die in dem %Seitentyp vorkommen.

Die möglichen Vergleichsoperatoren sind:

Operator Bedeutung Erläuterung
.eq. equals ist gleich
.neq. not equals ist ungleich
.gt. greater than (Zahl, Datum oder Uhrzeit) ist größer als
.gte. greater than or equal (Zahl, Datum oder Uhrzeit) ist größer als oder gleich
.lt. less than (Zahl, Datum oder Uhrzeit) ist kleiner als
.lte. less than or equal (Zahl, Datum oder Uhrzeit) ist kleiner als oder gleich
.is. is like (Zeichenkette) ist wie
.bw. begins with (Zeichenkette) beginnt mit
.ew. ends with (Zeichenkette) endet mit
.cn. contains (Zeichenkette) enthält
.ncn. not contains (Zeichenkette) enthält nicht
.in. in (Zeichenkette) befindet sich in

Der Unterschied zwischen .eq. und .is. besteht darin, dass .eq. bei Zahlen-, Datums- und Uhrzeitwerten einen numerischen Vergleich durchführt, während .is. in jedem Fall nur die Zeichenketten vergleicht, auch wenn es sich um numerische Werte handelt. Wenn bei einer Seite beispielsweise der Platzhalter "PLZ" den Wert "01023" enthält, würde die Filterbedingung {PLZ} .eq. 1023 dazu führen, dass die Seite selektiert wird, während sie bei der Bedingung {PLZ} .is. 1023 nicht Teil der Selektion würde.

Der Vergleichswert kann durch einen festen Wert (Zeichenkette, Zahl, Datum oder Uhrzeit) oder ebenfalls durch einen Platzhalter angegeben werden. Dabei ist zu beachten, dass ein Platzhalter in dem Kontext interpretiert wird, in dem die vtSelect-Anweisung steht, nicht im Kontext der jeweils zu prüfenden Seite. Es ist daher z. B. nicht möglich, alle Seiten zu selektieren, bei denen die Platzhalter {Datum_A} und {Datum_B} denselben Inhalt haben.

Soll ein Datum als Vergleichswert dienen, muss es in der Form "tt.mm.jjjj" angegeben werden, eine Uhrzeit in der Form "hh:mm". Wenn der Stunden- oder Minutenwert dabei kleiner als 10 ist, muss jeweils eine Null vorangestellt werden; bei Tages- und Monatswerten ist eine vorangestellte Null nicht erforderlich.

%Suchbegriff

(optional) Ein Begriff, nach dem in allen Feldern gesucht werden soll. Wenn Sie keinen %Volltextmodus angegeben haben, können Sie % und _ als Jokerzeichen verwenden. Das Prozentzeichen steht für eine Zeichenkette beliebiger Länge (auch Länge 0), der Unterstrich für exakt ein Zeichen.

%Feld

(optional) Name eines Feldes, das durchsucht werden soll. Wenn der Name nicht mit vt beginnt, müssen Sie die Selektion mit Hilfe des -type-Parameters auf einen bestimmten Seitentyp beschränken. Sie können auch mehrere Felder durchsuchen lassen, indem Sie für jedes Feld einen eigenen Parameter angeben.

%Feldsuchbegriff

(optional) Ein Begriff, nach dem im %Feld gesucht werden soll. Hier gelten dieselben Einzelheiten wie beim %Suchbegriff.

%Suchmodus

(optional) Die Weise, in der %Suchbegriff und %Feldsuchbegriff interpretiert werden sollen. Im Normalfall werden diese als Wortanfänge interpretiert, so dass der Suchbegriff "Feuer" beispielsweise auch dann eine Übereinstimmung liefern würde, wenn nur das Wort "Feuerwehr" im Text vorkommt. Wenn Sie den Suchmodus dagegen auf word setzen, werden stets komplette Wörter verglichen.

%Volltextmodus

(optional) Die Art der MySQL-Volltextsuche, die angewendet werden soll. Mögliche Werte sind boolean und natural. Jeder andere Wert (oder ein Weglassen dieses Parameters) führt dazu, dass eine gewöhnliche Textsuche durchgeführt wird, was bei großen Datenbeständen zu einer starken Verlangsamung und hohen Serverbelastung führen kann. Der Unterschied zwischen den beiden Volltextmodi ist in der MySQL-Dokumentation beschrieben.

%Sortierfeld

(optional) Name des Feldes, nach dem die Auswahl sortiert werden soll. Mögliche Werte sind vtName, vtPageType, vtCreationDate und vtModificationDate. Ist ein %Seitentyp angegeben, können Sie als Sortierfeld auch den Namen eines Platzhalters verwenden, der in dem betreffenden Template vorkommt.

Wenn Sie kein Sortierfeld angeben, wird unter Virthos 1.x und 2.0 die gleiche Einstellung verwendet wie sie in den Vorgaben der aktuellen Seite festgelegt ist. Ab Virthos 2.1 wird vtCreationDate als Standardwert verwendet.

Dieser Parameter wird ignoriert, wenn Sie die Sortierfolge random verwenden.

Sie können auch mehrere Sortierfelder angeben, indem Sie [] an den Parameternamen anhängen (siehe Beispiele unten).

%Sortierfolge

(optional) Die gewünschte Sortierrichtung. Mögliche Werte sind:

Wert Bedeutung
ascending oder asc Sortierung in aufsteigender Folge
descending oder desc Sortierung in absteigender Folge
random Sortierung nach Zufallsprinzip (bei jedem Seitenaufruf anders)

Wenn Sie keine Sortierfolge angeben, wird unter Virthos 1.x und 2.0 die gleiche Einstellung verwendet wie sie in den Vorgaben der aktuellen Seite festgelegt ist. Ab Virthos 2.1 wird ascending als Standardwert verwendet.

Wenn Sie mehrere Sortierfelder angeben, können Sie für jedes auch eine eigene Sortierfolge angeben, indem Sie [] an den Parameternamen anhängen (siehe Beispiele unten).

%Sprung

(optional, ab v3.0) Zahl der Seiten, die am Anfang übersprungen werden sollen. Ein Wert von 20 führt z. B. dazu, dass die ersten 20 gefundenen Seiten ausgelassen werden.

%Maximum

(optional) Obergrenze für die Zahl der auszuwählenden Seiten. Wenn Sie ein Maximum x festlegen, werden unter Berücksichtigung von Sortierfeld und -folge nur die ersten x Seiten ausgewählt, die den Filterbedingungen entsprechen. Bei einem umfangreichen Webauftritt, wird die Suche dadurch starkt beschleunigt. Beachten Sie aber, dass auch vtCountSelection und vtEval nur diese x Seiten berücksichtigen.

%Tiefe

(optional) Anzahl der Hierarchieebenen, die durchsucht werden sollen. Wenn Sie als Wert 1 festlegen, werden nur die Seiten durchsucht, die der Ausgangsseite direkt untergeordnet sind. Bei jedem anderen Wert werden alle untergeordneten Seiten durchsucht.

%NurZählen (verfügbar ab v4.0.6)

(optional) Wenn dieser Parameter auf 1 bzw. auf einen nicht-leeren Wert gesetzt ist, wird keine Selektion gebildet, sondern nur die Anzahl der Datensätze ermittelt. Diese lässt sich dann mittels vtCountSelection ausgeben. Andere Selektionsfunktionen (insbes. vtLoop) stehen nicht zur Verfügung. Der Vorteil bei der Verwendung von -countonly besteht darin, dass eine wesentlich effizientere Datenbankabfrage stattfindet, die auch bei einer sehr großen Trefferliste problemlos funktioniert.

%Name

(optional) Name der Selektion. Wenn eine Selektion dieses Namens zuvor definiert wurde, wird sie aktiviert, und alle übrigen Parameter werden ignoriert. Andernfalls wird die Selektion mit den angegebenen Parametern definiert.

Hinweise

Die vtSelect-Anweisung hat keine direkte Auswirkung auf den nachfolgenden HTML-Code; sie definiert lediglich ein "Umfeld" für andere VirthosTalk-Anweisungen und -Platzhalter, insbesondere für vtLoop, vtEval und vtCountSelection.

In die Selektion werden nur Seiten aufgenommen, für die der aktuelle Benutzer ein Leserecht besitzt. Diese Beschränkung lässt sich umgehen, indem der vtSelect-Anweisung eine vtAsAdmin-Anweisung vorangestellt wird.

Die vtEndSelect-Anweisung ist nicht zwingend erforderlich, in den meisten Fällen aber empfehlenswert, um den Punkt deutlich zu machen, ab dem wieder der "normale" Kontext gilt (insbesondere für nachfolgende vtLoop-Anweisungen).

Beispiel 1

<!--{{vtSelect: -origin="/", -type="news", -max="3", -sortfield="Datum", -sortorder="descending" }}-->
    <ul>
        <!--{{vtLoop}}-->
            <li><a href="{{vtLink}}">{{Headline}}</li>
        <!--{{vtEndLoop}}-->
    </ul>
<!--{{vtEndSelect}}-->

Erstellt eine Liste mit den ersten drei Seiten, die sich im Startseitenzweig befinden und auf dem Template news.htm basieren. Die Liste ist nach dem Inhalt des Platzhalters "Datum" in absteigender Folge sortiert.

Beispiel 2

<!--{{vtSelect: -origin="//Download", -filter="{vtName} .ew. pdf" }}-->
    <p>Es stehen {{vtCountSelection}} PDF-Dateien zum Download bereit.</p>
<!--{{vtEndSelect}}-->

Gibt die Anzahl der Seiten aus, die sich im Zweig der Seite "Downloads" (auf der obersten Hierarchieebene) befinden und deren Name mit "pdf" endet.

Beispiel 3

<!--{{vtSelect: -origin="//Produkte", -type="artikel", 
        -filter="{Kategorie} .is. Sonderangebote, {Verfuegbarkeit} .gt. 0" }}-->
    <p>Sonderangebote schon ab {{vtEval: min, Preis}} Euro!</p>
<!--{{vtEndSelect}}-->

Selektiert alle Seiten vom Typ "artikel" im Zweig der Seite "Produkte" (auf der obersten Hierarchieebene), bei denen der Platzhalter "Kategorie" das Wort "Sonderangebote" enthält und der Platzhalter "Verfuegbarkeit" eine Zahl, die größer ist als 0. Ermittelt dann über alle selektierten Seiten hinweg den Minimalwert für den Platzhalter "Preis".

Beispiel 4

<!--{{vtSelect: -type="artikel", -sortfield[]="Kategorie", -sortorder[]="asc",
                        -sortfield[]="Beliebtheit", -sortorder[]="desc" }}-->

Dieses Beispiel zeigt, wie man eine Selektion mit zwei Sortierkriterien definiert.

Siehe auch