marx-software.de

[CMS] Support für Taxonomien eingebaut


Eine Standardfunktionalität, die in keinem CMS fehlen darf sind Taxonomien. Die wohl bekanntesten Beispiele hier sind Kategorien und Tags. Also dürfen die natürlich auch bei mir nicht fehlen.

Konfiguration

Zu Konfiguration muss die Datei config/taxonomy.yaml angelegt werden. In dieser Datei werden alle in dem System bekannten Taxonomien konfiguriert.

taxonomies:
  - title: Kategorie
    slug: kategorien
    field: taxonomy.category
  - title: Tags
    slug: tags
    field: taxonomy.tags
    array: true

Jede Taxonomie hat einen Titel, einen Slug und ein Feld. Das optionale Attribute array gibt an, dass diese Taxonomie mehrere Werte gepflegt werden können. Hier in diesem Beispiel kann jede Seite in genau einer Kategorie sind, aber mehrere Tags besitzen.

Templates

Zusätzlich müssen zwei Templates angelegt werden, eins zum Rendern der Taxonomy-Übersicht (aller Werte einer Taxonomy) und eins für einen einzelnen Wert einer Taxonomy (plus die Seiten, die dieser Taxonomy angehören).

Inhalte pflegen

Im Frontmatter Bereich einer Seite können dann Werte für die Taxonomien gepflegt werden. Diese hat nun für die Taxonomy tags die Werte blue und orange.

taxonomy:
    tags: [blue, orange]

Anzeigetexte für Taxonomy-Werte hinterlegen

Wenn als Werte für eine Taxonomy jetzt zum Beispiel kryptischer IDs verwendet werden als in diesem Beispiel, ist es auch möglich, Texte zu hinterlegen, die für die Anzeige verwendet werden können.

Dazu muss für jede Taxonomy einen entsprechende Datei gepflegt werden. Für diese Dateien gilt das folgende Namesschema: taxonomy.slug der taxonomy..yaml

In unserem Beispiel wären das taxonomy.kategorien.yaml und taxonomy.tags.yaml. Beispielhaft würde diese Datei für tags dann so aussehen:

values:
    - id: blue
      title: Blau
    - id: red
      title: Rot
    - id: orange
      title: Orange

Im Template gibt es dann zwei Möglichkeiten darauf zuzugreifen:

In den Taxonomy-Templates

${taxonomy.getValueTitle('blue')}

In allen anderen Templates

${taxonomyFN.getTitle('tags', 'blue')}

Für mehr Informationen und aussagekräftiger Beispiele schaut euch das Demo Projekt an.

In der Hoffnung, dass es für jemanden Nutzen bringt: Viel Spaß damit