Templates: Unterschied zwischen den Versionen

Aus DynPG-Wiki
Wechseln zu: Navigation, Suche
K (Ein erstes Beispiel)
 
(16 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
[[Category:Integration in eine Webseite]]
 
[[Category:Integration in eine Webseite]]
 +
{{Einführungsartikel}}
 +
 
== Einführung ==
 
== Einführung ==
Mit DynPG ist es möglich die Art und Weise wie Artikel und Listenansichten ausgegeben werden, zu beeinflussen. Ein Weg ist CSS, ein anderer (wesentlich flexiblerer) geht über die eingebaute '''''Templateengine'''''. Ein Beispiel: Der Aufruf  
+
Mit DynPG ist es möglich die Art und Weise wie Artikel und Listenansichten ausgegeben werden, zu beeinflussen. Ein Weg ist CSS, ein anderer (wesentlich flexiblerer) geht über die eingebaute '''Template-Engine'''. Ein Beispiel: Der Aufruf  
 
<code>[php,N]
 
<code>[php,N]
 
$DynPG->Write_Article();
 
$DynPG->Write_Article();
 
</code>
 
</code>
bewirkt, dass die Detailansicht eines Artikels angezeigt wird. Dabei wird (wenn nichts anderes explizit angegeben wurde) implizit ein Standard-Template verwendet, das definiert wie diese Ansicht auszusehen hat. Im DynPG-Unterverzeichnis '''''/tpl/MyCMS/default/''''' liegen die Templatedateien für die Standardansichten.  
+
bewirkt, dass die Detailansicht eines Artikels angezeigt wird. Dabei wird (wenn nichts anderes explizit angegeben wurde) implizit ein Standard-Template verwendet, das definiert wie diese Ansicht auszusehen hat. Im DynPG-Unterverzeichnis <tt>/tpl/MyCMS/default/</tt> liegen die Templatedateien für die Standardansichten.  
  
* groups.tpl (Gruppenlistenansicht)
+
* '''groups.tpl:''' Gruppenlistenansicht
* articles.tpl (Artikellistenansicht)
+
* '''articles.tpl:''' Artikellistenansicht
* detail.tpl (Artikel-Detailansicht)
+
* '''detail.tpl:''' Artikel-Detailansicht
* home.tpl (Home-Ansicht)
+
* '''home.tpl:''' Home-Ansicht
* navigation.tpl (Blätterfunktion der Listen-Ansichten)
+
* '''navigation.tpl:''' Blätterfunktion der Listen-Ansichten
* search-form.tpl (Formular für die Suche)
+
* '''search-form.tpl:''' Formular für die Suche
  
In diesen Dateien haben Sie die Möglichkeit, oben genannte Ansichten nach Ihren Wünschen anzupassen. Die Darstellung geschieht grundsätzlich mit '''''HTML'''''. Zusätzlich gibt es eine '''''Templatesprache'''''. Diese ist schlicht gehalten und beinhaltet einige wenige Elemente die nachfolgend näher betrachtet werden sollen. Statt die Standard-Templates zu manipulieren, können auch neue Templates erzeugt werden. Dazu muss im Unterverzeichnis '''''/tpl/MyCMS/''''' einfach ein neuer Ordner mit dem gewünschten Templatenamen angelegt werden. Je nachdem welche Ansichten nun geändert werden sollen, fügt man Dateien mit denselben Namen wie in oben genannter Liste ein. Diese können dann nach den eigenen Wünschen bearbeitet werden. Mit den Zeilen  
+
In diesen Dateien haben Sie die Möglichkeit, oben genannte Ansichten nach Ihren Wünschen anzupassen. Die Darstellung geschieht grundsätzlich mit HTML. Zusätzlich gibt es eine ''Templatesprache''. Diese ist schlicht gehalten und beinhaltet einige wenige Elemente die nachfolgend näher betrachtet werden sollen. Statt die Standard-Templates zu manipulieren, können auch neue Templates erzeugt werden. Dazu muss im Unterverzeichnis <tt>/tpl/MyCMS/</tt> einfach ein neuer Ordner mit dem gewünschten Templatenamen angelegt werden. Je nachdem welche Ansichten nun geändert werden sollen, fügt man Dateien mit denselben Namen wie in oben genannter Liste ein. Diese können dann nach den eigenen Wünschen bearbeitet werden. Mit den Zeilen  
  
 
<code>[php,N]
 
<code>[php,N]
Zeile 22: Zeile 24:
  
 
$DynPG->Write_Article();
 
$DynPG->Write_Article();
</code>
 
wird das Template '''''"meinTemplate"''''' gesetzt und damit der Artikel 13 ausgegeben.
 
  
 +
$DynPG->setupTemplate("default");
 +
</code>
 +
wird das Template <tt>meinTemplate</tt> gesetzt und damit der Artikel 13 ausgegeben.}}
  
