von Andy Pillip

Im Contao-Katalog auf externe Datenbanken zugreifen

Eine Erweiterung, um in Katalogen Daten aus externen Datenbanken zu beziehen

Wir haben eine kostenlose Erweiterung entwickelt, mit der in Contao-basierten Seiten Inhalte aus externen Datenbanken angezeigt und durchsucht werden können.

Die Erweiterung ist Open Source, kostenlos zu haben und unter der LGPL lizenziert.

Inhalte strukturieren mit dem Catalog

Die Organisation von strukturierten Inhalten ist ein häufiger Anwendungsfall bei der Arbeit mit einem CMS. Die Erweiterung Catalog für das Open Source CMS Contao bietet genau das:

Es lassen sich Sammlungen (Kataloge) von Inhalten gleicher Struktur/gleichen Typs anlegen, wie zum Beispiel Produktkataloge, Stellenangebote oder Dokumentensammlungen.

Die Struktur eines Kataloges ist definiert durch die Felder, die im CMS eingegeben werden müssen, und in der Datenbanktabelle angelegt werden. Bei Stellenangeboten könnten das sein:

  • Anzeigetitel
  • Datum
  • Bewerbungskontakt
  • Volltext
  • Erwartete Qualifikation
  • Gehalt

Fassettierte Suche mit Filtern

Diese Strukturierung schafft unter anderem die Möglichkeit, dem Besucher der Webseite eine komfortable Suche anzubieten, bei der bereits beim Aufruf Inhalte angezeigt werden, die sich dann über Filter und Suchfelder reduzieren lassen.

Fassettierte Suche (facetted search) ist das Zauberwort, und die Technik findet sich auf vielen guten Webseiten wieder. Die Anzahl der Interaktionen bis zu einer Ergebnisliste ist minimiert.

Externe Daten auflisten und durchsuchen

Basierend auf unserer Hilfsklasse OtherDatabase, die es Erweiterungsentwicklern ermöglicht, externe Datenbanken an Contao anzubinden, haben wir wiederum den Catalog erweitert, so dass im Frontend der Zugriff auf externe Datenbanken möglich ist.

Damit ist das Filtern und Durchsuchen von Tabellen in externen Datenbanken mit Contao möglich.

Die Pflege dieser Daten in Contao ist ein seltener Anwendungsfall, schließlich würde man dann eher eine Tabelle in Contaos eigener Datenbank benutzen. Eher geht es uns darum, bestehende Datenbanken anzubinden, die von einer anderen Stelle befüllt werden.

Catalog­OtherDb ein­richten

Nach der Installation der Erweiterung (die Catalog und OtherDatabase benötigt) müssen vom Administrator folgende Schritte vorgenommen werden:

Daten­bank­zu­gangs­daten eintragen

Wie der Dokumentation von OtherDatabase zu entnehmen ist, muss die localconfig.php um die Zugangsdaten zu den externen Datenbanken erweitert werden.

Damit Contao diese nicht überschreibt, muss der Code unterhalb der Zeile ### INSTALL SCRIPT STOP ### eingefügt werden:

$GLOBALS['TL_CONFIG']['dbOther']['example'] = array(
'description' => 'Some external database',
'dbDriver' => 'MySQLi',
'dbHost' => 'db.example.com',
'dbUser' => 'exampleUser',
'dbPass' => 'examplePasswd',
'dbDatabase' => 'dbExample',
'dbPconnect' => false,
'dbCharset' => 'UTF8',
'dbPort' => '3307'
);

Eine Besonderheit für CatalogOtherDb ist dabei die description, die später im Katalog in einem Auswahlfeld angeboten wird.

Katalog anlegen

Die Tabelle existiert natürlich schon auf einem externen Server, trotzdem muss nochmal ein Katalog (und damit eine Tabelle) angelegt werden, der die zu benutzenden Felder definiert.

In den Katalogeinstellungen muss die Verwendung einer externen Datenbank aktiviert werden, danach kann über ein Dropdown die konfigurierte Datenbank ausgewählt werden, in unserem Beispiel Some external database. Der Tabellenname muss genau der gleiche sein wie in der externen Datenbank.

Die Spaltennamen der gewünschten Felder müssen identisch mit denen in der externen Tabelle sein, und die Feldtypen müssen so eingestellt sein, dass der Catalog etwas mit dem Inhalt anfangen kann.

Für spezielle Formatierungen kann das Feld einfach als Text angelegt werden, und zusätzlich ein Berechnen-Feld, das über SQL die Formatierung erledigt.

System­felder mit anderen Spal­ten­namen

Der Catalog verwendet für die Verlinkung von Beiträgen Alias-, und ID-Felder. Normalerweise verwaltet der Catalog diese Felder selbst, weshalb die Namen dieser Felder nicht willkürlich sind.

Damit der Catalog auch die Einträge in der externen Tabelle adressieren kann, muss unserer Erweiterung beigebracht werden, wie eben diese Felder in der externen Datenbank heißen.

Dazu muss das Array für die externe Datenbank in der localconfig.php erweitert werden um folgendes Feld:

'catalogSystemColumns' => array('table1' => array('nr' => 'id')),

wenn das vom Catalog benötigte Feld id in der externen Tabelle nr heißt, und die Tabelle table1.

Module anlegen

Der Rest läuft wie gewohnt: Für die Auflistung der Daten müssen entsprechende Lister-Module im Theme angelegt werden, für die fassettierte Suche Filter-Module, und für die Detailanzeige der Inhalte Leser-Module.

Hier gibt es keine Abweichung zum normalen Catalog.

Ein­schränkungen

Wie schon erwähnt gehen wir davon aus, dass die Daten von einer weiteren App gepflegt werden, weshalb wir auf den kompletten Verwaltungsteil verzichtet haben.

Deshalb bieten wir bisher im Backend auch keine Auflistung der Daten.

Es können Einträge im Backend angelegt werden, diese erscheinen aber nie im Frontend, weil die Daten ausschließlich aus der externen Quelle bezogen werden. Für die Kombination von lokalen und externen Katalogen bieten wir die Erweiterung CatalogOtherDbCombine.

Gekauft!

Die Erweiterung ist Open Source, aber in der Verwendung relativ eingeschränkt. Gerne teilen wir unentgeltlich unsere Arbeit, auf der LGPL basierend: Änderungen am Quellcode müssen wieder veröffentlich werden, insbesondere mit uns geteilt werden.

Natürlich bieten wir auch an, die Erweiterung zu optimieren und auf Ihren Anwendungsfall anzupassen — fragen Sie uns an.

Fragen beantworten wir auch gerne in den Kommentaren: