Eigene insert tags erstellen: Unterschied zwischen den Versionen

Aus Contao Community Documentation

K (Umstellung auf Syntax Highlighting.)
K (Codebeispiel)
Zeile 20: Zeile 20:
  
 
== Codebeispiel ==
 
== Codebeispiel ==
In diesem Code-Beispiel soll der Insert-Tag <nowiki>{{foo::bar}}</nowiki> ersetzt werden.
+
In diesem Code-Beispiel soll der Insert-Tag <nowiki>{{foo::bar}}</nowiki> ersetzt werden.  
 
Als erstes muss der Hook registriert werden.
 
Als erstes muss der Hook registriert werden.
<source>
+
<source lang="php">
  // config.php
+
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
 +
  // Datei /system/myinserttag/config.php
 +
 
 
  // Registrieren des Hooks replaceInsertTags
 
  // Registrieren des Hooks replaceInsertTags
 
  $GLOBALS['TL_HOOKS']['replaceInsertTags'][] = array('MyClass', 'myReplaceInsertTags');
 
  $GLOBALS['TL_HOOKS']['replaceInsertTags'][] = array('MyClass', 'myReplaceInsertTags');
 +
?>
 
</source>
 
</source>
  
Nach der Registrierung des Hooks muss eine Klasse erstellt werden, welche eine Methode zur Ersetzung beinhaltet.
+
Nach der Registrierung des Hooks muss eine Klasse erstellt werden, welche eine Methode zur Ersetzung beinhaltet.<br />
<source>
+
Dabei muss der Name der Klasse und der Methode identisch sein wie bei der Hook Registration.(logisch,oder?)<br />
  //MyClass.php
+
Außerdem muss der Name der Datei (ohne Endung) identisch sein wie der Name der Klasse.
 +
<source lang="php">
 +
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
 +
  // Datei /system/myinserttag/MyClass.php
 +
 
 
  class MyClass extends Frontend
 
  class MyClass extends Frontend
 
  {
 
  {
public function myReplaceInsertTags($strTag)
+
    public function myReplaceInsertTags($strTag)
{
+
    {
$arrSplit = explode('::', $strTag);
+
        $arrSplit = explode('::', $strTag);
+
     
if ($arrSplit[0] == 'foo')
+
        if ($arrSplit[0] == 'foo')
{
+
        {
// replace your Insert Tag
+
            if (isset($arrSplit[1]) && $arrSplit[1] == 'bar')
return 'mein content';
+
            {
}
+
                return 'Parameter bar';
+
            } else {
return false;
+
                return 'Fehler! foo ohne Parameter!';
}
+
            }
 +
        }
 +
        // nicht unser Insert-Tag
 +
        return false;
 +
      }
 
  }
 
  }
 +
?>
 
</source>
 
</source>
In der Methode myReplaceInsertTags muss man zuerst prüfen, ob man für den unbekannten Insert-Tag zuständig ist. Wenn man einen zweigeteilten Insert-Tag verwendet, splittet man den Tag anhand des :: (explode). Die geschweiften Klammern werden bereits von Contao entfernt und müssen daher nicht mehr entfernt werden.  
+
In der Methode myReplaceInsertTags muss man zuerst prüfen, ob man für den unbekannten Insert-Tag zuständig ist. Wenn man einen zweigeteilten Insert-Tag verwendet, splittet man den Tag anhand des :: (explode). Die geschweiften Klammern werden bereits von Contao entfernt und müssen daher nicht mehr entfernt werden. <br />
 +
Im Beispiel wurde zusätzlich noch eine Ausgabe ermöglicht, wenn der Parameter "bar" nicht angegeben wurde.
 +
 
  
// der Schluss ist irgend wie noch nicht richtig Formuliert, ich kann leider nicht mehr, bin total übermüdet....
+
----

Version vom 27. September 2010, 23:52 Uhr

MsgError.png Unvollständiger Artikel: dieser Artikel ist noch nicht sauber bearbeitet.

Bitte erweitere ihn und entferne erst anschliessend diesen Hinweis.

betrifft
TYPOlight Version ab 2.6
Contao Version ab 2.9