[[Image:caution.png]] '''Achtung''' Das Setzen eines Templates muss '''''vor''''' der Ausgabe des Artikels erfolgen!
+
{{Caution
 +
|Das Setzen eines Templates muss '''''vor''''' der Ausgabe des Artikels erfolgen!
  
[[Image:caution.png]] '''Achtung''' Wenn das Template gesetzt wurde, dann wird es auch für alle nachfolgenden Ausgaben verwendet! Ist dies unerwünscht, muss man explizit wieder das Standard-Template('''''"default"''''') setzen!
+
{{Caution
 +
|Wenn das Template gesetzt wurde, dann wird es auch für alle nachfolgenden Ausgaben verwendet. Ist dies nicht erwünscht, muss explizit wieder das Standard-Template (<tt>default</tt>) gesetzt werden.}}
  
== Ein erstes kleines Beispiel ==
+
== Die Template-Sprache ==
Da alle Theorie grau ist, hier ein kleines einführendes Beispiel:  
+
=== Ein erstes Beispiel ===
 +
Hier ein kleines einführendes Beispiel:  
  
'''Beispiel 2.1. Template-Minimalbeispiel (eigene Artikel-Detailansicht in ''/tpl/MyCMS/minimal/detail.tpl'')'''
+
'''Template-Minimalbeispiel''' (eigene Artikel-Detailansicht in <tt>/tpl/MyCMS/minimal/detail.tpl</tt>)
  
<pre>
+
<code>[html,N]
 
<!-- Dies ist ein Kommentar (er wird nicht angezeigt) -->
 
<!-- Dies ist ein Kommentar (er wird nicht angezeigt) -->
 
{$CONTENT} <!--Den Inhalt des Artikels ausgeben-->  
 
{$CONTENT} <!--Den Inhalt des Artikels ausgeben-->  
Zeile 42: Zeile 48:
  
 
<!--Alles was hier drinsteht, wird nach dem Aufruf von $DynPG->Write_Article(); eingefügt -->
 
<!--Alles was hier drinsteht, wird nach dem Aufruf von $DynPG->Write_Article(); eingefügt -->
</pre>
+
</code>
 +
 
 +
<tt>{$CONTENT}</tt> ist ein Platzhalter für den Inhalt des anzuzeigenden Artikels. An dieser Stelle wird dann also der eigentliche Artikeltext eingefügt (genau das erledigt die Templateengine). Eine Liste der Templatevariablen (Platzhalter) finden Sie in der  [[Template-Referenz]].
  
Ich habe mir also mit dem Ordner '''''/tpl/MyCMS/minimal''''' ein eigenes Template angelegt. In diesen Ordner packe ich die Datei '''''detail.tpl''''', die obigen Inhalt aufweist. Damit hab ich meine eigene Artikel-Detailansicht definiert, die ich jetzt jederzeit auf meiner Seite verwenden kann, indem ich z.B.
+
Im Ordner <tt>/tpl/MyCMS/minimal</tt> wurde ein eigenes Template angelegt. In diesen Ordner verschieben wir eine Datei <tt>detail.tpl</tt>, die obigen Inhalt aufweist. Damit haben wir uns eine eigene Artikel-Detailansicht definiert, die jetzt jederzeit in irgendeiner Seite verwendet werden kann, indem folgender Code eingefügt wird:
 
<code>[php,N]
 
<code>[php,N]
 
$DynPG->setupTemplate("minimal");
 
$DynPG->setupTemplate("minimal");
Zeile 52: Zeile 60:
 
$DynPG->Write_Article();
 
$DynPG->Write_Article();
 
</code>
 
</code>
aufrufe. '''''{$CONTENT}''''' ist ein Platzhalter für den Inhalt des anzuzeigenden Artikels. An dieser Stelle wird dann also der eigentlich Artikeltext eingefügt (das macht die Templateengine). Eine Liste der Templatevariablen (Platzhalter) finden Sie im nächsten Kapitel. In die Template-Datei kann zudem auch beliebiger HTML-Code eingefügt werden, wodurch den Gestaltungsphantasien fast keine Grenzen gesetzt sind!
 
  
== Liste und Bedeutung der Template-Variablen ==
+
Die Templatesprache hat neben den Templateplatzhaltern noch drei andere wichtige Sprachelemente. Dies sind die [[#Die bedingte Anweisung|bedingte Anweisung]], der [[#PHP-Code|PHP-Block]] und die Erstellung von [[#Listen|Listen]]. In die Template-Datei kann zudem auch beliebiger HTML-Code eingefügt werden, wodurch die Gestaltungsmöglichkeiten vielfältiger und wesentlich flexibler werden.
Dieses Template ist zuständig für die Darstellung von Ansichten der Gruppen-Listen.  
+
  
{| border="1"
+
=== Die bedingte Anweisung ===
! <center>Platzhalter</center>
+
! <center>Beschreibung</center>
+
 
+
|-
+
| {$ROOT_NAVIGATION}
+
| Erstellt eine Übersichts-Navigation. Gruppe >> Untergruppe
+
 
+
|-
+
| {$PAGES_NAVIGATION}
+
| Erstellt eine Navigation zum Blättern bei mehreren Seiten. Also falls mehr Gruppen angezeigt werden sollten, als in der config.php unter config_AllGroups_Limit eingestellt sind.
+
 
+
|-
+
| {$LIST_REFER_TO}
+
| Enthält die URL-Adresse zur nächsttieferen Anzeige- Stufe (im falle groups.tpl den Link zur Artikelliste oder zur Untergruppe).
+
 
+
|-
+
| {$NAME}
+
| Gibt den Namen der Gruppe aus.
+
 
+
|-
+
| {$SHORTTEXT}
+
| Gibt den Kurztext der Gruppe aus.
+
 
+
|-
+
| {$CREATEDATE}
+
| Gibt das Erstelldatum der Gruppe aus.
+
 
+
|-
+
| {$LIST_SHOW_VISTS}
+
| Gibt die Anzahl Klicks auf den Link der entsprechenden Gruppe aus.
+
 
+
|-
+
| {$LIST_HAS_IMAGE}
+
| Gibt zurück, ob die Gruppe ein Leadbild hat. Falls ja wird TRUE, bei nein FALSE zurückgegeben. Entnimmt den Wert aus DynPG.
+
 
+
|-
+
| {$LIST_IMAGE_ALIGN}
+
| Gibt die gewünschte Position des Leadbildes zurück. TOP für oben, BOTTOM für unten, LEFT für links und RIGHT für rechts. Entnimmt den Wert aus DynPG.
+
 
+
|-
+
| {$IMAGE_URL}
+
| Gibt das Quellverzeichnis des Leadbildes aus.
+
 
+
|-
+
| {$IMAGE_NAME}
+
| Gibt den Namen des Leadbildes aus.
+
 
+
|-
+
| {$IMAGE_DESCR}
+
| Gibt die Beschreibung des Leadbildes aus.
+
 
+
|}
+
'''Tabelle 2.11. Templatevariablen - groups.tpl'''
+
 
+
Dieses Template ist zuständig für die Darstellung von Ansichten der Artikel-Listen.
+
 
+
{| border="1"
+
! <center>Platzhalter</center>
+
! <center>Beschreibung</center>
+
 
+
|-
+
| {$ROOT_NAVIGATION}
+
| Erstellt eine Übersichts-Navigation. Gruppe >> Artikel
+
 
+
|-
+
| {$PAGES_NAVIGATION}
+
| Erstellt eine Navigation zum Blättern bei mehreren Seiten. Also falls Sie mehr Gruppen angezeigt werden sollten, als in der config.php unter 'config_AllArticles_Limit' eingestellt sind.
+
 
+
|-
+
| {$LIST_USER_DEFINED_CSS}
+
| Gibt den Wert zurück, den Sie beim Implementieren unter SetParam_AA_SingleCss(...); angegeben wurde.
+
 
+
|-
+
| {$LIST_INDEX}
+
| Gibt die aktuelle Anzahl (den Index) der angezeigten Artikel zurück (also beim 3. Artikel den Wert 3, beim 6. Artikel den Wert 6).
+
 
+
|-
+
| {$LIST_REFER_TO}
+
| Enthält die URL-Adresse zur nächsttieferen Anzeige- Stufe (im falle articles.tpl den Link zur Detail-Ansicht).
+
 
+
|-
+
| {$CONTENT}
+
| Gibt die ID des zum Artikel gehörigen Textes aus.
+
 
+
|-
+
| {$TITLE}
+
| Gibt den Namen/Titel des Artikels aus.
+
 
+
|-
+
| {$LEAD}
+
| Gibt den Lead-Text des Artikels aus.
+
 
+
|-
+
| {$SHOWDATE}
+
| Gibt zurück, ob das Erstelldatum angezeigt werden soll. Falls ja wird TRUE, bei nein FALSE zurückgegeben. Entnimmt den Wert aus DynPG.
+
 
+
|-
+
| {$CREATEDATE}
+
| Gibt das Erstelldatum des Artikels aus
+
 
+
|-
+
| {$LIST_SHOW_VISTS}
+
| Gibt die Anzahl Klicks auf den Link des entsprechenden Artikel aus.
+
 
+
|-
+
| {$LIST_HAS_IMAGE}
+
| Gibt zurück, ob der Artikel ein Leadbild hat. Falls ja wird TRUE, bei nein FALSE zurückgegeben. Entnimmt den Wert aus DynPG.
+
 
+
|-
+
| {$LIST_IMAGE_ALIGN}
+
| Gibt die gewünschte Position des Leadbildes zurück. TOP für oben, BOTTOM für unten, LEFT für links und RIGHT für rechts. Entnimmt den Wert aus DynPG.
+
 
+
|-
+
| {$IMAGE_URL}
+
| Gibt das Quellverzeichnis des Leadbildes aus.
+
 
+
|-
+
| {$IMAGE_NAME}
+
| Gibt den Namen des Leadbildes aus.
+
 
+
|-
+
| {$IMAGE_DESCR}
+
| Gibt die Beschreibung des Leadbildes aus.
+
 
+
|}
+
'''Tabelle 2.12. Templatevariablen - articles.tpl'''
+
 
+
Dieses Template ist zuständig für die Darstellung der Detailansicht eines Artikels.
+
 
+
{| border="1"
+
! <center>Platzhalter</center>
+
! <center>Beschreibung</center>
+
 
+
|-
+
| {$COND_SEGM_CATNAV}
+
| Gibt zurück, ob eine Übersichts-Navigation angezeigt werden soll. Falls ja wird TRUE, bei nein FALSE zurückgegeben. Entnimmt den Wert aus der Implementation: SetParam_A_CategoryNavigation(TRUE/FALSE);
+
 
+
|-
+
| {$ROOT_NAVIGATION}
+
| Erstellt eine Übersichts-Navigation . Gruppe >> Artikel >> Titel
+
 
+
|-
+
| {$LIST_USER_DEFINED_CSS}
+
| Gibt den Wert zurück, den Sie beim Implementieren unter SetParam_A_ArticleCss(...); angegeben wurde.
+
 
+
|-
+
| {$COND_SEGM_HEAD}
+
| Gibt zurück, ob der Head-Bereich (im Normalfall Headtext und Beschreibung) angezeigt werden soll. Falls ja wird TRUE, bei nein FALSE zurückgegeben. Entnimmt den Wert aus der Implementation: SetParam_A_ArticleHeader(TRUE/FALSE);
+
 
+
|-
+
| {$TITLE}
+
| Gibt den Namen/Titel des Artikels aus.
+
 
+
|-
+
| {$LEAD}
+
| Gibt den Lead-Text des Artikels aus.
+
 
+
|-
+
| {$SHOWDATE}
+
| Gibt zurück, ob das Erstelldatum angezeigt werden soll. Falls ja wird TRUE, bei nein FALSE zurückgegeben. Entnimmt den Wert aus DynPG.
+
 
+
|-
+
| {$CREATEDATE}
+
| Gibt das Erstelldatum des Artikels aus
+
 
+
|-
+
| {$COND_SEGM_TEXT}
+
| Gibt zurück, ob der Artikelinhalt/-text angezeigt werden soll. Falls ja wird TRUE, bei nein FALSE zurückgegeben. Entnimmt den Wert aus der Implementation: SetParam_A_ShowText(TRUE/FALSE);
+
 
+
|-
+
| {$CONTENT}
+
| Gibt den zugehörigen Text des Artikels aus
+
 
+
|-
+
| {$COND_SEGM_PRINTNAV}
+
| Gibt zurück, ob ein Link um den Artikel zu drucken angezeigt werden soll. Falls ja wird TRUE, bei nein FALSE zurückgegeben. Entnimmt den Wert aus der Implementation: SetParam_A_PrintNavigation(TRUE/FALSE);
+
 
+
|-
+
| {$PRINT_HREF}
+
| Gibt den Link zur Druckansicht des Artikels aus.
+
 
+
|-
+
| {$COND_SEGM_SEPARATOR}
+
| Gibt zurück, ob der Seperator im Text ignoriert werden soll. Falls ja wird TRUE, bei nein FALSE zurückgegeben. Entnimmt den Wert aus der Implementation: SetParam_A_IgnoreSeperator(TRUE/FALSE);
+
 
+
|-
+
| {$MORE_HREF}
+
| Gibt die URL aus, die vom durch den Seperator getrennten Text zum gesamten Text führt.
+
 
+
|}
+
'''Tabelle 2.13. Templatevariablen - detail.tpl'''
+
 
+
Dieses Template ist zuständig für die Darstellung der Home-Ansicht.
+
 
+
{| border="1"
+
! <center>Platzhalter</center>
+
! <center>Beschreibung</center>
+
 
+
|-
+
| {$LIST_INDEX}
+
| Gibt die aktuelle Anzahl (den Index) der angezeigten Artikel zurück (also beim 3. Artikel den Wert 3, beim 6. Artikel den Wert 6).
+
 
+
|-
+
| {$GRP_NAME}
+
| Gibt den Gruppennamen aus.
+
 
+
|-
+
| {$LIST_HEADER_EACH}
+
| &nbsp;
+
 
+
|-
+
| {$TITLE}
+
| Gibt den Namen/Titel des Artikels aus.
+
 
+
|-
+
| {$LEAD}
+
| Gibt den Lead-Text des Artikels aus.
+
 
+
|-
+
| {$LIST_SHOWTEXT_EACH}
+
| &nbsp;
+
 
+
|-
+
| {$CONTENT}
+
| Gibt den zugehörigen Text des Artikels aus.
+
 
+
|-
+
| {$SHOWDATE}
+
| Gibt zurück, ob das Erstelldatum angezeigt werden soll. Falls ja wird TRUE, bei nein FALSE zurückgegeben. Entnimmt den Wert aus DynPG.
+
 
+
|-
+
| {$CREATEDATE}
+
| Gibt das Erstelldatum des Artikels aus.
+
 
+
|-
+
| {$LIST_FWD_TEXT}
+
| &nbsp;
+
 
+
|-
+
| {$LIST_REFER_TO}
+
| Enthält die URL-Adresse zur nächsttieferen Anzeige- Stufe (im falle home.tpl den Link zum gesamten Artikel).
+
 
+
|}
+
'''Tabelle 2.14. Templatevariablen - home.tpl'''
+
 
+
Dieses Template ist zuständig für die Darstellung von Ansichten der Artikel-Listen.
+
 
+
{| border="1"
+
! <center>Platzhalter</center>
+
! <center>Beschreibung</center>
+
 
+
|-
+
| {$PG_NAV_LASTPAGE}
+
| Gibt die Seitenzahl der Seite davor aus.
+
 
+
|-
+
| {$PG_NAV_NEXTPAGE}
+
| Gibt die Seitenzahl der nächsten Seite aus.
+
 
+
|-
+
| {$PG_NAV_RELPAGE}
+
| Gibt die URL der Seite aus.
+
 
+
|-
+
| {$PG_NAV_SEPARATION}
+
| &nbsp;
+
 
+
|-
+
| {$PG_NAV_ISCURRENT}
+
| &nbsp;
+
 
+
|}
+
'''Tabelle 2.15. Templatevariablen - navigation-page.tpl'''
+
 
+
Dieses Template ist zuständig für die Darstellung von Ansichten der Artikel-Listen.
+
 
+
{| border="1"
+
! <center>Platzhalter</center>
+
! <center>Beschreibung</center>
+
 
+
|-
+
| {$SEARCH_RESULTPAGE}
+
| Gibt die URL der Seite aus, auf der die Suchresultate erscheinen.
+
 
+
|}
+
'''Tabelle 2.16. Templatevariablen - search-form.tpl'''
+
 
+
== Die bedingte Anweisung ==
+
 
Folgendes Beispiel zeigt, wie man bedingte Anweisungen in seine Templates integrieren kann:  
 
Folgendes Beispiel zeigt, wie man bedingte Anweisungen in seine Templates integrieren kann:  
  
'''Beispiel 2.2. Template-Beispiel (Artikel-Detailansicht mit bedingter Anweisung)'''
+
'''Template-Beispiel''' (Artikel-Detailansicht mit bedingter Anweisung)
  
<pre>
+
<code>[html,N]
 
<!--Wenn Artikelname = "Kontakt" dann Inhalt + zusätzliche Infos ausgeben-->
 
<!--Wenn Artikelname = "Kontakt" dann Inhalt + zusätzliche Infos ausgeben-->
  
Zeile 368: Zeile 86:
  
 
{$# End #}
 
{$# End #}
</pre>
+
</code>
Hier wird der Text '''''"mein Lieblingsartikel!"''''' nur dann ausgegeben, wenn der Artikel den Namen "Kontakt" trägt. Die Syntax für bedingte Anweisungen lautet allgemein:  
+
Hier wird der Text <tt>"mein Lieblingsartikel!"</tt> nur dann ausgegeben, wenn der Artikel den Namen "Kontakt" trägt. Die Syntax für bedingte Anweisungen lautet allgemein:  
<pre>
+
<code>[html,N]
 
{$#(Bedingung) #}
 
{$#(Bedingung) #}
  
Zeile 376: Zeile 94:
  
 
{$# End #}
 
{$# End #}
</pre>
+
</code>
  
[[Image:caution.png]] '''Achtung''' Bei Zeichenkettenvergleichen(wie in obigem Bsp.) muss darauf geachtet werden, dass auch die Templatevariablen von Anführungszeichen umgeben werden, sonst hagelt es Fehlerausschriften!
+
{{Caution
 +
|Bei Zeichenkettenvergleichen (wie in obigem Bsp.) muss darauf geachtet werden, dass auch die Templatevariablen von Anführungszeichen umgeben werden, sonst hagelt es Fehlerausschriften.}}
  
[[Image:tip.png]] '''Tipp''' Die Bedingung wird als PHP-Code ausgewertet, daher können prinzipiell alle Operatoren verwendet werden, solange der Ergebnisausdruck einen Wahrheitswert liefert.
+
{{Info
 +
|Die Bedingung wird als PHP-Code ausgewertet, daher können prinzipiell alle Operatoren verwendet werden, solange der Ergebnisausdruck einen Wahrheitswert liefert.}}
  
==  PHP-Code ==
+
Schauen wir uns ein Beispiel mit Negation an.
<pre>
+
<code>[html,N]
 +
<table>
 +
    <tr>
 +
      <td> {$TITLE} </td>
 +
    </tr>
 +
  {$# ({$SHOWDATE}) #}
 +
    <tr>
 +
      <td> Erstellt am: {$CREATEDATE} </td>
 +
    </tr>
 +
  {$# End #}
 +
  {$# (!{$SHOWDATE}) #}
 +
    <tr>
 +
      <td> Anzeige ohne Erstelldatum </td>
 +
    </tr>
 +
  {$# End #}
 +
    <tr>
 +
      <td> {$CONTENT} </td>
 +
    </tr>
 +
</table>
 +
</code>
 +
 
 +
Das obige Beispiel gibt den Artikel mit seinem Erstelldatum aus, falls das entsprechende Häkchen im Backend angeklickt wurde, ansonsten wird "Anzeige ohne Erstelldatum" ausgegeben.
 +
 
 +
===  PHP-Code ===
 +
<code>[html,N]
 
{$#PHP (PHP-CODE) #}
 
{$#PHP (PHP-CODE) #}
</pre>
+
</code>
 
Mit dieser Syntax können Sie PHP-Code implementieren. Alles was in der Klammer steht, wird als PHP-Code interpretiert. Es kommt dem Tag  
 
Mit dieser Syntax können Sie PHP-Code implementieren. Alles was in der Klammer steht, wird als PHP-Code interpretiert. Es kommt dem Tag  
  
<pre>
+
<code>[php,N]
 
<?php ... ?>
 
<?php ... ?>
</pre>
+
</code>
  
 
einer PHP-Seite gleich. Auch hier ein kleines Beispiel:  
 
einer PHP-Seite gleich. Auch hier ein kleines Beispiel:  
  
'''Beispiel 2.3. Template-Beispiel (Artikel-Detailansicht mit PHP-Code)'''
+
'''Template-Beispiel''' (Artikel-Detailansicht mit PHP-Code)
  
<pre>
+
<code>[html,N]
 
<!--Zeichenlänge des Titels anzeigen-->
 
<!--Zeichenlänge des Titels anzeigen-->
  
Zeile 402: Zeile 146:
  
 
{$CONTENT} <!--Inhalt ausgeben-->
 
{$CONTENT} <!--Inhalt ausgeben-->
</pre>
+
</code>
 +
{{Caution
 +
|Am Ende eines PHP-Statements '''''darf kein Semikolon (";")''''' stehen, wie sonst üblich.}}
 +
 
 +
=== Listen ===
 +
In der Gruppenliste und Artikelliste werden in der Regel mehrere Gruppen und Artikel in einer Liste ausgegeben. Sie können dabei das Aussehen jedes einzelnen Elements der Liste beeinflussen. Die Template-Engine durchläuft zum Erstellen der Liste eine ''Schleife'', welche den folgenden Aufbau hat:
 +
 
 +
<code>[html,n]
 +
// Code der vor Durchlaufen der Schleife eingefügt wird.
 +
 
 +
<!-- RepeatedListBegin name="listing" -->
 +
 
 +
  // Code in der Schleife. Hier sind die Variablen der jeweilgen Gruppe (Titel, Beschreibung. URL etc.) verfügbar.
 +
 +
<!-- RepeatedListFinish -->
 +
 +
// Code der nach Durchlaufen der Schleife eingefügt wird.
 +
 
 +
</code>
 +
 
 +
Innerhalb dieser Schleife haben Sie Zugriff auf die Variablen, welche spezifisch für die jeweilige Gruppe oder den jeweiligen Artikel sind (z.B. Titel, Leadtext, Leadbild, URL zum Inhalt etc.). Die HTML Angaben für ein Element der Liste müssen also innerhalb der Schleife platziert werden. Um nun zum Beispiel eine Gruppenliste zu erstellen, können Sie die folgenden Angaben verwenden.
 +
 
 +
<code>[html,n]
 +
<div class="gruppenliste">
 +
 
 +
  <!-- RepeatedListBegin name="listing" -->
 +
 
 +
  <div class="gruppe">
 +
    <h3>{$NAME}</h3>
 +
    <p>{$SHORTTEXT}</p>
 +
    <a href="{$LIST_REFER_TO}">Link</a>
 +
  </div>
 +
 +
  <!-- RepeatedListFinish -->
 +
</div>
 +
</code>
 +
 
 +
== Weitere Informationen ==
 +
Weitere Informationen zu den Templatevariablen und den Umgang mit Templates finden Sie in den folgenden Artikeln:
  
[[Image:caution.png]] '''Achtung''' Am Ende eines PHP-Statements '''''darf kein Semikolon (";")''''' stehen, wie sonst üblich!
+
* [[Tutorial - Templates]]
 +
* [[Template-Referenz]]

Aktuelle Version vom 27. September 2011, 15:51 Uhr

Einführung

Mit DynPG ist es möglich die Art und Weise wie Artikel und Listenansichten ausgegeben werden, zu beeinflussen. Ein Weg ist CSS, ein anderer (wesentlich flexiblerer) geht über die eingebaute Template-Engine. Ein Beispiel: Der Aufruf

$DynPG->Write_Article();

bewirkt, dass die Detailansicht eines Artikels angezeigt wird. Dabei wird (wenn nichts anderes explizit angegeben wurde) implizit ein Standard-Template verwendet, das definiert wie diese Ansicht auszusehen hat. Im DynPG-Unterverzeichnis /tpl/MyCMS/default/ liegen die Templatedateien für die Standardansichten.

  • groups.tpl: Gruppenlistenansicht
  • articles.tpl: Artikellistenansicht
  • detail.tpl: Artikel-Detailansicht
  • home.tpl: Home-Ansicht
  • navigation.tpl: Blätterfunktion der Listen-Ansichten
  • search-form.tpl: Formular für die Suche

In diesen Dateien haben Sie die Möglichkeit, oben genannte Ansichten nach Ihren Wünschen anzupassen. Die Darstellung geschieht grundsätzlich mit HTML. Zusätzlich gibt es eine Templatesprache. Diese ist schlicht gehalten und beinhaltet einige wenige Elemente die nachfolgend näher betrachtet werden sollen. Statt die Standard-Templates zu manipulieren, können auch neue Templates erzeugt werden. Dazu muss im Unterverzeichnis /tpl/MyCMS/ einfach ein neuer Ordner mit dem gewünschten Templatenamen angelegt werden. Je nachdem welche Ansichten nun geändert werden sollen, fügt man Dateien mit denselben Namen wie in oben genannter Liste ein. Diese können dann nach den eigenen Wünschen bearbeitet werden. Mit den Zeilen

$DynPG->setupTemplate("meinTemplate");
 
$DynPG->SetParam_A_Article(13);
 
$DynPG->Write_Article();
 
$DynPG->setupTemplate("default");

wird das Template meinTemplate gesetzt und damit der Artikel 13 ausgegeben.}}

{{Caution |Das Setzen eines Templates muss vor der Ausgabe des Artikels erfolgen!

Caution.png Achtung: Wenn das Template gesetzt wurde, dann wird es auch für alle nachfolgenden Ausgaben verwendet. Ist dies nicht erwünscht, muss explizit wieder das Standard-Template (default) gesetzt werden.

Die Template-Sprache

Ein erstes Beispiel

Hier ein kleines einführendes Beispiel:

Template-Minimalbeispiel (eigene Artikel-Detailansicht in /tpl/MyCMS/minimal/detail.tpl)

<!-- Dies ist ein Kommentar (er wird nicht angezeigt) -->
{$CONTENT} <!--Den Inhalt des Artikels ausgeben--> 
 
Dies ist ein <b>selbstdefiniertes Template</b>  <!--beliebiger HTML-Code-->
 
<!--Alles was hier drinsteht, wird nach dem Aufruf von $DynPG->Write_Article(); eingefügt -->

{$CONTENT} ist ein Platzhalter für den Inhalt des anzuzeigenden Artikels. An dieser Stelle wird dann also der eigentliche Artikeltext eingefügt (genau das erledigt die Templateengine). Eine Liste der Templatevariablen (Platzhalter) finden Sie in der Template-Referenz.

Im Ordner /tpl/MyCMS/minimal wurde ein eigenes Template angelegt. In diesen Ordner verschieben wir eine Datei detail.tpl, die obigen Inhalt aufweist. Damit haben wir uns eine eigene Artikel-Detailansicht definiert, die jetzt jederzeit in irgendeiner Seite verwendet werden kann, indem folgender Code eingefügt wird:

$DynPG->setupTemplate("minimal");
 
$DynPG->SetParam_A_Article(13);
 
$DynPG->Write_Article();

Die Templatesprache hat neben den Templateplatzhaltern noch drei andere wichtige Sprachelemente. Dies sind die bedingte Anweisung, der PHP-Block und die Erstellung von Listen. In die Template-Datei kann zudem auch beliebiger HTML-Code eingefügt werden, wodurch die Gestaltungsmöglichkeiten vielfältiger und wesentlich flexibler werden.

Die bedingte Anweisung

Folgendes Beispiel zeigt, wie man bedingte Anweisungen in seine Templates integrieren kann:

Template-Beispiel (Artikel-Detailansicht mit bedingter Anweisung)

<!--Wenn Artikelname = "Kontakt" dann Inhalt + zusätzliche Infos ausgeben-->
 
{$# ('{$TITLE}'=='Kontakt') #}
 
{$CONTENT}
 
mein <b>Lieblingsartikel</b>!
 
{$# End #}
 
<!--andernfalls nur den Inhalt ausgeben-->
 
{$# ('{$TITLE}'!='Kontakt') #}
 
{$CONTENT}
 
{$# End #}

Hier wird der Text "mein Lieblingsartikel!" nur dann ausgegeben, wenn der Artikel den Namen "Kontakt" trägt. Die Syntax für bedingte Anweisungen lautet allgemein:

{$#(Bedingung) #}
 
...
 
{$# End #}
Caution.png Achtung: Bei Zeichenkettenvergleichen (wie in obigem Bsp.) muss darauf geachtet werden, dass auch die Templatevariablen von Anführungszeichen umgeben werden, sonst hagelt es Fehlerausschriften.
Tip.png Tipp: Die Bedingung wird als PHP-Code ausgewertet, daher können prinzipiell alle Operatoren verwendet werden, solange der Ergebnisausdruck einen Wahrheitswert liefert.

Schauen wir uns ein Beispiel mit Negation an.

<table>
    <tr>
      <td> {$TITLE} </td>
    </tr>
  {$# ({$SHOWDATE}) #}
    <tr>
      <td> Erstellt am: {$CREATEDATE} </td>
    </tr>
  {$# End #}
  {$# (!{$SHOWDATE}) #}
    <tr>
      <td> Anzeige ohne Erstelldatum </td>
    </tr>
  {$# End #}
    <tr>
      <td> {$CONTENT} </td>
    </tr>
</table>

Das obige Beispiel gibt den Artikel mit seinem Erstelldatum aus, falls das entsprechende Häkchen im Backend angeklickt wurde, ansonsten wird "Anzeige ohne Erstelldatum" ausgegeben.

PHP-Code

{$#PHP (PHP-CODE) #}

Mit dieser Syntax können Sie PHP-Code implementieren. Alles was in der Klammer steht, wird als PHP-Code interpretiert. Es kommt dem Tag

<?php ... ?>

einer PHP-Seite gleich. Auch hier ein kleines Beispiel:

Template-Beispiel (Artikel-Detailansicht mit PHP-Code)

<!--Zeichenlänge des Titels anzeigen-->
 
Die Länge des Titels beträgt {$#PHP (strlen("{$TITLE}")) #} Zeichen 
 
{$CONTENT} <!--Inhalt ausgeben-->
Caution.png Achtung: Am Ende eines PHP-Statements darf kein Semikolon (";") stehen, wie sonst üblich.

Listen

In der Gruppenliste und Artikelliste werden in der Regel mehrere Gruppen und Artikel in einer Liste ausgegeben. Sie können dabei das Aussehen jedes einzelnen Elements der Liste beeinflussen. Die Template-Engine durchläuft zum Erstellen der Liste eine Schleife, welche den folgenden Aufbau hat:

// Code der vor Durchlaufen der Schleife eingefügt wird.
 
<!-- RepeatedListBegin name="listing" -->
 
  // Code in der Schleife. Hier sind die Variablen der jeweilgen Gruppe (Titel, Beschreibung. URL etc.) verfügbar.
 
<!-- RepeatedListFinish -->
 
// Code der nach Durchlaufen der Schleife eingefügt wird.

Innerhalb dieser Schleife haben Sie Zugriff auf die Variablen, welche spezifisch für die jeweilige Gruppe oder den jeweiligen Artikel sind (z.B. Titel, Leadtext, Leadbild, URL zum Inhalt etc.). Die HTML Angaben für ein Element der Liste müssen also innerhalb der Schleife platziert werden. Um nun zum Beispiel eine Gruppenliste zu erstellen, können Sie die folgenden Angaben verwenden.

<div class="gruppenliste">
 
  <!-- RepeatedListBegin name="listing" -->
 
  <div class="gruppe">
    <h3>{$NAME}</h3>
    <p>{$SHORTTEXT}</p>
    <a href="{$LIST_REFER_TO}">Link</a>
  </div>
 
  <!-- RepeatedListFinish -->
</div>

Weitere Informationen

Weitere Informationen zu den Templatevariablen und den Umgang mit Templates finden Sie in den folgenden Artikeln: