De:Tutorials Tagging mit Ditto
From MODx Wiki
Mit Ditto kann man formatierbare Listen von Dokumenten erstellen, die entweder denselben Vaters haben (also alle Dokumente eines Ordners) oder denselben TV-Wert. Mit letzterem wird es möglich, z.B. Blogs nach Kategorien zu taggen (verschlagworten).
Eine Methode zur Verschlagwortung von Blogs/Nachrichteneinträgen, wenn ein Post mehr als einer Kategorie angehört
In diesem Beispiel haben wir die folgenden Kategorien vorgesehen:
- Weltnachrichten - alle Nachrichteneinträge,
- Ortsnachrichten,
- Neues zu Bar 1,
- Neues zu Bar 2,
- Aktuelles über Kunst, Bücher & Musik
Lege einen Ordner (z.B. 'Blogs') an, dieser hat in unserem unteren Beispiel die id 2.
Die Nutzer der Beispielseite sollen allgemeine Nachrichten (als Startseite), Ortsnachrichten oder spezielle Nachrichten für eine Lokalität sehen können.
Erstelle dazu als erstes in der Ressourcenverwaltung des MODx-Managers eine Template-Variable vom Eingabetyp 'Checkbox' mit dem Namen 'KategorieOptionen' und 'Welt||Ort||Bar1||Bar2||KunstBücherMusik' als Eingabeoptionswerte und ordne sie dem Template zu, das du für Blogeinträge benutzt. Mit dieser Template-Variable werden die von dir eingetragenen Checkboxen auf allen Seiten, die auf das Blogtemplate zugreifen, angezeigt. (Diese Checkboxen sind natürlich nur dann sichtbar, wenn du im MODx-Manager eingeloggt bist und eine einzelne Seite bearbeitest. Aber natürlich kann man sie auch benutzen, um zum Beispiel bei einem Blogeintrag die zugehörige Kategorie anzuzeigen.)
Um einen neuen Blogeintrag z.B. über eine Kunstausstellung in der Bar 1 zu erstellen, musst du im MODx-Manager eine neue Seite, z.B. `Kunstausstellung Bar 1’, im Ordner ‘Blogs’ anlegen und dabei die Checkboxen: Bar1 und KunstBücherMusik ankreuzen.
Wenn du jetzt in der Seitenbearbeitung die TV KategorieOptionen aufrufst, bekommst du als Ausgabe die Zeichenkette 'Bar1KunstBücherMusik', also alles direkt hintereinander - nicht sehr schön! Wir müssen also die Template-Variable "KategorieOptionen" bearbeiten und ein Widget hinzufügen, das die einzelnen Optionen voneinander trennt. Das Widget hierfür heißt ‘Delimited List’, du kannst es einfach im Feld `Objektauswahl´ anklicken. Nun müssen wir noch festlegen, wodurch die einzelnen Einträge getrennt werden sollen. Trage als Wert für den Delimiter einfach ein Komma ein. Speichern und fertig ist die Template-Variable.
Um dann zu jeder Kategorie auch die richtigen Blogeinträge abrufen zu können, musst du auf einer beliebigen Seite (Dokument) noch einen Ditto-Aufruf mit leicht veränderten &tags einfügen. Setze dabei den &tagDelimiter auf `,` so dass er mit dem übereinstimmt, was wir in der TV angegeben haben, und weiß, wie und wo er die Kategoriennamen bzw. -tags aufspalten muss. Außerdem musst du in dem Aufruf &tagData=`tvKategorieOptionen` angeben, so dass klar ist, wo die Informationen über die Tags herkommen sollen, in diesem Fall von unserer Template-Variable KategorieOptionen. Und du musst &tagMode auf `onlyTags` setzen. Hier gibt es zwei verschiedene Möglichkeiten für &tagMode, die zwar ganz ähnlich aussehen, aber ganz verschiedene Wirkungen haben: onlyTags und onlyAllTags - was sie unterscheidet, wird gleich deutlich...
Bei "Weltnachrichten - alle Nachrichteneinträge" musst du bei den &tags überprüfen, ob irgendeiner dieser Kategorien-Tags für die Anzeige von Blogs eingestellt ist (und ob &startId die id des Ordners ist, der die Blogs beinhaltet, bei uns die id 2):
[!Ditto? &startID=`2` &tagDelimiter=`,` &tagData=`tvKategorieOptionen` &tagMode=`onlyTags` &tags=`Welt,Ort,Bar1,Bar2,KunstBücherMusik`!]
Wenn du auf diese Seite gehst, sollte nun die vorhin erstellte Seite ‘Kunstausstellung Bar1’ angezeigt werden, bei der wir die Checkboxen Bar1 and KunstBücherMusik ausgewählt hatten. Wenn wir im Ditto-Aufruf allerdings &tagMode=`onlyAllTags` angegeben hätten, würde überhaupt nichts angezeigt werden, weil dadurch nur die Blogeinträge angezeigt würden, bei denen ALLE Tags angekreuzt sind, während mit &tagMode=`onlyTags` angegeben wird, dass alle Blogeinträge angezeigt werden sollen, bei denen EINER dieser Tags ausgewählt ist - also dass, was wir wollen.
In der Kategorie "Ort" wollen wir alle Blogs mit Ortsnachrichten haben, aber auch die Blogs zur Bar 1 and Bar 2 , die ja in dem Ort liegen. (Bei denen sollte natürlich auch die Checkbox 'Ort' ausgewählt sein, aber um ganz sicher zu gehen, können wir sie auch hier angeben).
[!Ditto? &startID=`2` &tagDelimiter=`,` &tagData=`tvKategorieOptionen` &tagMode=`onlyTags` &tags=`Ort,Bar1,Bar2`!]
Das 'tv' vor dem Namen einer Template-Variable war übrigens bis ditto 2.0.2. vorgeschrieben, wenn du sie im ditto-Aufruf wie hier benutzt. Ab ditto 2.0.2. sollte der Prefix "tv" weggelassen werden.
