=============================
Fortgeschrittene Diazo-Regeln
=============================
Bedingte Regeln
===============
… basierend auf Knoten im Inhalt
--------------------------------
``if-content`` oder ``css:if-content``
spezifiziert ein Element im ``content``
``if-not-content`` oder ``css:if-not-content``
kehrt die Bedingung für ein Element im ``content`` um, z.B.::
``if-not-path``
spezifiziert einen URL-Pfad, der mit dem aktuellen Request **nicht** erfüllt sein darf damit die Regel angewendet wird, z.B.::
… basierend auf Pfadangaben im Inhalt
-------------------------------------
``if-path`` oder ``css:if-path``
spezifiziert einen Pfad in ``content``
Soll der Pfad z.B. beginnen mit ``somewhere``, sieht die Regel folgendermaßen aus::
Angabe eines exakter Pfad mit::
if-path="/somewhere/"
Angabe des Pfadende mit::
if-path="somewhere/"
Angabe eines Pfadbestandteils mit::
if-path="somewhere"
``if-not-path`` oder ``css:if-not-path``
kehrt die Bedingung für einen Pfad im ``content`` um
… basierend auf XPath-Ausrücken
-------------------------------
``if="$mode=''"``
spezifiziert einen Knoten, der vorhanden sein muss, damit eine Regel oder
ein Theme angewendet werden::
``if-not="$mode=''"``
spezifiziert einen Knoten, der **nicht** vorhanden sein darf, damit eine
Regel oder ein Theme ausgeführt werden
Gruppierung und Verschachtelung von Bedingungen
===============================================
Gruppierung von Bedingungen::
…
Verschachtelung von Bedingungen::
entspricht::
Mehrere bedingte Themes
=======================
::
Ausgabe ändern
==============
Mit Inline-XSLT-Anweisungen lassen sich z.B. die Leerzeichen zwischen ELementen entfernen und automatische Einrückungen vornehmen::
Inline XSLT-Anweisungen werden direkt innerhalb des ````-Tag angegeben und ohne Bedingungen ausgeführt.
Ändern des Themes
=================
Inline-Markup
-------------
::
XSLT-Anweisungen
----------------
::
Ändern des Inhalts
==================
Inline-Markup
-------------
Mit ```` lässt sich auch der Inhalt modifizieren, so kann z.B. das ``input``-Element mit der Klasse ``searchButton`` ersetzt werden durch ein ``button``-Element vom Typ ``submit``::
Entfernen leerer Tags
---------------------
Ein Absatz ohne Inhalte lässt sich z.B. so entfernen::
Einfügen eines Tags
-------------------
Tags lassen sich z.B. am Beginn oder Ende eines Inhaltsbereichs einfügen::
Etwas aufwändiger wird es, wenn Tags innerhalb von Inhaltselementen eingefügt werden sollen::
Attribute ändern
----------------
Auch die Attribute eines Tags lassen sich ändern. So kann z.B. eine css-
Klasse hinzugefügt werden mit::
current-menu-item
Auch Bilder in ``content`` lassen sich hiermit in einer bestimmten Größe anzeigen mit::
/@@/images/image/thumb
Dies ändert z.B.::
in::
Text einfügen
-------------
Mit ``xsl:copy`` lassen sich Texte im Inhalt ergänzen, z.B.::
– Extra text
Einbinden weiterer ``rules``-Dateien
====================================
Mit dem ``XInclude``-Protokoll lassen sich andere ``rules``-Dateien einschließen, z.B.::
Einbinden externer Inhalte
==========================
::
Um entfernte Inhalte einbinden zu können, muss Diazo folgendermaßen
konfiguriert werden::
[filter:theme]
use = egg:collective.diazo.readheaders
#You can use any other Diazo middleware options here, too!
read_network = True
XSLT-Anweisungen
----------------
Da der von Diazo verwendete libxml2-HTMLParser Namespace-Präfixe herauskürzt, kann z.B. der FaceBook Like-Button ```` nicht integriert werden mit ``//*[local-name()="like"]``. Stattdessen kann z.B. folgende XSL-Transformation verwendet werden::
Doctype
=======
Üblicherweise gibt Diazo den HTML-Seiten den Doctype ``XHTML 1.0 Transitional``. Um ``Strict`` anzugeben, sollte folgende XSLT angegeben werden::
Es ist nicht möglich, den HTML5-Doctype mit XSLT zu setzen. Stattdessen sollte dann ```` gesetzt werden.
.. seealso::
`Advanced usage `_
Englische Diazo-Dokumentation
`diazo/lib/diazo/tests `_
Die Tests von Diazo enthalten viele gebräuchliche Regeln
`Diazo Snippets Library `_
Snippets vor allem zur Nutzung von Bootstrap und Foundation