Unter Insert-Tags versteht man in Contao spezielle Platzhalter, die beim Laden der Webseite durch bestimmte Inhalte ersetzt werden. Dies können zum Beispiel der aktuelle Benutzername, ein Datum oder ein Link sein. Der Contao-Core bietet eine ganze Reihe verschiedener Insert-Tags, welche auf der Projekthomepage dokumentiert sind (siehe Contao Insert-Tags).


Aufbau eines Insert-Tags

Insert-Tags werden generell in zwei geschwungenen Klammern verpackt. {{var::value}} Des weiteren sind Insert-Tags meistens zweigeteilt. Die Wertepaare sind durch zwei Doppelpunkte getrennt. Der erste Teil ist entweder die Kategoriezugehörigkeit des Insert-Tags oder der Name des Tags. Der zweite Teil ist meistens ein Parameter, um die gewünschte Rückgabe noch zu verfeinern. Ein Beispiel verdeutlicht dies: {{link::*}} Dieser Insert Tag würde einen Link zur Seite * (muss durch die ID der Seite ersetzt werden) im richtigen URL Format generieren.

Eigene Insert-Tags erstellen

Seit TYPOlight Version 2.6 kann man Contao durch eigene Insert-Tags erweitern. Dazu wurde der Hook replaceInsertTags zur Verfügung gestellt. Der Ablauf ist nun folgender.

  1. Contao parsed einen Seitenaufruf und stößt dabei auf ein Insert-Tag
  2. Contao probiert dieses Insert-Tag mit den Core-Möglichkeiten zu ersetzen
  3. Wenn Contao das Insert-Tag nicht kennt, wird es an den Hook replaceInsertTags weitergereicht. Dieser Hook erhält das unbekannte Insert-Tag als Parameter. Nun kann der Entwickler prüfen ob er das unbekannte Insert-Tag ersetzen möchte und wenn ja, gibt er einen beliebigen Content zurück.
  4. Wenn der Entwickler nichts mit dem unbekannten Insert-Tag anfangen kann, so muss false zurück gegeben werden.

Codebeispiel

In diesem Code-Beispiel soll der Insert-Tag {{foo::bar}} ersetzt werden. Als erstes muss der Hook registriert werden.

 <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
 // Datei /system/myinserttag/config.php
 
 // Registrieren des Hooks replaceInsertTags
 $GLOBALS['TL_HOOKS']['replaceInsertTags'][] = array('MyClass', 'myReplaceInsertTags');
 ?>

Nach der Registrierung des Hooks muss eine Klasse erstellt werden, welche eine Methode zur Ersetzung beinhaltet.
Dabei muss der Name der Klasse und der Methode identisch sein wie bei der Hook Registration.(logisch,oder?)
Außerdem muss der Name der Datei (ohne Endung) identisch sein wie der Name der Klasse.

 <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
 // Datei /system/myinserttag/MyClass.php
 
 class MyClass extends Frontend
 {
    public function myReplaceInsertTags($strTag)
    {
        $arrSplit = explode('::', $strTag);
 
        if ($arrSplit[0] == 'foo')
        {
            if (isset($arrSplit[1]) && $arrSplit[1] == 'bar')
            {
                return 'Parameter bar';
            } else {
                return 'Fehler! foo ohne Parameter!';
            }
        }
        // nicht unser Insert-Tag
        return false;
      }
 }
 ?>

In der Methode myReplaceInsertTags muss man zuerst prüfen, ob man für den unbekannten Insert-Tag zuständig ist. Wenn man einen zweigeteilten Insert-Tag verwendet, splittet man den Tag anhand des :: (explode). Die geschweiften Klammern werden bereits von Contao entfernt und müssen daher nicht mehr entfernt werden.
Im Beispiel wurde zusätzlich noch eine Ausgabe ermöglicht, wenn der Parameter "bar" nicht angegeben wurde.



Ansichten
Meine Werkzeuge

Contao Community Documentation

Nur weil es bei Nachbarseite XYZ was gibt, wird automatisch oft davon ausgegangen, dass das fertige Bauteil einsatzbereit auf der Straße liegt.

Marie Dietz
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge