Einen eigenen Data Container in Contao

Nehmen wir mal an, wir wollen im Contao Backend eine Auswertung aus verschiedenen Datentabellen darstellen oder noch etwas ausgefallener: die Daten sollen über eine Rest oder Soap-Schnittstelle abgerufen werden. Jetzt haben wir das Problem, dass Contao von Haus aus drei Typen für einen dataContainer unterstützt: DC_Table, DC_File und DC_Folder. Alle diese Klassen sind für unseren Anwendungsfall nicht geeignet, da wir weder eine Datentabelle, Datei vorliegen haben und auch nicht mit dem Dateisystem arbeiten wollen. Wir können leider nicht wie unter „Contao Autoloader erweitern“ beschrieben, einen eigenen DataContainer über den Autoloader laden, da Contao an der betreffenden Stelle mit einem require arbeitet:

$dataContainer = 'DC_' . $GLOBALS['TL_DCA'][$strTable]['config']['dataContainer'];
require(sprintf('%s/system/drivers/%s.php', TL_ROOT, $dataContainer));

Wir müssen somit (leider) unseren neuen DataContainer im Ordner system/drivers erstellen.

Wie kann nun ein eigener DataContainer aussehen? Ich nenne die Datei DC_Source.php und diese sieht folgendermaßen aus:

class DC_Source extends DataContainer implements listable
{
	public function __construct($strTable_)
	{
          parent::__construct();
          $this->m_table=$strTable_;
	}
	public function showAll()
	{
          return "<strong>Html Quellcode</strong>";
	}
	public function show()
	{
          // note used
	}
	public function delete()
	{
          // note used
	}
	public function undo()
	{
          // note used
	}
}
 
?>

Natürlich ist es nicht die schönste Lösung z. B. stören die ungenutzten Funktionen. Das Interface listable muß jedoch implementiert werden, damit die Methode showAll aufgerufen wird. Contao sieht nicht vor, eigene DataContainer zu erstellen, weswegen dieser Umstand wohl oder übel akzeptiert werden muß. In der Methode showAll können wir einen beliebigen HTML-Code zurückgeben. Idealerweise orientiert man sich dabei an anderen Modulen, um bestehendes CSS nutzen zu können.

Ein Anwendungsbeispiel ist z. B. die Integration einer Statistik-Seite ins Backend:Beispiel Contao DataContainer

 

Falls jemand eine bessere Methode empfehlen kann -> bitte melden.

3 Gedanken zu “Einen eigenen Data Container in Contao

  1. Pingback: Ein eigener inputType in Contao | Tobias Seckinger

Kommentar verfassen