<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://de.contaowiki.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://de.contaowiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bubblez</id>
		<title>Contao Community Documentation - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://de.contaowiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bubblez"/>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Spezial:Beitr%C3%A4ge/Bubblez"/>
		<updated>2026-04-30T04:07:16Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>https://de.contaowiki.org/Korrekte_database.sql_erzeugen</id>
		<title>Korrekte database.sql erzeugen</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Korrekte_database.sql_erzeugen"/>
				<updated>2012-04-08T13:53:08Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Beispiel Statement und Hinweise dazu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Einige Entwickler werden wahrscheinlich das Problem haben, dass die Modultabellen zwar korrekt erzeugt werden, sich aber trotzdem nach der Installation immer noch in der Sektion &amp;quot;Update Database&amp;quot; wiederfinden. Meist liegt das an den implizierten Defaultwerten die von MySQL automatisch erzeugt werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Dev Snippets]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.6|Version=ab 2.9}}&lt;br /&gt;
&lt;br /&gt;
=Normalfall=&lt;br /&gt;
Damit die Tabellen nicht mehr in dieser Sektion erscheinen, macht man einfach folgendes nachdem die Tabelle einmal korrekt angelegt worden ist:&amp;lt;br /&amp;gt;&lt;br /&gt;
# SQL Mode überprüfen. (Wird bei den meisten nicht relevant sein) Contao arbeitet unter MySQL nicht im Strictmodus, welcher standardmäßig auch aus ist. Einfach im phpMyAdmin oder auf der Konsole eingeben und kontrollieren, dass der Wert leer ist:&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;SHOW VARIABLES LIKE 'sql_mode';&amp;lt;/source&amp;gt;Wenn nicht leer gibt man folgendes ein:&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;SET sql_mode = '';&amp;lt;/source&amp;gt;&lt;br /&gt;
# Nun lässt man sich das create statement zurückgeben:&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;SHOW CREATE TABLE tl_MODULE_TABLE_NAME;&amp;lt;/source&amp;gt;tl_MODULE_TABLE_NAME natürlich durch den eigenen Tabellen Namen ersetzen. Dieses Statement ist nun genau so in der database.sql zu verwenden.&lt;br /&gt;
&lt;br /&gt;
{{Achtung|Es gibt Ausnahmen, siehe nächsten Abschnitt.}}&lt;br /&gt;
&lt;br /&gt;
=Spezialfall=&lt;br /&gt;
Leider funktioniert das nicht ganz bei Feldern die NULL sein dürfen, Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
`price` decimal(20,4) NULL ,&lt;br /&gt;
`price2` double(255,0) NULL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MySQL gibt nach obigem Beispiel zurück:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;`price` decimal(20,4) default NULL,&lt;br /&gt;
`price2` double(255,0) default NULL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beides akzeptiert Contao aber nicht. Dafür die vollständige Variante:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
`price` decimal(20,4) NULL default NULL,&lt;br /&gt;
`price2` double(255,0) NULL default NULL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ist also etwas Nacharbeit nötig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Andererseits auch einfach zu merken, immer den vollständigen Syntax nehmen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
NAME  TYP[(WIDTH, PRECISION, SCALE)]  [NOT] NULL  default VALUE&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Beispiel Statement und Hinweise dazu=&lt;br /&gt;
Hier mal ein SQL CREATE Statement mit einigen meist gebrauchten Kombinationen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
    CREATE TABLE `tl_sqltest` (&lt;br /&gt;
      `id` int(10) unsigned NOT NULL auto_increment,&lt;br /&gt;
      `pid` int(10) unsigned NOT NULL default '0',&lt;br /&gt;
      `sorting` int(10) unsigned NOT NULL default '0',&lt;br /&gt;
      `tstamp` int(10) unsigned NOT NULL default '0',&lt;br /&gt;
      `decimal_demo1` decimal(20,4) NOT NULL default '100.0000',&lt;br /&gt;
      `decimal_demo2` decimal(20,0) NOT NULL default '100',&lt;br /&gt;
      `float_demo` float(9,2) unsigned NOT NULL default '0.00',&lt;br /&gt;
      `varchar_demo1` varchar(32) NOT NULL default 'demo',&lt;br /&gt;
      `varchar_demo2` varchar(64) NOT NULL default '',&lt;br /&gt;
      `char_demo1` char(1) NOT NULL default 'A',&lt;br /&gt;
      `char_demo2` char(1) NOT NULL default '',&lt;br /&gt;
      `text_demo1` text NOT NULL,&lt;br /&gt;
      `int_null_demo` int(10) NULL default NULL,&lt;br /&gt;
      `decimal_null_demo` decimal(20,4) NULL default NULL,&lt;br /&gt;
      `float_null_demo` float(9,2) unsigned NULL default NULL,&lt;br /&gt;
      `varchar_null_demo` varchar(32) NULL default NULL,&lt;br /&gt;
      `char_null_demo` char(1) NULL default NULL,&lt;br /&gt;
      `text_null_demo` text NULL,&lt;br /&gt;
      `timestamp_demo` timestamp NULL default NULL,&lt;br /&gt;
      `date_demo` date NOT NULL default '1999-01-01',&lt;br /&gt;
      PRIMARY KEY  (`id`),&lt;br /&gt;
      UNIQUE KEY `varchar_demo1` (`varchar_demo1`),&lt;br /&gt;
      KEY `pid` (`pid`)&lt;br /&gt;
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bei PRIMARY KEY müssen 2 Leerzeichen folgen bevor die runde Klammer folgt&lt;br /&gt;
* blob/text Felder (auch die Untertypen tinytext,...) dürfen laut MySQL keinen Default Wert haben, daher ist es hier richtig diesen wegzulassen.&lt;br /&gt;
* der Name des Unique Keys und des normalen Keys muss identisch sein mit dem Feldnamen der in Klammern steht.&lt;br /&gt;
* ein Key der über mehrere Felder angelegt werden könnte, wird von Contao nicht akzeptiert (funktioniert aber)&lt;br /&gt;
* Richtiges Präfix: Contao parst nur Tabellen, die mit dem Präfix &amp;quot;tl_&amp;quot; ausgestattet sind.&lt;br /&gt;
* alle SQL Befehle ausser NOT NULL müssen klein geschrieben sein.&lt;br /&gt;
* Manchmal hilft auch ein &amp;quot;default ''&amp;quot; für varchar NULL Felder.&lt;br /&gt;
&lt;br /&gt;
=Hinweise für Sequel Pro (Mac) Nutzer=&lt;br /&gt;
Folgende Hinweise stammen aus dem Forum und werden hier ohne Bewertung wiedergegeben (hab kein Mac):&lt;br /&gt;
&lt;br /&gt;
Das SQL-Dump, das Sequel Pro (Mac) erzeugt hat, hatte zwei 'Fehler'.&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEFAULT (Großbuchstaben) statt default (Kleinbuchstaben)&lt;br /&gt;
* AUTO_INCREMENT (Großbuchstaben) statt auto_increment (Kleinbuchstaben)&lt;br /&gt;
* nur 1 Leerzeichen nach PRIMARY KEY statt 2 Leerzeichen&lt;br /&gt;
&lt;br /&gt;
Hier sind also Anpassungen nötig.&lt;br /&gt;
&lt;br /&gt;
=Problematik Groß-/Kleinschreibung der Tabellennamen=&lt;br /&gt;
Erweiterungen die Tabellen mit Groß-/Kleinschreibung haben, wie z.B. &amp;quot;tl_coinSlider&amp;quot; bzw. &amp;quot;tl_coinPictures&amp;quot; können Probleme bereiten, besonders unter Windows (XAMPP).&amp;lt;br /&amp;gt;&lt;br /&gt;
Grund ist, die Tabellen werden in Kleinschreibung angelegt. Contao stellt dies fest und verlangt erneut ein Datenbank Update.&amp;lt;br /&amp;gt;&lt;br /&gt;
Lösbar ist das Problem durch einen Eintrag in der Datei my.ini:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[mysqld]&lt;br /&gt;
lower_case_table_names = 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Anmerkung|Es sollte jedoch bei Tabellennamen immer ausschließlich mit Kleinbschreibung gearbeitet werden um solche Probleme zu vermeiden.&amp;lt;br /&amp;gt;Nicht jeder kann die my.ini editieren.}}&lt;br /&gt;
&lt;br /&gt;
=Der database.sql Generator=&lt;br /&gt;
Nachdem man nun das Grundprinzip verstanden hat, ist man aber doch froh, wenn einem die Arbeit abgenommen wird.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dazu dient das Modul: &amp;quot;[[Database.sql_Generator|database.sql Generator]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[Benutzer:BugBuster|BugBuster]] 15:21, 3. Sep. 2010 (CEST)&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Catalog</id>
		<title>Catalog</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Catalog"/>
				<updated>2012-02-16T14:19:38Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Tags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Catalog-Modul ermöglicht eine vielfältige Kategorisierung beliebiger Daten in hierarchischen und flachen Strukturen. Beispiele umfassen [http://www.tuerkischdeutsche-literatur.de Literaturverzeichnisse] oder eine Immobilienverwaltung (mit Frontendeingabe und Workflow) oder einer Rezeptdatenbank (zu sehen auf [http://catalogdemo.dasprojekt.org http://catalogdemo.dasprojekt.org] ).&lt;br /&gt;
&lt;br /&gt;
Da dieses Modul sehr komplex ist, findet man einzelne Dokumentationen in der Kategorie [[:Category:Catalog|Catalog]].&lt;br /&gt;
&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|TLVersion=ab 2.8&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
|Ext1=Catalog ab 2.0beta1&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
[[Category:Catalog]]&lt;br /&gt;
&lt;br /&gt;
=Beschreibung=&lt;br /&gt;
Definieren von mehrfachen individuellen Katalogen, individuellen Feldtypen und zahlreichen Frontend-Anzeige-Formatierungs-Möglichkeiten.&lt;br /&gt;
Dieses Modul erlaubt es Benutzern, Kataloge mit Einträgen zu definieren und zu verwalten. Stellen Sie sich vor, Sie möchten einem Besucher Ihrer Seite eine Liste mit Ihren Spielen zeigen. Sie haben viele Spiele, aber alle haben gleiche bestimmte Eigenschaften, wie z.B. Titel, Autor, Genre, Konsolenformat, Veröffentlichungsdatum usw. Sie möchten nun alle diese Informationen speichern und später dann Besuchern zeigen, ihnen dabei nur Spiele zeigen aus dem Motorsport-Bereich oder Spiele mit einem Preis über einer bestimmten Höhe, nur Spiele, die verfügbar sind usw. Dieses Modul erlaubt Ihnen, solche Dinge zu tun. &lt;br /&gt;
&lt;br /&gt;
Quelle: [http://www.contao.org/erweiterungsliste/view/catalog.html Beschreibungstext des Catalog-Moduls in der Extension-Repository]&lt;br /&gt;
&lt;br /&gt;
=Contao2go Catalog Version=&lt;br /&gt;
&lt;br /&gt;
Da die größte Schwierigkeit darin besteht, zu sehen was man einstellen muss um gewisse Ergebnisse zu bekommen wurde ein Catalog erstellt, mit dem man ein wenig rumspielen kann. Die aktuelle Version kann immer über diesen Link bezogen werden: [http://catalog.mediendepot-ruhr.de http://catalog.mediendepot-ruhr.de] &lt;br /&gt;
&lt;br /&gt;
=Forum=&lt;br /&gt;
Fragen rund um den Catalog werden im Forum hier behandelt: [http://www.contao-community.de/forumdisplay.php?18-catalog Forum - Catalog Bereich]&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Catalog aus dem Contao-Repository==&lt;br /&gt;
Catalog kann ganz normal über die Erweiterungsverwaltung des Contao-Backend installiert werden. Eine manuelle Installation ist auch möglich, dazu muss man sich die benötigen Dateien des [http://www.contao.org/erweiterungsliste/view/catalog.html catalog aus dem Extension Repository herunterladen] (abhängige Erweiterungen nicht vergessen!).&lt;br /&gt;
&lt;br /&gt;
==Catalog aus dem Entwicklungs-Repository==&lt;br /&gt;
Den jeweils neusten Build kann man sich aus dem [http://code.google.com/p/typolight-catalog/source/checkout SVN-Repository] herunterladen. Einzig das Modul backend_filterwiz muss dabei separat installiert werden, alle weiteren Module sind im Repository vorhanden. &lt;br /&gt;
&lt;br /&gt;
Man sollte darauf achten, welche Ordner wohin in der Installation kommen:&lt;br /&gt;
* der Inhalt von /drivers nach /system/drivers/&lt;br /&gt;
* alle anderen Ordner (bis auf /custumnav) nach /system/modules/&lt;br /&gt;
* /customnav wird nicht benötigt&lt;br /&gt;
&lt;br /&gt;
Danach muss ein Update der Datenbank gemacht werden.&lt;br /&gt;
&lt;br /&gt;
Eventuell fehlende Sprachdateien können aus den Übersetzungen der Version im Contao-Extension-Repository manuell hinzugefügt werden. So kann dafür gesorgt werden, dass der Catalog dann (weitgehend) in einer Übersetzung benutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Bei einem Update muss seit Version r239 einmal unter Katalog (Menü von Contao) ganz oben rechts auf 'Maintenance' geklickt werden um die Tags Felder neu aufbauen lassen.}}&lt;br /&gt;
&lt;br /&gt;
==Migration von Version 1 auf Version 2==&lt;br /&gt;
In Version 2 wurde Einiges geändert. So ist es u. a. nicht mehr nötig catalog und catalog_ext zu installieren, da diese Erweiterungen zusammengelegt wurden. Damit es zu keinem Datenverlust kommt, muss bei einem manuellen Update wie folgt vorgegangen werden:&lt;br /&gt;
* Zuerst die alten Modulordner entfernen,&lt;br /&gt;
* danach die neuen Modulordner hochladen.&lt;br /&gt;
* Erst zum Schluss das Datenbankupdate ausführen!&lt;br /&gt;
&lt;br /&gt;
Beim Update über das Contao-ExtensionRepository sollte man die Reihenfolge beachten:&lt;br /&gt;
* Catalog 2 installieren und Datenbank-Update ausführen.&lt;br /&gt;
* Catalog_ext deinstallieren und erneut Datenbank-Update ausführen.&lt;br /&gt;
* Zur Sicherheit alle catalog-Module etc. noch mal öffnen und speichern, damit auch alles glatt läuft.&lt;br /&gt;
* Neue Einstellungen vornehmen.&lt;br /&gt;
&lt;br /&gt;
Katalogfelder vom Typ &amp;quot;Taxonomie&amp;quot; müssen umgestellt werden auf &amp;quot;Auswahl&amp;quot; mit der Datentabelle &amp;quot;tl_taxonomy&amp;quot;, Option Spaltenwert = name. Für eine schönere Darstellung aktiviert man &amp;quot;Die Optionsauswahl individualisieren&amp;quot;, dann kann man auch Teilbereiche aus der Taxonomie vorgeben und die Anzeige auf &amp;quot;Baum nur mit auswählbaren Kindeinträgen&amp;quot; stellen.&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Testumgebung und Vortrag vom Usertreffen 2010:&lt;br /&gt;
* Vortrag / Testumgebung -&amp;gt; http://catalogdemo.dasprojekt.org/&lt;br /&gt;
* Benutzer: tlut2010&lt;br /&gt;
* Passwort: catalogisttoll&lt;br /&gt;
&lt;br /&gt;
==Backend==&lt;br /&gt;
Mit dem Catalog bekommt man im Backend unter dem Menüpunkt 'Inhalte' 2 neue Menüeinträge:&lt;br /&gt;
* Katalog&lt;br /&gt;
* Mit '''Taxonomie''' können Stichworte hierarchisch angelegt und verwaltet werden. Diese sind Grundlage für Filter, Navigation und Verschlagwortung (sog. ''Tagging'') in den Katalogen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-be.png|Cat Backend]]&lt;br /&gt;
&lt;br /&gt;
==Frontend-Module==&lt;br /&gt;
Für eine Basisanwendung der Katalog-Erweiterung können folgende Module eingesetzt werden:&lt;br /&gt;
* Mit '''Catalog List''' kann eine Liste von Einträgen angezeigt werden.&lt;br /&gt;
* Eine Detailansicht eines Eintrags kann mit Hilfe des '''Catalog Reader''' angezeigt werden. Eine ''Catalog List'' verweist dabei auf den ''Catalog Reader''. Der ''Catalog Reader'' muss natürlich nur dann verwendet werden, wenn von einer Auflistung aus eine Detailseite eines Eintrags angezeigt werden soll.&lt;br /&gt;
&lt;br /&gt;
Für eine weiterführende Benutzung der Katalog-Erweiterung stehen optional diese Module zur Verfügung:&lt;br /&gt;
* Catalog Filter (Mit Hilfe von einem Filter können Besucher die Liste eines Catalogs filtern und die Anzeige eingrenzen)&lt;br /&gt;
* Catalog Navigation (Mit dieser Navigation kann man eine Navigation erstellen. Die Navigation besteht zum Beispiel aus Kategorien)&lt;br /&gt;
* Catalog Notify (Hiermit wird ein Formular erstellt, welches zur schnellen Kontaktaufnahme bei einem einzelnen Item dargestellt wird)&lt;br /&gt;
* Catalog Featured (Hiermit kann man eine besondere Liste erstellen, die besondere Items darstellt. Die Liste wird per Zufall zusammengestellt.)&lt;br /&gt;
* Catalog Related (Hiermit erstellt man eine Liste von ähnlichen Items - Einzusezten auf einer Seite wo auch der Catalog Reader enthalten ist. Zufallsausgabe)&lt;br /&gt;
* Catalog Reference (Hiermit erstellt man eine Liste von Items mit einer gleichen Eigenschaft.)&lt;br /&gt;
* Catalog Edit (Um ein Item im Frontend editieren zu können, wird anstelle von Catalog Reader dieses Modul verwendet)&lt;br /&gt;
&lt;br /&gt;
=Erstellen eines Katalogs (Backend)=&lt;br /&gt;
Um einen neuen catalog zu erstellen, klickt man links im Backend unter 'Inhalte' auf 'Katalog'. Anschliessend im Hauptbereich auf den Button 'Neuer Katalog'.&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-newcat.png|Neuen Cat erstellen]]&lt;br /&gt;
&lt;br /&gt;
* Name des Katalogs angeben&lt;br /&gt;
* Einen Tabellennamen angeben (Der catalog legt diese Tabelle selbstständig an. Es hat sich bewährt eine Tabelle anzulegen ohne tl_ als präfix, da Contao diese Tabellen sonst zum Entfernen vorschlägt. Ich empfehle den präfix cat_ damit man die Tabellen schnell wiederfindet.)&lt;br /&gt;
* Alias field (kann erst später ausgefüllt werden) -&amp;gt; anstelle der ID wird der Alias genutzt bei den Links&lt;br /&gt;
* publishField (kann erst später ausgefüllt werden) -&amp;gt; Hier kann ein Checkboxfeld ausgewählt werden, was die Funktion eines 'Auges' = on-/offline hat (z.B. Ein Feld mit dem Namen online)&lt;br /&gt;
* Jump to page -&amp;gt; Hier muss die Detail Seite mit dem Modul Catalog Reader angegeben werden. {{Achtung|Die richtige Zuweisung der Readerseite erfolgt in den Kataloglisten Modulen, diese Zuweisung hier ist jedoch nötig damit der Katalog die Items in die xml-Sitemap eintragen kann. Wird diese Zuweisung hier nicht vorgenommen, so &amp;quot;weiss&amp;quot; der Katalog nicht, auf welchem Reader die Items dargestellt werden sollen und trägt sie daher nicht in der sitemap.xml ein. Auch für die Contao Suche muss diese Angabe gemacht werden.}}&lt;br /&gt;
* Ein Bild hinzufügen -&amp;gt; Hier kann ein Bild für den Katalog hinzugefügt werden, um im Backend den Katalog schnell von anderen unterscheiden zu können&lt;br /&gt;
* Zeichenkette des Titels formatieren (wird erst später gebraucht) -&amp;gt; Um im Backend die Übersicht von vielen Items besser gewährleisten zu können, kann man hier die Anzeigen der einzelnen Items konfigurieren&lt;br /&gt;
* Allow comments -&amp;gt; Kommentare bei den einzelnen Items erlauben und konfigurieren (Funktion ist wie bei News o.ä. daher wird hier nicht genauer darauf eingegangen)&lt;br /&gt;
* Searchable -&amp;gt; Wenn man die Items auch in der Contao Suche indexieren lassen möchte. Nach Aktivierung ist es möglich, Conditions (Ausnahmen) einzugeben und das Title Feld anzugeben von einem Item (weiteres zu Conditions und Title finden Sie weiter unten) Wichtig: Weiterleitungsseite muss angegeben werden!&lt;br /&gt;
** Condition -&amp;gt; Um Felder direkt aus der Suche herauszunehmen (damit unveröffentlichte Items nicht in die Suche aufgenommen werden o.ä.)&lt;br /&gt;
** Page title field -&amp;gt; Den Namen des Items auswählen, damit dieser für die Ergebnisanzeige der Suche genutzt wird ('''und auch für den Title''')&lt;br /&gt;
* Enable CSV import -&amp;gt; Damit ist es möglich CSV-Dateien zu importieren. Natürlich sollte man das nicht einfach so machen und nur von Leuten die wissen was sie tun. Daher kann hier festgelegt werden, das nur Administratoren das machen dürften und ob Items überschrieben werden oder nicht&lt;br /&gt;
* Generate feed -&amp;gt; Hier kann festgelegt werden, dass ein RSS-Feed generiert wird aus den Items (Funktion ist wie bei News o.ä., daher wird hier nicht genauer darauf eingegangen)&lt;br /&gt;
&lt;br /&gt;
==Nachträgliches Bearbeiten eines Katalogs==&lt;br /&gt;
Um die Grundeinstellungen eines Katalogs nachträglich noch einmal bearbeiten zu können, klickt man in der Katalogübersicht auf den Felder-Button...&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-editfields.png|Cat Felder editieren]]&lt;br /&gt;
&lt;br /&gt;
...und anschließend im Übersichtsfeld des Katalogs auf 'Bearbeiten'.&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-editcat.png|Cat Catalog editieren]]&lt;br /&gt;
&lt;br /&gt;
=Erstellen von Attributen/Feldern von Items in einem Katalog=&lt;br /&gt;
Nun ist die Grundkonfiguration von einem Katalog erst einmal abgeschlossen. Aber es ist noch nicht festgelegt aus welchen Feldern ein Item denn nun besteht, also welche Attribute ein Item besitzen kann.&lt;br /&gt;
Dazu kommen wir jetzt. Um neue Felder für den Katalog zu erstellen, klickt man in der Katalogübersicht auf 'Felder für Katalog erstellen'....&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-editfields.png|Cat Felder editieren]]&lt;br /&gt;
&lt;br /&gt;
...und danach auf 'Neues Feld'.&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-newfield.png|Cat Neues Feld anlegen]]&lt;br /&gt;
&lt;br /&gt;
==Die Standardwerte von Feldern==&lt;br /&gt;
Die speziellen Felder werden erst sichtbar, wenn man einen Feldtyp ausgewählt hat. Diese Werte werden weiter unten erläutert.&lt;br /&gt;
* Field configuration&lt;br /&gt;
** Bezeichnung (Eine eindeutige Bezeichnung für das Feld. Diese sollte möglichst selbsterklärend sein.)&lt;br /&gt;
** Beschreibung (Um im Backend und beim Frontend-Editing eine Beschreibung anzuzeigen für die Ersteller eines Items)&lt;br /&gt;
** Spaltenname (der Spaltenname in der Tabelle. Dieser muss eindeutig sein und so vergeben werden, das er logisch ist, da man beim Template erstellen diese Namen benutzt um an die Inhalte zu kommen)&lt;br /&gt;
** '''Typ''' (weiter unten)&lt;br /&gt;
* Display Settings (Diese Einstellungen sind für die Ansicht im Backend zuständig)&lt;br /&gt;
** Kontroll-Checkbox (Wenn eine Kontroll-Checkbox angegeben wird, wird dieses Feld erst angezeigt, wenn das Kontroll-Checkbox Feld angekreuzt ist)&lt;br /&gt;
** Vorher Umbruch einfügen (Um dieses Eingabefeld in einer neuen Zeile zu beginnen)&lt;br /&gt;
*** Legend Titel (hier kann dann ein Name für den Legend Titel angegeben werden -&amp;gt; die Grün geschriebenen Titel im Backend)&lt;br /&gt;
** Enable half width (um 2 Felder nebeneinander anzuzeigen - seit TYPOlight 2.7 möglich)&lt;br /&gt;
* Backend filter settings (hier kann festgelegt werden, ob das Feld im Backend zur Filterung angezeigt wird)&lt;br /&gt;
** Sortieren ('''Muss zum Filtern etc. angegeben werden.''' Sonst weiß Contao nicht wie der Filter erstellt werden soll. Für '''Datum''' ist zwangsweise die Angabe nötig ob nach Jahr, Monat oder Tag sortiert werden soll!)&lt;br /&gt;
** Filter&lt;br /&gt;
** Suche&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Pflichtfeld -&amp;gt; Dieses Feld muss ausgefüllt werden&lt;br /&gt;
* Frontend editing&lt;br /&gt;
** Frontend editing groups -&amp;gt; Welche Gruppen dürfen dieses Feld im Frontend bearbeiten (Mehrfachangabe ist möglich). Wenn hier nichts angegeben wird, dürfen alle Gruppen dieses Feld im Frontend editieren&lt;br /&gt;
&lt;br /&gt;
==Typ - Feldtypen von Feldern==&lt;br /&gt;
Hier werden die Angaben für die jeweiligen Typen aufgelistet und erläutert.&lt;br /&gt;
===Text===&lt;br /&gt;
* Format settings&lt;br /&gt;
** Prefix und Suffix Strings&lt;br /&gt;
** Format&lt;br /&gt;
*** Formattyp&lt;br /&gt;
**** Zeichenkette&lt;br /&gt;
**** Nummer&lt;br /&gt;
**** Datum&lt;br /&gt;
*** Zeichenfolge für Formatierung&lt;br /&gt;
&lt;br /&gt;
===Alias===&lt;br /&gt;
'''Es ist immer nur ein Alias Feld erlaubt in einem Katalog.'''&lt;br /&gt;
Die Funktion ist die selbe wie bei einem Alias für eine Seite.&lt;br /&gt;
* Alias-Titel-Feld (Aus diesem Feld wird automatisch ein Alias generiert, wenn keine Angabe beim Alias gemacht wurde. Dieses Feld muss '''nicht''' eindeutig sein. Der Alias wird aber eindeutig generiert und ist damit genau so benutzbar wie eine eindeutige ID.)&lt;br /&gt;
{{Hinweis|Es ist darauf zu achten, dass beim Anlegen der Felder das Feld ''Alias'' '''nach''' dem Feld ''Titel'' plaziert wird, da sonst der Alias nicht korrekt generiert bzw. nur die ID gesetzt wird.}}&lt;br /&gt;
&lt;br /&gt;
===Langtext===&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Allow html (wenn erlaubt werden in dem Feld HTML-Tags erlaubt - Liste der erlaubten HTML-Tags ist in den Eigenschaften von Contao editierbar)&lt;br /&gt;
** Rich Text (wenn angekreuzt wird der TinyMCE angezeigt)&lt;br /&gt;
&lt;br /&gt;
===Nummer===&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Minimum (legt den Minimalwert fest, den ein Benutzer eingeben kann)&lt;br /&gt;
** Maximum (legt den Maximalwert fest, den ein Benutzer eingeben kann)&lt;br /&gt;
* Format settings&lt;br /&gt;
** Prefix und Suffix Strings&lt;br /&gt;
** Format&lt;br /&gt;
*** Formattyp&lt;br /&gt;
**** Zeichenkette&lt;br /&gt;
**** Nummer&lt;br /&gt;
**** Datum&lt;br /&gt;
*** Zeichenfolge für Formatierung&lt;br /&gt;
&lt;br /&gt;
===Dezimal===&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Minimum (legt den Minimalwert fest, den ein Benutzer eingeben kann)&lt;br /&gt;
** Maximum (legt den Maximalwert fest, den ein Benutzer eingeben kann)&lt;br /&gt;
* Format settings&lt;br /&gt;
** Prefix und Suffix Strings&lt;br /&gt;
** Format&lt;br /&gt;
*** Formattyp&lt;br /&gt;
**** Zeichenkette&lt;br /&gt;
**** Nummer&lt;br /&gt;
**** Datum&lt;br /&gt;
*** Zeichenfolge für Formatierung&lt;br /&gt;
&lt;br /&gt;
===Datum===&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Zeiteingabe (Falls ausgewählt, darf der Benutzer Datum '''und''' Zeit eingeben&lt;br /&gt;
** Format&lt;br /&gt;
*** Formattyp&lt;br /&gt;
**** Zeichenkette&lt;br /&gt;
**** Nummer&lt;br /&gt;
**** Datum&lt;br /&gt;
*** Zeichenfolge für Formatierung&lt;br /&gt;
&lt;br /&gt;
Möchte man im Feld ''Date'' immer das aktuelle Datum beim Anlegen eines Items verwenden, kann man in den erweiterten Einstellungen des Date-Feldes beim Standartwert den Wert  '''date()''' eintragen.&lt;br /&gt;
&lt;br /&gt;
===Checkbox===&lt;br /&gt;
Zum Erstellen einer einfachen Checkbox. Hier kann nicht viel eingestellt werden, da ja nur 1 oder 0 als Zustand gilt.&lt;br /&gt;
&lt;br /&gt;
===Auswahl===&lt;br /&gt;
Hiermit kann man ein Auswahl-Feld (Select) erstellen, das als Grundlage eine andere Tabelle nutzt. Das kann Taxonomie sein oder auch ein anderer Katalog.&lt;br /&gt;
&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Include blank option (Um bei der Drop-Down Liste auch die Möglichkeit zu haben, eine leere Auswahl anzubieten)&lt;br /&gt;
* Options settings&lt;br /&gt;
** Tabelle für Optionen (Hier muss die Tabelle ausgewählt werden, in der die Optionen stehen - Taxonomie wäre -&amp;gt; tl_taxonomie)&lt;br /&gt;
** Spalte für Tabellenwerte (Eine Spalte für die Speicherung einer Option auswählen. Hier sind nur die Spalten vorgegeben, die sich auch in der Tabelle befinden)&lt;br /&gt;
** Anzeige der Sortierspalte (Um die Sortierung der Optionen vorzunehmen kann hier eine andere Spalte ausgewählt werden.)&lt;br /&gt;
** Filter items (Hier kann man wieder eigene Filter definieren, um die Auswahl einzugrenzen)&lt;br /&gt;
** Auswahl der Einträge&lt;br /&gt;
*** Optionen (Hier kann man noch mal genau auswählen, welche Optionen man anbieten möchte)&lt;br /&gt;
*** Modus für Unterauswahl&lt;br /&gt;
**** Show selected items collapsed (Nur die ausgewählten Items anzeigen)&lt;br /&gt;
**** Show children of selected items collapsed  (Nur die Kinder der selektierten Items anzeigen)&lt;br /&gt;
**** Tree with all items selectable (Baumansicht mit allen Items als Option auswählbar)&lt;br /&gt;
**** Tree with only children selectable (Baumansicht nur mit den Kind-Items auswählbar)&lt;br /&gt;
*** Parent Filter (Hier kann man das Eltern Element angeben, welches die Optionen enthält. Praktisch wenn man 2 Bäume bei der Taxonomie hat und nur einen zur Auswahl geben will)&lt;br /&gt;
&lt;br /&gt;
===Tags===&lt;br /&gt;
Auch Tags sind ähnlich der Auswahl dazu da, eine andere Tabelle als Wert anzugeben.&lt;br /&gt;
&lt;br /&gt;
Der Unterschied besteht darin, das Tags eine Checkboxliste ergeben, mit der auch eine Mehrfachauswahl möglich ist.&lt;br /&gt;
&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Include blank option (Um bei der Drop-Down Liste auch die Möglichkeit zu haben, eine leere Auswahl anzubieten)&lt;br /&gt;
* Options settings&lt;br /&gt;
** Tabelle für Optionen (Hier muss die Tabelle ausgewählt werden, in der die Optionen stehen - Taxonomie wäre -&amp;gt; tl_taxonomie)&lt;br /&gt;
** Spalte für Tabellenwerte (Eine Spalte für die Speicherung einer Option auswählen. Hier sind nur die Spalten vorgegeben, die sich auch in der Tabelle befinden)&lt;br /&gt;
** Anzeige der Sortierspalte (Um die Sortierung der Optionen vorzunehmen kann hier eine andere Spalte ausgewählt werden.)&lt;br /&gt;
** Filter items (Hier kann man wieder eigene Filter definieren, um die Auswahl einzugrenzen)&lt;br /&gt;
** Auswahl der Einträge&lt;br /&gt;
*** Optionen (Hier kann man noch mal genau auswählen, welche Optionen man anbieten möchte)&lt;br /&gt;
*** Modus für Unterauswahl&lt;br /&gt;
**** Show selected items collapsed (Nur die ausgewählten Items anzeigen)&lt;br /&gt;
**** Show children of selected items collapsed  (Nur die Kinder der selectierten Items anzeigen)&lt;br /&gt;
**** Tree with all items selectable (Baumansicht mit allen Items als Option auswählbar)&lt;br /&gt;
**** Tree with only children selectable (Baumansicht nur mit den Kind-Items auswählbar)&lt;br /&gt;
*** Parent Filter (Hier kann man das Eltern Element angeben, welches die Optionen enthält. Praktisch wenn man 2 Bäume bei der Taxonomie hat und nur einen zur Auswahl geben will)&lt;br /&gt;
&lt;br /&gt;
Bis catalog Version 2.0.0 beta2 Build 59 kann man nicht [https://www.contao-community.de/showthread.php?27484-Wieso-kein-BE-Filter-f%FCr-Feld-vom-Typ-quot-Tags-quot&amp;amp;p=183047&amp;amp;viewfull=1#post183047 Tags Felder als Filter in Backend-Listenansichten verwenden]. Ein par Zeilen Code helfen dem aber nach. Wie das geht steht im verlinkten Forumbeitrag.&lt;br /&gt;
&lt;br /&gt;
===URL===&lt;br /&gt;
Der Feldtyp URL hat keine besonderen Parameter. Er dient lediglich der Ein- und Ausgabe einer URL.&lt;br /&gt;
&lt;br /&gt;
===Datei===&lt;br /&gt;
Dieser Feldtyp ist für die Ein- und Ausgabe von Dateien vorhanden. Man kann damit Downloads oder Galerien erstellen. Falls die ausgewählte Datei nicht unter den Contao-Einstellungen eingetragen ist, so bleibt das Feld &amp;quot;value&amp;quot; (mehr dazu siehe &amp;quot;Welche Variablen hat man in einem Template zur Verfügung?&amp;quot;) leer. Aus diesem Grund sollte man im Vorhinein die entsprechenden Dateitypen freischalten.&lt;br /&gt;
* Advanced Settings&lt;br /&gt;
** Mehrere Dateien (Wenn ausgewählt können mehrere Dateien ausgewählt werden)&lt;br /&gt;
** Ändern des Dateibaumes &lt;br /&gt;
*** Setzen des Ordners für das Wurzelverzeichnis (Hier kann ein spezieller Dateibaum gewählt werden, um unnötige Wege zu verkürzen)&lt;br /&gt;
*** Gültige Dateitypen (In einer Komma-separierten Liste kann man hier die Dateitypen auf eine gültige Liste einschränken)&lt;br /&gt;
*** Nur Dateien erlauben (Ordner sind dann nicht anwählbar)&lt;br /&gt;
*Format settings&lt;br /&gt;
** Bild anzeigen (Um ein Bild / eine Bildergalerie anzeigen zu lassen)&lt;br /&gt;
*** Bildbreite und -höhe sind auswählbar&lt;br /&gt;
** Link erzeugen&lt;br /&gt;
*** Um einen Link zum Herunterladen der Datei zu erzeugen oder bei einem Bild eine Vollansicht (Lightbox) anzubieten&lt;br /&gt;
&lt;br /&gt;
===Berechnen===&lt;br /&gt;
Um Berechnungen auf SQL Ebene vorzunehmen&lt;br /&gt;
* Berechnungsformel&lt;br /&gt;
** Beispiel einer SQL-Berechnung, wenn man einen numerischen Wert erhalten will -&amp;gt; (price*1.15)*qty&lt;br /&gt;
** Beispiel einer SQL-Berechnung, wenn man mehrere Texte zu einer Textzeichenfolge verknüpfen will -&amp;gt; CONCAT('Adresse: ', col_adresse , ', ' , col_plz , ' ' , col_ort)&lt;br /&gt;
* Format-Einstellungen&lt;br /&gt;
** Vor- und Nachsilben&lt;br /&gt;
** Format&lt;br /&gt;
*** Format-Funktion&lt;br /&gt;
**** Zeichenkette&lt;br /&gt;
**** Nummer&lt;br /&gt;
**** Datum&lt;br /&gt;
*** Zeichenfolge für Formatierung oder Parameter&lt;br /&gt;
&lt;br /&gt;
===Bewertungen===&lt;br /&gt;
Die Besucher der Internetseite können bei Angabe eines solchen Feldtypes eine Bewertung vornehmen&lt;br /&gt;
* ajaxratingfield (Angabe von maximalen Punkten die ein Besucher vergeben kann)&lt;br /&gt;
&lt;br /&gt;
===Zugriffszähler===&lt;br /&gt;
Ohne Optionen. Hiermit wird einfach gezählt und ausgegeben wie oft auf dieses Item zugegriffen wurde. Es ist auf ein Klick pro IP und Tag festgelegt.&lt;br /&gt;
&lt;br /&gt;
===Frontend Benutzer===&lt;br /&gt;
Ohne Optionen.&lt;br /&gt;
Um die Items nur dem jeweiligen Frontendbenutzer der sie angelegt hat zuzuweisen muss ein Feldtyp dieser Art angelegt sein.&lt;br /&gt;
&lt;br /&gt;
===Meta Keywords===&lt;br /&gt;
Ohne Optionen.&lt;br /&gt;
Um eine Liste von Keywords für diese Item eingeben zu können.&lt;br /&gt;
{{Anmerkung|der Feldtyp &amp;quot;Meta Keywords&amp;quot; ist veraltet, da in der Katalog Konfiguration direkt nun ein Textfeld als Quelle der META Keywords gewählt werden kann.}}&lt;br /&gt;
&lt;br /&gt;
===Mehrspaltiger Text===&lt;br /&gt;
&lt;br /&gt;
Nur verfügbar wenn zusätzlich installiert: [http://www.contao.org/erweiterungsliste/view/catalogmultitextwizardfield.html direkt zum ER]&lt;br /&gt;
&lt;br /&gt;
Hiermit kann ein Feld ähnlich des Tabellenelements in Contao angelegt werden.&lt;br /&gt;
Man definiert einmal die Spaltenanzahl und Überschriften.&lt;br /&gt;
Beim Anlegen des Items hat man dann die Möglichkeit beliebig viele Zeilen anzugeben.&lt;br /&gt;
* Spaltenüberschriften (Angabe der Anzahl, der Reihenfolge und der Titel der Spaltenüberschriften)&lt;br /&gt;
&lt;br /&gt;
Für das Frontend Editing (wenn man dieses Feld dort editieren möchte) braucht man die Erweiterung [http://www.contao.org/erweiterungsliste/view/x_FrontendMultiTextWizard.de.html xFrontend MultiTextWizard]. Ansonsten ist dieses Feld nicht editierbar.&lt;br /&gt;
&lt;br /&gt;
===Produktvariante (Besonderheit vom chshop -&amp;gt; wird dort erläutert)===&lt;br /&gt;
&lt;br /&gt;
=== Merkliste und Varianten ===&lt;br /&gt;
Mit diesem Feldtyp ist es möglich Items für eine Merkliste vorzubereiten.&lt;br /&gt;
* Notelistvariants sind die Varianten, die ein Item besitzen können. Die Liste der Varianten besteht aus Select- und Tagfields des Katalogs. Dadurch ist es möglich Varianten von der Taxonomie oder von anderen Katalogen zu erstellen, indem man in diesem Katalog Auswahlen dafür anlegt.&lt;br /&gt;
&lt;br /&gt;
==Sobald man Felder definiert hat==&lt;br /&gt;
ist in der Übersicht bei den Feldern zu sehen ob ein Feld:&lt;br /&gt;
* zur Suche markiert ist&lt;br /&gt;
* Sortierbar ist&lt;br /&gt;
* Gruppiert wurde (um die Reihenfolge festzulegen)&lt;br /&gt;
* ein Pflichtfeld ist&lt;br /&gt;
* ob es eine Kontrol Checkbox ist (nur wenn angewählt wird es sichtbar)&lt;br /&gt;
* Ob es ein Dateityp ist&lt;br /&gt;
* Ob es sich um ein Bild handelt&lt;br /&gt;
* in der halben Breite im Backend angezeigt wird&lt;br /&gt;
* Ob darüber ein Filter angewendet wird&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-fieldpreview.png|Felderübersicht]]&lt;br /&gt;
&lt;br /&gt;
=Frontend Module und ihre Attribute=&lt;br /&gt;
&lt;br /&gt;
Bei den verschiedenen Modulen muss zunächst eine Auswahl getroffen werden, für welchen Katalog das Modul gemacht wird. Dabei kann immer nur ein Katalog gewählt werden. &lt;br /&gt;
&lt;br /&gt;
'''Allgemeine Einstellungen (die alle Module haben):'''&lt;br /&gt;
* Titel&lt;br /&gt;
* Überschrift&lt;br /&gt;
* Modultyp (mit den unten stehenden Modultypen)&lt;br /&gt;
* Zugriffsschutz (Nur bestimmten Gruppen das Modul anzeigen)&lt;br /&gt;
* Experten Einstellungen&lt;br /&gt;
** Nur Gästen anzeigen&lt;br /&gt;
** CSS-ID/Klasse&lt;br /&gt;
** Abstand davor und dahinter&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-view-list.jpg|Cat Modul Liste]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-view-reader.jpg|Cat Modul Reader]]&lt;br /&gt;
&lt;br /&gt;
==Catalog List==&lt;br /&gt;
Zur Ausgabe einer Liste von Items wird das Modul [[ModuleCatalogList]] verwendet.&lt;br /&gt;
&lt;br /&gt;
==Catalog Reader==&lt;br /&gt;
Um die Details von einem einzelnen Item anzuzeigen&lt;br /&gt;
* Als Wichtigstes muss eine Weiterleitungsseite eingestellt werden. Auf dieser Seite muss der Catalog Reader vorhanden sein.&lt;br /&gt;
* catalog layout (Auswahl des Templates für den Reader)&lt;br /&gt;
** catalog_full (Standardtemplate um Alles auszugeben)&lt;br /&gt;
** catalog_full_rev (Template um alle Felder auszugeben - Entwickler Version)&lt;br /&gt;
* Visible Fields - Sichbare Felder. Diese Felder sind dann im Template verfügbar. Man kann auch die Reihenfolge der Ausgabe bestimmen.&lt;br /&gt;
&lt;br /&gt;
==Catalog Filter==&lt;br /&gt;
Mit Hilfe von einem Filter können Besucher die Liste eines Catalogs filtern und die Anzeige eingrenzen. Die Filter können hier genau eingestellt werden. Sogar ein eigenes Suchfeld nur für den einen Katalog kann hier erstellt werden.&lt;br /&gt;
* Catalog -&amp;gt; für welchen Katalog soll dieser Filter benutzt werden (es kann nur ein Katalog angegeben werden)&lt;br /&gt;
* Weiterleitungsseite (auf welche Seite soll bei Klick weitergeleitet werden. Üblicherweise ist das eine Seite mit dem Modul 'cataloglist', da hier dann nur noch die Items angezeigt werden, die zu der gefilterten Ausgabe passen)&lt;br /&gt;
* Filter layout (default -&amp;gt; filter_default | zum Entwickeln ist das filter_widget Template gedacht)&lt;br /&gt;
* Enables Filter By section (Einen Filter erstellen)&lt;br /&gt;
** Filter Headline (Überschrift für diese(n) Filter)&lt;br /&gt;
** Filter Fields (Hier kann man das Feld und die Art des Filters auswählen)&lt;br /&gt;
*** Die Reihenfolge bestimmt man mit den grünen Pfeilen neben der Feldbezeichnung&lt;br /&gt;
*** Tree View (Ankreuzen wenn es eine baumartige Struktur sein soll, bzw. bei diesem Feld eine baumartige Struktur eingegeben wurde. Die Kindelemente reagieren dabei auf die Auswahl der Elternelemente)&lt;br /&gt;
*** None (default Wert -&amp;gt; es wird von diesem Feld kein Filter erstellt)&lt;br /&gt;
*** Links List (eine einfache Link Liste wird von dem Feld erstellt)&lt;br /&gt;
*** Radio Button (Eine Auswahl mittels Radio Button wird erstellt, so ist die Auswahl nur von einem Wert möglich)&lt;br /&gt;
*** Select drop-down (Eine Auswahl mittels einer Select-Box wird erstellt. Nur ein Wert kann ausgewählt werden.)&lt;br /&gt;
** Reveal tree view sequentially (Die Filter werden erst nach und nach eingeblendet. Die Reihenfolge bestimmt dabei die Einblendung. So wird der 2. Filter erst eingeblendet, wenn im ersten etwas ausgewählt wurde. Eine Möglichkeit wäre hier die Auswahl von Städten, die erst erscheint, wenn ein Bundesland ausgewählt wurde)&lt;br /&gt;
** Tags multiple select allowed (Wenn dieses Feld ausgewählt wurde, wird aus dem Radio Button eine Checkbox und aus der Select drop-down Liste eine Liste mit der Möglichkeit meherere auszuwählen.)&lt;br /&gt;
* Enables Range section (Hier können Felder ausgewählt werden, wo ein Minimum und Maximum eingegeben werden kann um darüber zu Filtern)&lt;br /&gt;
** Range Headline (Überschrift angeben)&lt;br /&gt;
** Range Fields (Auswahl der Felder für die ein Bereichsauswahl erstellt werden soll. Die Liste ist auch wieder sortierbar)&lt;br /&gt;
* Enables Date section (Hier können Felder ausgewählt werden, welche nach Datum zusammengefasst werden können)&lt;br /&gt;
** Dates Headline (Überschrift angeben)&lt;br /&gt;
** Date Fields (Hier sind nur Datumsfelder zur Auswahl angeboten. Man kann bestimmen, welches benutzt werden soll)&lt;br /&gt;
** Date Ranges (Hier kann angegeben werden, welche Auswahl der Besucher hat, um die Daten zu filtern):&lt;br /&gt;
*** Last year&lt;br /&gt;
*** Last 6 months&lt;br /&gt;
*** Last month&lt;br /&gt;
*** Last week&lt;br /&gt;
*** Yesterday&lt;br /&gt;
*** Today&lt;br /&gt;
*** Tomorrow&lt;br /&gt;
*** Next week&lt;br /&gt;
*** Next month&lt;br /&gt;
*** Next 6 months&lt;br /&gt;
*** Next year&lt;br /&gt;
* Enables Sort section (Hier wird eingestellt, welche Felder vom Besucher überhaupt sortierbar sind und wie das geschehen soll) &lt;br /&gt;
** Sort Headline (Überschrift angeben)&lt;br /&gt;
** Sort Fields (Hier muss angegeben werden, welche Felder sortierbar sein sollen. Die Reihenfolge kann wieder über die grünen Pfeile bestimmt werden)&lt;br /&gt;
** Sort form control type Hier wird festgelegt, wie die Besucher bestimmen können wie sortiert wird:&lt;br /&gt;
*** select (Über eine Select Auswahl)&lt;br /&gt;
*** list (Mit hilfe einer Linkliste)&lt;br /&gt;
*** radio (Über einen Radio Button)&lt;br /&gt;
* Enables Search Box (Eine Suchbox einschalten. Nur Text, langtext Felder werden unterstützt)&lt;br /&gt;
** Search Headline (Überschrift eingeben)&lt;br /&gt;
** Search Fields (Hier können die Felder ausgewählt werden, in denen gesucht werden soll)&lt;br /&gt;
* Use filter condition from lister on same page (Wenn auf derselben Seite auch eine List-Modul von dem Katalog eingesetzt wird und diese Liste mit conditions eingeschränkt ist, werden bei Auswahl dieses Feldes die Filter mit Berücksichtigung der conditions erstellt.)&lt;br /&gt;
&lt;br /&gt;
==Catalog Navigation==&lt;br /&gt;
Mit diesem Modul kann man eine Navigation durch einen Katalogs erstellen. Die Navigation besteht zum Beispiel aus Kategorien.&lt;br /&gt;
* Catalog -&amp;gt; für welchen Katalog soll diese Navigation genommen werden (es kann nur ein Katalog ausgewählt werden)&lt;br /&gt;
* Weiterleitungsseite (auf welche Seite soll bei Klick weitergeleitet werden. Üblicherweise ist das eine Seite mit dem Modul [[ModuleCatalogList|Katalog liste]], da hier dann nur noch die Items angezeigt werden, die zu der Kategorie passen)&lt;br /&gt;
* Navigations field -&amp;gt; Hier muss das Feld angegeben werden, aus dem die Navigation zusammengesetzt wird. Also ein Selectfield aus dem gewählten Katalog. (Andere Felder wie Tagfield gehen nicht und stehen deswegen nicht zur Auswahl!)&lt;br /&gt;
* Alle anderen Einstellungen der Navigation funktionieren genau so wie beim normalen [[ModulNavigation|Navigationsmodul]]&lt;br /&gt;
&lt;br /&gt;
==Catalog Notify==&lt;br /&gt;
Hiermit wird ein Formular erstellt, welches zur schnellen Kontaktaufnahme bei einem einzelnen Item dargestellt wird. Z.B.: Möchten Sie nähere Informationen zu diesem Produkt? Dann schicken Sie uns bitte Ihre Kontaktdaten, damit wir uns bei Ihnen melden können.&lt;br /&gt;
* Catalog (Hier muss wieder der Katalog angegeben werden, in dem das Item dargestellt werden soll)&lt;br /&gt;
* Form Fields (Hier können Sie Felder angeben, die der Benutzer ausfüllen soll, damit Sie Kontakt zu ihm aufnehmen können)&lt;br /&gt;
{{Anmerkung|Der folgende Punkt ist in catalog 2.0.0 beta1 Build 51 nicht, oder nicht mehr vorhanden!}}&lt;br /&gt;
* Sicherheitsfrage deaktivieren (nicht empfohlen! Nur sinnvoll, wenn die Benutzer schon in einem Bereich sind, in dem man sich anmelden muss)&lt;br /&gt;
* Subject (Betreff der Email, hier können spezielle Inserttags benutzt werden in der Art -&amp;gt; &amp;lt;nowiki&amp;gt;{{catalog::Spaltenbezeichnung}}&amp;lt;/nowiki&amp;gt;. Z.B. &amp;lt;nowiki&amp;gt;{{catalog::title}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Recipients List (Liste von Emailadressen, die eine Email mit dem Inhalt erhalten sollen)&lt;br /&gt;
* Body text (Text der Email. Auch hier sind die speziellen Inserttags &amp;lt;nowiki&amp;gt;{{catalog::Spaltenbezeichnung}}&amp;lt;/nowiki&amp;gt; möglich. Zusätzlich sind noch die Variablen ##catalog## und ##link## verfügbar. Wobei catalog durch den Katalog und link durch den direkten Link zu dem Item ersetzt werden.&lt;br /&gt;
* Catalog Template (Hier kann das passende Template angegeben werden um das Formular darzustellen. Default ist mod_catalognotify)&lt;br /&gt;
&lt;br /&gt;
==Catalog Featured==&lt;br /&gt;
Hiermit kann man eine Liste erstellen, die besondere Items darstellt. Die Liste wird per Zufall zusammengestellt.&lt;br /&gt;
* Grundeinstellungen sind wie bei der Catalog-List&lt;br /&gt;
* Besonderheiten:&lt;br /&gt;
** Number of items (Hier kann die Anzahl der Items dargestellt werden. 0 zeigt alle)&lt;br /&gt;
** Custom ordering (Die Reihenfolge kann hier festgelegt werden)&lt;br /&gt;
* Um spezielle Einträge anzulegen braucht nur ein extra Feld (checkbox) erstellt werden (z.B. hervorgehoben) und in der Condition können dann Items festgelegt werden, deren Wert 1 ist -&amp;gt; spalte_hervorgehoben=1&lt;br /&gt;
&lt;br /&gt;
==Catalog Related==&lt;br /&gt;
Hiermit erstellt man eine Liste von ähnlichen Items - einzusetzen auf einer Seite, auf der auch der Catalog Reader enthalten ist. Zufallsausgabe.&lt;br /&gt;
* Grundeinstellungen sind wie bei der Catalog-List&lt;br /&gt;
* Besonderheiten:&lt;br /&gt;
** Related fields to match (Angabe der Felder, die bei den darzustellenden Items gleich sein sollen)&lt;br /&gt;
** Amount of tags that must be in common (Einstellen der Anzahl der Übereinstimmungen -&amp;gt; Minimumangabe. d.h. wenn 3 Felder angegeben wurden, die übereinstimmen sollen, kann bei einer Angabe von 1 auch ein Item angezeigt werden, welches nur eine Übereinstimmung hat und nicht alle 3)&lt;br /&gt;
** Number of items (Hier kann die Anzahl der Items dargestellt werden. 0 zeigt alle)&lt;br /&gt;
** Custom ordering (Die Reihenfolge kann hier festgelegt werden)&lt;br /&gt;
&lt;br /&gt;
==Catalog Reference==&lt;br /&gt;
Hiermit erstellt man eine Liste von Items mit einer gleichen Eigenschaft. Diese muss zusammen mit dem Catalog Reader eingesetzt werden und ist für die Anzeige von Items aus einem '''anderen''' Katalog.&lt;br /&gt;
* Grundeinstellungen sind wie bei der Catalog-List&lt;br /&gt;
* Besonderheiten:&lt;br /&gt;
** Select the match field (Das Feld auswählen, welches die Verbindung zum anderen Katalog herstellt)&lt;br /&gt;
** Select reference catalog (Den zweiten Katalog auswählen, wo die anzuzeigenden Items enthalten sind)&lt;br /&gt;
** Select the reference field (Das Feld angeben, welches im 2. Katalog für die Identifizierung genutzt wird. Es soll dasselbe Feld angegeben werden, welchen auch schon für die Verknüpfung genommen wurde)&lt;br /&gt;
** Number of items (Hier kann die Anzahl der Items dargestellt werden. 0 zeigt alle)&lt;br /&gt;
** Custom ordering (Die Reihenfolge kann hier festgelegt werden)&lt;br /&gt;
&lt;br /&gt;
==Catalog Edit==&lt;br /&gt;
Um ein Item im Frontend editieren und erstellen zu können. Dieses Modul wird anstelle von Catalog Reader verwendet.&lt;br /&gt;
*Catalog (den Katalog auswählen, dessen Items im Frontend editierbar sein soll)&lt;br /&gt;
* Editable Fields (Angabe der Felder, die editierbar sein sollen. Mit den Pfeilen kann man diese in der Reihenfolge anordnen)&lt;br /&gt;
* Weiterleitungsseite (Seite die angezeigt werden soll, wenn das Formular abgesendet wurde. Meistens wird wieder zurück zu der Liste weitergeleitet)&lt;br /&gt;
* Sicherheitsabfrage deaktivieren (Nicht empfohlen! Es sei denn, nur angemeldete Benutzer haben Zugriff auf diese Seite)&lt;br /&gt;
* Restricted fields (Mit dieser Einstellung können Vorbelegungen, die _nicht_ geändert werden können, vorgenommen werden. Diese Felder sollten nicht als Editable Fields konfiguriert sein)&lt;br /&gt;
** Wählen Sie hier die Felder aus, welche vorbelegt sein sollen&lt;br /&gt;
** Restricted fields default values (Sind erst '''nach dem Speichern einstellbare Vorgaben''' für die Felder, die vorher ausgewählt wurden -&amp;gt; Jeder Feldtyp ist individuell einstellbar.)&lt;br /&gt;
** Beispiel für ein Restricted field: Ein Feld mit einer Checkbox, ob das Item online sein soll. 'online' bekommt als default Wert 'Nein'. Nun ist jedes Item, was über diesen Catalog Editor erstellt oder bearbeitet wird offline! So kann man im Frontend mit einer extra Gruppe, die dieses Feld bearbeiten kann und eben keine default Vorgabe hat die Items freischalten. Die 'normalen' Benutzer haben dieses Recht dann nicht.&lt;br /&gt;
&lt;br /&gt;
=Weitere Einstellungsmöglichkeiten=&lt;br /&gt;
&lt;br /&gt;
== Merkliste - Formulargenerator ==&lt;br /&gt;
Die Merkliste wird nicht als extra Modul erstellt, sondern in einem Formular mit dem Formulargenerator von Contao.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt es ein neuen Feldtyp 'Merkliste' der zum Beispiel am Anfang positioniert werden kann.&lt;br /&gt;
Der Besucher kann später das Formular ausfüllen und so die Liste an den Emailempfänger versenden, um sich so zum Beispiel ein Angebot für die Items einzuholen.&lt;br /&gt;
&lt;br /&gt;
Einstellungen:&lt;br /&gt;
* Feldname (der Feldname für diesen Feldtyp)&lt;br /&gt;
* Feldbezeichnung (diese wird normalerweise für Felder als Label angezeigt und sollte daher hier '''leer''' gelassen werden)&lt;br /&gt;
* Text (Hier kann ein Text angegeben werden, der über der Liste der Items angezeigt wird)&lt;br /&gt;
* Katalog (Den Katalog angeben, der die Items enthält)&lt;br /&gt;
* Sichtbare Felder (Die anzuzeigenden Felder von den Items, die Liste ist auch hier wieder über die Pfeile sortierbar)&lt;br /&gt;
&lt;br /&gt;
=== Templates für die Merkliste ===&lt;br /&gt;
* form_catalognotelist.tpl (Template für die Liste im Formular)&lt;br /&gt;
* form_catalognotelist_mail.tpl (Template für die Email, welche die Items vom Merkzettel enthält. Hier kann genau festgelegt werden, welche Felder in der Email von einem Item angezeigt werden.)&lt;br /&gt;
&lt;br /&gt;
=Tipps und Tricks zur Umsetzung=&lt;br /&gt;
&lt;br /&gt;
==Welche Variablen hat man in einem Template zur Verfügung?==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php print_r($this-&amp;gt;entries); ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php $this-&amp;gt;showTemplateVars(); ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Damit bekommt man das komplette Array ausgegeben.&lt;br /&gt;
&lt;br /&gt;
'''Achtung: Diese Anweisung stellt ein potenzielles Sicherheitsrisiko dar und muss vor dem Produktiveinsatz entfernt werden.'''&lt;br /&gt;
&lt;br /&gt;
==Zeichenkette des Titels formatieren==&lt;br /&gt;
Warum wird bei mir nichts angezeigt, obwohl ich da etwas angegeben habe?&lt;br /&gt;
* Wichtig: man muss bei den Feldern die man später hier benutzen möchte folgendes Ankreuzen -&amp;gt; Anzeige-Einstellungen &amp;gt; Sichtbar in der Backend-Listen-Ansicht&lt;br /&gt;
&lt;br /&gt;
==Wie kann man in der Detail Ansicht den meta-title so beeinflussen, das dieser den Namen von dem Item nimmt?==&lt;br /&gt;
* Einfach das Feld für den Namen mit title benennen (das ist die Fallback Methode, wenn die andere -&amp;gt; Page title field nicht benutzt wird). Der catalog wird dann automatisch dieses Feld benutzen um den meta-title zu generieren.&lt;br /&gt;
* Page title field beim Katalog sezten. Zu finden unter 'Search' in den Einstellungen vom Katalog.&lt;br /&gt;
&lt;br /&gt;
==Titel so beeinflussen, das die aktuelle Kategorie einer Liste dort steht==&lt;br /&gt;
Im Catalog Template folgendes nutzen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if(strlen($this-&amp;gt;Input-&amp;gt;get('kategorie')))&lt;br /&gt;
{&lt;br /&gt;
   global $objPage;&lt;br /&gt;
   $objPage-&amp;gt;pageTitle = &amp;quot;&amp;quot;.$entry['data']['kategorie']['value'].&amp;quot; - XYZ&amp;quot;;  &lt;br /&gt;
}&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In dem Beispiel wird jetzt (nur wenn eine Kategorie gewählt ist) der Wert von '''$entry['data']['kategorie']['value']''' eingesetzt.&lt;br /&gt;
&lt;br /&gt;
==Wie bekommt man ein Auge bei den Items? / on- offline Schalten von Items==&lt;br /&gt;
Zuerst muss man sich in Feld vom Typ 'Checkbox' anlegen. Zum Beispiel mit dem Namen 'online'.&lt;br /&gt;
Jetzt kann man den Katalog konfigurieren und bei '''Feld veröffentlichen''' (publish Field) das Checkbox-Feld auswählen.&lt;br /&gt;
Ab jetzt ist im Backend bei den Items eines Katalogs ein graues oder grünes Auge (je nach Zustand) sichtbar.&lt;br /&gt;
&lt;br /&gt;
==Detail Seiten in die sitemap.xml und ins Modul Sitemap bringen==&lt;br /&gt;
* sitemap.xml -&amp;gt; Den Katalog einfach für die Indexierung der Suche freigeben -&amp;gt; [http://tip.dasprojekt.org/Catalog_2#Erstellen_von_einem_Katalog_.28Backend.29 Searchable] (Achtung: eine Weiterleitungsseite muss auf jeden Fall angegeben sein beim Katalog selber. Diese Seite wird dann in der Sitemap benutzt um die Items darzustellen.)&lt;br /&gt;
* Modul Sitemap -&amp;gt; Hier werden die Detailseiten nicht integriert, da es bei einem normalen Katalog schon zu viele Einträge wären, um diese dort sinnvoll darzustellen.&lt;br /&gt;
&lt;br /&gt;
==Alias bei Links benutzen (anstelle der ID)==&lt;br /&gt;
Dazu braucht man nur ein Pflichtfeld (Namen von dem Item) und erstellt dann noch ein Feld vom Typ Alias. Das Alias-Titel-Feld ist dann der Name des Items.&lt;br /&gt;
Bei dem Katalog selber muss noch ausgewählt werden, welches das Alias Feld ist.&lt;br /&gt;
Das Alias Feld ist genau so wie das Alias Feld von Seiten etc., man kann selbst etwas eintragen oder den Inhalt automatisch generieren lassen, wenn man das leer lässt.&lt;br /&gt;
Nachdem die Suche und die Seiten neu generiert wurden (Systemwartung) sollte der Alias bei der Suche und auch bei der Detailansicht (URL) genutzt werden.&lt;br /&gt;
'''Im Moment muss in der Liste das Alias Feld als 'Sichtbar' ausgewählt werden, sonst funktioniert die Verlinkung nicht! (Sollte in der Endversion behoben sein)'''&lt;br /&gt;
Wenn das Aliasfeld nicht angelegt ist wird das Item per ID verlinkt.&lt;br /&gt;
&lt;br /&gt;
==Folder-URL und der catalog wollen nicht so recht==&lt;br /&gt;
&lt;br /&gt;
Unter Einstellungen kann unter Sicherheitseinstellungen eine Liste von Variablennamen angeben werden, welche von der Erweiterung Folder-URL als Parameter erkannt werden sollen. Hier muss &amp;quot;orderby,sort,search&amp;quot; angegeben werden. Dadurch ignoriert Folderurl diese Parameter und der catalog ist wie immer nutzbar.&lt;br /&gt;
&lt;br /&gt;
Es sollten alle Schlüsselwörter der Filtermöglichkeiten hinzugefügt werden. Wenn man die Einträge des Kataloges nach z.B. &amp;quot;Ort&amp;quot; sortieren will, gibt es einen Fehler, wenn das Feld der Datenbanktabelle nicht im Feld &amp;quot;URL Schlüsselworte&amp;quot; in den Einstellungen auftaucht.&lt;br /&gt;
&lt;br /&gt;
==Eine Liste im Frontend so sortieren wie im Backend==&lt;br /&gt;
&lt;br /&gt;
Um eine Liste genau so zu sortieren wie im Backend braucht man einfach nur bei der Sortierung nach dem Feld 'sorting' zu sortieren (z.B. sorting ASC). Im Backend können Einträge nur dann manuell sortiert (verschoben) werden, wenn bei keinem Feld die Einstellung 'Sortier DropDown aktivieren' aktiv ist.&lt;br /&gt;
&lt;br /&gt;
{{Achtung|Bitte klären, da die Filterung dann nicht mehr funktioniert. Siehe Thread im Forum: [http://www.contao-community.de/showthread.php?13299-BE-Eintr%E4ge-verwalten-kein-Button-Anwenden-f%FCr-Filterung-vorhanden BE, Einträge verwalten, kein Button 'Anwenden' für Filterung vorhanden ]&lt;br /&gt;
[[http://code.google.com/p/typolight-catalog/issues/detail?id=199 Bug-Report]] [[http://code.google.com/p/typolight-catalog/source/detail?r=198 fixed in r198]]}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Mit der Erweiterung [[catalog_manualsort]] ist es möglich die Reihenfolge der Einträge im Backend trotzdem zu ändern, auch wenn die Sortieroption für bestimmte Felder aktiv ist.}}&lt;br /&gt;
&lt;br /&gt;
==Items im Backend verschieben==&lt;br /&gt;
Damit man Items im Backend verschieben kann darf die '''Sortierungs Option''' (Feld-Eigenschaften-&amp;gt;Backend Filter Einstellungen-&amp;gt;'Sortierungs Dropdown aktivieren') '''bei keinem Feld aktiviert''' sein.&lt;br /&gt;
{{Achtung|Bitte klären, da die Filterung dann nicht mehr funktioniert. Siehe Thread im Forum: [http://www.contao-community.de/showthread.php?13299-BE-Eintr%E4ge-verwalten-kein-Button-Anwenden-f%FCr-Filterung-vorhanden BE, Einträge verwalten, kein Button 'Anwenden' für Filterung vorhanden ]}}&lt;br /&gt;
&lt;br /&gt;
==Bedingung bei Strings==&lt;br /&gt;
&lt;br /&gt;
Um eine Bedingung anzugeben, die innerhalb eines Strings vorhanden ist, reicht es ja nicht einfach nur einen Vergleich per SQL vorzunehmen.&lt;br /&gt;
Beispiel: Über den Feldtyp Tag sind Taxonomieen einem Produkt zugeordnet. Da das mehrere sein können muss man die Bedingung in der Liste wie folgt abfragen -&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
FIND_IN_SET(7, kategorie)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
D.h.: es soll innerhalb von kategorie nach der ID 7 gesucht werden.&lt;br /&gt;
&lt;br /&gt;
==Formatieren der Felder vom Typ Text, Nummer und Dezimal==&lt;br /&gt;
Options-Checkbox: '''Zusätzliche Format-Funktionen aktivieren.'''&lt;br /&gt;
&lt;br /&gt;
Das Auswahlmenü '''Format-Funktion''' erlaubt es, die Feldtypen '''Text''', '''Nummer''' und '''Dezimal''' zu formatieren. So gehts:&lt;br /&gt;
&lt;br /&gt;
=== Zeichenkette ===&lt;br /&gt;
Hier gibt man einen sprintf Formatierungs-String ein (siehe [http://de3.php.net/sprintf PHP: sprintf - Manual]) &lt;br /&gt;
&lt;br /&gt;
''Beispiel Zeichenkette:''&lt;br /&gt;
* '''Feldinhalt:''' Broccoli&lt;br /&gt;
* '''Formatierungs-String:''' Auf zum %s!&lt;br /&gt;
* '''Ausgabe:''' Auf zum Broccoli!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Nummer ===&lt;br /&gt;
Hier gibt man nur die Anzahl der gewünschten Nachkommastellen an. In der Ausgabe erscheinen nun die in Contao festgelegten Tausender- und Dezimal-Trennzeichen.&lt;br /&gt;
&lt;br /&gt;
''Beispiel Nummer:''&lt;br /&gt;
* '''Feldinhalt:''' 1000&lt;br /&gt;
* '''Nachkommastellen:''' 2&lt;br /&gt;
* '''Ausgabe:''' 1.000,00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Datum ===&lt;br /&gt;
Hier gibt man ein Formatierungsmuster ein (siehe [http://de.php.net/manual/de/function.date.php PHP: date - Manual])&lt;br /&gt;
&lt;br /&gt;
''Beispiel Datum:''&lt;br /&gt;
* '''Feldinhalt (Unix Timestamp):''' 1293217200&lt;br /&gt;
* '''Formatierungsmuster:''' Y-m-d H:i&lt;br /&gt;
* '''Ausgabe:''' 2010-12-24 18:00&lt;br /&gt;
&lt;br /&gt;
==Filtern nach Datum==&lt;br /&gt;
&lt;br /&gt;
Aufgabenstellung:&lt;br /&gt;
Das Datumsfeld ist in dem Format 'dd.mm.yyyy' vorhanden.&lt;br /&gt;
Es soll nun für das aktuelle Jahr eine Ausgabe erfolgen und für die vergangenen Jahre ein Archiv erstellt werden.&lt;br /&gt;
&lt;br /&gt;
Das Problem:&lt;br /&gt;
Die Datum Angaben werden als timestamp gespeichert und sind in einem char Feld.&lt;br /&gt;
&lt;br /&gt;
Lösungsansatz:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
meinedatumsvariable BETWEEN UNIX_TIMESTAMP('{{date::Y}}-01-01') AND UNIX_TIMESTAMP('{{date::Y}}-12-31')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So kommt man an die Daten des aktuellen Jahres, um die Daten von 2009 auszugeben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
meinedatumsvariable BETWEEN UNIX_TIMESTAMP('2009-01-01') AND UNIX_TIMESTAMP('2009-12-31')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Probleme die bei Unix Timestamp auftreten können===&lt;br /&gt;
Es kann passieren, das der Unix Timestamp beim Verarbeiten von PHP falsch interpretiert wird (nicht als Zahl).&lt;br /&gt;
Daher kann es nötig sein, diesen erst durch einen kleinen Trick auf jeden Fall in einen Zahlenwert umzuwandeln:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
ROUND(datum)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Damit wird auf einen Zahlenwert gerundet (da es sich schon um Integer Werte handelt geht dabei nichts verloren).&lt;br /&gt;
&lt;br /&gt;
Beispiel (von do_while) aus dem Forum:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
ROUND(datum) BETWEEN UNIX_TIMESTAMP('{{date::Y}}-01-01') AND UNIX_TIMESTAMP('{{date::Y}}-12-31')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier wird nach dem Datum sortiert.&lt;br /&gt;
&lt;br /&gt;
==Mit DCA Felder besser einschränken==&lt;br /&gt;
Inzwischen ist es möglich Felder über DCA zu steuern. Der Vorteil: dadurch kann man wesentlich besser Fehleingaben abfangen.&lt;br /&gt;
Hier unter 'Felder' kann man die Möglichkeiten der Konfiguration sehen -&amp;gt; [http://www.contao.org/referenz.html http://www.contao.org/referenz.html]&lt;br /&gt;
&lt;br /&gt;
Um ein Feld zum Beispiel nur für den Lesenden Zugriff freizugeben kann man diese Syntax nutzen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tabellenname']['fields']['spaltenname']['eval']['readonly'] = true;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder die Eingabe von einer E-Mail überprüfen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tabellenname']['fields']['spaltenname']['eval']['rgxp'] = 'email';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CSV import==&lt;br /&gt;
Um die Daten richtig importieren zu können muss darauf geachtet werden, das diese UTF-8 kodiert sein müssen. Das wird von Excel nicht direkt so gemacht.&lt;br /&gt;
Hier ist OpenOffice eine valable Alternative. Hier bieten sich sowohl beim Import (wie auch beim Export) von .csv Dateien diverse Einstellungsmöglichkeiten an. Praktischer geht's nicht.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Cat-openoffice-import.png|Screen Textimport]]&lt;br /&gt;
&lt;br /&gt;
Standardmässig ist die Möglichkeit .csv Dateien zu importieren nicht aktiviert. Klick hierzu zuerst im Übersichtsfeld des Katalogs auf 'Bearbeiten'.&lt;br /&gt;
Dann unter 'Import' die jeweilige Option anklicken.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Cat-csv-import.png|Option CSV-Import aktivieren]]&lt;br /&gt;
&lt;br /&gt;
==Mehrsprachige Filter mit dem Taxonomie Modul==&lt;br /&gt;
Möchte man einen Mehrsprachigen Katalog erstellen und diesen nach Taxonomien Filtern, so gibt es u.a. zwei Möglichkeiten dies zu tun:&lt;br /&gt;
* Für jede Sprache einen Taxonomiebaum erstellen. Problem: Doppelte Zuweisung im Katalog-Item + mehrere Taxonomiebäume&lt;br /&gt;
* Bessere Lösung: Man arbeitet mit den sprachabhängigen Inserttags. So kann man je nach Spracheinstellungen der Seite eine passende Frontend-Ausgabe erreichen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Möchte man jedem Item ein Land zuordnen, so erstellt man einen Taxonomie-Eintrag &amp;quot;Länder&amp;quot; und in fügt in diesen die auswählbaren Länder ein. Für &amp;quot;Deutschland&amp;quot; könnte das dann z.B. so aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{iflng::de}}&amp;lt;/nowiki&amp;gt;Deutschland&amp;lt;nowiki&amp;gt;{{iflng}}{{iflng::en}}&amp;lt;/nowiki&amp;gt;Germany&amp;lt;nowiki&amp;gt;{{iflng}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nun sollte der Filter auf der deutschen Seite &amp;quot;Deutschland&amp;quot;, und auf der englischen &amp;quot;Germany&amp;quot; ausgeben.&lt;br /&gt;
Dabei gibt es allerdings ein Problem mit dem Feldtyp in der Datenbank. Dieser ist auf wenige Zeichen beschränkt, wird somit bei entsprechender Länge gekürzt. Um dies '''nicht updatesicher''' zu korrigieren, muss man ins phpMyAdmin gehen und unter tl_taxonomy die Länge des entsprechenden Feldes (ich glaube es ist: &amp;quot;name&amp;quot;) ändern. (wird später genauer beschrieben)&lt;br /&gt;
&lt;br /&gt;
==Frontendausgabe Sortieren bei einem Feld was von einem anderen Catalog oder der Taxonomie kommt==&lt;br /&gt;
Beispiel:&lt;br /&gt;
Katalog A hat ein Select wo man Items aus Katalog B auswählen kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;(SELECT sorting FROM catalog_tabellenname AS cs WHERE cs.id=catalog_feld) ASC&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
catalog_tabellenname = Tabelle die das Feld beinhaltet (Katalog B)&lt;br /&gt;
catalog_feld = Name von dem Feld welches im Select genutz wird. (Feld in Katalog B)&lt;br /&gt;
&lt;br /&gt;
==Katalogeinträge an den Frontend-Benutzer binden==&lt;br /&gt;
&lt;br /&gt;
Um Katalogeinträge an den Frontend-Benutzer zu binden, kann die Erweiterung [http://www.contao.org/erweiterungsliste/view/catalogitemuseridfield.de.html catalogitemuseridfield] installiert werden.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation besteht die Möglichkeit ein Feld mit dem Feldtyp Frontend-Benutzer im Catalog zu definieren.&lt;br /&gt;
In diesem Feld wird die User ID des Frontend-Benutzers gespeichert und kann so z.B. in den Bedingungen verknüpft werden.&lt;br /&gt;
&lt;br /&gt;
=Video Tutorials aus dem Internet=&lt;br /&gt;
Ein paar Videos zu dem Catalog:&lt;br /&gt;
&lt;br /&gt;
{{#widget:YouTube|id=Dg55QT7uGEI}} {{#widget:YouTube|id=wwhuSCQ4Jb4}}&lt;br /&gt;
&lt;br /&gt;
=Tutorials=&lt;br /&gt;
* [[Catalog Merkzettel erstellen]]&lt;br /&gt;
* [[Catalog mit Frontend-Editing und Workflow erstellen]]&lt;br /&gt;
* [[Catalog Templates anpassen]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Toflar|Toflar]] 15:12, 15. Mai 2010 (UTC+1)&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:MacKP|MacKP]] 13:02, 5. Apr. 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Nils.riel|Nils.riel]] 12:04, 24. Nov. 2010 (CET)&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Meta_editor</id>
		<title>Meta editor</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Meta_editor"/>
				<updated>2012-02-12T13:53:26Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| Dev=ideadapt&lt;br /&gt;
| DevSite=http://ideadapt.net&lt;br /&gt;
| ExtVersion=0.2.5 r2&lt;br /&gt;
| Version=ab 2.9.3&lt;br /&gt;
| TLVersion=ab 2.9.3&lt;br /&gt;
| ERLink=http://www.contao.org/de/extension-list/view/meta_editor.de.html&lt;br /&gt;
| Forum=https://www.contao-community.de/showthread.php?17023-meta_editor-Beschreibung-amp-Reihenfolge-von-Bildern-und-Download-Elementen-verwalten&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Mit dieser Erweiterung werden Metadaten von Dateien verwaltet. Zum Beispiel bei Bildern in einer Bildergallerie können Beschreibung, Titel und deren Reihenfolge festgelegt werden. Die Metadaten werden in einer meta.txt in einem von contao vorgeschriebenen Format gespeichert. Viele Erweiterungen verwenden die Informationen aus der meta.txt. So zum Beispiel catalog, Downloadelemente und gallery.&lt;br /&gt;
&lt;br /&gt;
meta_editor hat folgende Features:&lt;br /&gt;
* Verschieben der Elemente per Drag &amp;amp; Drop, automatisches speichern der neuen Reihenfolge&lt;br /&gt;
* Importieren bestehender meta Dateien&lt;br /&gt;
* Eingabevalidierung mit aufschlussreichen Fehlermeldungen&lt;br /&gt;
* Publish / Unpublish Mechanismus erlaubt es Daten zu bearbeiten, aber noch nicht gegen Aussen verfügbar zu machen&lt;br /&gt;
* Automatisches suchen / hinzufügen neuer Dateien&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung ist eine Weiterentwicklung der MetaCreator Erweiterung.&lt;br /&gt;
&lt;br /&gt;
=Definition meta-Datei=&lt;br /&gt;
In einer meta-Datei werden zusätzliche Angaben zu Bilddateien gespeichert. In einer meta-Datei werden nur Bilderbeschreibungen verwaltet, von Bildern die im gleichen Verzeichnis sind.&lt;br /&gt;
Pro Sprache kann eine meta-Datei angelegt werden. meta.txt ist dabei die Standard-Datei. Für Englisch zum Beispiel, wird eine Datei meta_en.txt angelegt.&lt;br /&gt;
==Syntax==&lt;br /&gt;
Für jedes Bild gibt es eine Beschreibung und ein Titel . Pro Zeile wird eine Datei beschrieben. Das Format einer Zeile ist wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Dateiname&amp;gt; = &amp;lt;Beschreibung&amp;gt; | &amp;lt;Link&amp;gt; | &amp;lt;Titel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Feld 'Beschreibung' wird als Bildunterschrift in der lightbox verwendet. Andere Erweiterungen verwenden die Beschreibung auch im alt Attribut von img-Tags (HTML Element für Bilder). Da ist es sinnvoll die HTML-Ausgabe von meta_editor auszuschalten. Wie das geht steht weiter unten.&lt;br /&gt;
&lt;br /&gt;
=meta_editor Installation=&lt;br /&gt;
Die Installation kann vom ER aus gemacht werden. Die Seite im ER ist: http://www.contao.org/de/extension-list/view/meta_editor.de.html&lt;br /&gt;
&lt;br /&gt;
Die Quelldateien sind auf github: https://github.com/ideadapt/meta_editor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=HTML Ausgabe ein- / ausschalten=&lt;br /&gt;
Per Default wird tinyMCE als Editor für die Beschreibung verwendet. Dass bedeutet, dass die Beschreibung HTML mindestens das von tinyMCE erstellte p Tag enthält. Bei Download-, wie auch Galerie-Ausgaben wird diese HTML-Beschreibung als title bzw. alt Attributwert verwendet. Die Ausgabe ist dann natürlich nicht standartkonform oder führt zu ungewünschten Formatierungen. Die HTML Ausgabe kann einfach deaktiviert werden. Dazu in der Datei system/modules/meta_editor/dca/tl_metaitem.php beim Feld 'description', das 'rte'=&amp;gt;'tinyMCE' aus dem 'eval' Array löschen.&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Shoutbox</id>
		<title>Shoutbox</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Shoutbox"/>
				<updated>2012-01-22T17:15:46Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.9.3}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Achtung: funktioniert nicht mit contao &amp;gt;= 2.10 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit dieser Erweiterung können eingeloggte Benutzer im Backend chatten. Angzeigt wird ein kleines Chatfenster unten rechts, welches ein oder ausgeblendet werden kann.&lt;br /&gt;
&lt;br /&gt;
shoutbox nicht im ER&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ideadapt/shoutbox shoutbox auf github]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Msg posted.png]]&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
# Von Extension Repository. Oder von github herunterladen und in das contao Verzeichnis kopieren.&lt;br /&gt;
# In der Datei '''plugins\ia.jquery.shoutbox\shoutbox_be_starter.js''' die Variable tl_path anpassen.&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Meta_editor</id>
		<title>Meta editor</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Meta_editor"/>
				<updated>2012-01-21T17:31:48Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| Dev=ideadapt&lt;br /&gt;
| DevSite=http://ideadapt.net&lt;br /&gt;
| ExtVersion=0.2.5 r2&lt;br /&gt;
| Version=ab 2.9.3&lt;br /&gt;
| TLVersion=ab 2.9.3&lt;br /&gt;
| ERLink=http://www.contao.org/de/extension-list/view/meta_editor.de.html&lt;br /&gt;
| Forum=https://www.contao-community.de/showthread.php?17023-meta_editor-Beschreibung-amp-Reihenfolge-von-Bildern-und-Download-Elementen-verwalten&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Mit dieser Erweiterung werden Metadaten von Dateien verwaltet. Zum Beispiel bei Bildern in einer Bildergallerie können Beschreibung, Titel und deren Reihenfolge festgelegt werden. Die Metadaten werden in einer meta.txt in einem von contao vorgeschriebenen Format gespeichert. Viele Erweiterungen verwenden die Informationen aus der meta.txt. So zum Beispiel catalog, Downloadelemente und gallery.&lt;br /&gt;
&lt;br /&gt;
meta_editor hat folgende Features:&lt;br /&gt;
* Verschieben der Elemente per Drag &amp;amp; Drop, automatisches speichern der neuen Reihenfolge&lt;br /&gt;
* Importieren bestehender meta Dateien&lt;br /&gt;
* Eingabevalidierung mit aufschlussreichen Fehlermeldungen&lt;br /&gt;
* Publish / Unpublish Mechanismus erlaubt es Daten zu bearbeiten, aber noch nicht gegen Aussen verfügbar zu machen&lt;br /&gt;
* Automatisches suchen / hinzufügen neuer Dateien&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung ist eine Weiterentwicklung der MetaCreator Erweiterung.&lt;br /&gt;
&lt;br /&gt;
=Definition meta-Datei=&lt;br /&gt;
In einer meta-Datei werden zusätzliche Angaben zu Bilddateien gespeichert. In einer meta-Datei werden nur Bilderbeschreibungen verwaltet, von Bildern die im gleichen Verzeichnis sind.&lt;br /&gt;
Pro Sprache kann eine meta-Datei angelegt werden. meta.txt ist dabei die Standard-Datei. Für Englisch zum Beispiel, wird eine Datei meta_en.txt angelegt.&lt;br /&gt;
==Syntax==&lt;br /&gt;
Für jedes Bild gibt es eine Beschreibung und ein Titel . Pro Zeile wird eine Datei beschrieben. Das Format einer Zeile ist wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Dateiname&amp;gt; = &amp;lt;Beschreibung&amp;gt; || &amp;lt;Dateiname mit Pfad&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Feld 'Beschreibung' wird als Bildunterschrift in der lightbox verwendet. Andere Erweiterungen verwenden die Beschreibung auch im alt Attribut von img-Tags (HTML Element für Bilder). Da ist es sinnvoll die HTML-Ausgabe von meta_editor auszuschalten. Wie das geht steht weiter unten.&lt;br /&gt;
&lt;br /&gt;
=meta_editor Installation=&lt;br /&gt;
Die Installation kann vom ER aus gemacht werden. Die Seite im ER ist: http://www.contao.org/de/extension-list/view/meta_editor.de.html&lt;br /&gt;
&lt;br /&gt;
Die Quelldateien sind auf github: https://github.com/ideadapt/meta_editor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=HTML Ausgabe ein- / ausschalten=&lt;br /&gt;
Per Default wird tinyMCE als Editor für die Beschreibung verwendet. Dass bedeutet, dass die Beschreibung HTML mindestens das von tinyMCE erstellte p Tag enthält. Bei Download-, wie auch Galerie-Ausgaben wird diese HTML-Beschreibung als title bzw. alt Attributwert verwendet. Die Ausgabe ist dann natürlich nicht standartkonform oder führt zu ungewünschten Formatierungen. Die HTML Ausgabe kann einfach deaktiviert werden. Dazu in der Datei system/modules/meta_editor/dca/tl_metaitem.php beim Feld 'description', das 'rte'=&amp;gt;'tinyMCE' aus dem 'eval' Array löschen.&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Meta_editor</id>
		<title>Meta editor</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Meta_editor"/>
				<updated>2012-01-21T17:30:51Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.9.3}}&lt;br /&gt;
&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| Dev=ideadapt&lt;br /&gt;
| DevSite=http://ideadapt.net&lt;br /&gt;
| ExtVersion=0.2.5 r2&lt;br /&gt;
| Version=ab 2.9.3&lt;br /&gt;
| TLVersion=ab 2.9.3&lt;br /&gt;
| ERLink=http://www.contao.org/de/extension-list/view/meta_editor.de.html&lt;br /&gt;
| Forum=https://www.contao-community.de/showthread.php?17023-meta_editor-Beschreibung-amp-Reihenfolge-von-Bildern-und-Download-Elementen-verwalten&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Mit dieser Erweiterung werden Metadaten von Dateien verwaltet. Zum Beispiel bei Bildern in einer Bildergallerie können Beschreibung, Titel und deren Reihenfolge festgelegt werden. Die Metadaten werden in einer meta.txt in einem von contao vorgeschriebenen Format gespeichert. Viele Erweiterungen verwenden die Informationen aus der meta.txt. So zum Beispiel catalog, Downloadelemente und gallery.&lt;br /&gt;
&lt;br /&gt;
meta_editor hat folgende Features:&lt;br /&gt;
* Verschieben der Elemente per Drag &amp;amp; Drop, automatisches speichern der neuen Reihenfolge&lt;br /&gt;
* Importieren bestehender meta Dateien&lt;br /&gt;
* Eingabevalidierung mit aufschlussreichen Fehlermeldungen&lt;br /&gt;
* Publish / Unpublish Mechanismus erlaubt es Daten zu bearbeiten, aber noch nicht gegen Aussen verfügbar zu machen&lt;br /&gt;
* Automatisches suchen / hinzufügen neuer Dateien&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung ist eine Weiterentwicklung der MetaCreator Erweiterung.&lt;br /&gt;
&lt;br /&gt;
=Definition meta-Datei=&lt;br /&gt;
In einer meta-Datei werden zusätzliche Angaben zu Bilddateien gespeichert. In einer meta-Datei werden nur Bilderbeschreibungen verwaltet, von Bildern die im gleichen Verzeichnis sind.&lt;br /&gt;
Pro Sprache kann eine meta-Datei angelegt werden. meta.txt ist dabei die Standard-Datei. Für Englisch zum Beispiel, wird eine Datei meta_en.txt angelegt.&lt;br /&gt;
==Syntax==&lt;br /&gt;
Für jedes Bild gibt es eine Beschreibung und ein Titel . Pro Zeile wird eine Datei beschrieben. Das Format einer Zeile ist wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Dateiname&amp;gt; = &amp;lt;Beschreibung&amp;gt; || &amp;lt;Dateiname mit Pfad&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Feld 'Beschreibung' wird als Bildunterschrift in der lightbox verwendet. Andere Erweiterungen verwenden die Beschreibung auch im alt Attribut von img-Tags (HTML Element für Bilder). Da ist es sinnvoll die HTML-Ausgabe von meta_editor auszuschalten. Wie das geht steht weiter unten.&lt;br /&gt;
&lt;br /&gt;
=meta_editor Installation=&lt;br /&gt;
Die Installation kann vom ER aus gemacht werden. Die Seite im ER ist: http://www.contao.org/de/extension-list/view/meta_editor.de.html&lt;br /&gt;
&lt;br /&gt;
Die Quelldateien sind auf github: https://github.com/ideadapt/meta_editor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=HTML Ausgabe ein- / ausschalten=&lt;br /&gt;
Per Default wird tinyMCE als Editor für die Beschreibung verwendet. Dass bedeutet, dass die Beschreibung HTML mindestens das von tinyMCE erstellte p Tag enthält. Bei Download-, wie auch Galerie-Ausgaben wird diese HTML-Beschreibung als title bzw. alt Attributwert verwendet. Die Ausgabe ist dann natürlich nicht standartkonform oder führt zu ungewünschten Formatierungen. Die HTML Ausgabe kann einfach deaktiviert werden. Dazu in der Datei system/modules/meta_editor/dca/tl_metaitem.php beim Feld 'description', das 'rte'=&amp;gt;'tinyMCE' aus dem 'eval' Array löschen.&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Meta_editor</id>
		<title>Meta editor</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Meta_editor"/>
				<updated>2012-01-21T17:25:56Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.9.3}}&lt;br /&gt;
&lt;br /&gt;
Mit dieser Erweiterung werden Metadaten von Dateien verwaltet. Zum Beispiel bei Bildern in einer Bildergallerie können Beschreibung, Titel und deren Reihenfolge festgelegt werden. Die Metadaten werden in einer meta.txt in einem von contao vorgeschriebenen Format gespeichert. Viele Erweiterungen verwenden die Informationen aus der meta.txt. So zum Beispiel catalog, Downloadelemente und gallery.&lt;br /&gt;
&lt;br /&gt;
meta_editor hat folgende Features:&lt;br /&gt;
* Verschieben der Elemente per Drag &amp;amp; Drop, automatisches speichern der neuen Reihenfolge&lt;br /&gt;
* Importieren bestehender meta Dateien&lt;br /&gt;
* Eingabevalidierung mit aufschlussreichen Fehlermeldungen&lt;br /&gt;
* Publish / Unpublish Mechanismus erlaubt es Daten zu bearbeiten, aber noch nicht gegen Aussen verfügbar zu machen&lt;br /&gt;
* Automatisches suchen / hinzufügen neuer Dateien&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung ist eine Weiterentwicklung der MetaCreator Erweiterung.&lt;br /&gt;
&lt;br /&gt;
=Definition meta-Datei=&lt;br /&gt;
In einer meta-Datei werden zusätzliche Angaben zu Bilddateien gespeichert. In einer meta-Datei werden nur Bilderbeschreibungen verwaltet, von Bildern die im gleichen Verzeichnis sind.&lt;br /&gt;
Pro Sprache kann eine meta-Datei angelegt werden. meta.txt ist dabei die Standard-Datei. Für Englisch zum Beispiel, wird eine Datei meta_en.txt angelegt.&lt;br /&gt;
==Syntax==&lt;br /&gt;
Für jedes Bild gibt es eine Beschreibung und ein Titel . Pro Zeile wird eine Datei beschrieben. Das Format einer Zeile ist wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Dateiname&amp;gt; = &amp;lt;Beschreibung&amp;gt; || &amp;lt;Dateiname mit Pfad&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Feld 'Beschreibung' wird als Bildunterschrift in der lightbox verwendet. Andere Erweiterungen verwenden die Beschreibung auch im alt Attribut von img-Tags (HTML Element für Bilder). Da ist es sinnvoll die HTML-Ausgabe von meta_editor auszuschalten. Wie das geht steht weiter unten.&lt;br /&gt;
&lt;br /&gt;
=meta_editor Installation=&lt;br /&gt;
Die Installation kann vom ER aus gemacht werden. Die Seite im ER ist: http://www.contao.org/de/extension-list/view/meta_editor.de.html&lt;br /&gt;
&lt;br /&gt;
Die Quelldateien sind auf github: https://github.com/ideadapt/meta_editor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=HTML Ausgabe ein- / ausschalten=&lt;br /&gt;
Per Default wird tinyMCE als Editor für die Beschreibung verwendet. Dass bedeutet, dass die Beschreibung HTML mindestens das von tinyMCE erstellte p Tag enthält. Bei Download-, wie auch Galerie-Ausgaben wird diese HTML-Beschreibung als title bzw. alt Attributwert verwendet. Die Ausgabe ist dann natürlich nicht standartkonform oder führt zu ungewünschten Formatierungen. Die HTML Ausgabe kann einfach deaktiviert werden. Dazu in der Datei system/modules/meta_editor/dca/tl_metaitem.php beim Feld 'description', das 'rte'=&amp;gt;'tinyMCE' aus dem 'eval' Array löschen.&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Meta_editor</id>
		<title>Meta editor</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Meta_editor"/>
				<updated>2012-01-21T17:19:58Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.9.3}}&lt;br /&gt;
&lt;br /&gt;
Mit der Erweiterung meta_editor können die meta-Dateien vom contao Backend aus verwaltet und bearbeitet werden. &lt;br /&gt;
&lt;br /&gt;
=meta-Datei Format=&lt;br /&gt;
In einer meta-Datei werden zusätzliche Angaben zu Bilddateien gespeichert. Für jedes Bild kann eine Beschreibung und ein Titel angegeben werden. Pro Zeile wird eine Datei beschrieben. Das Format einer Zeile ist wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Dateiname&amp;gt; = &amp;lt;Beschreibung&amp;gt; || &amp;lt;Dateiname mit Pfad&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Feld 'Beschreibung' wird als Bildunterschrift in der lightbox verwendet. Andere Erweiterungen verwenden die Beschreibung auch im img alt Attribut. Da ist es sinnvoll die HTML-Ausgabe von meta_editor auszuschalten. Wie das geht steht weiter unten.&lt;br /&gt;
&lt;br /&gt;
=meta_editor Installation=&lt;br /&gt;
Die Installation kann vom ER aus gemacht werden. Die Seite im ER ist: http://www.contao.org/de/extension-list/view/meta_editor.de.html&lt;br /&gt;
&lt;br /&gt;
Die Quelldateien sind auf github: https://github.com/ideadapt/meta_editor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=HTML Ausgabe ein- / ausschalten=&lt;br /&gt;
Per Default wird tinyMCE als Editor für die Beschreibung verwendet. Dass bedeutet, dass die Beschreibung HTML mindestens das von tinyMCE erstellte p Tag enthält. Bei Download-, wie auch Galerie-Ausgaben wird diese HTML-Beschreibung als title bzw. alt Attributwert verwendet. Die Ausgabe ist dann natürlich nicht standartkonform oder führt zu ungewünschten Formatierungen. Die HTML Ausgabe kann einfach deaktiviert werden. Dazu in der Datei system/modules/meta_editor/dca/tl_metaitem.php beim Feld 'description', das 'rte'=&amp;gt;'tinyMCE' aus dem 'eval' Array löschen.&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Shoutbox</id>
		<title>Shoutbox</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Shoutbox"/>
				<updated>2012-01-19T14:01:10Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.9.3}}&lt;br /&gt;
&lt;br /&gt;
Mit dieser Erweiterung können eingeloggte Benutzer im Backend chatten. Angzeigt wird ein kleines Chatfenster unten rechts, welches ein oder ausgeblendet werden kann.&lt;br /&gt;
&lt;br /&gt;
shoutbox nicht im ER&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ideadapt/shoutbox shoutbox auf github]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Msg posted.png]]&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
# Von Extension Repository. Oder von github herunterladen und in das contao Verzeichnis kopieren.&lt;br /&gt;
# In der Datei '''plugins\ia.jquery.shoutbox\shoutbox_be_starter.js''' die Variable tl_path anpassen.&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:Msg_posted.png</id>
		<title>Datei:Msg posted.png</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:Msg_posted.png"/>
				<updated>2012-01-19T13:59:12Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: hat eine neue Version von „Datei:Msg posted.png“ hochgeladen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Shoutbox</id>
		<title>Shoutbox</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Shoutbox"/>
				<updated>2012-01-19T13:58:00Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.9.3}}&lt;br /&gt;
&lt;br /&gt;
Mit dieser Erweiterung können eingeloggte Benutzer im Backend chatten. Angzeigt wird ein kleines Chatfenster unten rechts, welches ein oder ausgeblendet werden kann.&lt;br /&gt;
&lt;br /&gt;
shoutbox nicht im ER&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ideadapt/shoutbox| shoutbox auf github]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Msg posted.png]]&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
# Von Extension Repository. Oder von github herunterladen und in das contao Verzeichnis kopieren.&lt;br /&gt;
# In der Datei '''plugins\ia.jquery.shoutbox\shoutbox_be_starter.js''' die Variable tl_path anpassen.&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:Msg_posted.png</id>
		<title>Datei:Msg posted.png</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:Msg_posted.png"/>
				<updated>2012-01-19T13:57:12Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: hat eine neue Version von „Datei:Msg posted.png“ hochgeladen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:Msg_posted.png</id>
		<title>Datei:Msg posted.png</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:Msg_posted.png"/>
				<updated>2012-01-19T13:52:39Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Shoutbox</id>
		<title>Shoutbox</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Shoutbox"/>
				<updated>2012-01-19T13:49:06Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.9.3}}&lt;br /&gt;
&lt;br /&gt;
Mit dieser Erweiterung können eingeloggte Benutzer im Backend chatten. Angzeigt wird ein kleines Chatfenster unten rechts, welches ein oder ausgeblendet werden kann.&lt;br /&gt;
&lt;br /&gt;
ER: nA&lt;br /&gt;
github: https://github.com/ideadapt/shoutbox&lt;br /&gt;
&lt;br /&gt;
SCREEN&lt;br /&gt;
&lt;br /&gt;
Installation&lt;br /&gt;
&lt;br /&gt;
0. Von Extension Repository. Oder von github herunterladen und in das contao Verzeichnis kopieren.&lt;br /&gt;
1. In der Datei '''plugins\ia.jquery.shoutbox\shoutbox_be_starter.js''' die Variable tl_path anpassen.&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Shoutbox</id>
		<title>Shoutbox</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Shoutbox"/>
				<updated>2012-01-19T13:26:08Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: Die Seite wurde neu angelegt: „Category:Extensions {{AppliesTo|TLVersion=ab 2.9.3}}  coming soon“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.9.3}}&lt;br /&gt;
&lt;br /&gt;
coming soon&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Meta_editor</id>
		<title>Meta editor</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Meta_editor"/>
				<updated>2012-01-18T13:46:12Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: Die Seite wurde neu angelegt: „Category:Extensions {{AppliesTo|TLVersion=ab 2.9.3}}  coming soon“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.9.3}}&lt;br /&gt;
&lt;br /&gt;
coming soon&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback</id>
		<title>Isotope-Cart-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback"/>
				<updated>2011-07-24T16:49:17Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- begin Stub --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; border: 1px solid #8E0505; background-color: #F2F2F2&amp;quot;&lt;br /&gt;
| | [[Bild:msgError.png]] || &amp;lt;span class=&amp;quot;title&amp;quot;&amp;gt;'''Unvollständiger Artikel:'''&amp;lt;/span&amp;gt; dieser Artikel ist noch nicht sauber bearbeitet.&lt;br /&gt;
Bitte [{{fullurl:{{FULLPAGENAME}}|action=edit}} erweitere ihn] und entferne erst anschliessend diesen Hinweis.&amp;lt;includeonly&amp;gt;[[Category:Stub]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- end Stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
In der aktuellen Isotope Version (0.2.10 stable), wird dem Benutzer nach erfolgreichem Hinzufügen eines Produktes in den Warenkorb, keine Meldung angezeigt. Mit den Boardmitteln von contao und ein wenig Kreativität kann man das in wenigen Minuten ändern. Es gibt mehrere Wege dieses Verhalten zu implementieren. Die einzelnen Varianten werden hier vorgestellt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis&lt;br /&gt;
|Ab Version 1.3 wird ein solcher Mechanismus verfügbar sein.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Variante1: Isotope Box und Hooks==&lt;br /&gt;
Wir verwenden PHP, Javascript und CSS um nach erfolgreichem Hinzufügen eine HTML-Messagebox anzuzeigen. Schlussendlich würde es diese Technik auch erlauben Isotope Fehlermeldungen (Out of Stock, komplexere Validierungsresultate) anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:IsotopeCartExt_ajaxBox.png]]&lt;br /&gt;
&lt;br /&gt;
Zuerst erstellen wir ein neues Modul. In diesem Tutorial verwende ich den Modulnamen ''IsotopeExt''. Im Ordner TL_ROOT/system/modules erstellen wir folgende Verzeichnisse und Dateien: IsotopeExt/config/config.php, IsotopeExt/IsotopeCartExt.php&lt;br /&gt;
&lt;br /&gt;
===Backend Konfiguration===&lt;br /&gt;
Dieses Tutorial geht davon aus, dass im Isotope Produktleser Modul unter 'Add product jump to page' keine Seite angewählt ist. Die beschriebene Technik könnte aber auch dann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===PHP Konfiguration===&lt;br /&gt;
In der config/config.php folgenden PHP-Code hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'addSuccess');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'createFENotification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Am einfachsten eine config.php eines anderen Moduls kopieren und dessen Inhalt ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Damit registrieren wir zwei neue Hooks, die jedes mal aufgerufen werden, wenn ein Produkt dem Warenkorb hinzugefügt wird. Im Folgenden nun die Implementation der zwei registrierten Funktionen.&lt;br /&gt;
&lt;br /&gt;
In der IsotopeCartExt.php folgenden Code einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class IsotopeCartExt extends Model {&lt;br /&gt;
	public function addSuccess(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['messages']['add_success'] = array(&lt;br /&gt;
			'class'   =&amp;gt; 'add_success',&lt;br /&gt;
			'message' =&amp;gt; 'Produkt wurde dem Warenkorb hinzugefügt.'&lt;br /&gt;
		);&lt;br /&gt;
                return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function createFENotification(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$objTempl = new FrontendTemplate('iso_notification');&lt;br /&gt;
		$objTempl-&amp;gt;messages = $_SESSION['ISOTOPE']['FE_NOTIFY']['messages'];&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['html'] = $objTempl-&amp;gt;parse();&lt;br /&gt;
		&lt;br /&gt;
		return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Templates &amp;amp; Isotope Box===&lt;br /&gt;
Nun ist es möglich die erstellten Session Objekte im Frontend zu verwenden. Wir verwenden dazu ein angepasstes Produktleser Template. Dazu einfach das entsprechende Template iso_reader_default.tpl von TL_ROOT/modules/Isotope/templates nach TL_ROOT/templates kopieren. Wenn das Template umbenannt wird, nicht vergessen im Produktleser Modul das umbenannte Template anzuwählen.&lt;br /&gt;
Folgende Zeilen am Anfang einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_SESSION['ISOTOPE']['FE_NOTIFY']['html'];&lt;br /&gt;
unset($_SESSION['ISOTOPE']['FE_NOTIFY']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Session-Variabel $_SESSION['ISOTOPE']['FE_NOTIFY']['html'] steckt das ganze gerenderte HTML der anzuzeigenden Nachricht. Allerdings noch nicht sichtbar. Mit Javascript lesen wir das HTMl aus und zeigen es in einer Isotope Box an. &lt;br /&gt;
Dazu anschliessend an den PHP-Code folgendes einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;
var notifyCtnr = jQuery(&amp;quot;#isotope_notify&amp;quot;); // in mootools use: $('isotope_notify');&lt;br /&gt;
if(notifyCtnr.length &amp;gt; 0){&lt;br /&gt;
    Isotope.displayBox(notifyCtnr.html());&lt;br /&gt;
}&lt;br /&gt;
// optional jQuey Code, enhance isotope box overlay close operation&lt;br /&gt;
jQuery(&amp;quot;#iso_ajaxOverlay&amp;quot;).click(function(){&lt;br /&gt;
    Isotope.hideBox();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====CSS====&lt;br /&gt;
Mit optional markierte Zeilen bzw. Blöcke können weggelassen werden, ohne die Funktion einzuschränken.&lt;br /&gt;
Den Folgenden CSS Code direkt im Template einbinden, oder besser im CSS des Themes.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#iso_ajaxBox{&lt;br /&gt;
	z-index: 1000;&lt;br /&gt;
	line-height: 1.4em; /*optional*/&lt;br /&gt;
	width: 250px; /*optional*/&lt;br /&gt;
	padding: 20px !important; /*optional*/&lt;br /&gt;
	border: 2px solid #93BA13 !important; /*optional*/&lt;br /&gt;
	border-radius: 4px; /*optional*/&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_success{&lt;br /&gt;
/* Pfade zu Bilddateien anpassen */&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/help.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_fail{ /*optional*/&lt;br /&gt;
/* Pfade zu Bilddateien anpassen */&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/important.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox a.close{ /*optional*/&lt;br /&gt;
	color: black;&lt;br /&gt;
	text-decoration: underline;&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin-top: 20px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxOverlay{&lt;br /&gt;
	top: 0 !important;&lt;br /&gt;
	z-index: 999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback</id>
		<title>Isotope-Cart-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback"/>
				<updated>2011-07-24T16:43:55Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Variante1: Isotope Box und Hooks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- begin Stub --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; border: 1px solid #8E0505; background-color: #F2F2F2&amp;quot;&lt;br /&gt;
| | [[Bild:msgError.png]] || &amp;lt;span class=&amp;quot;title&amp;quot;&amp;gt;'''Unvollständiger Artikel:'''&amp;lt;/span&amp;gt; dieser Artikel ist noch nicht sauber bearbeitet.&lt;br /&gt;
Bitte [{{fullurl:{{FULLPAGENAME}}|action=edit}} erweitere ihn] und entferne erst anschliessend diesen Hinweis.&amp;lt;includeonly&amp;gt;[[Category:Stub]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- end Stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
In der aktuellen Isotope Version (0.2.10 stable), wird dem Benutzer nach erfolgreichem Hinzufügen eines Produktes in den Warenkorb, keine Meldung angezeigt. Mit den Boardmitteln von contao und ein wenig Kreativität kann man das in wenigen Minuten ändern. Es gibt mehrere Wege dieses Verhalten zu implementieren. Die einzelnen Varianten werden hier vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Variante1: Isotope Box und Hooks==&lt;br /&gt;
Wir verwenden PHP, Javascript und CSS um nach erfolgreichem Hinzufügen eine HTML-Messagebox anzuzeigen. Schlussendlich würde es diese Technik auch erlauben Isotope Fehlermeldungen (Out of Stock, komplexere Validierungsresultate) anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:IsotopeCartExt_ajaxBox.png]]&lt;br /&gt;
&lt;br /&gt;
Zuerst erstellen wir ein neues Modul. In diesem Tutorial verwende ich den Modulnamen ''IsotopeExt''. Im Ordner TL_ROOT/system/modules erstellen wir folgende Verzeichnisse und Dateien: IsotopeExt/config/config.php, IsotopeExt/IsotopeCartExt.php&lt;br /&gt;
&lt;br /&gt;
===Backend Konfiguration===&lt;br /&gt;
Dieses Tutorial geht davon aus, dass im Isotope Produktleser Modul unter 'Add product jump to page' keine Seite angewählt ist. Die beschriebene Technik könnte aber auch dann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===PHP Konfiguration===&lt;br /&gt;
In der config/config.php folgenden PHP-Code hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'addSuccess');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'createFENotification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Am einfachsten eine config.php eines anderen Moduls kopieren und dessen Inhalt ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Damit registrieren wir zwei neue Hooks, die jedes mal aufgerufen werden, wenn ein Produkt dem Warenkorb hinzugefügt wird. Im Folgenden nun die Implementation der zwei registrierten Funktionen.&lt;br /&gt;
&lt;br /&gt;
In der IsotopeCartExt.php folgenden Code einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class IsotopeCartExt extends Model {&lt;br /&gt;
	public function addSuccess(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['messages']['add_success'] = array(&lt;br /&gt;
			'class'   =&amp;gt; 'add_success',&lt;br /&gt;
			'message' =&amp;gt; 'Produkt wurde dem Warenkorb hinzugefügt.'&lt;br /&gt;
		);&lt;br /&gt;
                return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function createFENotification(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$objTempl = new FrontendTemplate('iso_notification');&lt;br /&gt;
		$objTempl-&amp;gt;messages = $_SESSION['ISOTOPE']['FE_NOTIFY']['messages'];&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['html'] = $objTempl-&amp;gt;parse();&lt;br /&gt;
		&lt;br /&gt;
		return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Templates &amp;amp; Isotope Box===&lt;br /&gt;
Nun ist es möglich die erstellten Session Objekte im Frontend zu verwenden. Wir verwenden dazu ein angepasstes Produktleser Template. Dazu einfach das entsprechende Template iso_reader_default.tpl von TL_ROOT/modules/Isotope/templates nach TL_ROOT/templates kopieren. Wenn das Template umbenannt wird, nicht vergessen im Produktleser Modul das umbenannte Template anzuwählen.&lt;br /&gt;
Folgende Zeilen am Anfang einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_SESSION['ISOTOPE']['FE_NOTIFY']['html'];&lt;br /&gt;
unset($_SESSION['ISOTOPE']['FE_NOTIFY']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Session-Variabel $_SESSION['ISOTOPE']['FE_NOTIFY']['html'] steckt das ganze gerenderte HTML der anzuzeigenden Nachricht. Allerdings noch nicht sichtbar. Mit Javascript lesen wir das HTMl aus und zeigen es in einer Isotope Box an. &lt;br /&gt;
Dazu anschliessend an den PHP-Code folgendes einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;
var notifyCtnr = jQuery(&amp;quot;#isotope_notify&amp;quot;); // in mootools use: $('isotope_notify');&lt;br /&gt;
if(notifyCtnr.length &amp;gt; 0){&lt;br /&gt;
    Isotope.displayBox(notifyCtnr.html());&lt;br /&gt;
}&lt;br /&gt;
// optional jQuey Code, enhance isotope box overlay close operation&lt;br /&gt;
jQuery(&amp;quot;#iso_ajaxOverlay&amp;quot;).click(function(){&lt;br /&gt;
    Isotope.hideBox();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====CSS====&lt;br /&gt;
Mit optional markierte Zeilen bzw. Blöcke können weggelassen werden, ohne die Funktion einzuschränken.&lt;br /&gt;
Den Folgenden CSS Code direkt im Template einbinden, oder besser im CSS des Themes.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#iso_ajaxBox{&lt;br /&gt;
	z-index: 1000;&lt;br /&gt;
	line-height: 1.4em; /*optional*/&lt;br /&gt;
	width: 250px; /*optional*/&lt;br /&gt;
	padding: 20px !important; /*optional*/&lt;br /&gt;
	border: 2px solid #93BA13 !important; /*optional*/&lt;br /&gt;
	border-radius: 4px; /*optional*/&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_success{&lt;br /&gt;
/* Pfade zu Bilddateien anpassen */&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/help.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_fail{ /*optional*/&lt;br /&gt;
/* Pfade zu Bilddateien anpassen */&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/important.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox a.close{ /*optional*/&lt;br /&gt;
	color: black;&lt;br /&gt;
	text-decoration: underline;&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin-top: 20px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxOverlay{&lt;br /&gt;
	top: 0 !important;&lt;br /&gt;
	z-index: 999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:IsotopeCartExt_ajaxBox.png</id>
		<title>Datei:IsotopeCartExt ajaxBox.png</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:IsotopeCartExt_ajaxBox.png"/>
				<updated>2011-07-24T16:40:58Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback</id>
		<title>Isotope-Cart-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback"/>
				<updated>2011-07-24T16:40:34Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- begin Stub --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; border: 1px solid #8E0505; background-color: #F2F2F2&amp;quot;&lt;br /&gt;
| | [[Bild:msgError.png]] || &amp;lt;span class=&amp;quot;title&amp;quot;&amp;gt;'''Unvollständiger Artikel:'''&amp;lt;/span&amp;gt; dieser Artikel ist noch nicht sauber bearbeitet.&lt;br /&gt;
Bitte [{{fullurl:{{FULLPAGENAME}}|action=edit}} erweitere ihn] und entferne erst anschliessend diesen Hinweis.&amp;lt;includeonly&amp;gt;[[Category:Stub]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- end Stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
In der aktuellen Isotope Version (0.2.10 stable), wird dem Benutzer nach erfolgreichem Hinzufügen eines Produktes in den Warenkorb, keine Meldung angezeigt. Mit den Boardmitteln von contao und ein wenig Kreativität kann man das in wenigen Minuten ändern. Es gibt mehrere Wege dieses Verhalten zu implementieren. Die einzelnen Varianten werden hier vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Variante1: Isotope Box und Hooks==&lt;br /&gt;
Wir verwenden PHP, Javascript und CSS um nach erfolgreichem Hinzufügen eine HTML-Messagebox anzuzeigen. Schlussendlich würde es diese Technik auch erlauben Isotope Fehlermeldungen (Out of Stock, komplexere Validierungsresultate) anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Zuerst erstellen wir ein neues Modul. In diesem Tutorial verwende ich den Modulnamen ''IsotopeExt''. Im Ordner TL_ROOT/system/modules erstellen wir folgende Verzeichnisse und Dateien: IsotopeExt/config/config.php, IsotopeExt/IsotopeCartExt.php&lt;br /&gt;
&lt;br /&gt;
===Backend Konfiguration===&lt;br /&gt;
Dieses Tutorial geht davon aus, dass im Isotope Produktleser Modul unter 'Add product jump to page' keine Seite angewählt ist. Die beschriebene Technik könnte aber auch dann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===PHP Konfiguration===&lt;br /&gt;
In der config/config.php folgenden PHP-Code hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'addSuccess');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'createFENotification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Am einfachsten eine config.php eines anderen Moduls kopieren und dessen Inhalt ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Damit registrieren wir zwei neue Hooks, die jedes mal aufgerufen werden, wenn ein Produkt dem Warenkorb hinzugefügt wird. Im Folgenden nun die Implementation der zwei registrierten Funktionen.&lt;br /&gt;
&lt;br /&gt;
In der IsotopeCartExt.php folgenden Code einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class IsotopeCartExt extends Model {&lt;br /&gt;
	public function addSuccess(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['messages']['add_success'] = array(&lt;br /&gt;
			'class'   =&amp;gt; 'add_success',&lt;br /&gt;
			'message' =&amp;gt; 'Produkt wurde dem Warenkorb hinzugefügt.'&lt;br /&gt;
		);&lt;br /&gt;
                return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function createFENotification(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$objTempl = new FrontendTemplate('iso_notification');&lt;br /&gt;
		$objTempl-&amp;gt;messages = $_SESSION['ISOTOPE']['FE_NOTIFY']['messages'];&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['html'] = $objTempl-&amp;gt;parse();&lt;br /&gt;
		&lt;br /&gt;
		return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Templates &amp;amp; Isotope Box===&lt;br /&gt;
Nun ist es möglich die erstellten Session Objekte im Frontend zu verwenden. Wir verwenden dazu ein angepasstes Produktleser Template. Dazu einfach das entsprechende Template iso_reader_default.tpl von TL_ROOT/modules/Isotope/templates nach TL_ROOT/templates kopieren. Wenn das Template umbenannt wird, nicht vergessen im Produktleser Modul das umbenannte Template anzuwählen.&lt;br /&gt;
Folgende Zeilen am Anfang einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_SESSION['ISOTOPE']['FE_NOTIFY']['html'];&lt;br /&gt;
unset($_SESSION['ISOTOPE']['FE_NOTIFY']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Session-Variabel $_SESSION['ISOTOPE']['FE_NOTIFY']['html'] steckt das ganze gerenderte HTML der anzuzeigenden Nachricht. Allerdings noch nicht sichtbar. Mit Javascript lesen wir das HTMl aus und zeigen es in einer Isotope Box an. &lt;br /&gt;
Dazu anschliessend an den PHP-Code folgendes einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;
var notifyCtnr = jQuery(&amp;quot;#isotope_notify&amp;quot;); // in mootools use: $('isotope_notify');&lt;br /&gt;
if(notifyCtnr.length &amp;gt; 0){&lt;br /&gt;
    Isotope.displayBox(notifyCtnr.html());&lt;br /&gt;
}&lt;br /&gt;
// optional jQuey Code, enhance isotope box overlay close operation&lt;br /&gt;
jQuery(&amp;quot;#iso_ajaxOverlay&amp;quot;).click(function(){&lt;br /&gt;
    Isotope.hideBox();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====CSS====&lt;br /&gt;
Mit optional markierte Zeilen bzw. Blöcke können weggelassen werden, ohne die Funktion einzuschränken.&lt;br /&gt;
Den Folgenden CSS Code direkt im Template einbinden, oder besser im CSS des Themes.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#iso_ajaxBox{&lt;br /&gt;
	z-index: 1000;&lt;br /&gt;
	line-height: 1.4em; /*optional*/&lt;br /&gt;
	width: 250px; /*optional*/&lt;br /&gt;
	padding: 20px !important; /*optional*/&lt;br /&gt;
	border: 2px solid #93BA13 !important; /*optional*/&lt;br /&gt;
	border-radius: 4px; /*optional*/&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_success{&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/help.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_fail{ /*optional*/&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/important.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox a.close{ /*optional*/&lt;br /&gt;
	color: black;&lt;br /&gt;
	text-decoration: underline;&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin-top: 20px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxOverlay{&lt;br /&gt;
	top: 0 !important;&lt;br /&gt;
	z-index: 999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback</id>
		<title>Isotope-Cart-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback"/>
				<updated>2011-07-24T16:38:15Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Isotope-Basket - Feedback wenn neues Produkt im Warenkorb */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- begin Stub --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; border: 1px solid #8E0505; background-color: #F2F2F2&amp;quot;&lt;br /&gt;
| | [[Bild:msgError.png]] || &amp;lt;span class=&amp;quot;title&amp;quot;&amp;gt;'''Unvollständiger Artikel:'''&amp;lt;/span&amp;gt; dieser Artikel ist noch nicht sauber bearbeitet.&lt;br /&gt;
Bitte [{{fullurl:{{FULLPAGENAME}}|action=edit}} erweitere ihn] und entferne erst anschliessend diesen Hinweis.&amp;lt;includeonly&amp;gt;[[Category:Stub]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- end Stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
In der aktuellen Isotope Version (0.2.10 stable), wird dem Benutzer nach erfolgreichem Hinzufügen eines Produktes in den Warenkorb, keine Meldung angezeigt. Mit den Boardmitteln von contao und ein wenig Kreativität kann man das in wenigen Minuten ändern.&lt;br /&gt;
&lt;br /&gt;
==Variante1: Isotope Box und Hooks==&lt;br /&gt;
Wir verwenden PHP, Javascript und CSS um nach erfolgreichem Hinzufügen eine HTML-Messagebox anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Zuerst erstellen wir ein neues Modul. In diesem Tutorial verwende ich den Modulnamen ''IsotopeExt''. Im Ordner TL_ROOT/system/modules erstellen wir folgende Verzeichnisse und Dateien: IsotopeExt/config/config.php, IsotopeExt/IsotopeCartExt.php&lt;br /&gt;
&lt;br /&gt;
===Backend Konfiguration===&lt;br /&gt;
Dieses Tutorial geht davon aus, dass im Isotope Produktleser Modul unter 'Add product jump to page' keine Seite angewählt ist. Die beschriebene Technik könnte aber auch dann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===PHP Konfiguration===&lt;br /&gt;
In der config/config.php folgenden PHP-Code hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'addSuccess');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'createFENotification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Am einfachsten eine config.php eines anderen Moduls kopieren und dessen Inhalt ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Damit registrieren wir zwei neue Hooks, die jedes mal aufgerufen werden, wenn ein Produkt dem Warenkorb hinzugefügt wird. Im Folgenden nun die Implementation der zwei registrierten Funktionen.&lt;br /&gt;
&lt;br /&gt;
In der IsotopeCartExt.php folgenden Code einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class IsotopeCartExt extends Model {&lt;br /&gt;
	public function addSuccess(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['messages']['add_success'] = array(&lt;br /&gt;
			'class'   =&amp;gt; 'add_success',&lt;br /&gt;
			'message' =&amp;gt; 'Produkt wurde dem Warenkorb hinzugefügt.'&lt;br /&gt;
		);&lt;br /&gt;
                return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function createFENotification(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$objTempl = new FrontendTemplate('iso_notification');&lt;br /&gt;
		$objTempl-&amp;gt;messages = $_SESSION['ISOTOPE']['FE_NOTIFY']['messages'];&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['html'] = $objTempl-&amp;gt;parse();&lt;br /&gt;
		&lt;br /&gt;
		return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Templates &amp;amp; Isotope Box===&lt;br /&gt;
Nun ist es möglich die erstellten Session Objekte im Frontend zu verwenden. Wir verwenden dazu ein angepasstes Produktleser Template. Dazu einfach das entsprechende Template iso_reader_default.tpl von TL_ROOT/modules/Isotope/templates nach TL_ROOT/templates kopieren. Wenn das Template umbenannt wird, nicht vergessen im Produktleser Modul das umbenannte Template anzuwählen.&lt;br /&gt;
Folgende Zeilen am Anfang einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_SESSION['ISOTOPE']['FE_NOTIFY']['html'];&lt;br /&gt;
unset($_SESSION['ISOTOPE']['FE_NOTIFY']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Session-Variabel $_SESSION['ISOTOPE']['FE_NOTIFY']['html'] steckt das ganze gerenderte HTML der anzuzeigenden Nachricht. Allerdings noch nicht sichtbar. Mit Javascript lesen wir das HTMl aus und zeigen es in einer Isotope Box an. &lt;br /&gt;
Dazu anschliessend an den PHP-Code folgendes einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;
var notifyCtnr = jQuery(&amp;quot;#isotope_notify&amp;quot;); // in mootools use: $('isotope_notify');&lt;br /&gt;
if(notifyCtnr.length &amp;gt; 0){&lt;br /&gt;
    Isotope.displayBox(notifyCtnr.html());&lt;br /&gt;
}&lt;br /&gt;
// optional jQuey Code, enhance isotope box overlay close operation&lt;br /&gt;
jQuery(&amp;quot;#iso_ajaxOverlay&amp;quot;).click(function(){&lt;br /&gt;
    Isotope.hideBox();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====CSS====&lt;br /&gt;
Mit optional markierte Zeilen bzw. Blöcke können weggelassen werden, ohne die Funktion einzuschränken.&lt;br /&gt;
Den Folgenden CSS Code direkt im Template einbinden, oder besser im CSS des Themes.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#iso_ajaxBox{&lt;br /&gt;
	z-index: 1000;&lt;br /&gt;
	line-height: 1.4em; /*optional*/&lt;br /&gt;
	width: 250px; /*optional*/&lt;br /&gt;
	padding: 20px !important; /*optional*/&lt;br /&gt;
	border: 2px solid #93BA13 !important; /*optional*/&lt;br /&gt;
	border-radius: 4px; /*optional*/&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_success{&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/help.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_fail{ /*optional*/&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/important.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox a.close{ /*optional*/&lt;br /&gt;
	color: black;&lt;br /&gt;
	text-decoration: underline;&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin-top: 20px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxOverlay{&lt;br /&gt;
	top: 0 !important;&lt;br /&gt;
	z-index: 999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback</id>
		<title>Isotope-Cart-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback"/>
				<updated>2011-07-24T16:36:07Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Variante1: Isotope Box und Hooks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- begin Stub --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; border: 1px solid #8E0505; background-color: #F2F2F2&amp;quot;&lt;br /&gt;
| | [[Bild:msgError.png]] || &amp;lt;span class=&amp;quot;title&amp;quot;&amp;gt;'''Unvollständiger Artikel:'''&amp;lt;/span&amp;gt; dieser Artikel ist noch nicht sauber bearbeitet.&lt;br /&gt;
Bitte [{{fullurl:{{FULLPAGENAME}}|action=edit}} erweitere ihn] und entferne erst anschliessend diesen Hinweis.&amp;lt;includeonly&amp;gt;[[Category:Stub]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- end Stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
=Isotope-Basket - Feedback wenn neues Produkt im Warenkorb=&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Isotope Version (0.2.10 stable), wird dem Benutzer nach erfolgreichem Hinzufügen eines Produktes in den Warenkorb, keine Meldung angezeigt. Mit den Boardmitteln von contao und ein wenig Kreativität kann man das in wenigen Minuten ändern.&lt;br /&gt;
&lt;br /&gt;
==Variante1: Isotope Box und Hooks==&lt;br /&gt;
Wir verwenden PHP, Javascript und CSS um nach erfolgreichem Hinzufügen eine HTML-Messagebox anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Zuerst erstellen wir ein neues Modul. In diesem Tutorial verwende ich den Modulnamen ''IsotopeExt''. Im Ordner TL_ROOT/system/modules erstellen wir folgende Verzeichnisse und Dateien: IsotopeExt/config/config.php, IsotopeExt/IsotopeCartExt.php&lt;br /&gt;
&lt;br /&gt;
===Backend Konfiguration===&lt;br /&gt;
Dieses Tutorial geht davon aus, dass im Isotope Produktleser Modul unter 'Add product jump to page' keine Seite angewählt ist. Die beschriebene Technik könnte aber auch dann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===PHP Konfiguration===&lt;br /&gt;
In der config/config.php folgenden PHP-Code hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'addSuccess');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'createFENotification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Am einfachsten eine config.php eines anderen Moduls kopieren und dessen Inhalt ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Damit registrieren wir zwei neue Hooks, die jedes mal aufgerufen werden, wenn ein Produkt dem Warenkorb hinzugefügt wird. Im Folgenden nun die Implementation der zwei registrierten Funktionen.&lt;br /&gt;
&lt;br /&gt;
In der IsotopeCartExt.php folgenden Code einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class IsotopeCartExt extends Model {&lt;br /&gt;
	public function addSuccess(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['messages']['add_success'] = array(&lt;br /&gt;
			'class'   =&amp;gt; 'add_success',&lt;br /&gt;
			'message' =&amp;gt; 'Produkt wurde dem Warenkorb hinzugefügt.'&lt;br /&gt;
		);&lt;br /&gt;
                return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function createFENotification(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$objTempl = new FrontendTemplate('iso_notification');&lt;br /&gt;
		$objTempl-&amp;gt;messages = $_SESSION['ISOTOPE']['FE_NOTIFY']['messages'];&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['html'] = $objTempl-&amp;gt;parse();&lt;br /&gt;
		&lt;br /&gt;
		return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Templates &amp;amp; Isotope Box===&lt;br /&gt;
Nun ist es möglich die erstellten Session Objekte im Frontend zu verwenden. Wir verwenden dazu ein angepasstes Produktleser Template. Dazu einfach das entsprechende Template iso_reader_default.tpl von TL_ROOT/modules/Isotope/templates nach TL_ROOT/templates kopieren. Wenn das Template umbenannt wird, nicht vergessen im Produktleser Modul das umbenannte Template anzuwählen.&lt;br /&gt;
Folgende Zeilen am Anfang einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_SESSION['ISOTOPE']['FE_NOTIFY']['html'];&lt;br /&gt;
unset($_SESSION['ISOTOPE']['FE_NOTIFY']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Session-Variabel $_SESSION['ISOTOPE']['FE_NOTIFY']['html'] steckt das ganze gerenderte HTML der anzuzeigenden Nachricht. Allerdings noch nicht sichtbar. Mit Javascript lesen wir das HTMl aus und zeigen es in einer Isotope Box an. &lt;br /&gt;
Dazu anschliessend an den PHP-Code folgendes einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;
var notifyCtnr = jQuery(&amp;quot;#isotope_notify&amp;quot;); // in mootools use: $('isotope_notify');&lt;br /&gt;
if(notifyCtnr.length &amp;gt; 0){&lt;br /&gt;
    Isotope.displayBox(notifyCtnr.html());&lt;br /&gt;
}&lt;br /&gt;
// optional jQuey Code, enhance isotope box overlay close operation&lt;br /&gt;
jQuery(&amp;quot;#iso_ajaxOverlay&amp;quot;).click(function(){&lt;br /&gt;
    Isotope.hideBox();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====CSS====&lt;br /&gt;
Mit optional markierte Zeilen bzw. Blöcke können weggelassen werden, ohne die Funktion einzuschränken.&lt;br /&gt;
Den Folgenden CSS Code direkt im Template einbinden, oder besser im CSS des Themes.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#iso_ajaxBox{&lt;br /&gt;
	z-index: 1000;&lt;br /&gt;
	line-height: 1.4em; /*optional*/&lt;br /&gt;
	width: 250px; /*optional*/&lt;br /&gt;
	padding: 20px !important; /*optional*/&lt;br /&gt;
	border: 2px solid #93BA13 !important; /*optional*/&lt;br /&gt;
	border-radius: 4px; /*optional*/&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_success{&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/help.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_fail{ /*optional*/&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/important.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox a.close{ /*optional*/&lt;br /&gt;
	color: black;&lt;br /&gt;
	text-decoration: underline;&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin-top: 20px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxOverlay{&lt;br /&gt;
	top: 0 !important;&lt;br /&gt;
	z-index: 999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback</id>
		<title>Isotope-Cart-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback"/>
				<updated>2011-07-24T16:30:53Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Templates &amp;amp; Isotope Box */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- begin Stub --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; border: 1px solid #8E0505; background-color: #F2F2F2&amp;quot;&lt;br /&gt;
| | [[Bild:msgError.png]] || &amp;lt;span class=&amp;quot;title&amp;quot;&amp;gt;'''Unvollständiger Artikel:'''&amp;lt;/span&amp;gt; dieser Artikel ist noch nicht sauber bearbeitet.&lt;br /&gt;
Bitte [{{fullurl:{{FULLPAGENAME}}|action=edit}} erweitere ihn] und entferne erst anschliessend diesen Hinweis.&amp;lt;includeonly&amp;gt;[[Category:Stub]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- end Stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
=Isotope-Basket - Feedback wenn neues Produkt im Warenkorb=&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Isotope Version (0.2.10 stable), wird dem Benutzer nach erfolgreichem Hinzufügen eines Produktes in den Warenkorb, keine Meldung angezeigt. Mit den Boardmitteln von contao und ein wenig Kreativität kann man das in wenigen Minuten ändern.&lt;br /&gt;
&lt;br /&gt;
==Variante1: Isotope Box und Hooks==&lt;br /&gt;
Wir erstellen zuerst ein neues Modul. In diesem Tutorial verwende ich den Modulnamen ''IsotopeExt''. Im Ordner TL_ROOT/system/modules erstellen wir folgende Verzeichnisse und Dateien: IsotopeExt/config/config.php, IsotopeExt/IsotopeCartExt.php&lt;br /&gt;
&lt;br /&gt;
===Backend Konfiguration===&lt;br /&gt;
Dieses Tutorial geht davon aus, dass im Isotope Produktleser Modul unter 'Add product jump to page' keine Seite angewählt ist. Die beschriebene Technik könnte aber auch dann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===PHP Konfiguration===&lt;br /&gt;
In der config/config.php folgenden PHP-Code hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'addProduct');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'createFENotification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Am einfachsten eine config.php eines anderen Moduls kopieren und dessen Inhalt ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Damit registrieren wir zwei neue Hooks, die jedes mal aufgerufen werden, wenn ein Produkt dem Warenkorb hinzugefügt wird. Im Folgenden nun die Implementation der zwei registrierten Funktionen.&lt;br /&gt;
&lt;br /&gt;
In der IsotopeCartExt.php folgenden Code einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class IsotopeCartExt extends Model {&lt;br /&gt;
	public function addSuccess(){&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['messages']['add_success'] = array(&lt;br /&gt;
			'class'   =&amp;gt; 'add_success',&lt;br /&gt;
			'message' =&amp;gt; 'Produkt wurde dem Warenkorb hinzugefügt.'&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function createFENotification(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$objTempl = new FrontendTemplate('iso_notification');&lt;br /&gt;
		$objTempl-&amp;gt;messages = $_SESSION['ISOTOPE']['FE_NOTIFY']['messages'];&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['html'] = $objTempl-&amp;gt;parse();&lt;br /&gt;
		&lt;br /&gt;
		return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Templates &amp;amp; Isotope Box===&lt;br /&gt;
Nun ist es möglich die erstellten Session Objekte im Frontend zu verwenden. Wir verwenden dazu ein angepasstes Produktleser Template. Dazu einfach das entsprechende Template iso_reader_default.tpl von TL_ROOT/modules/Isotope/templates nach TL_ROOT/templates kopieren. Wenn das Template umbenannt wird, nicht vergessen im Produktleser Modul das umbenannte Template anzuwählen.&lt;br /&gt;
Folgende Zeilen am Anfang einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_SESSION['ISOTOPE']['FE_NOTIFY']['html'];&lt;br /&gt;
unset($_SESSION['ISOTOPE']['FE_NOTIFY']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Session-Variabel $_SESSION['ISOTOPE']['FE_NOTIFY']['html'] steckt das ganze gerenderte HTML der anzuzeigenden Nachricht. Allerdings noch nicht sichtbar. Mit Javascript lesen wir das HTMl aus und zeigen es in einer Isotope Box an. &lt;br /&gt;
Dazu anschliessend an den PHP-Code folgendes einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;
var notifyCtnr = jQuery(&amp;quot;#isotope_notify&amp;quot;); // in mootools use: $('isotope_notify');&lt;br /&gt;
if(notifyCtnr.length &amp;gt; 0){&lt;br /&gt;
    Isotope.displayBox(notifyCtnr.html());&lt;br /&gt;
}&lt;br /&gt;
// optional jQuey Code, enhance isotope box overlay close operation&lt;br /&gt;
jQuery(&amp;quot;#iso_ajaxOverlay&amp;quot;).click(function(){&lt;br /&gt;
    Isotope.hideBox();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====CSS====&lt;br /&gt;
Mit optional markierte Zeilen bzw. Blöcke können weggelassen werden, ohne die Funktion einzuschränken.&lt;br /&gt;
Den Folgenden CSS Code direkt im Template einbinden, oder besser im CSS des Themes.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#iso_ajaxBox{&lt;br /&gt;
	z-index: 1000;&lt;br /&gt;
	line-height: 1.4em; /*optional*/&lt;br /&gt;
	width: 250px; /*optional*/&lt;br /&gt;
	padding: 20px !important; /*optional*/&lt;br /&gt;
	border: 2px solid #93BA13 !important; /*optional*/&lt;br /&gt;
	border-radius: 4px; /*optional*/&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_success{&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/help.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_fail{ /*optional*/&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/important.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox a.close{ /*optional*/&lt;br /&gt;
	color: black;&lt;br /&gt;
	text-decoration: underline;&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin-top: 20px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxOverlay{&lt;br /&gt;
	top: 0 !important;&lt;br /&gt;
	z-index: 999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback</id>
		<title>Isotope-Cart-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback"/>
				<updated>2011-07-24T16:29:53Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Templates &amp;amp; Isotope Box */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- begin Stub --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; border: 1px solid #8E0505; background-color: #F2F2F2&amp;quot;&lt;br /&gt;
| | [[Bild:msgError.png]] || &amp;lt;span class=&amp;quot;title&amp;quot;&amp;gt;'''Unvollständiger Artikel:'''&amp;lt;/span&amp;gt; dieser Artikel ist noch nicht sauber bearbeitet.&lt;br /&gt;
Bitte [{{fullurl:{{FULLPAGENAME}}|action=edit}} erweitere ihn] und entferne erst anschliessend diesen Hinweis.&amp;lt;includeonly&amp;gt;[[Category:Stub]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- end Stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
=Isotope-Basket - Feedback wenn neues Produkt im Warenkorb=&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Isotope Version (0.2.10 stable), wird dem Benutzer nach erfolgreichem Hinzufügen eines Produktes in den Warenkorb, keine Meldung angezeigt. Mit den Boardmitteln von contao und ein wenig Kreativität kann man das in wenigen Minuten ändern.&lt;br /&gt;
&lt;br /&gt;
==Variante1: Isotope Box und Hooks==&lt;br /&gt;
Wir erstellen zuerst ein neues Modul. In diesem Tutorial verwende ich den Modulnamen ''IsotopeExt''. Im Ordner TL_ROOT/system/modules erstellen wir folgende Verzeichnisse und Dateien: IsotopeExt/config/config.php, IsotopeExt/IsotopeCartExt.php&lt;br /&gt;
&lt;br /&gt;
===Backend Konfiguration===&lt;br /&gt;
Dieses Tutorial geht davon aus, dass im Isotope Produktleser Modul unter 'Add product jump to page' keine Seite angewählt ist. Die beschriebene Technik könnte aber auch dann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===PHP Konfiguration===&lt;br /&gt;
In der config/config.php folgenden PHP-Code hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'addProduct');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'createFENotification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Am einfachsten eine config.php eines anderen Moduls kopieren und dessen Inhalt ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Damit registrieren wir zwei neue Hooks, die jedes mal aufgerufen werden, wenn ein Produkt dem Warenkorb hinzugefügt wird. Im Folgenden nun die Implementation der zwei registrierten Funktionen.&lt;br /&gt;
&lt;br /&gt;
In der IsotopeCartExt.php folgenden Code einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class IsotopeCartExt extends Model {&lt;br /&gt;
	public function addSuccess(){&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['messages']['add_success'] = array(&lt;br /&gt;
			'class'   =&amp;gt; 'add_success',&lt;br /&gt;
			'message' =&amp;gt; 'Produkt wurde dem Warenkorb hinzugefügt.'&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function createFENotification(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$objTempl = new FrontendTemplate('iso_notification');&lt;br /&gt;
		$objTempl-&amp;gt;messages = $_SESSION['ISOTOPE']['FE_NOTIFY']['messages'];&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['html'] = $objTempl-&amp;gt;parse();&lt;br /&gt;
		&lt;br /&gt;
		return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Templates &amp;amp; Isotope Box===&lt;br /&gt;
Nun ist es möglich die erstellten Session Objekte im Frontend zu verwenden. Wir verwenden dazu ein angepasstes Produktleser Template. Dazu einfach das entsprechende Template iso_reader_default.tpl von TL_ROOT/modules/Isotope/templates nach TL_ROOT/templates kopieren. Wenn das Template umbenannt wird, nicht vergessen im Produktleser Modul das umbenannte Template anzuwählen.&lt;br /&gt;
Folgende Zeilen am Anfang einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_SESSION['ISOTOPE']['FE_NOTIFY']['html'];&lt;br /&gt;
unset($_SESSION['ISOTOPE']['FE_NOTIFY']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Session-Variabel $_SESSION['ISOTOPE']['FE_NOTIFY']['html'] steckt das ganze gerenderte HTML der anzuzeigenden Nachricht. Allerdings noch nicht sichtbar. Mit Javascript lesen wir das HTMl aus und zeigen es in einer Isotope Box an. &lt;br /&gt;
Dazu anschliessend an den PHP-Code folgendes einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;
var notifyCtnr = jQuery(&amp;quot;#isotope_notify&amp;quot;); // in mootools use: $('isotope_notify');&lt;br /&gt;
if(notifyCtnr.length &amp;gt; 0){&lt;br /&gt;
    Isotope.displayBox(notifyCtnr.html());&lt;br /&gt;
}&lt;br /&gt;
// optional jQuey Code, enhance isotope box overlay close operation&lt;br /&gt;
$(&amp;quot;#iso_ajaxOverlay&amp;quot;).click(function(){&lt;br /&gt;
    Isotope.hideBox();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====CSS====&lt;br /&gt;
Mit optional markierte Zeilen bzw. Blöcke können weggelassen werden, ohne die Funktion einzuschränken.&lt;br /&gt;
Den Folgenden CSS Code direkt im Template einbinden, oder besser im CSS des Themes.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#iso_ajaxBox{&lt;br /&gt;
	z-index: 1000;&lt;br /&gt;
	line-height: 1.4em; /*optional*/&lt;br /&gt;
	width: 250px; /*optional*/&lt;br /&gt;
	padding: 20px !important; /*optional*/&lt;br /&gt;
	border: 2px solid #93BA13 !important; /*optional*/&lt;br /&gt;
	border-radius: 4px; /*optional*/&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_success{&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/help.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_fail{ /*optional*/&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/important.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox a.close{ /*optional*/&lt;br /&gt;
	color: black;&lt;br /&gt;
	text-decoration: underline;&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin-top: 20px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxOverlay{&lt;br /&gt;
	top: 0 !important;&lt;br /&gt;
	z-index: 999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback</id>
		<title>Isotope-Cart-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback"/>
				<updated>2011-07-24T16:29:27Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- begin Stub --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; border: 1px solid #8E0505; background-color: #F2F2F2&amp;quot;&lt;br /&gt;
| | [[Bild:msgError.png]] || &amp;lt;span class=&amp;quot;title&amp;quot;&amp;gt;'''Unvollständiger Artikel:'''&amp;lt;/span&amp;gt; dieser Artikel ist noch nicht sauber bearbeitet.&lt;br /&gt;
Bitte [{{fullurl:{{FULLPAGENAME}}|action=edit}} erweitere ihn] und entferne erst anschliessend diesen Hinweis.&amp;lt;includeonly&amp;gt;[[Category:Stub]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- end Stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
=Isotope-Basket - Feedback wenn neues Produkt im Warenkorb=&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Isotope Version (0.2.10 stable), wird dem Benutzer nach erfolgreichem Hinzufügen eines Produktes in den Warenkorb, keine Meldung angezeigt. Mit den Boardmitteln von contao und ein wenig Kreativität kann man das in wenigen Minuten ändern.&lt;br /&gt;
&lt;br /&gt;
==Variante1: Isotope Box und Hooks==&lt;br /&gt;
Wir erstellen zuerst ein neues Modul. In diesem Tutorial verwende ich den Modulnamen ''IsotopeExt''. Im Ordner TL_ROOT/system/modules erstellen wir folgende Verzeichnisse und Dateien: IsotopeExt/config/config.php, IsotopeExt/IsotopeCartExt.php&lt;br /&gt;
&lt;br /&gt;
===Backend Konfiguration===&lt;br /&gt;
Dieses Tutorial geht davon aus, dass im Isotope Produktleser Modul unter 'Add product jump to page' keine Seite angewählt ist. Die beschriebene Technik könnte aber auch dann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===PHP Konfiguration===&lt;br /&gt;
In der config/config.php folgenden PHP-Code hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'addProduct');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'createFENotification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Am einfachsten eine config.php eines anderen Moduls kopieren und dessen Inhalt ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Damit registrieren wir zwei neue Hooks, die jedes mal aufgerufen werden, wenn ein Produkt dem Warenkorb hinzugefügt wird. Im Folgenden nun die Implementation der zwei registrierten Funktionen.&lt;br /&gt;
&lt;br /&gt;
In der IsotopeCartExt.php folgenden Code einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class IsotopeCartExt extends Model {&lt;br /&gt;
	public function addSuccess(){&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['messages']['add_success'] = array(&lt;br /&gt;
			'class'   =&amp;gt; 'add_success',&lt;br /&gt;
			'message' =&amp;gt; 'Produkt wurde dem Warenkorb hinzugefügt.'&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function createFENotification(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$objTempl = new FrontendTemplate('iso_notification');&lt;br /&gt;
		$objTempl-&amp;gt;messages = $_SESSION['ISOTOPE']['FE_NOTIFY']['messages'];&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['html'] = $objTempl-&amp;gt;parse();&lt;br /&gt;
		&lt;br /&gt;
		return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Templates &amp;amp; Isotope Box===&lt;br /&gt;
Nun ist es möglich die erstellten Session Objekte im Frontend zu verwenden. Wir verwenden dazu ein angepasstes Produktleser Template. Dazu einfach das entsprechende Template iso_reader_default.tpl von TL_ROOT/modules/Isotope/templates nach TL_ROOT/templates kopieren. Wenn das Template umbenannt wird, nicht vergessen im Produktleser Modul das umbenannte Template anzuwählen.&lt;br /&gt;
Folgende Zeilen am Anfang einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_SESSION['ISOTOPE']['FE_NOTIFY']['html'];&lt;br /&gt;
unset($_SESSION['ISOTOPE']['FE_NOTIFY']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Session-Variabel $_SESSION['ISOTOPE']['FE_NOTIFY']['html'] steckt das ganze gerenderte HTML der anzuzeigenden Nachricht. Allerdings noch nicht sichtbar. Mit Javascript lesen wir das HTMl aus und zeigen es in einer Isotope Box an. &lt;br /&gt;
Dazu anschliessend an den PHP-Code folgendes einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;
var notifyCtnr = jQuery(&amp;quot;#isotope_notify&amp;quot;); // in mootools use: $('isotope_notify');&lt;br /&gt;
if(notifyCtnr.length &amp;gt; 0){&lt;br /&gt;
    Isotope.displayBox(notifyCtnr.html());&lt;br /&gt;
}&lt;br /&gt;
// optional jQuey Code, enhance isotope box overlay close operation&lt;br /&gt;
$(&amp;quot;#iso_ajaxOverlay&amp;quot;).click(function(){&lt;br /&gt;
    Isotope.hideBox();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====CSS====&lt;br /&gt;
Mit optional markierte Zeilen bzw. Blöcke können weggelassen werden, ohne die Funktion einzuschränken.&lt;br /&gt;
Den Folgenden CSS Code direkt im Template einbinden, oder besser im CSS des Themes.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#iso_ajaxBox{&lt;br /&gt;
	z-index: 1000;&lt;br /&gt;
	line-height: 1.4em; /*optional*/&lt;br /&gt;
	width: 250px; /*optional*/&lt;br /&gt;
	padding: 20px !important; /*optional*/&lt;br /&gt;
	border: 2px solid #93BA13 !important; /*optional*/&lt;br /&gt;
	border-radius: 4px; /*optional*/&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_success{&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/help.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_fail{ /*optional*/&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/important.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox a.close{ /*optional*/&lt;br /&gt;
	color: black;&lt;br /&gt;
	text-decoration: underline;&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin-top: 20px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxOverlay{&lt;br /&gt;
	top: 0 !important;&lt;br /&gt;
	z-index: 999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback</id>
		<title>Isotope-Cart-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback"/>
				<updated>2011-07-24T16:28:27Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Templates &amp;amp; Isotope Box */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- begin Stub --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; border: 1px solid #8E0505; background-color: #F2F2F2&amp;quot;&lt;br /&gt;
| | [[Bild:msgError.png]] || &amp;lt;span class=&amp;quot;title&amp;quot;&amp;gt;'''Unvollständiger Artikel:'''&amp;lt;/span&amp;gt; dieser Artikel ist noch nicht sauber bearbeitet.&lt;br /&gt;
Bitte [{{fullurl:{{FULLPAGENAME}}|action=edit}} erweitere ihn] und entferne erst anschliessend diesen Hinweis.&amp;lt;includeonly&amp;gt;[[Category:Stub]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- end Stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
=Isotope-Basket - Feedback wenn neues Produkt im Warenkorb=&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Isotope Version (0.2.10 stable), wird dem Benutzer nach erfolgreichem Hinzufügen eines Produktes in den Warenkorb, keine Meldung angezeigt. Mit den Boardmitteln von contao und ein wenig Kreativität kann man das in wenigen Minuten ändern.&lt;br /&gt;
&lt;br /&gt;
==Variante1: Isotope Box und Hooks==&lt;br /&gt;
Wir erstellen zuerst ein neues Modul. In diesem Tutorial verwende ich den Modulnamen ''IsotopeExt''. Im Ordner TL_ROOT/system/modules erstellen wir folgende Verzeichnisse und Dateien: IsotopeExt/config/config.php, IsotopeExt/IsotopeCartExt.php&lt;br /&gt;
&lt;br /&gt;
===Backend Konfiguration===&lt;br /&gt;
Dieses Tutorial geht davon aus, dass im Isotope Produktleser Modul unter 'Add product jump to page' keine Seite angewählt ist. Die beschriebene Technik könnte aber auch dann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===PHP Konfiguration===&lt;br /&gt;
In der config/config.php folgenden PHP-Code hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'addProduct');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'createFENotification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Am einfachsten eine config.php eines anderen Moduls kopieren und dessen Inhalt ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Damit registrieren wir zwei neue Hooks, die jedes mal aufgerufen werden, wenn ein Produkt dem Warenkorb hinzugefügt wird. Im Folgenden nun die Implementation der zwei registrierten Funktionen.&lt;br /&gt;
&lt;br /&gt;
In der IsotopeCartExt.php folgenden Code einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class IsotopeCartExt extends Model {&lt;br /&gt;
	public function addSuccess(){&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['messages']['add_success'] = array(&lt;br /&gt;
			'class'   =&amp;gt; 'add_success',&lt;br /&gt;
			'message' =&amp;gt; 'Produkt wurde dem Warenkorb hinzugefügt.'&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function createFENotification(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$objTempl = new FrontendTemplate('iso_notification');&lt;br /&gt;
		$objTempl-&amp;gt;messages = $_SESSION['ISOTOPE']['FE_NOTIFY']['messages'];&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['html'] = $objTempl-&amp;gt;parse();&lt;br /&gt;
		&lt;br /&gt;
		return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Templates &amp;amp; Isotope Box===&lt;br /&gt;
Nun ist es möglich die erstellten Session Objekte im Frontend zu verwenden. Wir verwenden dazu ein angepasstes Produktleser Template. Dazu einfach das entsprechende Template iso_reader_default.tpl von TL_ROOT/modules/Isotope/templates nach TL_ROOT/templates kopieren. Wenn das Template umbenannt wird, nicht vergessen im Produktleser Modul das umbenannte Template anzuwählen.&lt;br /&gt;
Folgende Zeilen am Anfang einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_SESSION['ISOTOPE']['FE_NOTIFY']['html'];&lt;br /&gt;
unset($_SESSION['ISOTOPE']['FE_NOTIFY']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Session-Variabel $_SESSION['ISOTOPE']['FE_NOTIFY']['html'] steckt das ganze gerenderte HTML der anzuzeigenden Nachricht. Allerdings noch nicht sichtbar. Mit Javascript lesen wir das HTMl aus und zeigen es in einer Isotope Box an. &lt;br /&gt;
Dazu anschliessend an den PHP-Code folgendes einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascipt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;
var notifyCtnr = jQuery(&amp;quot;#isotope_notify&amp;quot;); // in mootools use: $('isotope_notify');&lt;br /&gt;
if(notifyCtnr.length &amp;gt; 0){&lt;br /&gt;
    Isotope.displayBox(notifyCtnr.html());&lt;br /&gt;
}&lt;br /&gt;
// optional jQuey Code, enhance isotope box overlay close operation&lt;br /&gt;
$(&amp;quot;#iso_ajaxOverlay&amp;quot;).click(function(){&lt;br /&gt;
    Isotope.hideBox();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====CSS====&lt;br /&gt;
Mit optional markierte Zeilen bzw. Blöcke können weggelassen werden, ohne die Funktion einzuschränken.&lt;br /&gt;
Den Folgenden CSS Code direkt im Template einbinden, oder besser im CSS des Themes.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#iso_ajaxBox{&lt;br /&gt;
	z-index: 1000;&lt;br /&gt;
	line-height: 1.4em; /*optional*/&lt;br /&gt;
	width: 250px; /*optional*/&lt;br /&gt;
	padding: 20px !important; /*optional*/&lt;br /&gt;
	border: 2px solid #93BA13 !important; /*optional*/&lt;br /&gt;
	border-radius: 4px; /*optional*/&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_success{&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/help.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_fail{ /*optional*/&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/important.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox a.close{ /*optional*/&lt;br /&gt;
	color: black;&lt;br /&gt;
	text-decoration: underline;&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin-top: 20px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxOverlay{&lt;br /&gt;
	top: 0 !important;&lt;br /&gt;
	z-index: 999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback</id>
		<title>Isotope-Cart-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback"/>
				<updated>2011-07-24T16:28:00Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- begin Stub --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; border: 1px solid #8E0505; background-color: #F2F2F2&amp;quot;&lt;br /&gt;
| | [[Bild:msgError.png]] || &amp;lt;span class=&amp;quot;title&amp;quot;&amp;gt;'''Unvollständiger Artikel:'''&amp;lt;/span&amp;gt; dieser Artikel ist noch nicht sauber bearbeitet.&lt;br /&gt;
Bitte [{{fullurl:{{FULLPAGENAME}}|action=edit}} erweitere ihn] und entferne erst anschliessend diesen Hinweis.&amp;lt;includeonly&amp;gt;[[Category:Stub]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- end Stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
=Isotope-Basket - Feedback wenn neues Produkt im Warenkorb=&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Isotope Version (0.2.10 stable), wird dem Benutzer nach erfolgreichem Hinzufügen eines Produktes in den Warenkorb, keine Meldung angezeigt. Mit den Boardmitteln von contao und ein wenig Kreativität kann man das in wenigen Minuten ändern.&lt;br /&gt;
&lt;br /&gt;
==Variante1: Isotope Box und Hooks==&lt;br /&gt;
Wir erstellen zuerst ein neues Modul. In diesem Tutorial verwende ich den Modulnamen ''IsotopeExt''. Im Ordner TL_ROOT/system/modules erstellen wir folgende Verzeichnisse und Dateien: IsotopeExt/config/config.php, IsotopeExt/IsotopeCartExt.php&lt;br /&gt;
&lt;br /&gt;
===Backend Konfiguration===&lt;br /&gt;
Dieses Tutorial geht davon aus, dass im Isotope Produktleser Modul unter 'Add product jump to page' keine Seite angewählt ist. Die beschriebene Technik könnte aber auch dann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===PHP Konfiguration===&lt;br /&gt;
In der config/config.php folgenden PHP-Code hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'addProduct');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'createFENotification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Am einfachsten eine config.php eines anderen Moduls kopieren und dessen Inhalt ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Damit registrieren wir zwei neue Hooks, die jedes mal aufgerufen werden, wenn ein Produkt dem Warenkorb hinzugefügt wird. Im Folgenden nun die Implementation der zwei registrierten Funktionen.&lt;br /&gt;
&lt;br /&gt;
In der IsotopeCartExt.php folgenden Code einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class IsotopeCartExt extends Model {&lt;br /&gt;
	public function addSuccess(){&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['messages']['add_success'] = array(&lt;br /&gt;
			'class'   =&amp;gt; 'add_success',&lt;br /&gt;
			'message' =&amp;gt; 'Produkt wurde dem Warenkorb hinzugefügt.'&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function createFENotification(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$objTempl = new FrontendTemplate('iso_notification');&lt;br /&gt;
		$objTempl-&amp;gt;messages = $_SESSION['ISOTOPE']['FE_NOTIFY']['messages'];&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['html'] = $objTempl-&amp;gt;parse();&lt;br /&gt;
		&lt;br /&gt;
		return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Templates &amp;amp; Isotope Box===&lt;br /&gt;
Nun ist es möglich die erstellten Session Objekte im Frontend zu verwenden. Wir verwenden dazu ein angepasstes Produktleser Template. Dazu einfach das entsprechende Template iso_reader_default.tpl von TL_ROOT/modules/Isotope/templates nach TL_ROOT/templates kopieren. Wenn das Template umbenannt wird, nicht vergessen im Produktleser Modul das umbenannte Template anzuwählen.&lt;br /&gt;
Folgende Zeilen am Anfang einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_SESSION['ISOTOPE']['FE_NOTIFY']['html'];&lt;br /&gt;
unset($_SESSION['ISOTOPE']['FE_NOTIFY']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Session-Variabel $_SESSION['ISOTOPE']['FE_NOTIFY']['html'] steckt das ganze gerenderte HTML der anzuzeigenden Nachricht. Allerdings noch nicht sichtbar. Mit Javascript lesen wir das HTMl aus und zeigen es in einer Isotope Box an. &lt;br /&gt;
Dazu anschliessend an den PHP-Code folgendes einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascipt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;
var notifyCtnr = jQuery(&amp;quot;#isotope_notify&amp;quot;); // in mootools use: $('isotope_notify');&lt;br /&gt;
if(notifyCtnr.length &amp;gt; 0){&lt;br /&gt;
    Isotope.displayBox(notifyCtnr.html());&lt;br /&gt;
}&lt;br /&gt;
// optional jQuey Code, enhance isotope box overlay close operation&lt;br /&gt;
$(&amp;quot;#iso_ajaxOverlay&amp;quot;).click(function(){&lt;br /&gt;
    Isotope.hideBox();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====CSS====&lt;br /&gt;
Mit optional markierte Zeilen bzw. Blöcke können weggelassen werden, ohne die Funktion einzuschränken.&lt;br /&gt;
Den Folgenden CSS Code direkt im Template einbinden, oder besser im CSS des Themes.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#iso_ajaxBox{&lt;br /&gt;
	z-index: 1000;&lt;br /&gt;
	line-height: 1.4em; /*optional*/&lt;br /&gt;
	width: 250px; /*optional*/&lt;br /&gt;
	padding: 20px !important; /*optional*/&lt;br /&gt;
	border: 2px solid #93BA13 !important; /*optional*/&lt;br /&gt;
	border-radius: 4px; /*optional*/&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_success{&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/help.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox .add_fail{ /*optional*/&lt;br /&gt;
	background: url(&amp;quot;../../system/themes/default/images/important.gif&amp;quot;) no-repeat scroll right center #FFFFFF;&lt;br /&gt;
	padding-right: 50px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxBox a.close{ /*optional*/&lt;br /&gt;
	color: black;&lt;br /&gt;
	text-decoration: underline;&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin-top: 20px;&lt;br /&gt;
}&lt;br /&gt;
#iso_ajaxOverlay{&lt;br /&gt;
	top: 0 !important;&lt;br /&gt;
	z-index: 999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback</id>
		<title>Isotope-Cart-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback"/>
				<updated>2011-07-24T16:20:23Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- begin Stub --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; border: 1px solid #8E0505; background-color: #F2F2F2&amp;quot;&lt;br /&gt;
| | [[Bild:msgError.png]] || &amp;lt;span class=&amp;quot;title&amp;quot;&amp;gt;'''Unvollständiger Artikel:'''&amp;lt;/span&amp;gt; dieser Artikel ist noch nicht sauber bearbeitet.&lt;br /&gt;
Bitte [{{fullurl:{{FULLPAGENAME}}|action=edit}} erweitere ihn] und entferne erst anschliessend diesen Hinweis.&amp;lt;includeonly&amp;gt;[[Category:Stub]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- end Stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
=Isotope-Basket - Feedback wenn neues Produkt im Warenkorb=&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Isotope Version (0.2.10 stable), wird dem Benutzer nach erfolgreichem Hinzufügen eines Produktes in den Warenkorb, keine Meldung angezeigt. Mit den Boardmitteln von contao und ein wenig Kreativität kann man das in wenigen Minuten ändern.&lt;br /&gt;
&lt;br /&gt;
==Variante1: Isotope Box und Hooks==&lt;br /&gt;
Wir erstellen zuerst ein neues Modul. In diesem Tutorial verwende ich den Modulnamen ''IsotopeExt''. Im Ordner TL_ROOT/system/modules erstellen wir folgende Verzeichnisse und Dateien: IsotopeExt/config/config.php, IsotopeExt/IsotopeCartExt.php&lt;br /&gt;
&lt;br /&gt;
===Backend Konfiguration===&lt;br /&gt;
Dieses Tutorial geht davon aus, dass im Isotope Produktleser Modul unter 'Add product jump to page' keine Seite angewählt ist. Die beschriebene Technik könnte aber auch dann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===PHP Konfiguration===&lt;br /&gt;
In der config/config.php folgenden PHP-Code hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'addProduct');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'createFENotification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Am einfachsten eine config.php eines anderen Moduls kopieren und dessen Inhalt ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Damit registrieren wir zwei neue Hooks, die jedes mal aufgerufen werden, wenn ein Produkt dem Warenkorb hinzugefügt wird. Im Folgenden nun die Implementation der zwei registrierten Funktionen.&lt;br /&gt;
&lt;br /&gt;
In der IsotopeBasket.php folgenden Code einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class IsotopeCartExt extends Model {&lt;br /&gt;
	public function addSuccess(){&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['messages']['add_success'] = array(&lt;br /&gt;
			'class'   =&amp;gt; 'add_success',&lt;br /&gt;
			'message' =&amp;gt; 'Produkt wurde dem Warenkorb hinzugefügt.'&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function createFENotification(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$objTempl = new FrontendTemplate('iso_notification');&lt;br /&gt;
		$objTempl-&amp;gt;messages = $_SESSION['ISOTOPE']['FE_NOTIFY']['messages'];&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['html'] = $objTempl-&amp;gt;parse();&lt;br /&gt;
		&lt;br /&gt;
		return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Templates &amp;amp; Isotope Box===&lt;br /&gt;
Nun ist es möglich die erstellten Session Objekte im Frontend zu verwenden. Wir verwenden dazu ein angepasstes Produktleser Template. Dazu einfach das entsprechende Template iso_reader_default.tpl von TL_ROOT/modules/Isotope/templates nach TL_ROOT/templates kopieren. Wenn das Template umbenannt wird, nicht vergessen im Modul das umbenannte Template anzuwählen.&lt;br /&gt;
Folgende Zeilen am Anfang einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_SESSION['ISOTOPE']['FE_NOTIFY']['html'];&lt;br /&gt;
unset($_SESSION['ISOTOPE']['FE_NOTIFY']);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Session-Variabel $_SESSION['ISOTOPE']['FE_NOTIFY']['html'] steckt das ganze gerenderte HTML der anzuzeigenden Nachricht. Allerdings noch nicht sichtbar. Mit Javascript lesen wir das HTMl aus und zeigen es in einer Isotope Box an. &lt;br /&gt;
Dazu gleich anschliessend an den PHP-Code folgendes einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascipt&amp;quot;&amp;gt;&lt;br /&gt;
var notifyCtnr = jQuery(&amp;quot;#isotope_notify&amp;quot;); // in mootools use: $('isotope_notify');&lt;br /&gt;
if(notifyCtnr.length &amp;gt; 0){&lt;br /&gt;
    Isotope.displayBox(notifyCtnr.html());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback</id>
		<title>Isotope-Cart-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback"/>
				<updated>2011-07-24T16:07:58Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: hat „Isotope-Basket-ProductAddedFeedback“ nach „Isotope-Cart-ProductAddedFeedback“ verschoben:&amp;amp;#32;Naming Conventions von Isotope berücksichtigen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- begin Stub --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; border: 1px solid #8E0505; background-color: #F2F2F2&amp;quot;&lt;br /&gt;
| | [[Bild:msgError.png]] || &amp;lt;span class=&amp;quot;title&amp;quot;&amp;gt;'''Unvollständiger Artikel:'''&amp;lt;/span&amp;gt; dieser Artikel ist noch nicht sauber bearbeitet.&lt;br /&gt;
Bitte [{{fullurl:{{FULLPAGENAME}}|action=edit}} erweitere ihn] und entferne erst anschliessend diesen Hinweis.&amp;lt;includeonly&amp;gt;[[Category:Stub]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- end Stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
=Isotope-Basket - Feedback wenn neues Produkt im Warenkorb=&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Isotope Version (0.2.10 stable), wird dem Benutzer nach erfolgreichem Hinzufügen eines Produktes in den Warenkorb, keine Meldung angezeigt. Mit den Boardmitteln von contao und ein wenig Kreativität kann man das in wenigen Minuten ändern.&lt;br /&gt;
&lt;br /&gt;
==Variante1: Isotope Box und Hooks==&lt;br /&gt;
Wir erstellen zuerst ein neues Modul. In diesem Tutorial verwende ich den Modulnamen ''IsotopeExt''. Im Ordner TL_ROOT/system/modules erstellen wir folgende Verzeichnisse und Dateien: IsotopeExt/config/config.php, IsotopeExt/IsotopeCartExt.php&lt;br /&gt;
&lt;br /&gt;
===PHP Konfiguration===&lt;br /&gt;
In der config/config.php folgenden PHP-Code hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'addProduct');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'createFENotification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Am einfachsten eine config.php eines anderen Moduls kopieren und dessen Inhalt ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Damit registrieren wir zwei neue Hooks, die jedes mal aufgerufen werden, wenn ein Produkt dem Warenkorb hinzugefügt wird. Im Folgenden nun die Implementation der zwei registrierten Funktionen.&lt;br /&gt;
&lt;br /&gt;
In der IsotopeBasket.php folgenden Code einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class IsotopeCartExt extends Model {&lt;br /&gt;
	public function addSuccess(){&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['messages']['add_success'] = array(&lt;br /&gt;
			'class'   =&amp;gt; 'add_success',&lt;br /&gt;
			'message' =&amp;gt; 'Produkt wurde dem Warenkorb hinzugefügt.'&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function createFENotification(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$objTempl = new FrontendTemplate('iso_notification');&lt;br /&gt;
		$objTempl-&amp;gt;messages = $_SESSION['ISOTOPE']['FE_NOTIFY']['messages'];&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['html'] = $objTempl-&amp;gt;parse();&lt;br /&gt;
		&lt;br /&gt;
		return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Templates===&lt;br /&gt;
Nun ist es möglich die erstellten Session Objekte im Frontend zu verwenden.&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Basket-ProductAddedFeedback</id>
		<title>Isotope-Basket-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Basket-ProductAddedFeedback"/>
				<updated>2011-07-24T16:07:58Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: hat „Isotope-Basket-ProductAddedFeedback“ nach „Isotope-Cart-ProductAddedFeedback“ verschoben:&amp;amp;#32;Naming Conventions von Isotope berücksichtigen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[Isotope-Cart-ProductAddedFeedback]]&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback</id>
		<title>Isotope-Cart-ProductAddedFeedback</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope-Cart-ProductAddedFeedback"/>
				<updated>2011-07-24T16:06:54Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: Die Seite wurde neu angelegt: „&amp;lt;!-- begin Stub --&amp;gt; &amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt; {| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; borde…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- begin Stub --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;stub&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom:30px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align: left; color:#B65C5C; border: 1px solid #8E0505; background-color: #F2F2F2&amp;quot;&lt;br /&gt;
| | [[Bild:msgError.png]] || &amp;lt;span class=&amp;quot;title&amp;quot;&amp;gt;'''Unvollständiger Artikel:'''&amp;lt;/span&amp;gt; dieser Artikel ist noch nicht sauber bearbeitet.&lt;br /&gt;
Bitte [{{fullurl:{{FULLPAGENAME}}|action=edit}} erweitere ihn] und entferne erst anschliessend diesen Hinweis.&amp;lt;includeonly&amp;gt;[[Category:Stub]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- end Stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
=Isotope-Basket - Feedback wenn neues Produkt im Warenkorb=&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Isotope Version (0.2.10 stable), wird dem Benutzer nach erfolgreichem Hinzufügen eines Produktes in den Warenkorb, keine Meldung angezeigt. Mit den Boardmitteln von contao und ein wenig Kreativität kann man das in wenigen Minuten ändern.&lt;br /&gt;
&lt;br /&gt;
==Variante1: Isotope Box und Hooks==&lt;br /&gt;
Wir erstellen zuerst ein neues Modul. In diesem Tutorial verwende ich den Modulnamen ''IsotopeExt''. Im Ordner TL_ROOT/system/modules erstellen wir folgende Verzeichnisse und Dateien: IsotopeExt/config/config.php, IsotopeExt/IsotopeCartExt.php&lt;br /&gt;
&lt;br /&gt;
===PHP Konfiguration===&lt;br /&gt;
In der config/config.php folgenden PHP-Code hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'addProduct');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['iso_addProductToCollection'][] 		= array('IsotopeCartExt', 'createFENotification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(Am einfachsten eine config.php eines anderen Moduls kopieren und dessen Inhalt ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Damit registrieren wir zwei neue Hooks, die jedes mal aufgerufen werden, wenn ein Produkt dem Warenkorb hinzugefügt wird. Im Folgenden nun die Implementation der zwei registrierten Funktionen.&lt;br /&gt;
&lt;br /&gt;
In der IsotopeBasket.php folgenden Code einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class IsotopeCartExt extends Model {&lt;br /&gt;
	public function addSuccess(){&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['messages']['add_success'] = array(&lt;br /&gt;
			'class'   =&amp;gt; 'add_success',&lt;br /&gt;
			'message' =&amp;gt; 'Produkt wurde dem Warenkorb hinzugefügt.'&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public function createFENotification(IsotopeProduct $objProduct, $intQuantity){&lt;br /&gt;
		$objTempl = new FrontendTemplate('iso_notification');&lt;br /&gt;
		$objTempl-&amp;gt;messages = $_SESSION['ISOTOPE']['FE_NOTIFY']['messages'];&lt;br /&gt;
		$_SESSION['ISOTOPE']['FE_NOTIFY']['html'] = $objTempl-&amp;gt;parse();&lt;br /&gt;
		&lt;br /&gt;
		return $intQuantity;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Templates===&lt;br /&gt;
Nun ist es möglich die erstellten Session Objekte im Frontend zu verwenden.&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Xampp_Multidomain</id>
		<title>Xampp Multidomain</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Xampp_Multidomain"/>
				<updated>2011-05-30T10:50:00Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Verwenden von gmail als Mail-Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin_HOWTOS]]&lt;br /&gt;
[[Category:Installation_und_Updates]]&lt;br /&gt;
[[Category:Sonstiges]]&lt;br /&gt;
Dieses Tutorial beschreibt die Einrichtung einer lokalen Entwicklungsumgebung mit XAMPP für mehrere parallele oder mehrsprachige Contao Installationen.&lt;br /&gt;
&lt;br /&gt;
=Einrichtung=&lt;br /&gt;
Bei dieser Anleitung wird mit einem portablen [http://www.apachefriends.org/de/xampp.html XAMPP] Zip-Paket in Windows gearbeitet (aktuelle Version: 1.7.3). XAMPP steht für Apache, MySQL, PHP und Pearl und stellt somit ein vorkonfiguriertes Webserver-Paket bereit. Neben den eigentlichen Servern bringt XAMPP auch ein paar nette Konfigurationstools wie den PhpMyAdmin oder einen Mailserver mit. Die Pakete gibt es für Windows, Linux sowie für den Mac.&lt;br /&gt;
&lt;br /&gt;
Das Zip-Paket wird in C:\webdev entpackt, was auch ausdrücklich empfohlen wird. Gerade bei Verzeichnissen mit Leer- oder Sonderzeichen (z. B. C:\Program Files\xampp) könnte es später zu Problemen kommen. Nach dem Entpacken ruft man die Datei ''C:\webdev\xampp\setup_xampp.bat'', welche die Konfiguration von XAMPP übernimmt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;200&amp;quot; heights=&amp;quot;300&amp;quot;caption=&amp;quot;XAMPP Setup Script&amp;quot;&amp;gt;&lt;br /&gt;
  Datei:xampp-setup-1.png|Setupscript Screen 1&lt;br /&gt;
  Datei:xampp-setup-2.png|Setupscript Screen 2&lt;br /&gt;
  Datei:xampp-setup-3.png|Setupscript Screen 3&lt;br /&gt;
  Datei:xampp-setup-4.png|Setupscript Screen 4&lt;br /&gt;
  Datei:xampp-setup-5.png|Setupscript Screen 5&lt;br /&gt;
  Datei:xampp-setup-6.png|Setupscript Screen 6&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Konfiguration wird das Setup-Script mit Eingabe eines ''x'' beendet. &lt;br /&gt;
&lt;br /&gt;
Anschließend ruft man die Datei ''C:\webdev\xampp\xampp-contol.exe'' auf und startet die Module ''Apache'', ''MySQL'' und ''Mercury''.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-controlpanel.png|Controlpanel]]&lt;br /&gt;
&lt;br /&gt;
Wenn alle Module gestartet sind, wird dieser Status im Control Panel angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-controlpanelstarted.png|Controlpanel mit gestarteten Modulen]]&lt;br /&gt;
&lt;br /&gt;
Ruft man jetzt die Adresse ''&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;'' im Browser auf, sollte man das XAMPP-Logo mit einer Sprachauswahl sehen. Nach Auswahl der entsprechenden Sprache erscheint die eigentliche XAMPP-Seite, bei der unter dem Menüpunkt ''Status'' Informationen über einzelne Module ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-status.png|XAMPP Status]]&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier nur, dass MySQL und PHP AKTIVIERT ist. Der Menüpunkt ''phpinfo()'' zeigt viele Informationen über die installierte PHP-Version und deren Module an; hier sollte eine Version ab 5.2 zu sehen sein.&lt;br /&gt;
&lt;br /&gt;
Zum Schluss sollte man noch über die Seite ''&amp;lt;nowiki&amp;gt;http://localhost/security/xamppsecurity.php&amp;lt;/nowiki&amp;gt;''  das ROOT-Passwort für den MySQL-Server setzen. Nebenbei kann man auch das XAMPP-Verzeichnis mit einem Passwortschutz versehen. Diese Aktionen sind zwar für die Funktionalität nicht zwingend nötig, aber aus Sicherheitsgründen zu empfehlen. ''&amp;quot;Paranoia is applied security&amp;quot;'' …  Nach dem Ändern des Passwortes muss über das XAMPP Control Panel der MySQL-Server neu gestartet werden, damit die Passwortänderung wirksam wird.&lt;br /&gt;
&lt;br /&gt;
=Installation einer Contao Umgebung=&lt;br /&gt;
Um Contao installieren zu können, muss zuerst ein Contao-Paket von der [http://www.contao.org/herunterladen.html Projekt-Homepage] heruntergeladen und in das Verzeichnis ''C:\webdev\xampp\htdocs\contao'' entpackt werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anschließend wird über die Adresse ''&amp;lt;nowiki&amp;gt;http://localhost/phpmyadmin/&amp;lt;/nowiki&amp;gt;'' eine neue Datenbank inkl. neuen Datenbank-Benutzer angelegt. Aus Sicherheitsgründen sollte man für die Datenbank den ROOT-Benutzer nicht verwenden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Über den Reiter ''Rechte'' kommt man zur Benutzerübersicht. In dieser Übersicht findet man einen Button ''Neuen Benutzer hinzufügen''. Hier kann man sehr bequem einen Benutzer samt Datenbank anlegen. Als Host wählt man immer ''Lokal'', da Webserver und Datenbanksystem auf dem selben Rechner laufen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-newdbuser.png|Neuen Datenbank Benutzer inkl. Datenbank erstellen]]&lt;br /&gt;
&lt;br /&gt;
Jetzt kann mit der [[Installation]] von Contao begonnen werden.&lt;br /&gt;
&lt;br /&gt;
Im Grunde könnte man auf diese Art beliebig viele Contao-Umgebungen parallel betreiben, natürlich in jeweils verschiedenen Verzeichnissen. Hier bestehen aber zwei grundsätzliche Probleme:&lt;br /&gt;
*Contao ist in einem Unterverzeichnis installiert, was an einigen Stellen zu Problemen führen kann. Contao ist hier aber sehr kulant.&lt;br /&gt;
*Auf diese Art ist pro Contao-Umgebung nur eine Seite realisierbar.&lt;br /&gt;
&lt;br /&gt;
=Ausbau auf verschiedene Hostnamen=&lt;br /&gt;
Um die oben genannten Probleme zu beheben, kann für jede Contao Umgebung ein eigener Hostnamen angelegt werden, also ein Alias zu ''localhost''. Hostnamen sind für den Menschen da und werden vom Betriebssystem automatisch zu einer IP-Adresse aufgelöst. Der ''localhost'' ist dabei voreingestellt und zeigt immer auf ''127.0.0.1'', was per Definition immer der Computer ist, auf dem die Auflösung statt findet. Diese Zuordnung macht sich der Webserver zu nutze und unterscheidet damit die verschiedenen Websites.&lt;br /&gt;
&lt;br /&gt;
==hosts-Datei==&lt;br /&gt;
Es gibt verschieden Instanzen der Namensauflösung, der erste Schritt hierbei ist in jedem Fall die sogenannte hosts-Datei, welche in jedem System existiert und erst wenn hier keine Entsprechung gefunden werden konnten, werden weitere DNS-Server befragt.&lt;br /&gt;
&lt;br /&gt;
Um nun eigene Hostnamen für die IP ''127.0.0.1'' einzurichten, öffnet man mit einem Editor die Datei hosts (ohne Endung), welche bei &lt;br /&gt;
*Windows unter C:\WINDOWS\system32\drivers\etc\&lt;br /&gt;
*Linux und Mac unter /etc/&lt;br /&gt;
zu finden ist. Um die Datei zu ändern, sind Administrator bzw. ROOT Rechte notwendig.&lt;br /&gt;
&lt;br /&gt;
Für jede Hostnamen&amp;lt;-&amp;gt;IP-Adresse-Kombination steht eine Zeile, wobei die Hostnamen eindeutig sein müssen. Es dürfen also keine zwei identische Hostnamen auf eine IP-Adresse zeigen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-hosts.png|Datei hosts bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Öffnet man nun eine der neu angelegten Hostnamen im Browser, z.B. ''&amp;lt;nowiki&amp;gt;http://xampp&amp;lt;/nowiki&amp;gt;'', dann sollte die gleiche Ausgabe wie bei Aufruf von ''&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;'' erscheinen. Bei der Wahl der Hostnamen sollte man darauf achten, dass keine Überschneidung mit reell existierenden Domains entstehen. Trägt man beispielsweise &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
127.0.0.1		www.contao.org&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in die hosts-Datei ein, wird man von nun ab den lokalen Webserver unter der Adresse www.contao.org erreichen, und nicht mehr die Contao-Website.&amp;lt;br /&amp;gt;&lt;br /&gt;
Es gibt einige spezielle hosts-Editoren, die das Editieren erleichtern sollen. Google weiß mehr darüber.&lt;br /&gt;
&lt;br /&gt;
==vHost-Konfiguration==&lt;br /&gt;
Um die verschiedenen Hostnamen den unterschiedlichen Contao-Umgebungen zuzuweisen, muss der Webserver entsprechend konfiguriert werden. Über die sogenannten virtuellen Hosts pflegt der Apache die Unterscheidung zwischen den einzelnen Umgebungen.&lt;br /&gt;
&lt;br /&gt;
Hierzu stellt XAMPP die Konfigurationsdatei ''C:\webdev\xampp\apache\conf\extra\httpd-vhosts.conf'' bereit, die ebenfalls per Editor bearbeitet wird.&lt;br /&gt;
Man kann hier die Gelegenheit nutzen, um das htdocs-Verzeichnis mit den Contao-Dateien an einen anderen Ort zu legen, z.B. ''C:\webdev\webfiles''. Die restlichen XAMPP-htdocs sollte man unberührt lassen.&lt;br /&gt;
&lt;br /&gt;
Zuerst muss man den Apache anweisen, virtuelle Hosts über die Hostnamen aufzulösen. Dazu wird das Kommentarzeichen vor ''NameVirtualHost'' entfernt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Use name-based virtual hosting.&lt;br /&gt;
#&lt;br /&gt;
NameVirtualHost *:80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Zugriffsrechte für das Web-Verzeichnis schränken wir entsprechend ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Zugriff auf das webfiles-Verzeichnis nur vom lokalen Rechner zulassen&lt;br /&gt;
&amp;lt;Directory C:/webdev/webfiles&amp;gt;&lt;br /&gt;
    Order deny,allow&lt;br /&gt;
    Allow from 127.0.0.1&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt erstellt man den ersten vHost-Eintrag. Diesen benutzt man für das normale ''localhost''-Verhalten. Es sollen also einfach alle Dateien aufgelistet werden. Da dies der erste vHost-Eintrag ist, erhält er auch eine Sonderstellung. Passt kein anderer vHost-Eintrag auf die Anfrage, wird dieser stellvertretend benutzt.&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Gimmik ist das Rewrite-Script. Es dient dazu, Subdomains auf Verzeichnisse abzubilden. Beispielweise wird die Anfrage ''&amp;lt;nowiki&amp;gt;http://verzeichnis.local/index.php&amp;lt;/nowiki&amp;gt;'' auf die Datei ''C:\webdev\webfiles\*verzeichnis*\index.php'' abgebildet. Dies hat den großen Vorteil, dass ein neuer Subdomain-vHost ohne Anpassung der Serverkonfiguration erstellt werden kann. Es muss lediglich das Verzeichnis erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
### Default vHost&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    DocumentRoot C:/webdev/webfiles&lt;br /&gt;
    ServerName localhost&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;Directory C:/webdev/webfiles&amp;gt;&lt;br /&gt;
        Options +Indexes&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # Der vHost soll auch alle Anfragen annehmen, die mit &amp;quot;.local&amp;quot; enden.&lt;br /&gt;
    ServerAlias *.local  &lt;br /&gt;
&lt;br /&gt;
    # Script zur Umleitung in das Verzeichnis, welches über dem Präfix von &amp;quot;.local&amp;quot; referenziert wird&lt;br /&gt;
    # Bsp.: neu.local nutzt als DocumentRoot C:/webdev/webfiles/neu&lt;br /&gt;
    UseCanonicalName Off&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteCond %{HTTP_HOST}            ^[^.]+\.local$&lt;br /&gt;
    RewriteCond %{REQUEST_URI}          !^/icons&lt;br /&gt;
    RewriteRule ^(.+)                   %{HTTP_HOST}$1      [C]&lt;br /&gt;
    RewriteRule ^([^.]+)\.local(.*)     C:/webdev/webfiles/$1$2&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun wird ein vHost zum Zugriff auf die XAMPP-Weboberfläche erstellt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
### XAMPP vHost&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    DocumentRoot c:/webdev/xampp/htdocs&lt;br /&gt;
    ServerName xampp&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein vHost zum Zugriff auf eine Contao-Umgebung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
### contao vHost&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    DocumentRoot c:/webdev/webfiles/contao&lt;br /&gt;
    ServerName contao&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese vHost dient zum Zugriff auf das Verzeichnis multilang. Man achte auf den ServerAlias, welcher es ermöglicht, beliebige Subdomain-Hostnamen der Form xxx.multilang anzulagen (de.multilang, en.multilang,...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
### multilang vHost&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    DocumentRoot c:/webdev/webfiles/multilang&lt;br /&gt;
    ServerName multilang&lt;br /&gt;
    ServerAlias *.multilang&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusammenfassung der Syntax:&lt;br /&gt;
*Ein &amp;amp;lt;VirtualHost *:80&amp;amp;gt;-Block pro vHost&lt;br /&gt;
*''ServerName'' gibt den verwendeten Hostnamen an&lt;br /&gt;
*''ServerAlias'' gibt weitere Hostnamen an, für die dieser vHost gilt. Hier sind Wildcards erlaubt&lt;br /&gt;
*''DocumentRoot'' steht für das physische Verzeichnis der Dateien&lt;br /&gt;
&lt;br /&gt;
Natürlich gibt es noch eine Vielzahl weiterer Konfigurationsoptionen, diese können in der [http://httpd.apache.org/docs/ Apache-Dokumentation] nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Nachdem die Datei angepasst wurde, wird der Syntax in der Eingabeaufforderung mit ''httpd.exe -S'' überprüft (unter C:\webdev\xampp\apache\bin). Sind keine Fehler aufgetreten, kann der Webserver über das XAMPP Control Panel neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt sollten folgende vHost aktiv sein:&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;'' -&amp;gt; ''C:\webdev\webfiles'' - Mit Auflistung des Inhalts. Praktisch, wenn man für etwas Kleines keinen extra vHost anlegen möchte.&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://contao&amp;lt;/nowiki&amp;gt;'' -&amp;gt; ''C:\webdev\webfiles\contao''&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://[ordner].local&amp;lt;/nowiki&amp;gt;'' -&amp;gt; C:\webdev\webfiles\[ordner] - wobei [ordner] beliebig sein kann, es darf nur kein Punkt oder Sonderzeichen enthalten sein. Damit hat man praktisch einen Wildcard-vHost ohne wirklich die Serverkonfiguration ändern zu müssen. '''Wichtig:''' ''[ordner].local'' muss auch in der hosts-Datei notiert werden.&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://xampp&amp;lt;/nowiki&amp;gt;'' -&amp;gt; ''C:\webdev\xampp\htdocs'' - Über diesen vHost kann man auf die XAMPP-Weboberfläche zugreifen.&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://*.multilang&amp;lt;/nowiki&amp;gt;'' -&amp;gt; ''C:\webdev\webfiles\mutlilang'', auch hier kann man als Subdomain alles angeben, was man in der Hosts-Datei notiert hat. Besonderheit zum oberen Beispiel: Es wird immer das selbe Verzeichnis und damit die selbe Contao-Umgebung referenziert. Damit kann man also mehrsprachige oder mehrseitige Auftritte erstellen.&lt;br /&gt;
&lt;br /&gt;
=Sicherheitseinstellungen - Apache=&lt;br /&gt;
Abschließend werden noch ein paar Einstellungen zur Sicherheit vorgenommen.&lt;br /&gt;
&lt;br /&gt;
==Zugriff von außen sperren==&lt;br /&gt;
In der Datei ''C:\webdev\xampp\apache\conf\httpd.conf'' befindet sich ab der Zeile 42:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Change this to Listen on specific IP addresses as shown below to &lt;br /&gt;
# prevent Apache from glomming onto all bound IP addresses.&lt;br /&gt;
#&lt;br /&gt;
#Listen 0.0.0.0:80&lt;br /&gt;
#Listen [::]:80&lt;br /&gt;
Listen 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ändert man den ''Listen''-Wert auf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Listen 127.0.0.1:80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das veranlasst den Apache nur noch Verbindungen über das ''localhost''-Interface anzunehmen und keine Verbindungen, die über das Netzwerk von anderen Computer kommen.&lt;br /&gt;
&lt;br /&gt;
In der Datei ''C:\webdev\xampp\apache\conf\extra\httpd-ssl.conf'' steht die Einstellung für HTTPS, also verschlüsselte Seiten. Hier muss in Zeile 41&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Listen 443&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Listen 127.0.0.1:443&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
geändert werden.&lt;br /&gt;
&lt;br /&gt;
=Sicherheitseinstellungen - MySQL=&lt;br /&gt;
Auch dem MySQL-Server verbietet man den Zugriff von außen. In die Datei ''C:\webdev\xampp\mysql\bin\my.ini'' fügt man folgenden Zeile unter der Sektion ''[mysqld]'' ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 bind-address = 127.0.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sieht die Konfigurationsdatei ab Zeile 27 so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# The MySQL server&lt;br /&gt;
[mysqld]&lt;br /&gt;
basedir                 = &amp;quot;/webdev/xampp/mysql/&amp;quot;&lt;br /&gt;
datadir                 = &amp;quot;/webdev/xampp/mysql/data/&amp;quot;&lt;br /&gt;
port		            = 3306&lt;br /&gt;
socket		            = &amp;quot;MySQL&amp;quot;&lt;br /&gt;
skip-locking&lt;br /&gt;
key_buffer              = 16M&lt;br /&gt;
max_allowed_packet      = 1M&lt;br /&gt;
table_cache             = 64&lt;br /&gt;
sort_buffer_size        = 512K&lt;br /&gt;
net_buffer_length       = 8K&lt;br /&gt;
read_buffer_size        = 256K&lt;br /&gt;
read_rnd_buffer_size    = 512K&lt;br /&gt;
myisam_sort_buffer_size = 8M&lt;br /&gt;
bind-address = 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
default-time-zone       = &amp;quot;Europe/Paris&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Neustart des MySQL-Servers macht die Konfiguration aktiv.&lt;br /&gt;
&lt;br /&gt;
=.htaccess=&lt;br /&gt;
Standardmässig ist die Datei ''.htaccess'' nicht in der Contao-Installation aktiv. Es liegt jedoch eine vorbereitete Datei bereit; sie lautet ''.htaccess.default''. Diese muss in ''.htaccess'' umbenannt werden. Die Datei ''.htaccess'' aus dem Basisverzeichnis der Contao-Installation dient hauptsächlich dazu, schönere URLs zu erzeugen. Damit das Rewriting von Webserver entsprechend ausgeführt werden kann, muss die Option ''RewriteBase'' angepasst werden. Sie besagt, in welchem Unterverzeichnis die Installation bezüglich der Domain liegt. Hat man das System in einem Unterverzeichnis installiert (''&amp;lt;nowiki&amp;gt;http://localhost/contao/&amp;lt;/nowiki&amp;gt;''), dann muss die ''RewriteBase'' auf ''/contao/'' geändert werden. Die veränderte ''.htaccess'' sieht dann ab Zeile 39 wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  # Uncomment the following line to set the RewriteBase.&lt;br /&gt;
  ##&lt;br /&gt;
  RewriteBase /contao/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Mercury - Mailserver=&lt;br /&gt;
Damit man auch die Mailfunktionalität von Contao lokal testen kann, bedarf es einem Mailserver. Diesen bringt XAMPP in Form von Mercury-Mail mit.&lt;br /&gt;
&lt;br /&gt;
Über das ''XAMPP Control Panel'' wird dei Mailserver gestartet und per klick auf ''Admin'' öffnet sich die Mercury-Verwaltungsoberfläche.&lt;br /&gt;
Da nur ein SMTP-Server (für den Mailversand) und ein POP3-Server (für den Mailempfang) benötigt werden, deaktiviert man alle anderen Dienste von Mercury. Das wird über den Button ''Configuration - Protocol modules'' erledigt, wo alle Haken bis auf SMTP und POP3 entfernt werden:&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;caption=&amp;quot;Mercury Security Settings&amp;quot;&amp;gt;&lt;br /&gt;
  Datei:xampp-mercury.png|Mercury Admin Page&lt;br /&gt;
  Datei:xampp-mercuryprotocolmodules.png|Mercury Protocol Modules&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Nun den Mercury-Server über das ''XAMPP Control Panel'' neustarten.&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie für den Apache veranlasst man auch Mercury nur Verbindungen vom ''localhost'' anzunehmen. Über ''Configuration - Mercury SMTP Server'' erreicht man die Einstellungen und unter anderem das Feld ''IP Interface to use'', was auf 127.0.0.1 zu setzen ist:&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-mercurysmtp.png|Mercury SMTP Server]]&lt;br /&gt;
&lt;br /&gt;
Analog für den POP3-Server unter ''Configuration - Mercury POP3 Server'':&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-mercurypop3.png|Mercury PPOP3 Server]]&lt;br /&gt;
&lt;br /&gt;
Um nun Mails empfangen zu können muss noch ein Mailbenutzer in Mercury angelegt werden. Unter ''Configuration - Manage local users'' kann man beliebige Mailkonten anlegen, an welche man dann per Contao Mails schicken kann. Am besten ändert man hierfür den schon angelegten ''newuser'' ab.&lt;br /&gt;
&lt;br /&gt;
Damit die E-Mails auch abgeholt werden, richtet man sich das neue E-Mail Konto in einem Mailclient ein, beispielsweise Outlook Express. Die Logindaten hierfür sind:&lt;br /&gt;
* POP3-Server: ''localhost''&lt;br /&gt;
* SMTP-Server: ''localhost''&lt;br /&gt;
* Benutzer: ''user@localhost''&lt;br /&gt;
&lt;br /&gt;
Die XAMPP-Weboberfläche (&amp;lt;nowiki&amp;gt;http://xampp&amp;lt;/nowiki&amp;gt;) bietet den Menüpunkt Mercury Mail, hier kann man sich über PHP eine E-Mail zustellen, um die Konfiguration zu testen.&lt;br /&gt;
&lt;br /&gt;
=Sendmail &amp;amp; externer Mailserver=&lt;br /&gt;
Alternativ zu einem eigenen lokalen Mailserver, kann ein bestehender Mailserver (z.B. von google mail) verwendet werden. Man erspart sich damit das Einrichten eines eigenen Mailservers und Mail-Accounts. Allerdings ist man dann von einer Verbindung zum Mailserver abhängig, das heisst also man braucht Internet, um Mails zu senden / empfangen.&lt;br /&gt;
&lt;br /&gt;
==Verwenden von gmail als Mail-Server==&lt;br /&gt;
Die hier beschriebenen Schritte sind angelehnt an http://www.projectpier.org/node/817.&lt;br /&gt;
&lt;br /&gt;
* sendmail in der php.ini aktivieren (xampp/php/php.ini). Der Abschnitt [mail function] sieht so aus: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[mail function]&lt;br /&gt;
; For Win32 only.&lt;br /&gt;
; Eventuell Pfad zu sendmail.exe anpassen&lt;br /&gt;
sendmail_path = &amp;quot;\&amp;quot;D:\Programme\xampp\sendmail\sendmail.exe\&amp;quot; -t&amp;quot;&lt;br /&gt;
SMTP = localhost&lt;br /&gt;
smtp_port = 25&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* sendmail.ini (im gleichen Verzeichnis wie sendmail.exe) anpassen. Überschreibe den Inhalt mit: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sendmail]&lt;br /&gt;
smtp_server=localhost&lt;br /&gt;
smtp_port=25&lt;br /&gt;
default_domain=gmail.com&lt;br /&gt;
error_logfile=error.log&lt;br /&gt;
auth_username=[deingmailname]@gmail.com&lt;br /&gt;
auth_password=[deingmailpasswort]&lt;br /&gt;
pop3_server=&lt;br /&gt;
pop3_username=&lt;br /&gt;
pop3_password=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Installation von stunnel&lt;br /&gt;
Downloade &amp;amp; installiere stunnel von http://www.stunnel.org/?page=downloads&lt;br /&gt;
Klicke Start-&amp;gt;stunnel-&amp;gt;edit stunnel.conf (Oder öffne C:\Program Files\stunnel\stunnel.conf)&lt;br /&gt;
Überschreibe den Inhalt der config mit:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
cert = stunnel.pem&lt;br /&gt;
socket = l:TCP_NODELAY=1&lt;br /&gt;
socket = r:TCP_NODELAY=1&lt;br /&gt;
debug = 7&lt;br /&gt;
output = stunnel.log&lt;br /&gt;
client = yes&lt;br /&gt;
[smtpg]&lt;br /&gt;
accept = 127.0.0.1:25&lt;br /&gt;
connect = smtp.gmail.com:465&lt;br /&gt;
;or connect = 72.14.215.109:465 so there's no DNS lookup&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* XAMPP neu starten&lt;br /&gt;
* stunnel starten (Startmenü)&lt;br /&gt;
&lt;br /&gt;
Es ist nun möglich von contao aus, welches auf XAMPP läuft, Mails zu versenden, sofern eine Verbindung zum gmail Server besteht.&lt;br /&gt;
&lt;br /&gt;
=Umzug auf ein Live-System=&lt;br /&gt;
Der Umzug von Contao auf ein Livesystem gestaltet sich normalerweise sehr angenehm und ist nur mit wenigen Handgriffen zu bewerkstelligen:&lt;br /&gt;
#Unter Systemwartung den Cache löschen.&lt;br /&gt;
#Mit Hilfe der [[BackupDB|Backup-DB Erweiterung]] ein Website-Template erstellen&lt;br /&gt;
#Die ganze Website auf den Server laden (z.B. per FTP)&lt;br /&gt;
#Die .htaccess-Datei anpassen. Falls die Contao-Installation lokal in einem Unterverzeichnis lag, muss die RewriteBase wieder auf &amp;quot;/&amp;quot; gestellt werden.&lt;br /&gt;
#Nun über das Install-Tool die Contao-Seite installieren und am Ende das mit BackupDB erstellte Template in die Datenbank einfügen.&lt;br /&gt;
&lt;br /&gt;
Das sollte es schon gewesen sein.&lt;br /&gt;
&lt;br /&gt;
Da diese Anleitung auf einem portablen XAMPP-Server aufgebaut ist, ist es möglich, das komplette Verzeichnis (C:\webdev) auf einen USB-Stick zu betreiben. Dies erleichtert z.B. die Presentation bei Kunden. Es befindet sich alles in diesem Verzeichnis und bedarf keiner Installation. Lediglich die angepasste [[#hosts-Datei|hosts-Datei]] kann nicht übernommen werden.&lt;br /&gt;
&lt;br /&gt;
=Credits=&lt;br /&gt;
Die Orginal-Anleitung wurde erstellt von [[Benutzer:Psi|Psi]] ([http://www.4wardmedia.de 4ward.media])&amp;lt;br /&amp;gt;&lt;br /&gt;
Div. Modifikationen und Anpassungen an die aktuelle XAMPP-Version / Contao-Version durch manitougs&lt;br /&gt;
&lt;br /&gt;
[[Datei:4ward signature.png|link=http://www.4wardmedia.de|4ward.media]]&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Xampp_Multidomain</id>
		<title>Xampp Multidomain</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Xampp_Multidomain"/>
				<updated>2011-05-30T10:48:30Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin_HOWTOS]]&lt;br /&gt;
[[Category:Installation_und_Updates]]&lt;br /&gt;
[[Category:Sonstiges]]&lt;br /&gt;
Dieses Tutorial beschreibt die Einrichtung einer lokalen Entwicklungsumgebung mit XAMPP für mehrere parallele oder mehrsprachige Contao Installationen.&lt;br /&gt;
&lt;br /&gt;
=Einrichtung=&lt;br /&gt;
Bei dieser Anleitung wird mit einem portablen [http://www.apachefriends.org/de/xampp.html XAMPP] Zip-Paket in Windows gearbeitet (aktuelle Version: 1.7.3). XAMPP steht für Apache, MySQL, PHP und Pearl und stellt somit ein vorkonfiguriertes Webserver-Paket bereit. Neben den eigentlichen Servern bringt XAMPP auch ein paar nette Konfigurationstools wie den PhpMyAdmin oder einen Mailserver mit. Die Pakete gibt es für Windows, Linux sowie für den Mac.&lt;br /&gt;
&lt;br /&gt;
Das Zip-Paket wird in C:\webdev entpackt, was auch ausdrücklich empfohlen wird. Gerade bei Verzeichnissen mit Leer- oder Sonderzeichen (z. B. C:\Program Files\xampp) könnte es später zu Problemen kommen. Nach dem Entpacken ruft man die Datei ''C:\webdev\xampp\setup_xampp.bat'', welche die Konfiguration von XAMPP übernimmt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;200&amp;quot; heights=&amp;quot;300&amp;quot;caption=&amp;quot;XAMPP Setup Script&amp;quot;&amp;gt;&lt;br /&gt;
  Datei:xampp-setup-1.png|Setupscript Screen 1&lt;br /&gt;
  Datei:xampp-setup-2.png|Setupscript Screen 2&lt;br /&gt;
  Datei:xampp-setup-3.png|Setupscript Screen 3&lt;br /&gt;
  Datei:xampp-setup-4.png|Setupscript Screen 4&lt;br /&gt;
  Datei:xampp-setup-5.png|Setupscript Screen 5&lt;br /&gt;
  Datei:xampp-setup-6.png|Setupscript Screen 6&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Konfiguration wird das Setup-Script mit Eingabe eines ''x'' beendet. &lt;br /&gt;
&lt;br /&gt;
Anschließend ruft man die Datei ''C:\webdev\xampp\xampp-contol.exe'' auf und startet die Module ''Apache'', ''MySQL'' und ''Mercury''.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-controlpanel.png|Controlpanel]]&lt;br /&gt;
&lt;br /&gt;
Wenn alle Module gestartet sind, wird dieser Status im Control Panel angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-controlpanelstarted.png|Controlpanel mit gestarteten Modulen]]&lt;br /&gt;
&lt;br /&gt;
Ruft man jetzt die Adresse ''&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;'' im Browser auf, sollte man das XAMPP-Logo mit einer Sprachauswahl sehen. Nach Auswahl der entsprechenden Sprache erscheint die eigentliche XAMPP-Seite, bei der unter dem Menüpunkt ''Status'' Informationen über einzelne Module ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-status.png|XAMPP Status]]&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier nur, dass MySQL und PHP AKTIVIERT ist. Der Menüpunkt ''phpinfo()'' zeigt viele Informationen über die installierte PHP-Version und deren Module an; hier sollte eine Version ab 5.2 zu sehen sein.&lt;br /&gt;
&lt;br /&gt;
Zum Schluss sollte man noch über die Seite ''&amp;lt;nowiki&amp;gt;http://localhost/security/xamppsecurity.php&amp;lt;/nowiki&amp;gt;''  das ROOT-Passwort für den MySQL-Server setzen. Nebenbei kann man auch das XAMPP-Verzeichnis mit einem Passwortschutz versehen. Diese Aktionen sind zwar für die Funktionalität nicht zwingend nötig, aber aus Sicherheitsgründen zu empfehlen. ''&amp;quot;Paranoia is applied security&amp;quot;'' …  Nach dem Ändern des Passwortes muss über das XAMPP Control Panel der MySQL-Server neu gestartet werden, damit die Passwortänderung wirksam wird.&lt;br /&gt;
&lt;br /&gt;
=Installation einer Contao Umgebung=&lt;br /&gt;
Um Contao installieren zu können, muss zuerst ein Contao-Paket von der [http://www.contao.org/herunterladen.html Projekt-Homepage] heruntergeladen und in das Verzeichnis ''C:\webdev\xampp\htdocs\contao'' entpackt werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anschließend wird über die Adresse ''&amp;lt;nowiki&amp;gt;http://localhost/phpmyadmin/&amp;lt;/nowiki&amp;gt;'' eine neue Datenbank inkl. neuen Datenbank-Benutzer angelegt. Aus Sicherheitsgründen sollte man für die Datenbank den ROOT-Benutzer nicht verwenden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Über den Reiter ''Rechte'' kommt man zur Benutzerübersicht. In dieser Übersicht findet man einen Button ''Neuen Benutzer hinzufügen''. Hier kann man sehr bequem einen Benutzer samt Datenbank anlegen. Als Host wählt man immer ''Lokal'', da Webserver und Datenbanksystem auf dem selben Rechner laufen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-newdbuser.png|Neuen Datenbank Benutzer inkl. Datenbank erstellen]]&lt;br /&gt;
&lt;br /&gt;
Jetzt kann mit der [[Installation]] von Contao begonnen werden.&lt;br /&gt;
&lt;br /&gt;
Im Grunde könnte man auf diese Art beliebig viele Contao-Umgebungen parallel betreiben, natürlich in jeweils verschiedenen Verzeichnissen. Hier bestehen aber zwei grundsätzliche Probleme:&lt;br /&gt;
*Contao ist in einem Unterverzeichnis installiert, was an einigen Stellen zu Problemen führen kann. Contao ist hier aber sehr kulant.&lt;br /&gt;
*Auf diese Art ist pro Contao-Umgebung nur eine Seite realisierbar.&lt;br /&gt;
&lt;br /&gt;
=Ausbau auf verschiedene Hostnamen=&lt;br /&gt;
Um die oben genannten Probleme zu beheben, kann für jede Contao Umgebung ein eigener Hostnamen angelegt werden, also ein Alias zu ''localhost''. Hostnamen sind für den Menschen da und werden vom Betriebssystem automatisch zu einer IP-Adresse aufgelöst. Der ''localhost'' ist dabei voreingestellt und zeigt immer auf ''127.0.0.1'', was per Definition immer der Computer ist, auf dem die Auflösung statt findet. Diese Zuordnung macht sich der Webserver zu nutze und unterscheidet damit die verschiedenen Websites.&lt;br /&gt;
&lt;br /&gt;
==hosts-Datei==&lt;br /&gt;
Es gibt verschieden Instanzen der Namensauflösung, der erste Schritt hierbei ist in jedem Fall die sogenannte hosts-Datei, welche in jedem System existiert und erst wenn hier keine Entsprechung gefunden werden konnten, werden weitere DNS-Server befragt.&lt;br /&gt;
&lt;br /&gt;
Um nun eigene Hostnamen für die IP ''127.0.0.1'' einzurichten, öffnet man mit einem Editor die Datei hosts (ohne Endung), welche bei &lt;br /&gt;
*Windows unter C:\WINDOWS\system32\drivers\etc\&lt;br /&gt;
*Linux und Mac unter /etc/&lt;br /&gt;
zu finden ist. Um die Datei zu ändern, sind Administrator bzw. ROOT Rechte notwendig.&lt;br /&gt;
&lt;br /&gt;
Für jede Hostnamen&amp;lt;-&amp;gt;IP-Adresse-Kombination steht eine Zeile, wobei die Hostnamen eindeutig sein müssen. Es dürfen also keine zwei identische Hostnamen auf eine IP-Adresse zeigen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-hosts.png|Datei hosts bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Öffnet man nun eine der neu angelegten Hostnamen im Browser, z.B. ''&amp;lt;nowiki&amp;gt;http://xampp&amp;lt;/nowiki&amp;gt;'', dann sollte die gleiche Ausgabe wie bei Aufruf von ''&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;'' erscheinen. Bei der Wahl der Hostnamen sollte man darauf achten, dass keine Überschneidung mit reell existierenden Domains entstehen. Trägt man beispielsweise &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
127.0.0.1		www.contao.org&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in die hosts-Datei ein, wird man von nun ab den lokalen Webserver unter der Adresse www.contao.org erreichen, und nicht mehr die Contao-Website.&amp;lt;br /&amp;gt;&lt;br /&gt;
Es gibt einige spezielle hosts-Editoren, die das Editieren erleichtern sollen. Google weiß mehr darüber.&lt;br /&gt;
&lt;br /&gt;
==vHost-Konfiguration==&lt;br /&gt;
Um die verschiedenen Hostnamen den unterschiedlichen Contao-Umgebungen zuzuweisen, muss der Webserver entsprechend konfiguriert werden. Über die sogenannten virtuellen Hosts pflegt der Apache die Unterscheidung zwischen den einzelnen Umgebungen.&lt;br /&gt;
&lt;br /&gt;
Hierzu stellt XAMPP die Konfigurationsdatei ''C:\webdev\xampp\apache\conf\extra\httpd-vhosts.conf'' bereit, die ebenfalls per Editor bearbeitet wird.&lt;br /&gt;
Man kann hier die Gelegenheit nutzen, um das htdocs-Verzeichnis mit den Contao-Dateien an einen anderen Ort zu legen, z.B. ''C:\webdev\webfiles''. Die restlichen XAMPP-htdocs sollte man unberührt lassen.&lt;br /&gt;
&lt;br /&gt;
Zuerst muss man den Apache anweisen, virtuelle Hosts über die Hostnamen aufzulösen. Dazu wird das Kommentarzeichen vor ''NameVirtualHost'' entfernt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Use name-based virtual hosting.&lt;br /&gt;
#&lt;br /&gt;
NameVirtualHost *:80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Zugriffsrechte für das Web-Verzeichnis schränken wir entsprechend ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Zugriff auf das webfiles-Verzeichnis nur vom lokalen Rechner zulassen&lt;br /&gt;
&amp;lt;Directory C:/webdev/webfiles&amp;gt;&lt;br /&gt;
    Order deny,allow&lt;br /&gt;
    Allow from 127.0.0.1&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt erstellt man den ersten vHost-Eintrag. Diesen benutzt man für das normale ''localhost''-Verhalten. Es sollen also einfach alle Dateien aufgelistet werden. Da dies der erste vHost-Eintrag ist, erhält er auch eine Sonderstellung. Passt kein anderer vHost-Eintrag auf die Anfrage, wird dieser stellvertretend benutzt.&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Gimmik ist das Rewrite-Script. Es dient dazu, Subdomains auf Verzeichnisse abzubilden. Beispielweise wird die Anfrage ''&amp;lt;nowiki&amp;gt;http://verzeichnis.local/index.php&amp;lt;/nowiki&amp;gt;'' auf die Datei ''C:\webdev\webfiles\*verzeichnis*\index.php'' abgebildet. Dies hat den großen Vorteil, dass ein neuer Subdomain-vHost ohne Anpassung der Serverkonfiguration erstellt werden kann. Es muss lediglich das Verzeichnis erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
### Default vHost&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    DocumentRoot C:/webdev/webfiles&lt;br /&gt;
    ServerName localhost&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;Directory C:/webdev/webfiles&amp;gt;&lt;br /&gt;
        Options +Indexes&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # Der vHost soll auch alle Anfragen annehmen, die mit &amp;quot;.local&amp;quot; enden.&lt;br /&gt;
    ServerAlias *.local  &lt;br /&gt;
&lt;br /&gt;
    # Script zur Umleitung in das Verzeichnis, welches über dem Präfix von &amp;quot;.local&amp;quot; referenziert wird&lt;br /&gt;
    # Bsp.: neu.local nutzt als DocumentRoot C:/webdev/webfiles/neu&lt;br /&gt;
    UseCanonicalName Off&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteCond %{HTTP_HOST}            ^[^.]+\.local$&lt;br /&gt;
    RewriteCond %{REQUEST_URI}          !^/icons&lt;br /&gt;
    RewriteRule ^(.+)                   %{HTTP_HOST}$1      [C]&lt;br /&gt;
    RewriteRule ^([^.]+)\.local(.*)     C:/webdev/webfiles/$1$2&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun wird ein vHost zum Zugriff auf die XAMPP-Weboberfläche erstellt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
### XAMPP vHost&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    DocumentRoot c:/webdev/xampp/htdocs&lt;br /&gt;
    ServerName xampp&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein vHost zum Zugriff auf eine Contao-Umgebung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
### contao vHost&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    DocumentRoot c:/webdev/webfiles/contao&lt;br /&gt;
    ServerName contao&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese vHost dient zum Zugriff auf das Verzeichnis multilang. Man achte auf den ServerAlias, welcher es ermöglicht, beliebige Subdomain-Hostnamen der Form xxx.multilang anzulagen (de.multilang, en.multilang,...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
### multilang vHost&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    DocumentRoot c:/webdev/webfiles/multilang&lt;br /&gt;
    ServerName multilang&lt;br /&gt;
    ServerAlias *.multilang&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusammenfassung der Syntax:&lt;br /&gt;
*Ein &amp;amp;lt;VirtualHost *:80&amp;amp;gt;-Block pro vHost&lt;br /&gt;
*''ServerName'' gibt den verwendeten Hostnamen an&lt;br /&gt;
*''ServerAlias'' gibt weitere Hostnamen an, für die dieser vHost gilt. Hier sind Wildcards erlaubt&lt;br /&gt;
*''DocumentRoot'' steht für das physische Verzeichnis der Dateien&lt;br /&gt;
&lt;br /&gt;
Natürlich gibt es noch eine Vielzahl weiterer Konfigurationsoptionen, diese können in der [http://httpd.apache.org/docs/ Apache-Dokumentation] nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Nachdem die Datei angepasst wurde, wird der Syntax in der Eingabeaufforderung mit ''httpd.exe -S'' überprüft (unter C:\webdev\xampp\apache\bin). Sind keine Fehler aufgetreten, kann der Webserver über das XAMPP Control Panel neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt sollten folgende vHost aktiv sein:&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;'' -&amp;gt; ''C:\webdev\webfiles'' - Mit Auflistung des Inhalts. Praktisch, wenn man für etwas Kleines keinen extra vHost anlegen möchte.&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://contao&amp;lt;/nowiki&amp;gt;'' -&amp;gt; ''C:\webdev\webfiles\contao''&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://[ordner].local&amp;lt;/nowiki&amp;gt;'' -&amp;gt; C:\webdev\webfiles\[ordner] - wobei [ordner] beliebig sein kann, es darf nur kein Punkt oder Sonderzeichen enthalten sein. Damit hat man praktisch einen Wildcard-vHost ohne wirklich die Serverkonfiguration ändern zu müssen. '''Wichtig:''' ''[ordner].local'' muss auch in der hosts-Datei notiert werden.&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://xampp&amp;lt;/nowiki&amp;gt;'' -&amp;gt; ''C:\webdev\xampp\htdocs'' - Über diesen vHost kann man auf die XAMPP-Weboberfläche zugreifen.&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://*.multilang&amp;lt;/nowiki&amp;gt;'' -&amp;gt; ''C:\webdev\webfiles\mutlilang'', auch hier kann man als Subdomain alles angeben, was man in der Hosts-Datei notiert hat. Besonderheit zum oberen Beispiel: Es wird immer das selbe Verzeichnis und damit die selbe Contao-Umgebung referenziert. Damit kann man also mehrsprachige oder mehrseitige Auftritte erstellen.&lt;br /&gt;
&lt;br /&gt;
=Sicherheitseinstellungen - Apache=&lt;br /&gt;
Abschließend werden noch ein paar Einstellungen zur Sicherheit vorgenommen.&lt;br /&gt;
&lt;br /&gt;
==Zugriff von außen sperren==&lt;br /&gt;
In der Datei ''C:\webdev\xampp\apache\conf\httpd.conf'' befindet sich ab der Zeile 42:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Change this to Listen on specific IP addresses as shown below to &lt;br /&gt;
# prevent Apache from glomming onto all bound IP addresses.&lt;br /&gt;
#&lt;br /&gt;
#Listen 0.0.0.0:80&lt;br /&gt;
#Listen [::]:80&lt;br /&gt;
Listen 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ändert man den ''Listen''-Wert auf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Listen 127.0.0.1:80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das veranlasst den Apache nur noch Verbindungen über das ''localhost''-Interface anzunehmen und keine Verbindungen, die über das Netzwerk von anderen Computer kommen.&lt;br /&gt;
&lt;br /&gt;
In der Datei ''C:\webdev\xampp\apache\conf\extra\httpd-ssl.conf'' steht die Einstellung für HTTPS, also verschlüsselte Seiten. Hier muss in Zeile 41&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Listen 443&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Listen 127.0.0.1:443&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
geändert werden.&lt;br /&gt;
&lt;br /&gt;
=Sicherheitseinstellungen - MySQL=&lt;br /&gt;
Auch dem MySQL-Server verbietet man den Zugriff von außen. In die Datei ''C:\webdev\xampp\mysql\bin\my.ini'' fügt man folgenden Zeile unter der Sektion ''[mysqld]'' ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 bind-address = 127.0.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sieht die Konfigurationsdatei ab Zeile 27 so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# The MySQL server&lt;br /&gt;
[mysqld]&lt;br /&gt;
basedir                 = &amp;quot;/webdev/xampp/mysql/&amp;quot;&lt;br /&gt;
datadir                 = &amp;quot;/webdev/xampp/mysql/data/&amp;quot;&lt;br /&gt;
port		            = 3306&lt;br /&gt;
socket		            = &amp;quot;MySQL&amp;quot;&lt;br /&gt;
skip-locking&lt;br /&gt;
key_buffer              = 16M&lt;br /&gt;
max_allowed_packet      = 1M&lt;br /&gt;
table_cache             = 64&lt;br /&gt;
sort_buffer_size        = 512K&lt;br /&gt;
net_buffer_length       = 8K&lt;br /&gt;
read_buffer_size        = 256K&lt;br /&gt;
read_rnd_buffer_size    = 512K&lt;br /&gt;
myisam_sort_buffer_size = 8M&lt;br /&gt;
bind-address = 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
default-time-zone       = &amp;quot;Europe/Paris&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Neustart des MySQL-Servers macht die Konfiguration aktiv.&lt;br /&gt;
&lt;br /&gt;
=.htaccess=&lt;br /&gt;
Standardmässig ist die Datei ''.htaccess'' nicht in der Contao-Installation aktiv. Es liegt jedoch eine vorbereitete Datei bereit; sie lautet ''.htaccess.default''. Diese muss in ''.htaccess'' umbenannt werden. Die Datei ''.htaccess'' aus dem Basisverzeichnis der Contao-Installation dient hauptsächlich dazu, schönere URLs zu erzeugen. Damit das Rewriting von Webserver entsprechend ausgeführt werden kann, muss die Option ''RewriteBase'' angepasst werden. Sie besagt, in welchem Unterverzeichnis die Installation bezüglich der Domain liegt. Hat man das System in einem Unterverzeichnis installiert (''&amp;lt;nowiki&amp;gt;http://localhost/contao/&amp;lt;/nowiki&amp;gt;''), dann muss die ''RewriteBase'' auf ''/contao/'' geändert werden. Die veränderte ''.htaccess'' sieht dann ab Zeile 39 wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
  # Uncomment the following line to set the RewriteBase.&lt;br /&gt;
  ##&lt;br /&gt;
  RewriteBase /contao/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Mercury - Mailserver=&lt;br /&gt;
Damit man auch die Mailfunktionalität von Contao lokal testen kann, bedarf es einem Mailserver. Diesen bringt XAMPP in Form von Mercury-Mail mit.&lt;br /&gt;
&lt;br /&gt;
Über das ''XAMPP Control Panel'' wird dei Mailserver gestartet und per klick auf ''Admin'' öffnet sich die Mercury-Verwaltungsoberfläche.&lt;br /&gt;
Da nur ein SMTP-Server (für den Mailversand) und ein POP3-Server (für den Mailempfang) benötigt werden, deaktiviert man alle anderen Dienste von Mercury. Das wird über den Button ''Configuration - Protocol modules'' erledigt, wo alle Haken bis auf SMTP und POP3 entfernt werden:&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;caption=&amp;quot;Mercury Security Settings&amp;quot;&amp;gt;&lt;br /&gt;
  Datei:xampp-mercury.png|Mercury Admin Page&lt;br /&gt;
  Datei:xampp-mercuryprotocolmodules.png|Mercury Protocol Modules&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Nun den Mercury-Server über das ''XAMPP Control Panel'' neustarten.&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie für den Apache veranlasst man auch Mercury nur Verbindungen vom ''localhost'' anzunehmen. Über ''Configuration - Mercury SMTP Server'' erreicht man die Einstellungen und unter anderem das Feld ''IP Interface to use'', was auf 127.0.0.1 zu setzen ist:&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-mercurysmtp.png|Mercury SMTP Server]]&lt;br /&gt;
&lt;br /&gt;
Analog für den POP3-Server unter ''Configuration - Mercury POP3 Server'':&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-mercurypop3.png|Mercury PPOP3 Server]]&lt;br /&gt;
&lt;br /&gt;
Um nun Mails empfangen zu können muss noch ein Mailbenutzer in Mercury angelegt werden. Unter ''Configuration - Manage local users'' kann man beliebige Mailkonten anlegen, an welche man dann per Contao Mails schicken kann. Am besten ändert man hierfür den schon angelegten ''newuser'' ab.&lt;br /&gt;
&lt;br /&gt;
Damit die E-Mails auch abgeholt werden, richtet man sich das neue E-Mail Konto in einem Mailclient ein, beispielsweise Outlook Express. Die Logindaten hierfür sind:&lt;br /&gt;
* POP3-Server: ''localhost''&lt;br /&gt;
* SMTP-Server: ''localhost''&lt;br /&gt;
* Benutzer: ''user@localhost''&lt;br /&gt;
&lt;br /&gt;
Die XAMPP-Weboberfläche (&amp;lt;nowiki&amp;gt;http://xampp&amp;lt;/nowiki&amp;gt;) bietet den Menüpunkt Mercury Mail, hier kann man sich über PHP eine E-Mail zustellen, um die Konfiguration zu testen.&lt;br /&gt;
&lt;br /&gt;
=Sendmail &amp;amp; externer Mailserver=&lt;br /&gt;
Alternativ zu einem eigenen lokalen Mailserver, kann ein bestehender Mailserver (z.B. von google mail) verwendet werden. Man erspart sich damit das Einrichten eines eigenen Mailservers und Mail-Accounts. Allerdings ist man dann von einer Verbindung zum Mailserver abhängig, das heisst also man braucht Internet, um Mails zu senden / empfangen.&lt;br /&gt;
&lt;br /&gt;
==Verwenden von gmail als Mail-Server==&lt;br /&gt;
Die hier beschriebenen Schritte sind angelehnt an http://www.projectpier.org/node/817.&lt;br /&gt;
&lt;br /&gt;
* sendmail in der php.ini aktivieren (xampp/php/php.ini). Der Abschnitt [mail function] sieht so aus: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[mail function]&lt;br /&gt;
; For Win32 only.&lt;br /&gt;
; Eventuell Pfad zu sendmail.exe anpassen&lt;br /&gt;
sendmail_path = &amp;quot;C:\xampp\sendmail\sendmail.exe -t&amp;quot;&lt;br /&gt;
SMTP = localhost&lt;br /&gt;
smtp_port = 25&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* sendmail.ini (im gleichen Verzeichnis wie sendmail.exe) anpassen. Überschreibe den Inhalt mit: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sendmail]&lt;br /&gt;
smtp_server=localhost&lt;br /&gt;
smtp_port=25&lt;br /&gt;
default_domain=gmail.com&lt;br /&gt;
error_logfile=error.log&lt;br /&gt;
auth_username=[deingmailname]@gmail.com&lt;br /&gt;
auth_password=[deingmailpasswort]&lt;br /&gt;
pop3_server=&lt;br /&gt;
pop3_username=&lt;br /&gt;
pop3_password=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Installation von stunnel&lt;br /&gt;
Downloade &amp;amp; installiere stunnel von http://www.stunnel.org/?page=downloads&lt;br /&gt;
Klicke Start-&amp;gt;stunnel-&amp;gt;edit stunnel.conf (Oder öffne C:\Program Files\stunnel\stunnel.conf)&lt;br /&gt;
Überschreibe den Inhalt der config mit:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
cert = stunnel.pem&lt;br /&gt;
socket = l:TCP_NODELAY=1&lt;br /&gt;
socket = r:TCP_NODELAY=1&lt;br /&gt;
debug = 7&lt;br /&gt;
output = stunnel.log&lt;br /&gt;
client = yes&lt;br /&gt;
[smtpg]&lt;br /&gt;
accept = 127.0.0.1:25&lt;br /&gt;
connect = smtp.gmail.com:465&lt;br /&gt;
;or connect = 72.14.215.109:465 so there's no DNS lookup&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* XAMPP neu starten&lt;br /&gt;
* stunnel starten (Startmenü)&lt;br /&gt;
&lt;br /&gt;
Es ist nun möglich von contao aus, welches auf XAMPP läuft, Mails zu versenden, sofern eine Verbindung zum gmail Server besteht.&lt;br /&gt;
&lt;br /&gt;
=Umzug auf ein Live-System=&lt;br /&gt;
Der Umzug von Contao auf ein Livesystem gestaltet sich normalerweise sehr angenehm und ist nur mit wenigen Handgriffen zu bewerkstelligen:&lt;br /&gt;
#Unter Systemwartung den Cache löschen.&lt;br /&gt;
#Mit Hilfe der [[BackupDB|Backup-DB Erweiterung]] ein Website-Template erstellen&lt;br /&gt;
#Die ganze Website auf den Server laden (z.B. per FTP)&lt;br /&gt;
#Die .htaccess-Datei anpassen. Falls die Contao-Installation lokal in einem Unterverzeichnis lag, muss die RewriteBase wieder auf &amp;quot;/&amp;quot; gestellt werden.&lt;br /&gt;
#Nun über das Install-Tool die Contao-Seite installieren und am Ende das mit BackupDB erstellte Template in die Datenbank einfügen.&lt;br /&gt;
&lt;br /&gt;
Das sollte es schon gewesen sein.&lt;br /&gt;
&lt;br /&gt;
Da diese Anleitung auf einem portablen XAMPP-Server aufgebaut ist, ist es möglich, das komplette Verzeichnis (C:\webdev) auf einen USB-Stick zu betreiben. Dies erleichtert z.B. die Presentation bei Kunden. Es befindet sich alles in diesem Verzeichnis und bedarf keiner Installation. Lediglich die angepasste [[#hosts-Datei|hosts-Datei]] kann nicht übernommen werden.&lt;br /&gt;
&lt;br /&gt;
=Credits=&lt;br /&gt;
Die Orginal-Anleitung wurde erstellt von [[Benutzer:Psi|Psi]] ([http://www.4wardmedia.de 4ward.media])&amp;lt;br /&amp;gt;&lt;br /&gt;
Div. Modifikationen und Anpassungen an die aktuelle XAMPP-Version / Contao-Version durch manitougs&lt;br /&gt;
&lt;br /&gt;
[[Datei:4ward signature.png|link=http://www.4wardmedia.de|4ward.media]]&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Google_Analytics</id>
		<title>Google Analytics</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Google_Analytics"/>
				<updated>2011-05-17T21:58:31Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Core]]&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|TLVersion=bis 2.8.x&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
[[w:de:Google_Analytics|Google Analytics]] ist ein kostenloser Dienst, welcher der Analyse von Zugriffen auf Webseiten dient (Es gilt nur ein monatliches Limit an Seitenaufrufen in Höhe von 5.000.000 Aufrufen).&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Um Verfälschungen auszuschließen, wird der Google Analytics Code erst im Frontend angezeigt, wenn man sich aus dem Backend ausgeloggt hat.}}&lt;br /&gt;
&lt;br /&gt;
==Alternativen==&lt;br /&gt;
Eine Alternative zu Google Analytics stellt [[Piwik]] dar.&lt;br /&gt;
&lt;br /&gt;
==Rechtliches==&lt;br /&gt;
Es ist rechtlich noch nicht klar, ob es nun verboten ist, die Daten in Deutschland mit Google-Analytics zu erfassen. 2 Dinge sprechen erst einmal dagegen:&lt;br /&gt;
#Die Google Server sind nicht unbedingt in Deutschland.&lt;br /&gt;
#Die IP wird erfasst und die gewonnenen Daten können nicht einfach von einem Seitenbetreiber gelöscht werden, wenn ein Besucher dies verlangt.&lt;br /&gt;
&lt;br /&gt;
Es gibt inzwischen ein Addon für einige Browser von Google, die Analytics Datensammlung deaktivieren: http://tools.google.com/dlpage/gaoptout?hl=de&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, der kann ab Contao 2.9 die IP von den Besuchern anonymisieren und so dem Datenschutz genügen (siehe [[#IP-Adressen_anonymisieren|IP-Adresse anonymisieren]]).&lt;br /&gt;
&lt;br /&gt;
{{Achtung|'''Dies ist keine Rechtsberatung.''' Detaillierte Angaben zur rechtlichen Situation beim Einsatz von Google Analytics sind von jeder selbst bei einem Rechtsanwalt zu erfragen (am besten in dem Fachgebiet Internet).}}&lt;br /&gt;
&lt;br /&gt;
=Google Analytics Konto erstellen=&lt;br /&gt;
Um den Dienst ''Google Analytics'' (nachfolgend GA) nutzen zu können, muss man sich zuerst ein GA-Konto [http://www.google.com/analytics/ erstellen].&amp;lt;br /&amp;gt;&lt;br /&gt;
Nach dem Erstellen eines Accounts gibt man GA die Domain bekannt, auf der der Dienst laufen soll. Dazu klickt man auf ''Neues Konto'' ...&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_createaccount.png|Google Analytics Account erstellen]]&lt;br /&gt;
&lt;br /&gt;
... und anschließend auf ''Anmelden''.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_login.png|Webseite hinzufügen]]&lt;br /&gt;
&lt;br /&gt;
Anschließend erfolgen die Angaben zur Webseite, auf der GA laufen soll.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_websitesettings.png|Webseiten Angaben]]&lt;br /&gt;
&lt;br /&gt;
Nachdem man den Geschäftsbedingungen zugestimmt hat, kommt man zur Seite mit dem Tracking-Code. In diesem Code notiert man sich die Account-Nummer; die wird später noch benötigt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis| In den Google Geschäftsbedingungen (PUnkt 8.1) wird man Aufgefordert einen dort angegebenen Satz auf seiner Webseite einzubringen. Das sollte man auf jeden Fall machen, da es dort um die Datenschutzrichtlinien geht, die eh jeder auf seiner Internetseite auszeichnen sollte! }}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_trackingcode.png|Tracking Code]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der Eingaben kommt man zur Übersicht, wo nun die erstellte Webseite auf scheint.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_overview.png]]&lt;br /&gt;
=Einbinden von Google Analytics mittels der Core-Funktion=&lt;br /&gt;
==Typolight bis 2.8.x==&lt;br /&gt;
Um GA in TYPOlight bis 2.8.x einzubinden, bearbeitet man das entsprechende Seitenlayout und fügt unter ''Experten-Einstellungen'' im Feld ''Google Analytics Id'' die vorhin notierte GA-ID ein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout_tl.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
Anschließend speichert und schließt man das Layout.&lt;br /&gt;
&lt;br /&gt;
==Contao ab 2.9==&lt;br /&gt;
Seit Contao 2.9 wird GA über das Template ''moo_analytics.tpl'' eingebunden. Wie man ein Template über den im Core integrierten Template-Editor einbindet, ist [[Templates_bearbeiten|hier]] beschrieben. Nachdem das Template ausgewählt wurde, wird das Template bearbeitet.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_templateedit.png|Template bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Wie schon in dem Kommentar des Templates vermerkt ist, braucht nur die im Code eingefügte Blind-ID (UA-XXXXX-X) gegen die vorhin notierte GA-ID ausgetauscht werden. Anschließend kann das Template gespeichert und geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Nun muss im Seitenlayout das Script eingebunden werden. Dazu setzt man unter ''Skript-Einstellungen'' einen Haken bei dem Punkt ''moo_analytics''. Es muss darauf geachtet werden, dass dieses Skript als letztes eingebunden wird! Anschließend wird das Layout gespeichert und geschlossen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
===IP-Adressen anonymisieren===&lt;br /&gt;
Aus Datenschutzgründen bietet GA seit geraumer Zeit die Möglichkeit, die geloggten IP-Adressen der Besucher zu anonymisieren. Dazu muss nochmal das Template bearbeitet werden und zwischen der Zeile &amp;lt;code&amp;gt;_gaq.push(['_setAccount', 'UA-XXXXX-X']);&amp;lt;/code&amp;gt; und der Zeile &amp;lt;code&amp;gt;_gaq.push(['_trackPageview']);&amp;lt;/code&amp;gt; eine neue Zeile mit folgendem Inhalt eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ganze Template sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * To use the script, replace UA-XXXXX-X in the code below with your Google&lt;br /&gt;
 * Analytics ID and then add it to a Contao page layout. Make sure to insert&lt;br /&gt;
 * it as the last moo_ script (!) and note that it will only be added to the&lt;br /&gt;
 * page if you are not logged into the back end.&lt;br /&gt;
 */&lt;br /&gt;
if (!BE_USER_LOGGED_IN &amp;amp;&amp;amp; sha1(session_id() . (!$GLOBALS['TL_CONFIG']['disableIpCheck'] ? $this-&amp;gt;Environment-&amp;gt;ip : '') . 'BE_USER_AUTH') != $this-&amp;gt;Input-&amp;gt;cookie('BE_USER_AUTH')):&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--//--&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!--&lt;br /&gt;
var _gaq = _gaq || [];&lt;br /&gt;
_gaq.push(['_setAccount', 'UA-XXXXX-X']);&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
_gaq.push(['_trackPageview']);&lt;br /&gt;
(function() {&lt;br /&gt;
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;&lt;br /&gt;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';&lt;br /&gt;
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);&lt;br /&gt;
})();&lt;br /&gt;
//--&amp;gt;&amp;lt;!]]&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Einbinden von Google Analytics mit Erweiterungen=&lt;br /&gt;
Statt der Anapssung an den Templates (ab Contao 2.9) kann die Erweiterung [[GoogleAnalytics]] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bestimmte Rechner (Webmaster, Kunden) vom Tracking ausschliessen=&lt;br /&gt;
Mit GA ist es möglich, bestimmte Rechner von den Statistiken auszuschliessen. Zum Beispiel ist es sinnvoll, den Entwickler oder Webmaster von der Datenerfassung auszuschliessen, da sonst die Statistik verfälscht wird. GA bietet dafür [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 die Filter Funktion auf Profil-Ebene].&amp;lt;br /&amp;gt;&lt;br /&gt;
Eine Möglichkeit, um gezielt Rechner auszuschliessen besteht darin, auf diesen Rechnern ein bestimmtes Cookie zu installieren. GA erkennt dieses Cookie und führt dann kein Tracking aus. &lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
===Google Analytics Filter===&lt;br /&gt;
In der GA Konto- bzw. Profilübersicht wählt man ''Bearbeiten'' für die gewünschte Domain. In den Profileinstellungen dann &amp;quot;Filter hinzufügen&amp;quot; wählen, dann die Felder wie folgt ausfüllen:&amp;lt;br /&amp;gt;&lt;br /&gt;
Filtername: nach cookie, Benutzerdefinierter Filter, Ausschliessen, Filterfeld: Benutzerdefiniert, Filtermuster: no_report, Gross-/Klein: Nein.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;Änderungen Speichern&amp;quot; wählen um den Filter zu erstellen.&lt;br /&gt;
&lt;br /&gt;
===Auszuschliessende Rechner identifizieren===&lt;br /&gt;
Damit die Webseite erkennt, ob der ausführende Rechner vom Tracking ausgeschlossen werden soll oder nicht, wird ein Cookie verwendet. Das Cookie wird bei jedem Webseitenaufruf automatisch per Javascript installiert. Allerdings nur auf den Rechnern, die ein solches Cookie explizit wünschen. Das Javascript erkennt anhand des [[w:de:User_Agent|userAgent]] Strings, ob der Rechner ein Cookie wünscht oder nicht. Wenn der Google Analytics Tracking Code im userAgent String vorkommt, wird das Cookie installiert. &lt;br /&gt;
&lt;br /&gt;
Um den userAgent String anzupassen kann wie folgt vorgegangen werden:&lt;br /&gt;
* '''Internet Explorer''': Um den userAgent String im Internet Explorer anzupassen, muss in die Registry eingegriffen werden. Dazu den folgenden Code in den Editor kopieren, den GA Tracking Code UA-XXXXX-X an den eigenen anpassen und als *.reg speichern. Anschliessend die Datei doppelklicken.&lt;br /&gt;
Für '''IE7:'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;reg&amp;quot;&amp;gt;&lt;br /&gt;
Windows Registry Editor Version 5.00&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;UA-XXXXX-X&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;UA-XXXXX-X&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Für '''IE8:'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;reg&amp;quot;&amp;gt;&lt;br /&gt;
Windows Registry Editor Version 5.00&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;UA-XXXXX-X&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;UA-XXXXX-X&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Für '''IE9:'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;reg&amp;quot;&amp;gt;&lt;br /&gt;
Windows Registry Editor Version 5.00&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
@=&amp;quot;Mozilla/5.0&amp;quot;&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;MSIE 9.0 UA-XXXXX-X&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
@=&amp;quot;Mozilla/5.0&amp;quot;&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;MSIE 9.0 UA-XXXXX-X&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Quelle: [http://www.ideadapt.net ideadapt]&lt;br /&gt;
* '''Mozilla Firefox (Version &amp;lt; 4)''': about:config in Adresszeile eingeben, Warnung aktzeptieren, Liste nach general.useragent.extra.firefox filtern, Eintrag mit Doppelklick bearbeiten und gewünschten Tracking Code am Ende einfügen, Änderungen mit OK übernehmen und Firefox neu starten.&lt;br /&gt;
{{Hinweis|Gemäss der [https://developer.mozilla.org/en/Gecko_user_agent_string_reference#implementation Gecko user agent string reference] unterstützt Firefox 4 und höher diese Variante nicht mehr. Eine Lösung ist in Arbeit.}}&lt;br /&gt;
* '''Opera''': opera:config#ISP|Id in Adresszeile eingeben, im Feld Id den Tracking Code eingeben, Änderungen speichern und Opera neu starten.&lt;br /&gt;
* '''Safari''': Im Menu auf Bearbeiten &amp;gt; Einstellungen, dann auf den Tab Erweitert, die Einstellung &amp;quot;Menu 'Entwickler' in der Menüleiste anzeigen&amp;quot; aktivieren. Einstellungen schliessen. Im Menu auf Entwickler &amp;gt; User Agent &amp;gt; Anderer ... Den Tracking Code am Ende einfügen und mit OK Änderungen speichern. Neustart nicht erforderlich.&lt;br /&gt;
* Allgmeine Anleitungen: [[w:de:User_Agent#Benutzerdefiniert|Wikipedia - für verschiedene Browser]], [http://www.fiddlertool.com/ua.aspx fiddlertool - Anzeige von userAgent und Installationsanleitungen]&lt;br /&gt;
&lt;br /&gt;
===Google Analytics Javascript anpassen===&lt;br /&gt;
Das folgende Javascript sollte bei jedem Seitenaufruf ausgeführt werden. Dementsprechend also z.B. im Head Bereich des HTML entsprechend einbinden. Zuvor noch UA-XXXXX-X durch den eigenen Tracking Code ersetzen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(navigator.userAgent &amp;amp;&amp;amp; navigator.userAgent.match(/UA-XXXXX-X/)){&lt;br /&gt;
 _gaq.push(['_setVar', 'no_report']); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dieses Script bezieht sich möglicherweise nicht auf die von Ihnen verwendete GA API Version. [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 Welche Version verwende ich?]&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Google_Analytics</id>
		<title>Google Analytics</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Google_Analytics"/>
				<updated>2011-05-17T21:57:06Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Core]]&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|TLVersion=bis 2.8.x&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
[[w:de:Google_Analytics|Google Analytics]] ist ein kostenloser Dienst, welcher der Analyse von Zugriffen auf Webseiten dient (Es gilt nur ein monatliches Limit an Seitenaufrufen in Höhe von 5.000.000 Aufrufen).&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Um Verfälschungen auszuschließen, wird der Google Analytics Code erst im Frontend angezeigt, wenn man sich aus dem Backend ausgeloggt hat.}}&lt;br /&gt;
&lt;br /&gt;
==Alternativen==&lt;br /&gt;
Eine Alternative zu Google Analytics stellt [[Piwik]] dar.&lt;br /&gt;
&lt;br /&gt;
==Rechtliches==&lt;br /&gt;
Es ist rechtlich noch nicht klar, ob es nun verboten ist, die Daten in Deutschland mit Google-Analytics zu erfassen. 2 Dinge sprechen erst einmal dagegen:&lt;br /&gt;
#Die Google Server sind nicht unbedingt in Deutschland.&lt;br /&gt;
#Die IP wird erfasst und die gewonnenen Daten können nicht einfach von einem Seitenbetreiber gelöscht werden, wenn ein Besucher dies verlangt.&lt;br /&gt;
&lt;br /&gt;
Es gibt inzwischen ein Addon für einige Browser von Google, die Analytics Datensammlung deaktivieren: http://tools.google.com/dlpage/gaoptout?hl=de&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, der kann ab Contao 2.9 die IP von den Besuchern anonymisieren und so dem Datenschutz genügen (siehe [[#IP-Adressen_anonymisieren|IP-Adresse anonymisieren]]).&lt;br /&gt;
&lt;br /&gt;
{{Achtung|'''Dies ist keine Rechtsberatung.''' Detaillierte Angaben zur rechtlichen Situation beim Einsatz von Google Analytics sind von jeder selbst bei einem Rechtsanwalt zu erfragen (am besten in dem Fachgebiet Internet).}}&lt;br /&gt;
&lt;br /&gt;
=Google Analytics Konto erstellen=&lt;br /&gt;
Um den Dienst ''Google Analytics'' (nachfolgend GA) nutzen zu können, muss man sich zuerst ein GA-Konto [http://www.google.com/analytics/ erstellen].&amp;lt;br /&amp;gt;&lt;br /&gt;
Nach dem Erstellen eines Accounts gibt man GA die Domain bekannt, auf der der Dienst laufen soll. Dazu klickt man auf ''Neues Konto'' ...&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_createaccount.png|Google Analytics Account erstellen]]&lt;br /&gt;
&lt;br /&gt;
... und anschließend auf ''Anmelden''.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_login.png|Webseite hinzufügen]]&lt;br /&gt;
&lt;br /&gt;
Anschließend erfolgen die Angaben zur Webseite, auf der GA laufen soll.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_websitesettings.png|Webseiten Angaben]]&lt;br /&gt;
&lt;br /&gt;
Nachdem man den Geschäftsbedingungen zugestimmt hat, kommt man zur Seite mit dem Tracking-Code. In diesem Code notiert man sich die Account-Nummer; die wird später noch benötigt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis| In den Google Geschäftsbedingungen (PUnkt 8.1) wird man Aufgefordert einen dort angegebenen Satz auf seiner Webseite einzubringen. Das sollte man auf jeden Fall machen, da es dort um die Datenschutzrichtlinien geht, die eh jeder auf seiner Internetseite auszeichnen sollte! }}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_trackingcode.png|Tracking Code]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der Eingaben kommt man zur Übersicht, wo nun die erstellte Webseite auf scheint.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_overview.png]]&lt;br /&gt;
=Einbinden von Google Analytics mittels der Core-Funktion=&lt;br /&gt;
==Typolight bis 2.8.x==&lt;br /&gt;
Um GA in TYPOlight bis 2.8.x einzubinden, bearbeitet man das entsprechende Seitenlayout und fügt unter ''Experten-Einstellungen'' im Feld ''Google Analytics Id'' die vorhin notierte GA-ID ein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout_tl.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
Anschließend speichert und schließt man das Layout.&lt;br /&gt;
&lt;br /&gt;
==Contao ab 2.9==&lt;br /&gt;
Seit Contao 2.9 wird GA über das Template ''moo_analytics.tpl'' eingebunden. Wie man ein Template über den im Core integrierten Template-Editor einbindet, ist [[Templates_bearbeiten|hier]] beschrieben. Nachdem das Template ausgewählt wurde, wird das Template bearbeitet.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_templateedit.png|Template bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Wie schon in dem Kommentar des Templates vermerkt ist, braucht nur die im Code eingefügte Blind-ID (UA-XXXXX-X) gegen die vorhin notierte GA-ID ausgetauscht werden. Anschließend kann das Template gespeichert und geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Nun muss im Seitenlayout das Script eingebunden werden. Dazu setzt man unter ''Skript-Einstellungen'' einen Haken bei dem Punkt ''moo_analytics''. Es muss darauf geachtet werden, dass dieses Skript als letztes eingebunden wird! Anschließend wird das Layout gespeichert und geschlossen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
===IP-Adressen anonymisieren===&lt;br /&gt;
Aus Datenschutzgründen bietet GA seit geraumer Zeit die Möglichkeit, die geloggten IP-Adressen der Besucher zu anonymisieren. Dazu muss nochmal das Template bearbeitet werden und zwischen der Zeile &amp;lt;code&amp;gt;_gaq.push(['_setAccount', 'UA-XXXXX-X']);&amp;lt;/code&amp;gt; und der Zeile &amp;lt;code&amp;gt;_gaq.push(['_trackPageview']);&amp;lt;/code&amp;gt; eine neue Zeile mit folgendem Inhalt eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ganze Template sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * To use the script, replace UA-XXXXX-X in the code below with your Google&lt;br /&gt;
 * Analytics ID and then add it to a Contao page layout. Make sure to insert&lt;br /&gt;
 * it as the last moo_ script (!) and note that it will only be added to the&lt;br /&gt;
 * page if you are not logged into the back end.&lt;br /&gt;
 */&lt;br /&gt;
if (!BE_USER_LOGGED_IN &amp;amp;&amp;amp; sha1(session_id() . (!$GLOBALS['TL_CONFIG']['disableIpCheck'] ? $this-&amp;gt;Environment-&amp;gt;ip : '') . 'BE_USER_AUTH') != $this-&amp;gt;Input-&amp;gt;cookie('BE_USER_AUTH')):&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--//--&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!--&lt;br /&gt;
var _gaq = _gaq || [];&lt;br /&gt;
_gaq.push(['_setAccount', 'UA-XXXXX-X']);&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
_gaq.push(['_trackPageview']);&lt;br /&gt;
(function() {&lt;br /&gt;
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;&lt;br /&gt;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';&lt;br /&gt;
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);&lt;br /&gt;
})();&lt;br /&gt;
//--&amp;gt;&amp;lt;!]]&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Einbinden von Google Analytics mit Erweiterungen=&lt;br /&gt;
Statt der Anapssung an den Templates (ab Contao 2.9) kann die Erweiterung [[GoogleAnalytics]] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bestimmte Rechner (Webmaster, Kunden) vom Tracking ausschliessen=&lt;br /&gt;
Mit GA ist es möglich, bestimmte Rechner von den Statistiken auszuschliessen. Zum Beispiel ist es sinnvoll, den Entwickler oder Webmaster von der Datenerfassung auszuschliessen, da sonst die Statistik verfälscht wird. GA bietet dafür [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 die Filter Funktion auf Profil-Ebene].&amp;lt;br /&amp;gt;&lt;br /&gt;
Eine Möglichkeit, um gezielt Rechner auszuschliessen besteht darin, auf diesen Rechnern ein bestimmtes Cookie zu installieren. GA erkennt dieses Cookie und führt dann kein Tracking aus. &lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
===Google Analytics Filter===&lt;br /&gt;
In der GA Konto- bzw. Profilübersicht wählt man ''Bearbeiten'' für die gewünschte Domain. In den Profileinstellungen dann &amp;quot;Filter hinzufügen&amp;quot; wählen, dann die Felder wie folgt ausfüllen:&amp;lt;br /&amp;gt;&lt;br /&gt;
Filtername: nach cookie, Benutzerdefinierter Filter, Ausschliessen, Filterfeld: Benutzerdefiniert, Filtermuster: no_report, Gross-/Klein: Nein.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;Änderungen Speichern&amp;quot; wählen um den Filter zu erstellen.&lt;br /&gt;
&lt;br /&gt;
===Auszuschliessende Rechner identifizieren===&lt;br /&gt;
Damit die Webseite erkennt, ob der ausführende Rechner vom Tracking ausgeschlossen werden soll oder nicht, wird ein Cookie verwendet. Das Cookie wird bei jedem Webseitenaufruf automatisch per Javascript installiert. Allerdings nur auf den Rechnern, die ein solches Cookie explizit wünschen. Das Javascript erkennt anhand des [[w:de:User_Agent|userAgent]] Strings, ob der Rechner ein Cookie wünscht oder nicht. Wenn der Google Analytics Tracking Code im userAgent String vorkommt, wird das Cookie installiert. &lt;br /&gt;
&lt;br /&gt;
Um den userAgent String anzupassen kann wie folgt vorgegangen werden:&lt;br /&gt;
* '''Internet Explorer''': Um den userAgent String im Internet Explorer anzupassen, muss in die Registry eingegriffen werden. Dazu den folgenden Code in den Editor kopieren, den GA Tracking Code UA-XXXXX-X an den eigenen anpassen und als *.reg speichern. Anschliessend die Datei doppelklicken.&lt;br /&gt;
Für '''IE7:'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;reg&amp;quot;&amp;gt;&lt;br /&gt;
Windows Registry Editor Version 5.00&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;UA-XXXXX-X&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;UA-XXXXX-X&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Für '''IE8:'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;reg&amp;quot;&amp;gt;&lt;br /&gt;
Windows Registry Editor Version 5.00&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;UA-XXXXX-X&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;UA-XXXXX-X&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Für '''IE9:'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;reg&amp;quot;&amp;gt;&lt;br /&gt;
Windows Registry Editor Version 5.00&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
@=&amp;quot;Mozilla/5.0&amp;quot;&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;MSIE 9.0 UA-XXXXX-X&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
@=&amp;quot;Mozilla/5.0&amp;quot;&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;MSIE 9.0 UA-XXXXX-X&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Quelle: [http://www.ideadapt.net ideadapt]&lt;br /&gt;
* '''Mozilla Firefox (Version &amp;lt; 4)''': about:config in Adresszeile eingeben, Warnung aktzeptieren, Liste nach general.useragent.extra.firefox filtern, Eintrag mit Doppelklick bearbeiten und gewünschten Tracking Code am Ende einfügen, Änderungen mit OK übernehmen und Firefox neu starten.&lt;br /&gt;
{{Hinweis|'''Firefox &amp;gt;= 4 nicht unterstützt.''' Gemäss der [https://developer.mozilla.org/en/Gecko_user_agent_string_reference#implementation Gecko user agent string reference] unterstützt Firefox 4 und höher diese Variante nicht mehr. Eine Lösung ist in Arbeit.}}&lt;br /&gt;
* '''Opera''': opera:config#ISP|Id in Adresszeile eingeben, im Feld Id den Tracking Code eingeben, Änderungen speichern und Opera neu starten.&lt;br /&gt;
* '''Safari''': Im Menu auf Bearbeiten &amp;gt; Einstellungen, dann auf den Tab Erweitert, die Einstellung &amp;quot;Menu 'Entwickler' in der Menüleiste anzeigen&amp;quot; aktivieren. Einstellungen schliessen. Im Menu auf Entwickler &amp;gt; User Agent &amp;gt; Anderer ... Den Tracking Code am Ende einfügen und mit OK Änderungen speichern. Neustart nicht erforderlich.&lt;br /&gt;
* Allgmeine Anleitungen: [[w:de:User_Agent#Benutzerdefiniert|Wikipedia - für verschiedene Browser]], [http://www.fiddlertool.com/ua.aspx fiddlertool - Anzeige von userAgent und Installationsanleitungen]&lt;br /&gt;
&lt;br /&gt;
===Google Analytics Javascript anpassen===&lt;br /&gt;
Das folgende Javascript sollte bei jedem Seitenaufruf ausgeführt werden. Dementsprechend also z.B. im Head Bereich des HTML entsprechend einbinden. Zuvor noch UA-XXXXX-X durch den eigenen Tracking Code ersetzen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(navigator.userAgent &amp;amp;&amp;amp; navigator.userAgent.match(/UA-XXXXX-X/)){&lt;br /&gt;
 _gaq.push(['_setVar', 'no_report']); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dieses Script bezieht sich möglicherweise nicht auf die von Ihnen verwendete GA API Version. [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 Welche Version verwende ich?]&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Catalog_Templates_anpassen</id>
		<title>Catalog Templates anpassen</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Catalog_Templates_anpassen"/>
				<updated>2011-03-26T00:48:00Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Zeilenumbrüche in Texten von textarea Feldern im Frontend als HTML Umbrüche ausgeben */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AppliesTo&lt;br /&gt;
|TLVersion=ab 2.8&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
|Ext1=Catalog ab 2.0beta1&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Catalog]]&lt;br /&gt;
&lt;br /&gt;
=Templates für den Catalog bearbeiten und verändern=&lt;br /&gt;
&lt;br /&gt;
Der Catalog bringt eine Menge Templates mit. Für fast jedes Modul gibt es einen eigenen Satz Templates. Zusätzlich werden Standard Templates herangezogen um zum Beispiel die Galerie oder die Filter zu generieren.&lt;br /&gt;
&lt;br /&gt;
Da der Catalog aber nur ein Grundgerüst darstellt wird man nicht umhin kommen sich die Templates nach eigenen Wünschen und Vorstellungen anzupassen.&lt;br /&gt;
Zunächst geht es hier ganz allgemein um das Vorgehen bei der Template Anpassung. Wie man an bestimmte Werte kommt und so an die Ausgaben die man möchte.&lt;br /&gt;
Zusätzlich werden hier noch ein paar Fallbeispiele vorgestellt, welche zum Teil aus den Wünschen/Problemen im Forum entstanden sind (Vielen Dank an alle die daran im Forum gearbeitet haben!!!).&lt;br /&gt;
&lt;br /&gt;
=Voraussetzungen für das Tutorial=&lt;br /&gt;
* wie ein Katalog erstellt wird sollte von anderen Tutorials klar sein. Es sollte also ein Katalog vorhanden sein mit Inhalten.&lt;br /&gt;
* der Umgang mit Contao sollte bekannt sein&lt;br /&gt;
* wie man [[Templates_bearbeiten|Templates bearbeitet]] sollte in Grundzügen bekannt sein.&lt;br /&gt;
&lt;br /&gt;
=Grundlagen=&lt;br /&gt;
&lt;br /&gt;
==Alles ein Array das entries Array==&lt;br /&gt;
&lt;br /&gt;
Um sich die Ausgabe von dem Array anzuschauen braucht man nur diese Zeile in das Template bringen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php print_r($this-&amp;gt;entries); ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man sich das Ergebniss nun auf der neu geladenen Seite anschaut ist das nicht gerade schön anzusehen. Alles steht hintereinander und ergibt einen Code Brei. Deswegen sollte man sich das am besten immer direkt in der Quellcode Ansicht anschauen. Da bekommt man alles schön eingerückt und verschachtelt zu sehen! Oder man setzt die Ausgabe in ein &amp;lt;nowiki&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;/nowiki&amp;gt;-Tag.&lt;br /&gt;
&lt;br /&gt;
Auszug aus einem Immoblilien Katalog:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
  [0] =&amp;gt; Array&lt;br /&gt;
    (&lt;br /&gt;
      [id] =&amp;gt; 33&lt;br /&gt;
      [catalog_name] =&amp;gt; Immobilien&lt;br /&gt;
      [parentJumpTo] =&amp;gt; 27&lt;br /&gt;
      [tablename] =&amp;gt; immo_immobilien_alle&lt;br /&gt;
      [showLink] =&amp;gt; 1&lt;br /&gt;
      [class] =&amp;gt;  first last even&lt;br /&gt;
      [data] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
          [immo_titel] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Titel&lt;br /&gt;
              [type] =&amp;gt; text&lt;br /&gt;
              [raw] =&amp;gt; villa in tunesien&lt;br /&gt;
              [value] =&amp;gt; villa in tunesien&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
          [immo_gebiet] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Gebiet&lt;br /&gt;
              [type] =&amp;gt; select&lt;br /&gt;
              [raw] =&amp;gt; 141&lt;br /&gt;
              [value] =&amp;gt; Beja&lt;br /&gt;
              [ref] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [id] =&amp;gt; 141&lt;br /&gt;
                      [pid] =&amp;gt; 130&lt;br /&gt;
                      [tstamp] =&amp;gt; 1273353133&lt;br /&gt;
                      [sorting] =&amp;gt; 112&lt;br /&gt;
                      [type] =&amp;gt; &lt;br /&gt;
                      [alias] =&amp;gt; beja&lt;br /&gt;
                      [name] =&amp;gt; Beja&lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
          [immo_bild] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Bild - nur für das erste Bild &amp;amp;#40;Ein Bild für die Vorschau / maximale Dateigröße: 2MB / maximale Maße in px: 800x600&amp;amp;#41;&lt;br /&gt;
              [type] =&amp;gt; file&lt;br /&gt;
              [raw] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/bild_01.jpg&lt;br /&gt;
              [value] =&amp;gt; &amp;lt;a href=&amp;quot;immobilien-leser/items/miethaus-1.html&amp;quot; title=&amp;quot;Die Details des Eintrags ansehen&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;image first even&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogrelated0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/bild_01.jpg&amp;quot; title=&amp;quot;Bild 01&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/bild_01-0ec9b6d1.jpg&amp;quot; alt=&amp;quot;Bild 01&amp;quot; width=&amp;quot;200&amp;quot; height=&amp;quot;100&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
              [files] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/bild_01.jpg&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
              [meta] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/bild_01-0ec9b6d1.jpg&lt;br /&gt;
                      [alt] =&amp;gt; Bild 01&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogrelated0&lt;br /&gt;
                      [w] =&amp;gt; 200&lt;br /&gt;
                      [h] =&amp;gt; 100&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;200&amp;quot; height=&amp;quot;100&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
          [immo_bildergalerie] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Bildergalerie - alle anderen Bilder &amp;amp;#40;für die Detail Ansicht / maximale Dateigröße: 2MB / maximale Maße in px: 800x600&amp;amp;#41;&lt;br /&gt;
              [type] =&amp;gt; file&lt;br /&gt;
              [raw] =&amp;gt; a:4:{i:0;s:103:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/how 2 rubbeldiekatz.jpg&amp;quot;;i:1;s:89:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/image.png&amp;quot;;i:2;s:99:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/institut-aussen.jpg&amp;quot;;i:3;s:96:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/james-wilson.jpg&amp;quot;;}&lt;br /&gt;
              [value] =&amp;gt; &amp;lt;span class=&amp;quot;image first even&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/how 2 rubbeldiekatz.jpg&amp;quot; title=&amp;quot;How 2 rubbeldiekatz&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/how 2 rubbeldiekatz-0d26e104.jpg&amp;quot; alt=&amp;quot;How 2 rubbeldiekatz&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;image odd&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/image.png&amp;quot; title=&amp;quot;Image&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/image-6a4159ed.png&amp;quot; alt=&amp;quot;Image&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;image even&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/institut-aussen.jpg&amp;quot; title=&amp;quot;Institut-aussen&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/institut-aussen-538b1b35.jpg&amp;quot; alt=&amp;quot;Institut-aussen&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;image odd&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/james-wilson.jpg&amp;quot; title=&amp;quot;James-wilson&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/james-wilson-379f0b97.jpg&amp;quot; alt=&amp;quot;James-wilson&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
              [files] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/how 2 rubbeldiekatz.jpg&lt;br /&gt;
                  [1] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/image.png&lt;br /&gt;
                  [2] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/institut-aussen.jpg&lt;br /&gt;
                  [3] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/james-wilson.jpg&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
              [meta] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/how 2 rubbeldiekatz-0d26e104.jpg&lt;br /&gt;
                      [alt] =&amp;gt; How 2 rubbeldiekatz&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                  [1] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/image-6a4159ed.png&lt;br /&gt;
                      [alt] =&amp;gt; Image&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                  [2] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/institut-aussen-538b1b35.jpg&lt;br /&gt;
                      [alt] =&amp;gt; Institut-aussen&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
									[3] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/james-wilson-379f0b97.jpg&lt;br /&gt;
                      [alt] =&amp;gt; James-wilson&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
								)&lt;br /&gt;
&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
          [immo_sterne] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Sterne &amp;amp;#40;Wie viele Sterne hat das Hotel&amp;amp;#41;&lt;br /&gt;
              [type] =&amp;gt; number&lt;br /&gt;
              [raw] =&amp;gt; &lt;br /&gt;
              [value] =&amp;gt; &lt;br /&gt;
            )&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist nur ein kleiner Auszug aus der Ausgabe.&lt;br /&gt;
In dieser Ausgabe stehten verschiedene Dinge.&lt;br /&gt;
&lt;br /&gt;
Am Anfang stehen immer die Grundinformationen (id, catalog_name, parentJumpTo, tablename,showLink, class).&lt;br /&gt;
Die werden in der Regel nicht gebraucht, sind aber gut zu wissen, damit man mal kurz schauen kann ob man überhaupt richtig ist ;)&lt;br /&gt;
&lt;br /&gt;
Alle Variablen die man bekommt stehen immer in dem Array '''data'''&lt;br /&gt;
Um an die einzelnen Werte zu kommen, braucht man nur die Arrays von dem Wert durchzugehen bis nach oben.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Den Titel der Immobilie als Überschrift ausgeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;&amp;lt;?php echo $entry['data']['immo_titel']['value']; ?&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das value 'villa in tunesien' soll ausgegeben werden, welches sich in dem Array 'immo_titel' befindet und das ist in dem Array 'data'.&lt;br /&gt;
So einfach bekommt man einzelne Werte ausgegeben.&lt;br /&gt;
&lt;br /&gt;
==Die Bestandteile der meta-Arrays==&lt;br /&gt;
&lt;br /&gt;
Die Arrays in so einer Ausgabe sind immer gleich aufgebaut. Je nach Feldtyp etwas anders.&lt;br /&gt;
&lt;br /&gt;
Die Standard Informationen&lt;br /&gt;
* class -&amp;gt; die CSS-Klassen des Items (eher wichtig in einer Liste, da man dort zum Beispiel even/odd zur Verfügung hat)&lt;br /&gt;
* link -&amp;gt; Die URL der Leser Seite (auch eher Listen spezifisch)&lt;br /&gt;
* url -&amp;gt; enthält nur die URL von dem Link. Damit kann man seine eigenen Links bauen.&lt;br /&gt;
* data -&amp;gt; Hier sind alle Felder drin.&lt;br /&gt;
&lt;br /&gt;
===Die allgemeinen Parameter===&lt;br /&gt;
Jedes Feld hat immer diese 4 Parameter:&lt;br /&gt;
    * [label] =&amp;gt; Enthält das Label welches im Katalog vergeben wurde&lt;br /&gt;
    * [type] =&amp;gt; Enthält den Feldtyp. Zum Beispiel: text, file, select, tags&lt;br /&gt;
    * [raw] =&amp;gt; Enthält die Original Daten direkt aus der Datenbank. Hiermit kann man immer komplett eigene Ausgaben gestalten.&lt;br /&gt;
    * [value] =&amp;gt; Enthält die vorformatierten Daten: &lt;br /&gt;
                    Datei-Bild Feld =&amp;gt; Bild Lightbox&lt;br /&gt;
                    Datei-download =&amp;gt; den download Link&lt;br /&gt;
                    Text Feld =&amp;gt; der Formatierte String (numeric, date, etc.)&lt;br /&gt;
&lt;br /&gt;
===Die speziellen Parameter===&lt;br /&gt;
&lt;br /&gt;
====Dateien====&lt;br /&gt;
&lt;br /&gt;
* [files] =&amp;gt; Beinhaltet ein Array -&amp;gt; [0] .. [xxx] mit den Dateinamen&lt;br /&gt;
* [meta] =&amp;gt; Beinhaltet die meta-Angaben, wie oben genannt&lt;br /&gt;
&lt;br /&gt;
Wenn es sich um eine Datei handelt (kein Bild) wird das meta-Array diese Werte enthalten:&lt;br /&gt;
&lt;br /&gt;
* [url] =&amp;gt; die relative URL zum herunterladen&lt;br /&gt;
* [alt] =&amp;gt; den alt Text&lt;br /&gt;
* [caption] =&amp;gt; die Beschreibung in der meta.txt Datei&lt;br /&gt;
* [size] =&amp;gt; die größe in Byte&lt;br /&gt;
* [sizetext] =&amp;gt; die größe in lesbarer Form (z.B. 230.0 kB)&lt;br /&gt;
* [icon] =&amp;gt; das Icon (gesetzt wird der Standard vom System selber, basierend auf den Mime-Typen)&lt;br /&gt;
&lt;br /&gt;
Wenn es sich um ein Bild handelt, wird das meta-Array diese Werte enthalten:&lt;br /&gt;
&lt;br /&gt;
* [src] =&amp;gt; den Dateinamen von dem Bild in angepasster größe (wenn das benutzt wird im Katalog selber)&lt;br /&gt;
* [alt] =&amp;gt; Den alt-Text&lt;br /&gt;
* [lb] =&amp;gt; die einzigartige REL=lightbox ID damit die Slimbox angesteuert werden kann&lt;br /&gt;
* [w] =&amp;gt; Bild width&lt;br /&gt;
* [h] =&amp;gt; Bild height&lt;br /&gt;
* [wh] =&amp;gt; Bild width/height in einem String &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei einer referenzierenden Tabelle können noch folgende Inhalte vorhanden sein:&lt;br /&gt;
&lt;br /&gt;
* [parentJumpTo] =&amp;gt; die ID von dem referenzierenden Katalog (kann in Inserttags genutzt werden)&lt;br /&gt;
* [parentLink] =&amp;gt; Der komplette Link mit einem Standard Text &amp;quot;View item details&amp;quot;&lt;br /&gt;
* [parentUrl] =&amp;gt; Die relative URL zu der Detail (Leser) Seite&lt;br /&gt;
&lt;br /&gt;
=Beispiel Anpassungen=&lt;br /&gt;
&lt;br /&gt;
==Einfache Überprüfung ob Inhalt vorhanden ist==&lt;br /&gt;
Es gibt immer wieder einzelne Felder die nur optional zu befüllen sind.&lt;br /&gt;
Wenn man die Ausgabe von einem Div nur machen möchte wenn auch Inhalte vorhanden sind, kann man das einfach mit einer if-Abfrage erledigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['immo_bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
   &amp;lt;div class=&amp;quot;immo_galerie&amp;quot;&amp;gt;&amp;lt;?php echo $entry['data']['immo_bildergalerie']['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dem Beispiel wird die Bildergalerie mit dem umschließenden div nur dann ausgegeben wenn auch mindestens ein Bild vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
==Wie man in eigenen Templates beim Katalog Thumbnails generieren kann==&lt;br /&gt;
&lt;br /&gt;
Thumbnails werden in Contao mit der Methode Controller::[[Arbeiten mit Bildern#getImage()|getImage()]] generiert.&lt;br /&gt;
Wichtig dabei ist, dass nicht der ganze Code des Bildes zurückgegeben wird, sondern lediglich die URL zum Thumbnail.&lt;br /&gt;
&lt;br /&gt;
Die Methode sieht wie folgt aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
getImage($image, $width, $height, $mode='', $target=null)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Parameter erklären sich wie folgt:&lt;br /&gt;
* $image (String) ''zwingend''&lt;br /&gt;
** erwartet eine relative URL zum Bild, dass verkleinert werden soll (z.B. 'tl_files/meine_bilder/mein_bild.jpg')&lt;br /&gt;
* $width (Integer) ''bedingt optional (Achtung: mind. eine Angabe zu Breite oder Höhe ist zwingend!)''&lt;br /&gt;
** erwartet eine Zahl, die die Breite in Pixel angibt (z.B. 230)&lt;br /&gt;
* $height (Integer) ''bedingt optional (Achtung: mind. eine Angabe zu Breite oder Höhe ist zwingend!)''&lt;br /&gt;
** erwartet eine Zahl, die die Breite in Pixel angibt (z.B. 230)&lt;br /&gt;
* $mode (String) ''optional'' (weitergehende Informationen auf dem [http://www.contao.org/blog-leser/items/die-3-varianten-der-bildanpassung-in-typolight-2.8.html offiziellen Contao-Blog])&lt;br /&gt;
** erwartet einen Angabe darüber, wie das Bild behandelt werden soll. Möglich sind:&lt;br /&gt;
*** &amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt; (Exaktes Format) - default&lt;br /&gt;
*** 'proportional' (Proportional)&lt;br /&gt;
*** 'box' (An Rahmen anpassen)&lt;br /&gt;
* $target (String) ''optional''&lt;br /&gt;
** erwartet eine relative URL zu einem Bild, dass ersetzt werden soll (z.B. 'tl_files/meine_bilder/mein_zu_ersetzendes_bild.jpg')&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für ein Template mit einem Thumbnail von 430px Breite und 300px Höhe, das proportional geparst werden soll, könnte also so aussehen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;&amp;lt;?php echo $this-&amp;gt;getImage('tl_files/meine_bilder/mein_bild.jpg',430,300,'proportional'); ?&amp;gt;&amp;quot; alt=&amp;quot;Mein alt-Text für mein Bild&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fortlaufende Nummerierung der einzelnen Einträge in einer Liste==&lt;br /&gt;
&lt;br /&gt;
Die Paginierung wurde berücksichtigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$perpage=3&lt;br /&gt;
$index=0&lt;br /&gt;
foreach ($this-&amp;gt;entries as $entry):&lt;br /&gt;
  &amp;lt;$index++&lt;br /&gt;
  if (isset($_GET['page'])):&lt;br /&gt;
    $number = $index + ($perpage * ($_GET['page'] - 1))&lt;br /&gt;
  else:&lt;br /&gt;
    $number = $index&lt;br /&gt;
  endif;&lt;br /&gt;
  ...&lt;br /&gt;
endforeach;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wobei $perpage die Anzahl der Items enhält, die pro Seite ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
==Kategorien einmalig ausgeben und die Items darunter==&lt;br /&gt;
Beispiel anhand eines modifizierten catalog_simple.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (count($this-&amp;gt;entries)):&lt;br /&gt;
   $lastcat=''; ?&amp;gt;&lt;br /&gt;
   &amp;lt;div class=&amp;quot;layout_simple&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;?php foreach ($this-&amp;gt;entries as $entry):&lt;br /&gt;
      if ($lastcat!=$entry[data]['Kategorie']['value']):&lt;br /&gt;
         $lastcat=$entry[data]['Kategorie']['value']; ?&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;cat&amp;quot;&amp;gt;&amp;lt;?php echo $entry[data]['Kategorie']['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;item&amp;lt;?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data):&lt;br /&gt;
         if ($field=='Kategorie') continue;&lt;br /&gt;
         if (!in_array($field, array('catalog_name','parentJumpTo'))): ?&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;label&amp;quot;&amp;gt;&amp;lt;?php echo $data['label']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
         &amp;lt;?php endif;&lt;br /&gt;
      endforeach;&lt;br /&gt;
      if ($entry['showLink'] &amp;amp;&amp;amp; $entry['link']): ?&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;link&amp;quot;&amp;gt;&amp;lt;?php echo $entry['link']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif;&lt;br /&gt;
      if ($entry['linkEdit']): ?&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;linkEdit&amp;quot;&amp;gt;&amp;lt;?php echo $entry['linkEdit']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php else:&lt;br /&gt;
   if ($this-&amp;gt;condition): ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;condition&amp;quot;&amp;gt;&amp;lt;?php echo $this-&amp;gt;condition; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;?php else: ?&amp;gt;&lt;br /&gt;
      &amp;lt;p class=&amp;quot;info&amp;quot;&amp;gt;There are no entries matching your search.&amp;lt;/p&amp;gt;&lt;br /&gt;
   &amp;lt;?php endif;&lt;br /&gt;
endif;&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fortlaufende Nummern für die Zellen im Katalog==&lt;br /&gt;
&lt;br /&gt;
Am Beispiel von einem simpletable.tpl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;layout_simpletable&amp;quot; summary=&amp;quot;Catalog Items&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;thead class=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;?php list($field, $heading) = each($this-&amp;gt;entries);&lt;br /&gt;
      $i = 0;&lt;br /&gt;
      foreach ($heading['data'] as $field=&amp;gt;$data):&lt;br /&gt;
      $i++;&lt;br /&gt;
        if (!in_array($field, array('catalog_name','parentJumpTo'))): ?&amp;gt;&lt;br /&gt;
          &amp;lt;th class=&amp;quot;header&amp;lt;?php echo $i; ?&amp;gt;&amp;quot;&amp;gt;&amp;lt;?php echo $data['label']; ?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;?php endif;&lt;br /&gt;
      endforeach; ?&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;/thead&amp;gt;&lt;br /&gt;
  &amp;lt;tbody class=&amp;quot;body&amp;lt;?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;?php foreach ($this-&amp;gt;entries as $entry):&lt;br /&gt;
      $n++ ?&amp;gt;&lt;br /&gt;
      &amp;lt;tr class=&amp;quot;item&amp;lt;?php echo $n; ?&amp;gt;&amp;lt;?php echo $entry['class'] ? '  '.$entry['class'] : ''; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data):&lt;br /&gt;
        $k++;&lt;br /&gt;
          if (!in_array($field, array('catalog_name','parentJumpTo'))): ?&amp;gt;&lt;br /&gt;
            &amp;lt;td class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;lt;?php echo $k; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;?php if (strlen($data['value'])):&lt;br /&gt;
              if ($entry['url'] &amp;amp;&amp;amp; $field == 'title'): ?&amp;gt;&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['url']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;?php endif;&lt;br /&gt;
            echo $data['value'];&lt;br /&gt;
              if ($entry['url'] &amp;amp;&amp;amp; $field == 'title'): ?&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
              &amp;lt;?php endif;&lt;br /&gt;
            endif; ?&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;?php endif;&lt;br /&gt;
        endforeach; ?&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
  &amp;lt;/tbody&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eine Bildergalerie erstellen, wo nur das 1. Bild ausgegeben wird und die anderen in der Lightbox vorhanden sind==&lt;br /&gt;
&lt;br /&gt;
{{Achtung|diese beiden Herangehensweisen sind noch ungetestet.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTML:&lt;br /&gt;
Die Ausgabe sollte ungefähr so aussehen:&lt;br /&gt;
&amp;lt;spurce lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;tl_files/image01.jpg&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/image01.jpg&amp;quot; alt=&amp;quot;bla&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;tl_files/image02.jpg&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das 1. Bild mit Vorschaubild und die anderen Bilder nur als Link, damit diese ausgegeben werden, aber erst mal nix zu sehen ist.&lt;br /&gt;
&lt;br /&gt;
Es gibt da ja im Grunde 2 Herangehensweisen:&lt;br /&gt;
1. Im Backend gibt man 1 Bild an und dann noch mehrere Bilder als Galerie (so hat man die volle Kontrolle darüber welches das Vorschaubild ist)&lt;br /&gt;
2. Man gibt nur eine Bildergalerie an.&lt;br /&gt;
&lt;br /&gt;
Template (Grundüberlegung):&lt;br /&gt;
1. Grundüberlegung der Ausgabe allgemein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['einzelbild']['meta']):?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bilder&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;strong&amp;gt;&amp;lt;?php echo $entry['data']['einzelbild']['value']; ?&amp;gt;&amp;lt;/strong&amp;gt;&lt;br /&gt;
      &amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&amp;lt;?php echo $entry['data']['bildergalerie']['value']; ?&amp;gt;&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Grundüberlegung der Ausgabe allgemein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bilder&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;?php echo $entry['data']['bildergalerie']['value']; ?&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Damit hat man einfach nur die normale Galerie. Das wäre für diesem Fall ja nicht passend; sei an dieser Stelle jedoch noch mal dokumentiert sein.&lt;br /&gt;
&lt;br /&gt;
Um das jetzt zu verbinden, gibt es verschiedene Vorgehensweisen:&lt;br /&gt;
1.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['einzelbild']['meta']):?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bilder&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;strong&amp;gt;&amp;lt;?php echo $entry['data']['einzelbild']['value']; ?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['data']['einzelbild']['files']['0'];?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&amp;lt;?php echo $entry['data']['einzelbild']['meta']['0']['src'];?&amp;gt;&amp;quot; alt=&amp;quot;bla&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/strong&amp;gt;&lt;br /&gt;
 &amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['bildergalerie']['value'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['bildergalerie']['value']['meta'][$field]['src'] ?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot; &amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Für das 1. Bild (in Array ja die 0 eine andere Ausgabe machen):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['bildergalerie']['value'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;?php if(($entry['bildergalerie']['value']['meta'][$field])=='0'):?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['data']['einzelbild']['files']['0'];?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&amp;lt;?php echo $entry['bildergalerie']['value']['meta'][$field]['src'] ?&amp;gt;&amp;quot; alt=&amp;quot;bla&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;?php else;?&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;lightbox[lightbox_1]&amp;quot; href=&amp;quot;&amp;lt;?php echo $entry['bildergalerie']['value']['meta'][$field]['src'] ?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==2 Katalog referenzieren==&lt;br /&gt;
Hier im Forum ist die Herangehensweise beschrieben, wie man das machen kann ohne mit Referenzen aus catalog 2 zu arbeiten:&lt;br /&gt;
[http://www.contao-community.de/showthread.php?5448-2-Kataloge-referenzieren-GEL%D6ST]&lt;br /&gt;
&lt;br /&gt;
Hier noch ein kurzes Beispiel wie das gehen kann:&lt;br /&gt;
&lt;br /&gt;
In dem Catalog Leser von einem Autoren sollen die Bücher dargestellt werden (diese sind mit dem Feldtyp Tags referenziert). Die Bücher sind in dem Fall innerhalb des Array 'ref':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($data['ref'] as $id=&amp;gt;$ref): ?&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;div class=&amp;quot;row_&amp;lt;?php echo $id; ?&amp;gt; buch &amp;lt;?php if($ref['bilder_buch']) echo &amp;quot;buch_mitbild&amp;quot;;?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Alle Werte ausgeben und nur einen Anpassen (als Beispiel Bilder mit eigner Beschreibung) ==&lt;br /&gt;
&lt;br /&gt;
Hier ein Auszug wie bei dem Feld beispiel_bild der gewünschte Code ausgegeben wird und ansonsten die Werte einfach normal vom Catalog ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php if($field=='beispiel_bild'):?&amp;gt;&lt;br /&gt;
{{image::&amp;lt;?php echo $data['files']['0']; ?&amp;gt;?width=&amp;lt;?php echo $data['meta']['0']['w']; ?&amp;gt;&amp;amp;height=&amp;lt;?php echo $data['meta']['0']['h']; ?&amp;gt;&amp;amp;alt=&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;amp;mode=crop&amp;amp;rel=lightbox}}&lt;br /&gt;
&amp;lt;?php elseif(!in_array($field, array('catalog_name','parentJumpTo'))):?&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;label&amp;quot;&amp;gt;&amp;lt;?php echo $data['label']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele finden sich im engl. Wiki vom Catalog==&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/typolight-catalog/wiki/EN_CatalogTemplatesTutorial http://code.google.com/p/typolight-catalog/wiki/EN_CatalogTemplatesTutorial]&lt;br /&gt;
&lt;br /&gt;
==Beispiele im Forum:==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao-community.de/showthread.php?10335-Berufs-und-Ausstellerverzeichnis-kombinieren&amp;amp;p=74438#post74438 Zwei Kataloge im Template verbinden]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:MacKP|MacKP]] 21:44, 21. Mai 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Alle Werte ausgeben und nur einen anpassen und als Bild ausgeben (Taxonomie mit verlinkten Icons) ==&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie im obrigen Beispiel, wird hier eine Spalte so angepasst, dass die Taxonomie IDs gegen Icons getauscht werden (auch ideal für Immobilien, Ferienwohnungen). &lt;br /&gt;
&lt;br /&gt;
Zunächst wird abgefragt, welches Katalogfeld seperat behandelt wird  &amp;lt;nowiki&amp;gt;&amp;lt;?php if($field=='tags'):?&amp;gt; &amp;lt;/nowiki&amp;gt;. Zwischen den Kommentaren wird zunächst zum einfacheren Vorgehen die (verlinkten) Icons in eine Variable gespeichert ($icons) und darunter mittels foreach das Puffer-Array angesprochen und ausgegeben. Dadurch lassen sich auch Tageinträge größer eins verarbeiten:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;td class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php if($field=='tags'):?&amp;gt;&lt;br /&gt;
&amp;lt;!------------------ ANFANG ------------------&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$icons=array(&lt;br /&gt;
  // Schema: 'id' =&amp;gt; 'zu generierender html code',&lt;br /&gt;
  '2' =&amp;gt; '&amp;lt;a href=&amp;quot;#&amp;quot; title=&amp;quot;eins&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/eins.gif&amp;quot; alt=&amp;quot;eins&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;',&lt;br /&gt;
  '3' =&amp;gt; '&amp;lt;a href=&amp;quot;#&amp;quot; title=&amp;quot;eins&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/zwei.gif&amp;quot; alt=&amp;quot;zwei&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;',&lt;br /&gt;
  '4' =&amp;gt; '&amp;lt;a href=&amp;quot;#&amp;quot; title=&amp;quot;eins&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/drei.gif&amp;quot; alt=&amp;quot;drei&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;'&lt;br /&gt;
);&lt;br /&gt;
foreach($data['ref'] as $info)&lt;br /&gt;
  echo $icons[$info['id']];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;!------------------ ENDE ------------------&amp;gt;&lt;br /&gt;
 &amp;lt;?php elseif(!in_array($field, array('catalog_name','parentJumpTo'))):?&amp;gt;&lt;br /&gt;
     &amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;?php endforeach; ?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:carino|carino]] 10:30, 24. Juli 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Zeilenumbrüche in Texten von textarea Feldern als HTML Umbrüche im Template ausgeben==&lt;br /&gt;
Ist ein Feld vom Typ textarea, kann man dort Zeilenumbrüche eingeben und speichern. Diese werden im Frontend aber nicht angezeigt.&lt;br /&gt;
Mit folgendem Befehl werden die Umbrüche in HTML umgewandelt und damit im Frontend sichtbar. Den Code einfach vor der Ausgabe des description Feldes einfügen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// replace new line feed \n (0x0A) in description field by HTML line break &amp;lt;br/&amp;gt;&lt;br /&gt;
$entry['data']['description']['value'] = str_replace(&amp;quot;\xa&amp;quot;, &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;, $entry['data']['description']['value']); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:bubblez|bubblez]] 01:46, 26. Mar 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Catalog_Templates_anpassen</id>
		<title>Catalog Templates anpassen</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Catalog_Templates_anpassen"/>
				<updated>2011-03-26T00:47:22Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Zeilenumbruch im textarea Feld des Backend als HTML ausgeben */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AppliesTo&lt;br /&gt;
|TLVersion=ab 2.8&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
|Ext1=Catalog ab 2.0beta1&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Catalog]]&lt;br /&gt;
&lt;br /&gt;
=Templates für den Catalog bearbeiten und verändern=&lt;br /&gt;
&lt;br /&gt;
Der Catalog bringt eine Menge Templates mit. Für fast jedes Modul gibt es einen eigenen Satz Templates. Zusätzlich werden Standard Templates herangezogen um zum Beispiel die Galerie oder die Filter zu generieren.&lt;br /&gt;
&lt;br /&gt;
Da der Catalog aber nur ein Grundgerüst darstellt wird man nicht umhin kommen sich die Templates nach eigenen Wünschen und Vorstellungen anzupassen.&lt;br /&gt;
Zunächst geht es hier ganz allgemein um das Vorgehen bei der Template Anpassung. Wie man an bestimmte Werte kommt und so an die Ausgaben die man möchte.&lt;br /&gt;
Zusätzlich werden hier noch ein paar Fallbeispiele vorgestellt, welche zum Teil aus den Wünschen/Problemen im Forum entstanden sind (Vielen Dank an alle die daran im Forum gearbeitet haben!!!).&lt;br /&gt;
&lt;br /&gt;
=Voraussetzungen für das Tutorial=&lt;br /&gt;
* wie ein Katalog erstellt wird sollte von anderen Tutorials klar sein. Es sollte also ein Katalog vorhanden sein mit Inhalten.&lt;br /&gt;
* der Umgang mit Contao sollte bekannt sein&lt;br /&gt;
* wie man [[Templates_bearbeiten|Templates bearbeitet]] sollte in Grundzügen bekannt sein.&lt;br /&gt;
&lt;br /&gt;
=Grundlagen=&lt;br /&gt;
&lt;br /&gt;
==Alles ein Array das entries Array==&lt;br /&gt;
&lt;br /&gt;
Um sich die Ausgabe von dem Array anzuschauen braucht man nur diese Zeile in das Template bringen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php print_r($this-&amp;gt;entries); ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man sich das Ergebniss nun auf der neu geladenen Seite anschaut ist das nicht gerade schön anzusehen. Alles steht hintereinander und ergibt einen Code Brei. Deswegen sollte man sich das am besten immer direkt in der Quellcode Ansicht anschauen. Da bekommt man alles schön eingerückt und verschachtelt zu sehen! Oder man setzt die Ausgabe in ein &amp;lt;nowiki&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;/nowiki&amp;gt;-Tag.&lt;br /&gt;
&lt;br /&gt;
Auszug aus einem Immoblilien Katalog:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
  [0] =&amp;gt; Array&lt;br /&gt;
    (&lt;br /&gt;
      [id] =&amp;gt; 33&lt;br /&gt;
      [catalog_name] =&amp;gt; Immobilien&lt;br /&gt;
      [parentJumpTo] =&amp;gt; 27&lt;br /&gt;
      [tablename] =&amp;gt; immo_immobilien_alle&lt;br /&gt;
      [showLink] =&amp;gt; 1&lt;br /&gt;
      [class] =&amp;gt;  first last even&lt;br /&gt;
      [data] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
          [immo_titel] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Titel&lt;br /&gt;
              [type] =&amp;gt; text&lt;br /&gt;
              [raw] =&amp;gt; villa in tunesien&lt;br /&gt;
              [value] =&amp;gt; villa in tunesien&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
          [immo_gebiet] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Gebiet&lt;br /&gt;
              [type] =&amp;gt; select&lt;br /&gt;
              [raw] =&amp;gt; 141&lt;br /&gt;
              [value] =&amp;gt; Beja&lt;br /&gt;
              [ref] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [id] =&amp;gt; 141&lt;br /&gt;
                      [pid] =&amp;gt; 130&lt;br /&gt;
                      [tstamp] =&amp;gt; 1273353133&lt;br /&gt;
                      [sorting] =&amp;gt; 112&lt;br /&gt;
                      [type] =&amp;gt; &lt;br /&gt;
                      [alias] =&amp;gt; beja&lt;br /&gt;
                      [name] =&amp;gt; Beja&lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
          [immo_bild] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Bild - nur für das erste Bild &amp;amp;#40;Ein Bild für die Vorschau / maximale Dateigröße: 2MB / maximale Maße in px: 800x600&amp;amp;#41;&lt;br /&gt;
              [type] =&amp;gt; file&lt;br /&gt;
              [raw] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/bild_01.jpg&lt;br /&gt;
              [value] =&amp;gt; &amp;lt;a href=&amp;quot;immobilien-leser/items/miethaus-1.html&amp;quot; title=&amp;quot;Die Details des Eintrags ansehen&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;image first even&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogrelated0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/bild_01.jpg&amp;quot; title=&amp;quot;Bild 01&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/bild_01-0ec9b6d1.jpg&amp;quot; alt=&amp;quot;Bild 01&amp;quot; width=&amp;quot;200&amp;quot; height=&amp;quot;100&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
              [files] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/bild_01.jpg&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
              [meta] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/bild_01-0ec9b6d1.jpg&lt;br /&gt;
                      [alt] =&amp;gt; Bild 01&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogrelated0&lt;br /&gt;
                      [w] =&amp;gt; 200&lt;br /&gt;
                      [h] =&amp;gt; 100&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;200&amp;quot; height=&amp;quot;100&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
          [immo_bildergalerie] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Bildergalerie - alle anderen Bilder &amp;amp;#40;für die Detail Ansicht / maximale Dateigröße: 2MB / maximale Maße in px: 800x600&amp;amp;#41;&lt;br /&gt;
              [type] =&amp;gt; file&lt;br /&gt;
              [raw] =&amp;gt; a:4:{i:0;s:103:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/how 2 rubbeldiekatz.jpg&amp;quot;;i:1;s:89:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/image.png&amp;quot;;i:2;s:99:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/institut-aussen.jpg&amp;quot;;i:3;s:96:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/james-wilson.jpg&amp;quot;;}&lt;br /&gt;
              [value] =&amp;gt; &amp;lt;span class=&amp;quot;image first even&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/how 2 rubbeldiekatz.jpg&amp;quot; title=&amp;quot;How 2 rubbeldiekatz&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/how 2 rubbeldiekatz-0d26e104.jpg&amp;quot; alt=&amp;quot;How 2 rubbeldiekatz&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;image odd&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/image.png&amp;quot; title=&amp;quot;Image&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/image-6a4159ed.png&amp;quot; alt=&amp;quot;Image&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;image even&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/institut-aussen.jpg&amp;quot; title=&amp;quot;Institut-aussen&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/institut-aussen-538b1b35.jpg&amp;quot; alt=&amp;quot;Institut-aussen&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;image odd&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/james-wilson.jpg&amp;quot; title=&amp;quot;James-wilson&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/james-wilson-379f0b97.jpg&amp;quot; alt=&amp;quot;James-wilson&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
              [files] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/how 2 rubbeldiekatz.jpg&lt;br /&gt;
                  [1] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/image.png&lt;br /&gt;
                  [2] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/institut-aussen.jpg&lt;br /&gt;
                  [3] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/james-wilson.jpg&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
              [meta] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/how 2 rubbeldiekatz-0d26e104.jpg&lt;br /&gt;
                      [alt] =&amp;gt; How 2 rubbeldiekatz&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                  [1] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/image-6a4159ed.png&lt;br /&gt;
                      [alt] =&amp;gt; Image&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                  [2] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/institut-aussen-538b1b35.jpg&lt;br /&gt;
                      [alt] =&amp;gt; Institut-aussen&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
									[3] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/james-wilson-379f0b97.jpg&lt;br /&gt;
                      [alt] =&amp;gt; James-wilson&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
								)&lt;br /&gt;
&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
          [immo_sterne] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Sterne &amp;amp;#40;Wie viele Sterne hat das Hotel&amp;amp;#41;&lt;br /&gt;
              [type] =&amp;gt; number&lt;br /&gt;
              [raw] =&amp;gt; &lt;br /&gt;
              [value] =&amp;gt; &lt;br /&gt;
            )&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist nur ein kleiner Auszug aus der Ausgabe.&lt;br /&gt;
In dieser Ausgabe stehten verschiedene Dinge.&lt;br /&gt;
&lt;br /&gt;
Am Anfang stehen immer die Grundinformationen (id, catalog_name, parentJumpTo, tablename,showLink, class).&lt;br /&gt;
Die werden in der Regel nicht gebraucht, sind aber gut zu wissen, damit man mal kurz schauen kann ob man überhaupt richtig ist ;)&lt;br /&gt;
&lt;br /&gt;
Alle Variablen die man bekommt stehen immer in dem Array '''data'''&lt;br /&gt;
Um an die einzelnen Werte zu kommen, braucht man nur die Arrays von dem Wert durchzugehen bis nach oben.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Den Titel der Immobilie als Überschrift ausgeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;&amp;lt;?php echo $entry['data']['immo_titel']['value']; ?&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das value 'villa in tunesien' soll ausgegeben werden, welches sich in dem Array 'immo_titel' befindet und das ist in dem Array 'data'.&lt;br /&gt;
So einfach bekommt man einzelne Werte ausgegeben.&lt;br /&gt;
&lt;br /&gt;
==Die Bestandteile der meta-Arrays==&lt;br /&gt;
&lt;br /&gt;
Die Arrays in so einer Ausgabe sind immer gleich aufgebaut. Je nach Feldtyp etwas anders.&lt;br /&gt;
&lt;br /&gt;
Die Standard Informationen&lt;br /&gt;
* class -&amp;gt; die CSS-Klassen des Items (eher wichtig in einer Liste, da man dort zum Beispiel even/odd zur Verfügung hat)&lt;br /&gt;
* link -&amp;gt; Die URL der Leser Seite (auch eher Listen spezifisch)&lt;br /&gt;
* url -&amp;gt; enthält nur die URL von dem Link. Damit kann man seine eigenen Links bauen.&lt;br /&gt;
* data -&amp;gt; Hier sind alle Felder drin.&lt;br /&gt;
&lt;br /&gt;
===Die allgemeinen Parameter===&lt;br /&gt;
Jedes Feld hat immer diese 4 Parameter:&lt;br /&gt;
    * [label] =&amp;gt; Enthält das Label welches im Katalog vergeben wurde&lt;br /&gt;
    * [type] =&amp;gt; Enthält den Feldtyp. Zum Beispiel: text, file, select, tags&lt;br /&gt;
    * [raw] =&amp;gt; Enthält die Original Daten direkt aus der Datenbank. Hiermit kann man immer komplett eigene Ausgaben gestalten.&lt;br /&gt;
    * [value] =&amp;gt; Enthält die vorformatierten Daten: &lt;br /&gt;
                    Datei-Bild Feld =&amp;gt; Bild Lightbox&lt;br /&gt;
                    Datei-download =&amp;gt; den download Link&lt;br /&gt;
                    Text Feld =&amp;gt; der Formatierte String (numeric, date, etc.)&lt;br /&gt;
&lt;br /&gt;
===Die speziellen Parameter===&lt;br /&gt;
&lt;br /&gt;
====Dateien====&lt;br /&gt;
&lt;br /&gt;
* [files] =&amp;gt; Beinhaltet ein Array -&amp;gt; [0] .. [xxx] mit den Dateinamen&lt;br /&gt;
* [meta] =&amp;gt; Beinhaltet die meta-Angaben, wie oben genannt&lt;br /&gt;
&lt;br /&gt;
Wenn es sich um eine Datei handelt (kein Bild) wird das meta-Array diese Werte enthalten:&lt;br /&gt;
&lt;br /&gt;
* [url] =&amp;gt; die relative URL zum herunterladen&lt;br /&gt;
* [alt] =&amp;gt; den alt Text&lt;br /&gt;
* [caption] =&amp;gt; die Beschreibung in der meta.txt Datei&lt;br /&gt;
* [size] =&amp;gt; die größe in Byte&lt;br /&gt;
* [sizetext] =&amp;gt; die größe in lesbarer Form (z.B. 230.0 kB)&lt;br /&gt;
* [icon] =&amp;gt; das Icon (gesetzt wird der Standard vom System selber, basierend auf den Mime-Typen)&lt;br /&gt;
&lt;br /&gt;
Wenn es sich um ein Bild handelt, wird das meta-Array diese Werte enthalten:&lt;br /&gt;
&lt;br /&gt;
* [src] =&amp;gt; den Dateinamen von dem Bild in angepasster größe (wenn das benutzt wird im Katalog selber)&lt;br /&gt;
* [alt] =&amp;gt; Den alt-Text&lt;br /&gt;
* [lb] =&amp;gt; die einzigartige REL=lightbox ID damit die Slimbox angesteuert werden kann&lt;br /&gt;
* [w] =&amp;gt; Bild width&lt;br /&gt;
* [h] =&amp;gt; Bild height&lt;br /&gt;
* [wh] =&amp;gt; Bild width/height in einem String &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei einer referenzierenden Tabelle können noch folgende Inhalte vorhanden sein:&lt;br /&gt;
&lt;br /&gt;
* [parentJumpTo] =&amp;gt; die ID von dem referenzierenden Katalog (kann in Inserttags genutzt werden)&lt;br /&gt;
* [parentLink] =&amp;gt; Der komplette Link mit einem Standard Text &amp;quot;View item details&amp;quot;&lt;br /&gt;
* [parentUrl] =&amp;gt; Die relative URL zu der Detail (Leser) Seite&lt;br /&gt;
&lt;br /&gt;
=Beispiel Anpassungen=&lt;br /&gt;
&lt;br /&gt;
==Einfache Überprüfung ob Inhalt vorhanden ist==&lt;br /&gt;
Es gibt immer wieder einzelne Felder die nur optional zu befüllen sind.&lt;br /&gt;
Wenn man die Ausgabe von einem Div nur machen möchte wenn auch Inhalte vorhanden sind, kann man das einfach mit einer if-Abfrage erledigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['immo_bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
   &amp;lt;div class=&amp;quot;immo_galerie&amp;quot;&amp;gt;&amp;lt;?php echo $entry['data']['immo_bildergalerie']['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dem Beispiel wird die Bildergalerie mit dem umschließenden div nur dann ausgegeben wenn auch mindestens ein Bild vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
==Wie man in eigenen Templates beim Katalog Thumbnails generieren kann==&lt;br /&gt;
&lt;br /&gt;
Thumbnails werden in Contao mit der Methode Controller::[[Arbeiten mit Bildern#getImage()|getImage()]] generiert.&lt;br /&gt;
Wichtig dabei ist, dass nicht der ganze Code des Bildes zurückgegeben wird, sondern lediglich die URL zum Thumbnail.&lt;br /&gt;
&lt;br /&gt;
Die Methode sieht wie folgt aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
getImage($image, $width, $height, $mode='', $target=null)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Parameter erklären sich wie folgt:&lt;br /&gt;
* $image (String) ''zwingend''&lt;br /&gt;
** erwartet eine relative URL zum Bild, dass verkleinert werden soll (z.B. 'tl_files/meine_bilder/mein_bild.jpg')&lt;br /&gt;
* $width (Integer) ''bedingt optional (Achtung: mind. eine Angabe zu Breite oder Höhe ist zwingend!)''&lt;br /&gt;
** erwartet eine Zahl, die die Breite in Pixel angibt (z.B. 230)&lt;br /&gt;
* $height (Integer) ''bedingt optional (Achtung: mind. eine Angabe zu Breite oder Höhe ist zwingend!)''&lt;br /&gt;
** erwartet eine Zahl, die die Breite in Pixel angibt (z.B. 230)&lt;br /&gt;
* $mode (String) ''optional'' (weitergehende Informationen auf dem [http://www.contao.org/blog-leser/items/die-3-varianten-der-bildanpassung-in-typolight-2.8.html offiziellen Contao-Blog])&lt;br /&gt;
** erwartet einen Angabe darüber, wie das Bild behandelt werden soll. Möglich sind:&lt;br /&gt;
*** &amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt; (Exaktes Format) - default&lt;br /&gt;
*** 'proportional' (Proportional)&lt;br /&gt;
*** 'box' (An Rahmen anpassen)&lt;br /&gt;
* $target (String) ''optional''&lt;br /&gt;
** erwartet eine relative URL zu einem Bild, dass ersetzt werden soll (z.B. 'tl_files/meine_bilder/mein_zu_ersetzendes_bild.jpg')&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für ein Template mit einem Thumbnail von 430px Breite und 300px Höhe, das proportional geparst werden soll, könnte also so aussehen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;&amp;lt;?php echo $this-&amp;gt;getImage('tl_files/meine_bilder/mein_bild.jpg',430,300,'proportional'); ?&amp;gt;&amp;quot; alt=&amp;quot;Mein alt-Text für mein Bild&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fortlaufende Nummerierung der einzelnen Einträge in einer Liste==&lt;br /&gt;
&lt;br /&gt;
Die Paginierung wurde berücksichtigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$perpage=3&lt;br /&gt;
$index=0&lt;br /&gt;
foreach ($this-&amp;gt;entries as $entry):&lt;br /&gt;
  &amp;lt;$index++&lt;br /&gt;
  if (isset($_GET['page'])):&lt;br /&gt;
    $number = $index + ($perpage * ($_GET['page'] - 1))&lt;br /&gt;
  else:&lt;br /&gt;
    $number = $index&lt;br /&gt;
  endif;&lt;br /&gt;
  ...&lt;br /&gt;
endforeach;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wobei $perpage die Anzahl der Items enhält, die pro Seite ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
==Kategorien einmalig ausgeben und die Items darunter==&lt;br /&gt;
Beispiel anhand eines modifizierten catalog_simple.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (count($this-&amp;gt;entries)):&lt;br /&gt;
   $lastcat=''; ?&amp;gt;&lt;br /&gt;
   &amp;lt;div class=&amp;quot;layout_simple&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;?php foreach ($this-&amp;gt;entries as $entry):&lt;br /&gt;
      if ($lastcat!=$entry[data]['Kategorie']['value']):&lt;br /&gt;
         $lastcat=$entry[data]['Kategorie']['value']; ?&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;cat&amp;quot;&amp;gt;&amp;lt;?php echo $entry[data]['Kategorie']['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;item&amp;lt;?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data):&lt;br /&gt;
         if ($field=='Kategorie') continue;&lt;br /&gt;
         if (!in_array($field, array('catalog_name','parentJumpTo'))): ?&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;label&amp;quot;&amp;gt;&amp;lt;?php echo $data['label']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
         &amp;lt;?php endif;&lt;br /&gt;
      endforeach;&lt;br /&gt;
      if ($entry['showLink'] &amp;amp;&amp;amp; $entry['link']): ?&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;link&amp;quot;&amp;gt;&amp;lt;?php echo $entry['link']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif;&lt;br /&gt;
      if ($entry['linkEdit']): ?&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;linkEdit&amp;quot;&amp;gt;&amp;lt;?php echo $entry['linkEdit']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php else:&lt;br /&gt;
   if ($this-&amp;gt;condition): ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;condition&amp;quot;&amp;gt;&amp;lt;?php echo $this-&amp;gt;condition; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;?php else: ?&amp;gt;&lt;br /&gt;
      &amp;lt;p class=&amp;quot;info&amp;quot;&amp;gt;There are no entries matching your search.&amp;lt;/p&amp;gt;&lt;br /&gt;
   &amp;lt;?php endif;&lt;br /&gt;
endif;&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fortlaufende Nummern für die Zellen im Katalog==&lt;br /&gt;
&lt;br /&gt;
Am Beispiel von einem simpletable.tpl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;layout_simpletable&amp;quot; summary=&amp;quot;Catalog Items&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;thead class=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;?php list($field, $heading) = each($this-&amp;gt;entries);&lt;br /&gt;
      $i = 0;&lt;br /&gt;
      foreach ($heading['data'] as $field=&amp;gt;$data):&lt;br /&gt;
      $i++;&lt;br /&gt;
        if (!in_array($field, array('catalog_name','parentJumpTo'))): ?&amp;gt;&lt;br /&gt;
          &amp;lt;th class=&amp;quot;header&amp;lt;?php echo $i; ?&amp;gt;&amp;quot;&amp;gt;&amp;lt;?php echo $data['label']; ?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;?php endif;&lt;br /&gt;
      endforeach; ?&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;/thead&amp;gt;&lt;br /&gt;
  &amp;lt;tbody class=&amp;quot;body&amp;lt;?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;?php foreach ($this-&amp;gt;entries as $entry):&lt;br /&gt;
      $n++ ?&amp;gt;&lt;br /&gt;
      &amp;lt;tr class=&amp;quot;item&amp;lt;?php echo $n; ?&amp;gt;&amp;lt;?php echo $entry['class'] ? '  '.$entry['class'] : ''; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data):&lt;br /&gt;
        $k++;&lt;br /&gt;
          if (!in_array($field, array('catalog_name','parentJumpTo'))): ?&amp;gt;&lt;br /&gt;
            &amp;lt;td class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;lt;?php echo $k; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;?php if (strlen($data['value'])):&lt;br /&gt;
              if ($entry['url'] &amp;amp;&amp;amp; $field == 'title'): ?&amp;gt;&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['url']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;?php endif;&lt;br /&gt;
            echo $data['value'];&lt;br /&gt;
              if ($entry['url'] &amp;amp;&amp;amp; $field == 'title'): ?&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
              &amp;lt;?php endif;&lt;br /&gt;
            endif; ?&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;?php endif;&lt;br /&gt;
        endforeach; ?&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
  &amp;lt;/tbody&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eine Bildergalerie erstellen, wo nur das 1. Bild ausgegeben wird und die anderen in der Lightbox vorhanden sind==&lt;br /&gt;
&lt;br /&gt;
{{Achtung|diese beiden Herangehensweisen sind noch ungetestet.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTML:&lt;br /&gt;
Die Ausgabe sollte ungefähr so aussehen:&lt;br /&gt;
&amp;lt;spurce lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;tl_files/image01.jpg&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/image01.jpg&amp;quot; alt=&amp;quot;bla&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;tl_files/image02.jpg&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das 1. Bild mit Vorschaubild und die anderen Bilder nur als Link, damit diese ausgegeben werden, aber erst mal nix zu sehen ist.&lt;br /&gt;
&lt;br /&gt;
Es gibt da ja im Grunde 2 Herangehensweisen:&lt;br /&gt;
1. Im Backend gibt man 1 Bild an und dann noch mehrere Bilder als Galerie (so hat man die volle Kontrolle darüber welches das Vorschaubild ist)&lt;br /&gt;
2. Man gibt nur eine Bildergalerie an.&lt;br /&gt;
&lt;br /&gt;
Template (Grundüberlegung):&lt;br /&gt;
1. Grundüberlegung der Ausgabe allgemein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['einzelbild']['meta']):?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bilder&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;strong&amp;gt;&amp;lt;?php echo $entry['data']['einzelbild']['value']; ?&amp;gt;&amp;lt;/strong&amp;gt;&lt;br /&gt;
      &amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&amp;lt;?php echo $entry['data']['bildergalerie']['value']; ?&amp;gt;&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Grundüberlegung der Ausgabe allgemein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bilder&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;?php echo $entry['data']['bildergalerie']['value']; ?&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Damit hat man einfach nur die normale Galerie. Das wäre für diesem Fall ja nicht passend; sei an dieser Stelle jedoch noch mal dokumentiert sein.&lt;br /&gt;
&lt;br /&gt;
Um das jetzt zu verbinden, gibt es verschiedene Vorgehensweisen:&lt;br /&gt;
1.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['einzelbild']['meta']):?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bilder&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;strong&amp;gt;&amp;lt;?php echo $entry['data']['einzelbild']['value']; ?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['data']['einzelbild']['files']['0'];?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&amp;lt;?php echo $entry['data']['einzelbild']['meta']['0']['src'];?&amp;gt;&amp;quot; alt=&amp;quot;bla&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/strong&amp;gt;&lt;br /&gt;
 &amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['bildergalerie']['value'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['bildergalerie']['value']['meta'][$field]['src'] ?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot; &amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Für das 1. Bild (in Array ja die 0 eine andere Ausgabe machen):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['bildergalerie']['value'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;?php if(($entry['bildergalerie']['value']['meta'][$field])=='0'):?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['data']['einzelbild']['files']['0'];?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&amp;lt;?php echo $entry['bildergalerie']['value']['meta'][$field]['src'] ?&amp;gt;&amp;quot; alt=&amp;quot;bla&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;?php else;?&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;lightbox[lightbox_1]&amp;quot; href=&amp;quot;&amp;lt;?php echo $entry['bildergalerie']['value']['meta'][$field]['src'] ?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==2 Katalog referenzieren==&lt;br /&gt;
Hier im Forum ist die Herangehensweise beschrieben, wie man das machen kann ohne mit Referenzen aus catalog 2 zu arbeiten:&lt;br /&gt;
[http://www.contao-community.de/showthread.php?5448-2-Kataloge-referenzieren-GEL%D6ST]&lt;br /&gt;
&lt;br /&gt;
Hier noch ein kurzes Beispiel wie das gehen kann:&lt;br /&gt;
&lt;br /&gt;
In dem Catalog Leser von einem Autoren sollen die Bücher dargestellt werden (diese sind mit dem Feldtyp Tags referenziert). Die Bücher sind in dem Fall innerhalb des Array 'ref':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($data['ref'] as $id=&amp;gt;$ref): ?&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;div class=&amp;quot;row_&amp;lt;?php echo $id; ?&amp;gt; buch &amp;lt;?php if($ref['bilder_buch']) echo &amp;quot;buch_mitbild&amp;quot;;?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Alle Werte ausgeben und nur einen Anpassen (als Beispiel Bilder mit eigner Beschreibung) ==&lt;br /&gt;
&lt;br /&gt;
Hier ein Auszug wie bei dem Feld beispiel_bild der gewünschte Code ausgegeben wird und ansonsten die Werte einfach normal vom Catalog ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php if($field=='beispiel_bild'):?&amp;gt;&lt;br /&gt;
{{image::&amp;lt;?php echo $data['files']['0']; ?&amp;gt;?width=&amp;lt;?php echo $data['meta']['0']['w']; ?&amp;gt;&amp;amp;height=&amp;lt;?php echo $data['meta']['0']['h']; ?&amp;gt;&amp;amp;alt=&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;amp;mode=crop&amp;amp;rel=lightbox}}&lt;br /&gt;
&amp;lt;?php elseif(!in_array($field, array('catalog_name','parentJumpTo'))):?&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;label&amp;quot;&amp;gt;&amp;lt;?php echo $data['label']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele finden sich im engl. Wiki vom Catalog==&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/typolight-catalog/wiki/EN_CatalogTemplatesTutorial http://code.google.com/p/typolight-catalog/wiki/EN_CatalogTemplatesTutorial]&lt;br /&gt;
&lt;br /&gt;
==Beispiele im Forum:==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao-community.de/showthread.php?10335-Berufs-und-Ausstellerverzeichnis-kombinieren&amp;amp;p=74438#post74438 Zwei Kataloge im Template verbinden]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:MacKP|MacKP]] 21:44, 21. Mai 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Alle Werte ausgeben und nur einen anpassen und als Bild ausgeben (Taxonomie mit verlinkten Icons) ==&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie im obrigen Beispiel, wird hier eine Spalte so angepasst, dass die Taxonomie IDs gegen Icons getauscht werden (auch ideal für Immobilien, Ferienwohnungen). &lt;br /&gt;
&lt;br /&gt;
Zunächst wird abgefragt, welches Katalogfeld seperat behandelt wird  &amp;lt;nowiki&amp;gt;&amp;lt;?php if($field=='tags'):?&amp;gt; &amp;lt;/nowiki&amp;gt;. Zwischen den Kommentaren wird zunächst zum einfacheren Vorgehen die (verlinkten) Icons in eine Variable gespeichert ($icons) und darunter mittels foreach das Puffer-Array angesprochen und ausgegeben. Dadurch lassen sich auch Tageinträge größer eins verarbeiten:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;td class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php if($field=='tags'):?&amp;gt;&lt;br /&gt;
&amp;lt;!------------------ ANFANG ------------------&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$icons=array(&lt;br /&gt;
  // Schema: 'id' =&amp;gt; 'zu generierender html code',&lt;br /&gt;
  '2' =&amp;gt; '&amp;lt;a href=&amp;quot;#&amp;quot; title=&amp;quot;eins&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/eins.gif&amp;quot; alt=&amp;quot;eins&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;',&lt;br /&gt;
  '3' =&amp;gt; '&amp;lt;a href=&amp;quot;#&amp;quot; title=&amp;quot;eins&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/zwei.gif&amp;quot; alt=&amp;quot;zwei&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;',&lt;br /&gt;
  '4' =&amp;gt; '&amp;lt;a href=&amp;quot;#&amp;quot; title=&amp;quot;eins&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/drei.gif&amp;quot; alt=&amp;quot;drei&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;'&lt;br /&gt;
);&lt;br /&gt;
foreach($data['ref'] as $info)&lt;br /&gt;
  echo $icons[$info['id']];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;!------------------ ENDE ------------------&amp;gt;&lt;br /&gt;
 &amp;lt;?php elseif(!in_array($field, array('catalog_name','parentJumpTo'))):?&amp;gt;&lt;br /&gt;
     &amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;?php endforeach; ?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:carino|carino]] 10:30, 24. Juli 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Zeilenumbrüche in Texten von textarea Feldern im Frontend als HTML Umbrüche ausgeben==&lt;br /&gt;
Ist ein Feld vom Typ textarea, kann man dort Zeilenumbrüche eingeben und speichern. Diese werden im Frontend aber nicht angezeigt.&lt;br /&gt;
Mit folgendem Befehl werden die Umbrüche in HTML umgewandelt und damit im Frontend sichtbar. Den Code einfach vor der Ausgabe des description Feldes einfügen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// replace new line feed \n (0x0A) in description field by HTML line break &amp;lt;br/&amp;gt;&lt;br /&gt;
$entry['data']['description']['value'] = str_replace(&amp;quot;\xa&amp;quot;, &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;, $entry['data']['description']['value']); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:bubblez|bubblez]] 01:46, 26. Mar 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Catalog_Templates_anpassen</id>
		<title>Catalog Templates anpassen</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Catalog_Templates_anpassen"/>
				<updated>2011-03-26T00:46:16Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AppliesTo&lt;br /&gt;
|TLVersion=ab 2.8&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
|Ext1=Catalog ab 2.0beta1&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Catalog]]&lt;br /&gt;
&lt;br /&gt;
=Templates für den Catalog bearbeiten und verändern=&lt;br /&gt;
&lt;br /&gt;
Der Catalog bringt eine Menge Templates mit. Für fast jedes Modul gibt es einen eigenen Satz Templates. Zusätzlich werden Standard Templates herangezogen um zum Beispiel die Galerie oder die Filter zu generieren.&lt;br /&gt;
&lt;br /&gt;
Da der Catalog aber nur ein Grundgerüst darstellt wird man nicht umhin kommen sich die Templates nach eigenen Wünschen und Vorstellungen anzupassen.&lt;br /&gt;
Zunächst geht es hier ganz allgemein um das Vorgehen bei der Template Anpassung. Wie man an bestimmte Werte kommt und so an die Ausgaben die man möchte.&lt;br /&gt;
Zusätzlich werden hier noch ein paar Fallbeispiele vorgestellt, welche zum Teil aus den Wünschen/Problemen im Forum entstanden sind (Vielen Dank an alle die daran im Forum gearbeitet haben!!!).&lt;br /&gt;
&lt;br /&gt;
=Voraussetzungen für das Tutorial=&lt;br /&gt;
* wie ein Katalog erstellt wird sollte von anderen Tutorials klar sein. Es sollte also ein Katalog vorhanden sein mit Inhalten.&lt;br /&gt;
* der Umgang mit Contao sollte bekannt sein&lt;br /&gt;
* wie man [[Templates_bearbeiten|Templates bearbeitet]] sollte in Grundzügen bekannt sein.&lt;br /&gt;
&lt;br /&gt;
=Grundlagen=&lt;br /&gt;
&lt;br /&gt;
==Alles ein Array das entries Array==&lt;br /&gt;
&lt;br /&gt;
Um sich die Ausgabe von dem Array anzuschauen braucht man nur diese Zeile in das Template bringen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php print_r($this-&amp;gt;entries); ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man sich das Ergebniss nun auf der neu geladenen Seite anschaut ist das nicht gerade schön anzusehen. Alles steht hintereinander und ergibt einen Code Brei. Deswegen sollte man sich das am besten immer direkt in der Quellcode Ansicht anschauen. Da bekommt man alles schön eingerückt und verschachtelt zu sehen! Oder man setzt die Ausgabe in ein &amp;lt;nowiki&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;/nowiki&amp;gt;-Tag.&lt;br /&gt;
&lt;br /&gt;
Auszug aus einem Immoblilien Katalog:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
  [0] =&amp;gt; Array&lt;br /&gt;
    (&lt;br /&gt;
      [id] =&amp;gt; 33&lt;br /&gt;
      [catalog_name] =&amp;gt; Immobilien&lt;br /&gt;
      [parentJumpTo] =&amp;gt; 27&lt;br /&gt;
      [tablename] =&amp;gt; immo_immobilien_alle&lt;br /&gt;
      [showLink] =&amp;gt; 1&lt;br /&gt;
      [class] =&amp;gt;  first last even&lt;br /&gt;
      [data] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
          [immo_titel] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Titel&lt;br /&gt;
              [type] =&amp;gt; text&lt;br /&gt;
              [raw] =&amp;gt; villa in tunesien&lt;br /&gt;
              [value] =&amp;gt; villa in tunesien&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
          [immo_gebiet] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Gebiet&lt;br /&gt;
              [type] =&amp;gt; select&lt;br /&gt;
              [raw] =&amp;gt; 141&lt;br /&gt;
              [value] =&amp;gt; Beja&lt;br /&gt;
              [ref] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [id] =&amp;gt; 141&lt;br /&gt;
                      [pid] =&amp;gt; 130&lt;br /&gt;
                      [tstamp] =&amp;gt; 1273353133&lt;br /&gt;
                      [sorting] =&amp;gt; 112&lt;br /&gt;
                      [type] =&amp;gt; &lt;br /&gt;
                      [alias] =&amp;gt; beja&lt;br /&gt;
                      [name] =&amp;gt; Beja&lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
          [immo_bild] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Bild - nur für das erste Bild &amp;amp;#40;Ein Bild für die Vorschau / maximale Dateigröße: 2MB / maximale Maße in px: 800x600&amp;amp;#41;&lt;br /&gt;
              [type] =&amp;gt; file&lt;br /&gt;
              [raw] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/bild_01.jpg&lt;br /&gt;
              [value] =&amp;gt; &amp;lt;a href=&amp;quot;immobilien-leser/items/miethaus-1.html&amp;quot; title=&amp;quot;Die Details des Eintrags ansehen&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;image first even&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogrelated0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/bild_01.jpg&amp;quot; title=&amp;quot;Bild 01&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/bild_01-0ec9b6d1.jpg&amp;quot; alt=&amp;quot;Bild 01&amp;quot; width=&amp;quot;200&amp;quot; height=&amp;quot;100&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
              [files] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/bild_01.jpg&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
              [meta] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/bild_01-0ec9b6d1.jpg&lt;br /&gt;
                      [alt] =&amp;gt; Bild 01&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogrelated0&lt;br /&gt;
                      [w] =&amp;gt; 200&lt;br /&gt;
                      [h] =&amp;gt; 100&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;200&amp;quot; height=&amp;quot;100&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
          [immo_bildergalerie] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Bildergalerie - alle anderen Bilder &amp;amp;#40;für die Detail Ansicht / maximale Dateigröße: 2MB / maximale Maße in px: 800x600&amp;amp;#41;&lt;br /&gt;
              [type] =&amp;gt; file&lt;br /&gt;
              [raw] =&amp;gt; a:4:{i:0;s:103:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/how 2 rubbeldiekatz.jpg&amp;quot;;i:1;s:89:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/image.png&amp;quot;;i:2;s:99:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/institut-aussen.jpg&amp;quot;;i:3;s:96:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/james-wilson.jpg&amp;quot;;}&lt;br /&gt;
              [value] =&amp;gt; &amp;lt;span class=&amp;quot;image first even&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/how 2 rubbeldiekatz.jpg&amp;quot; title=&amp;quot;How 2 rubbeldiekatz&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/how 2 rubbeldiekatz-0d26e104.jpg&amp;quot; alt=&amp;quot;How 2 rubbeldiekatz&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;image odd&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/image.png&amp;quot; title=&amp;quot;Image&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/image-6a4159ed.png&amp;quot; alt=&amp;quot;Image&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;image even&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/institut-aussen.jpg&amp;quot; title=&amp;quot;Institut-aussen&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/institut-aussen-538b1b35.jpg&amp;quot; alt=&amp;quot;Institut-aussen&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;image odd&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/james-wilson.jpg&amp;quot; title=&amp;quot;James-wilson&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/james-wilson-379f0b97.jpg&amp;quot; alt=&amp;quot;James-wilson&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
              [files] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/how 2 rubbeldiekatz.jpg&lt;br /&gt;
                  [1] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/image.png&lt;br /&gt;
                  [2] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/institut-aussen.jpg&lt;br /&gt;
                  [3] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/james-wilson.jpg&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
              [meta] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/how 2 rubbeldiekatz-0d26e104.jpg&lt;br /&gt;
                      [alt] =&amp;gt; How 2 rubbeldiekatz&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                  [1] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/image-6a4159ed.png&lt;br /&gt;
                      [alt] =&amp;gt; Image&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                  [2] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/institut-aussen-538b1b35.jpg&lt;br /&gt;
                      [alt] =&amp;gt; Institut-aussen&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
									[3] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/james-wilson-379f0b97.jpg&lt;br /&gt;
                      [alt] =&amp;gt; James-wilson&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
								)&lt;br /&gt;
&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
          [immo_sterne] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Sterne &amp;amp;#40;Wie viele Sterne hat das Hotel&amp;amp;#41;&lt;br /&gt;
              [type] =&amp;gt; number&lt;br /&gt;
              [raw] =&amp;gt; &lt;br /&gt;
              [value] =&amp;gt; &lt;br /&gt;
            )&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist nur ein kleiner Auszug aus der Ausgabe.&lt;br /&gt;
In dieser Ausgabe stehten verschiedene Dinge.&lt;br /&gt;
&lt;br /&gt;
Am Anfang stehen immer die Grundinformationen (id, catalog_name, parentJumpTo, tablename,showLink, class).&lt;br /&gt;
Die werden in der Regel nicht gebraucht, sind aber gut zu wissen, damit man mal kurz schauen kann ob man überhaupt richtig ist ;)&lt;br /&gt;
&lt;br /&gt;
Alle Variablen die man bekommt stehen immer in dem Array '''data'''&lt;br /&gt;
Um an die einzelnen Werte zu kommen, braucht man nur die Arrays von dem Wert durchzugehen bis nach oben.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Den Titel der Immobilie als Überschrift ausgeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;&amp;lt;?php echo $entry['data']['immo_titel']['value']; ?&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das value 'villa in tunesien' soll ausgegeben werden, welches sich in dem Array 'immo_titel' befindet und das ist in dem Array 'data'.&lt;br /&gt;
So einfach bekommt man einzelne Werte ausgegeben.&lt;br /&gt;
&lt;br /&gt;
==Die Bestandteile der meta-Arrays==&lt;br /&gt;
&lt;br /&gt;
Die Arrays in so einer Ausgabe sind immer gleich aufgebaut. Je nach Feldtyp etwas anders.&lt;br /&gt;
&lt;br /&gt;
Die Standard Informationen&lt;br /&gt;
* class -&amp;gt; die CSS-Klassen des Items (eher wichtig in einer Liste, da man dort zum Beispiel even/odd zur Verfügung hat)&lt;br /&gt;
* link -&amp;gt; Die URL der Leser Seite (auch eher Listen spezifisch)&lt;br /&gt;
* url -&amp;gt; enthält nur die URL von dem Link. Damit kann man seine eigenen Links bauen.&lt;br /&gt;
* data -&amp;gt; Hier sind alle Felder drin.&lt;br /&gt;
&lt;br /&gt;
===Die allgemeinen Parameter===&lt;br /&gt;
Jedes Feld hat immer diese 4 Parameter:&lt;br /&gt;
    * [label] =&amp;gt; Enthält das Label welches im Katalog vergeben wurde&lt;br /&gt;
    * [type] =&amp;gt; Enthält den Feldtyp. Zum Beispiel: text, file, select, tags&lt;br /&gt;
    * [raw] =&amp;gt; Enthält die Original Daten direkt aus der Datenbank. Hiermit kann man immer komplett eigene Ausgaben gestalten.&lt;br /&gt;
    * [value] =&amp;gt; Enthält die vorformatierten Daten: &lt;br /&gt;
                    Datei-Bild Feld =&amp;gt; Bild Lightbox&lt;br /&gt;
                    Datei-download =&amp;gt; den download Link&lt;br /&gt;
                    Text Feld =&amp;gt; der Formatierte String (numeric, date, etc.)&lt;br /&gt;
&lt;br /&gt;
===Die speziellen Parameter===&lt;br /&gt;
&lt;br /&gt;
====Dateien====&lt;br /&gt;
&lt;br /&gt;
* [files] =&amp;gt; Beinhaltet ein Array -&amp;gt; [0] .. [xxx] mit den Dateinamen&lt;br /&gt;
* [meta] =&amp;gt; Beinhaltet die meta-Angaben, wie oben genannt&lt;br /&gt;
&lt;br /&gt;
Wenn es sich um eine Datei handelt (kein Bild) wird das meta-Array diese Werte enthalten:&lt;br /&gt;
&lt;br /&gt;
* [url] =&amp;gt; die relative URL zum herunterladen&lt;br /&gt;
* [alt] =&amp;gt; den alt Text&lt;br /&gt;
* [caption] =&amp;gt; die Beschreibung in der meta.txt Datei&lt;br /&gt;
* [size] =&amp;gt; die größe in Byte&lt;br /&gt;
* [sizetext] =&amp;gt; die größe in lesbarer Form (z.B. 230.0 kB)&lt;br /&gt;
* [icon] =&amp;gt; das Icon (gesetzt wird der Standard vom System selber, basierend auf den Mime-Typen)&lt;br /&gt;
&lt;br /&gt;
Wenn es sich um ein Bild handelt, wird das meta-Array diese Werte enthalten:&lt;br /&gt;
&lt;br /&gt;
* [src] =&amp;gt; den Dateinamen von dem Bild in angepasster größe (wenn das benutzt wird im Katalog selber)&lt;br /&gt;
* [alt] =&amp;gt; Den alt-Text&lt;br /&gt;
* [lb] =&amp;gt; die einzigartige REL=lightbox ID damit die Slimbox angesteuert werden kann&lt;br /&gt;
* [w] =&amp;gt; Bild width&lt;br /&gt;
* [h] =&amp;gt; Bild height&lt;br /&gt;
* [wh] =&amp;gt; Bild width/height in einem String &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei einer referenzierenden Tabelle können noch folgende Inhalte vorhanden sein:&lt;br /&gt;
&lt;br /&gt;
* [parentJumpTo] =&amp;gt; die ID von dem referenzierenden Katalog (kann in Inserttags genutzt werden)&lt;br /&gt;
* [parentLink] =&amp;gt; Der komplette Link mit einem Standard Text &amp;quot;View item details&amp;quot;&lt;br /&gt;
* [parentUrl] =&amp;gt; Die relative URL zu der Detail (Leser) Seite&lt;br /&gt;
&lt;br /&gt;
=Beispiel Anpassungen=&lt;br /&gt;
&lt;br /&gt;
==Einfache Überprüfung ob Inhalt vorhanden ist==&lt;br /&gt;
Es gibt immer wieder einzelne Felder die nur optional zu befüllen sind.&lt;br /&gt;
Wenn man die Ausgabe von einem Div nur machen möchte wenn auch Inhalte vorhanden sind, kann man das einfach mit einer if-Abfrage erledigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['immo_bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
   &amp;lt;div class=&amp;quot;immo_galerie&amp;quot;&amp;gt;&amp;lt;?php echo $entry['data']['immo_bildergalerie']['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dem Beispiel wird die Bildergalerie mit dem umschließenden div nur dann ausgegeben wenn auch mindestens ein Bild vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
==Wie man in eigenen Templates beim Katalog Thumbnails generieren kann==&lt;br /&gt;
&lt;br /&gt;
Thumbnails werden in Contao mit der Methode Controller::[[Arbeiten mit Bildern#getImage()|getImage()]] generiert.&lt;br /&gt;
Wichtig dabei ist, dass nicht der ganze Code des Bildes zurückgegeben wird, sondern lediglich die URL zum Thumbnail.&lt;br /&gt;
&lt;br /&gt;
Die Methode sieht wie folgt aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
getImage($image, $width, $height, $mode='', $target=null)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Parameter erklären sich wie folgt:&lt;br /&gt;
* $image (String) ''zwingend''&lt;br /&gt;
** erwartet eine relative URL zum Bild, dass verkleinert werden soll (z.B. 'tl_files/meine_bilder/mein_bild.jpg')&lt;br /&gt;
* $width (Integer) ''bedingt optional (Achtung: mind. eine Angabe zu Breite oder Höhe ist zwingend!)''&lt;br /&gt;
** erwartet eine Zahl, die die Breite in Pixel angibt (z.B. 230)&lt;br /&gt;
* $height (Integer) ''bedingt optional (Achtung: mind. eine Angabe zu Breite oder Höhe ist zwingend!)''&lt;br /&gt;
** erwartet eine Zahl, die die Breite in Pixel angibt (z.B. 230)&lt;br /&gt;
* $mode (String) ''optional'' (weitergehende Informationen auf dem [http://www.contao.org/blog-leser/items/die-3-varianten-der-bildanpassung-in-typolight-2.8.html offiziellen Contao-Blog])&lt;br /&gt;
** erwartet einen Angabe darüber, wie das Bild behandelt werden soll. Möglich sind:&lt;br /&gt;
*** &amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt; (Exaktes Format) - default&lt;br /&gt;
*** 'proportional' (Proportional)&lt;br /&gt;
*** 'box' (An Rahmen anpassen)&lt;br /&gt;
* $target (String) ''optional''&lt;br /&gt;
** erwartet eine relative URL zu einem Bild, dass ersetzt werden soll (z.B. 'tl_files/meine_bilder/mein_zu_ersetzendes_bild.jpg')&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für ein Template mit einem Thumbnail von 430px Breite und 300px Höhe, das proportional geparst werden soll, könnte also so aussehen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;&amp;lt;?php echo $this-&amp;gt;getImage('tl_files/meine_bilder/mein_bild.jpg',430,300,'proportional'); ?&amp;gt;&amp;quot; alt=&amp;quot;Mein alt-Text für mein Bild&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fortlaufende Nummerierung der einzelnen Einträge in einer Liste==&lt;br /&gt;
&lt;br /&gt;
Die Paginierung wurde berücksichtigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$perpage=3&lt;br /&gt;
$index=0&lt;br /&gt;
foreach ($this-&amp;gt;entries as $entry):&lt;br /&gt;
  &amp;lt;$index++&lt;br /&gt;
  if (isset($_GET['page'])):&lt;br /&gt;
    $number = $index + ($perpage * ($_GET['page'] - 1))&lt;br /&gt;
  else:&lt;br /&gt;
    $number = $index&lt;br /&gt;
  endif;&lt;br /&gt;
  ...&lt;br /&gt;
endforeach;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wobei $perpage die Anzahl der Items enhält, die pro Seite ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
==Kategorien einmalig ausgeben und die Items darunter==&lt;br /&gt;
Beispiel anhand eines modifizierten catalog_simple.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (count($this-&amp;gt;entries)):&lt;br /&gt;
   $lastcat=''; ?&amp;gt;&lt;br /&gt;
   &amp;lt;div class=&amp;quot;layout_simple&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;?php foreach ($this-&amp;gt;entries as $entry):&lt;br /&gt;
      if ($lastcat!=$entry[data]['Kategorie']['value']):&lt;br /&gt;
         $lastcat=$entry[data]['Kategorie']['value']; ?&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;cat&amp;quot;&amp;gt;&amp;lt;?php echo $entry[data]['Kategorie']['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;item&amp;lt;?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data):&lt;br /&gt;
         if ($field=='Kategorie') continue;&lt;br /&gt;
         if (!in_array($field, array('catalog_name','parentJumpTo'))): ?&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;label&amp;quot;&amp;gt;&amp;lt;?php echo $data['label']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
         &amp;lt;?php endif;&lt;br /&gt;
      endforeach;&lt;br /&gt;
      if ($entry['showLink'] &amp;amp;&amp;amp; $entry['link']): ?&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;link&amp;quot;&amp;gt;&amp;lt;?php echo $entry['link']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif;&lt;br /&gt;
      if ($entry['linkEdit']): ?&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;linkEdit&amp;quot;&amp;gt;&amp;lt;?php echo $entry['linkEdit']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php else:&lt;br /&gt;
   if ($this-&amp;gt;condition): ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;condition&amp;quot;&amp;gt;&amp;lt;?php echo $this-&amp;gt;condition; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;?php else: ?&amp;gt;&lt;br /&gt;
      &amp;lt;p class=&amp;quot;info&amp;quot;&amp;gt;There are no entries matching your search.&amp;lt;/p&amp;gt;&lt;br /&gt;
   &amp;lt;?php endif;&lt;br /&gt;
endif;&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fortlaufende Nummern für die Zellen im Katalog==&lt;br /&gt;
&lt;br /&gt;
Am Beispiel von einem simpletable.tpl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;layout_simpletable&amp;quot; summary=&amp;quot;Catalog Items&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;thead class=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;?php list($field, $heading) = each($this-&amp;gt;entries);&lt;br /&gt;
      $i = 0;&lt;br /&gt;
      foreach ($heading['data'] as $field=&amp;gt;$data):&lt;br /&gt;
      $i++;&lt;br /&gt;
        if (!in_array($field, array('catalog_name','parentJumpTo'))): ?&amp;gt;&lt;br /&gt;
          &amp;lt;th class=&amp;quot;header&amp;lt;?php echo $i; ?&amp;gt;&amp;quot;&amp;gt;&amp;lt;?php echo $data['label']; ?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;?php endif;&lt;br /&gt;
      endforeach; ?&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;/thead&amp;gt;&lt;br /&gt;
  &amp;lt;tbody class=&amp;quot;body&amp;lt;?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;?php foreach ($this-&amp;gt;entries as $entry):&lt;br /&gt;
      $n++ ?&amp;gt;&lt;br /&gt;
      &amp;lt;tr class=&amp;quot;item&amp;lt;?php echo $n; ?&amp;gt;&amp;lt;?php echo $entry['class'] ? '  '.$entry['class'] : ''; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data):&lt;br /&gt;
        $k++;&lt;br /&gt;
          if (!in_array($field, array('catalog_name','parentJumpTo'))): ?&amp;gt;&lt;br /&gt;
            &amp;lt;td class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;lt;?php echo $k; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;?php if (strlen($data['value'])):&lt;br /&gt;
              if ($entry['url'] &amp;amp;&amp;amp; $field == 'title'): ?&amp;gt;&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['url']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;?php endif;&lt;br /&gt;
            echo $data['value'];&lt;br /&gt;
              if ($entry['url'] &amp;amp;&amp;amp; $field == 'title'): ?&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
              &amp;lt;?php endif;&lt;br /&gt;
            endif; ?&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;?php endif;&lt;br /&gt;
        endforeach; ?&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
  &amp;lt;/tbody&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eine Bildergalerie erstellen, wo nur das 1. Bild ausgegeben wird und die anderen in der Lightbox vorhanden sind==&lt;br /&gt;
&lt;br /&gt;
{{Achtung|diese beiden Herangehensweisen sind noch ungetestet.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTML:&lt;br /&gt;
Die Ausgabe sollte ungefähr so aussehen:&lt;br /&gt;
&amp;lt;spurce lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;tl_files/image01.jpg&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/image01.jpg&amp;quot; alt=&amp;quot;bla&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;tl_files/image02.jpg&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das 1. Bild mit Vorschaubild und die anderen Bilder nur als Link, damit diese ausgegeben werden, aber erst mal nix zu sehen ist.&lt;br /&gt;
&lt;br /&gt;
Es gibt da ja im Grunde 2 Herangehensweisen:&lt;br /&gt;
1. Im Backend gibt man 1 Bild an und dann noch mehrere Bilder als Galerie (so hat man die volle Kontrolle darüber welches das Vorschaubild ist)&lt;br /&gt;
2. Man gibt nur eine Bildergalerie an.&lt;br /&gt;
&lt;br /&gt;
Template (Grundüberlegung):&lt;br /&gt;
1. Grundüberlegung der Ausgabe allgemein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['einzelbild']['meta']):?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bilder&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;strong&amp;gt;&amp;lt;?php echo $entry['data']['einzelbild']['value']; ?&amp;gt;&amp;lt;/strong&amp;gt;&lt;br /&gt;
      &amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&amp;lt;?php echo $entry['data']['bildergalerie']['value']; ?&amp;gt;&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Grundüberlegung der Ausgabe allgemein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bilder&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;?php echo $entry['data']['bildergalerie']['value']; ?&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Damit hat man einfach nur die normale Galerie. Das wäre für diesem Fall ja nicht passend; sei an dieser Stelle jedoch noch mal dokumentiert sein.&lt;br /&gt;
&lt;br /&gt;
Um das jetzt zu verbinden, gibt es verschiedene Vorgehensweisen:&lt;br /&gt;
1.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['einzelbild']['meta']):?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bilder&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;strong&amp;gt;&amp;lt;?php echo $entry['data']['einzelbild']['value']; ?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['data']['einzelbild']['files']['0'];?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&amp;lt;?php echo $entry['data']['einzelbild']['meta']['0']['src'];?&amp;gt;&amp;quot; alt=&amp;quot;bla&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/strong&amp;gt;&lt;br /&gt;
 &amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['bildergalerie']['value'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['bildergalerie']['value']['meta'][$field]['src'] ?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot; &amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Für das 1. Bild (in Array ja die 0 eine andere Ausgabe machen):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['bildergalerie']['value'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;?php if(($entry['bildergalerie']['value']['meta'][$field])=='0'):?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['data']['einzelbild']['files']['0'];?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&amp;lt;?php echo $entry['bildergalerie']['value']['meta'][$field]['src'] ?&amp;gt;&amp;quot; alt=&amp;quot;bla&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;?php else;?&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;lightbox[lightbox_1]&amp;quot; href=&amp;quot;&amp;lt;?php echo $entry['bildergalerie']['value']['meta'][$field]['src'] ?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==2 Katalog referenzieren==&lt;br /&gt;
Hier im Forum ist die Herangehensweise beschrieben, wie man das machen kann ohne mit Referenzen aus catalog 2 zu arbeiten:&lt;br /&gt;
[http://www.contao-community.de/showthread.php?5448-2-Kataloge-referenzieren-GEL%D6ST]&lt;br /&gt;
&lt;br /&gt;
Hier noch ein kurzes Beispiel wie das gehen kann:&lt;br /&gt;
&lt;br /&gt;
In dem Catalog Leser von einem Autoren sollen die Bücher dargestellt werden (diese sind mit dem Feldtyp Tags referenziert). Die Bücher sind in dem Fall innerhalb des Array 'ref':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($data['ref'] as $id=&amp;gt;$ref): ?&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;div class=&amp;quot;row_&amp;lt;?php echo $id; ?&amp;gt; buch &amp;lt;?php if($ref['bilder_buch']) echo &amp;quot;buch_mitbild&amp;quot;;?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Alle Werte ausgeben und nur einen Anpassen (als Beispiel Bilder mit eigner Beschreibung) ==&lt;br /&gt;
&lt;br /&gt;
Hier ein Auszug wie bei dem Feld beispiel_bild der gewünschte Code ausgegeben wird und ansonsten die Werte einfach normal vom Catalog ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php if($field=='beispiel_bild'):?&amp;gt;&lt;br /&gt;
{{image::&amp;lt;?php echo $data['files']['0']; ?&amp;gt;?width=&amp;lt;?php echo $data['meta']['0']['w']; ?&amp;gt;&amp;amp;height=&amp;lt;?php echo $data['meta']['0']['h']; ?&amp;gt;&amp;amp;alt=&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;amp;mode=crop&amp;amp;rel=lightbox}}&lt;br /&gt;
&amp;lt;?php elseif(!in_array($field, array('catalog_name','parentJumpTo'))):?&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;label&amp;quot;&amp;gt;&amp;lt;?php echo $data['label']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele finden sich im engl. Wiki vom Catalog==&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/typolight-catalog/wiki/EN_CatalogTemplatesTutorial http://code.google.com/p/typolight-catalog/wiki/EN_CatalogTemplatesTutorial]&lt;br /&gt;
&lt;br /&gt;
==Beispiele im Forum:==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao-community.de/showthread.php?10335-Berufs-und-Ausstellerverzeichnis-kombinieren&amp;amp;p=74438#post74438 Zwei Kataloge im Template verbinden]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:MacKP|MacKP]] 21:44, 21. Mai 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Alle Werte ausgeben und nur einen anpassen und als Bild ausgeben (Taxonomie mit verlinkten Icons) ==&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie im obrigen Beispiel, wird hier eine Spalte so angepasst, dass die Taxonomie IDs gegen Icons getauscht werden (auch ideal für Immobilien, Ferienwohnungen). &lt;br /&gt;
&lt;br /&gt;
Zunächst wird abgefragt, welches Katalogfeld seperat behandelt wird  &amp;lt;nowiki&amp;gt;&amp;lt;?php if($field=='tags'):?&amp;gt; &amp;lt;/nowiki&amp;gt;. Zwischen den Kommentaren wird zunächst zum einfacheren Vorgehen die (verlinkten) Icons in eine Variable gespeichert ($icons) und darunter mittels foreach das Puffer-Array angesprochen und ausgegeben. Dadurch lassen sich auch Tageinträge größer eins verarbeiten:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;td class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php if($field=='tags'):?&amp;gt;&lt;br /&gt;
&amp;lt;!------------------ ANFANG ------------------&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$icons=array(&lt;br /&gt;
  // Schema: 'id' =&amp;gt; 'zu generierender html code',&lt;br /&gt;
  '2' =&amp;gt; '&amp;lt;a href=&amp;quot;#&amp;quot; title=&amp;quot;eins&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/eins.gif&amp;quot; alt=&amp;quot;eins&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;',&lt;br /&gt;
  '3' =&amp;gt; '&amp;lt;a href=&amp;quot;#&amp;quot; title=&amp;quot;eins&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/zwei.gif&amp;quot; alt=&amp;quot;zwei&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;',&lt;br /&gt;
  '4' =&amp;gt; '&amp;lt;a href=&amp;quot;#&amp;quot; title=&amp;quot;eins&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/drei.gif&amp;quot; alt=&amp;quot;drei&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;'&lt;br /&gt;
);&lt;br /&gt;
foreach($data['ref'] as $info)&lt;br /&gt;
  echo $icons[$info['id']];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;!------------------ ENDE ------------------&amp;gt;&lt;br /&gt;
 &amp;lt;?php elseif(!in_array($field, array('catalog_name','parentJumpTo'))):?&amp;gt;&lt;br /&gt;
     &amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;?php endforeach; ?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:carino|carino]] 10:30, 24. Juli 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Zeilenumbruch im textarea Feld des Backend als HTML ausgeben==&lt;br /&gt;
Ist ein Feld vom Typ textarea, kann man dort Zeilenumbrüche eingeben und speichern. Diese werden im Frontend aber nicht angezeigt.&lt;br /&gt;
Mit folgendem Befehl werden die Umbrüche in HTML umgewandelt und damit im Frontend sichtbar. Den Code einfach vor der Ausgabe des description Feldes einfügen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// replace new line feed \n (0x0A) in description field by HTML line break &amp;lt;br/&amp;gt;&lt;br /&gt;
$entry['data']['description']['value'] = str_replace(&amp;quot;\xa&amp;quot;, &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;, $entry['data']['description']['value']); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:bubblez|bubblez]] 01:46, 26. Mar 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Catalog_Templates_anpassen</id>
		<title>Catalog Templates anpassen</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Catalog_Templates_anpassen"/>
				<updated>2011-03-26T00:45:26Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AppliesTo&lt;br /&gt;
|TLVersion=ab 2.8&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
|Ext1=Catalog ab 2.0beta1&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Catalog]]&lt;br /&gt;
&lt;br /&gt;
=Templates für den Catalog bearbeiten und verändern=&lt;br /&gt;
&lt;br /&gt;
Der Catalog bringt eine Menge Templates mit. Für fast jedes Modul gibt es einen eigenen Satz Templates. Zusätzlich werden Standard Templates herangezogen um zum Beispiel die Galerie oder die Filter zu generieren.&lt;br /&gt;
&lt;br /&gt;
Da der Catalog aber nur ein Grundgerüst darstellt wird man nicht umhin kommen sich die Templates nach eigenen Wünschen und Vorstellungen anzupassen.&lt;br /&gt;
Zunächst geht es hier ganz allgemein um das Vorgehen bei der Template Anpassung. Wie man an bestimmte Werte kommt und so an die Ausgaben die man möchte.&lt;br /&gt;
Zusätzlich werden hier noch ein paar Fallbeispiele vorgestellt, welche zum Teil aus den Wünschen/Problemen im Forum entstanden sind (Vielen Dank an alle die daran im Forum gearbeitet haben!!!).&lt;br /&gt;
&lt;br /&gt;
=Voraussetzungen für das Tutorial=&lt;br /&gt;
* wie ein Katalog erstellt wird sollte von anderen Tutorials klar sein. Es sollte also ein Katalog vorhanden sein mit Inhalten.&lt;br /&gt;
* der Umgang mit Contao sollte bekannt sein&lt;br /&gt;
* wie man [[Templates_bearbeiten|Templates bearbeitet]] sollte in Grundzügen bekannt sein.&lt;br /&gt;
&lt;br /&gt;
=Grundlagen=&lt;br /&gt;
&lt;br /&gt;
==Alles ein Array das entries Array==&lt;br /&gt;
&lt;br /&gt;
Um sich die Ausgabe von dem Array anzuschauen braucht man nur diese Zeile in das Template bringen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php print_r($this-&amp;gt;entries); ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man sich das Ergebniss nun auf der neu geladenen Seite anschaut ist das nicht gerade schön anzusehen. Alles steht hintereinander und ergibt einen Code Brei. Deswegen sollte man sich das am besten immer direkt in der Quellcode Ansicht anschauen. Da bekommt man alles schön eingerückt und verschachtelt zu sehen! Oder man setzt die Ausgabe in ein &amp;lt;nowiki&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;/nowiki&amp;gt;-Tag.&lt;br /&gt;
&lt;br /&gt;
Auszug aus einem Immoblilien Katalog:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
  [0] =&amp;gt; Array&lt;br /&gt;
    (&lt;br /&gt;
      [id] =&amp;gt; 33&lt;br /&gt;
      [catalog_name] =&amp;gt; Immobilien&lt;br /&gt;
      [parentJumpTo] =&amp;gt; 27&lt;br /&gt;
      [tablename] =&amp;gt; immo_immobilien_alle&lt;br /&gt;
      [showLink] =&amp;gt; 1&lt;br /&gt;
      [class] =&amp;gt;  first last even&lt;br /&gt;
      [data] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
          [immo_titel] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Titel&lt;br /&gt;
              [type] =&amp;gt; text&lt;br /&gt;
              [raw] =&amp;gt; villa in tunesien&lt;br /&gt;
              [value] =&amp;gt; villa in tunesien&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
          [immo_gebiet] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Gebiet&lt;br /&gt;
              [type] =&amp;gt; select&lt;br /&gt;
              [raw] =&amp;gt; 141&lt;br /&gt;
              [value] =&amp;gt; Beja&lt;br /&gt;
              [ref] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [id] =&amp;gt; 141&lt;br /&gt;
                      [pid] =&amp;gt; 130&lt;br /&gt;
                      [tstamp] =&amp;gt; 1273353133&lt;br /&gt;
                      [sorting] =&amp;gt; 112&lt;br /&gt;
                      [type] =&amp;gt; &lt;br /&gt;
                      [alias] =&amp;gt; beja&lt;br /&gt;
                      [name] =&amp;gt; Beja&lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
          [immo_bild] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Bild - nur für das erste Bild &amp;amp;#40;Ein Bild für die Vorschau / maximale Dateigröße: 2MB / maximale Maße in px: 800x600&amp;amp;#41;&lt;br /&gt;
              [type] =&amp;gt; file&lt;br /&gt;
              [raw] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/bild_01.jpg&lt;br /&gt;
              [value] =&amp;gt; &amp;lt;a href=&amp;quot;immobilien-leser/items/miethaus-1.html&amp;quot; title=&amp;quot;Die Details des Eintrags ansehen&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;image first even&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogrelated0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/bild_01.jpg&amp;quot; title=&amp;quot;Bild 01&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/bild_01-0ec9b6d1.jpg&amp;quot; alt=&amp;quot;Bild 01&amp;quot; width=&amp;quot;200&amp;quot; height=&amp;quot;100&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
              [files] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/bild_01.jpg&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
              [meta] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/bild_01-0ec9b6d1.jpg&lt;br /&gt;
                      [alt] =&amp;gt; Bild 01&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogrelated0&lt;br /&gt;
                      [w] =&amp;gt; 200&lt;br /&gt;
                      [h] =&amp;gt; 100&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;200&amp;quot; height=&amp;quot;100&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
          [immo_bildergalerie] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Bildergalerie - alle anderen Bilder &amp;amp;#40;für die Detail Ansicht / maximale Dateigröße: 2MB / maximale Maße in px: 800x600&amp;amp;#41;&lt;br /&gt;
              [type] =&amp;gt; file&lt;br /&gt;
              [raw] =&amp;gt; a:4:{i:0;s:103:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/how 2 rubbeldiekatz.jpg&amp;quot;;i:1;s:89:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/image.png&amp;quot;;i:2;s:99:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/institut-aussen.jpg&amp;quot;;i:3;s:96:&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/james-wilson.jpg&amp;quot;;}&lt;br /&gt;
              [value] =&amp;gt; &amp;lt;span class=&amp;quot;image first even&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/how 2 rubbeldiekatz.jpg&amp;quot; title=&amp;quot;How 2 rubbeldiekatz&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/how 2 rubbeldiekatz-0d26e104.jpg&amp;quot; alt=&amp;quot;How 2 rubbeldiekatz&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;image odd&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/image.png&amp;quot; title=&amp;quot;Image&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/image-6a4159ed.png&amp;quot; alt=&amp;quot;Image&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;image even&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/institut-aussen.jpg&amp;quot; title=&amp;quot;Institut-aussen&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/institut-aussen-538b1b35.jpg&amp;quot; alt=&amp;quot;Institut-aussen&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;image odd&amp;quot;&amp;gt;&amp;lt;a rel=&amp;quot;lightbox[lbimmo_immobilien_allecatalogreader0]&amp;quot; href=&amp;quot;tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/james-wilson.jpg&amp;quot; title=&amp;quot;James-wilson&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;system/html/james-wilson-379f0b97.jpg&amp;quot; alt=&amp;quot;James-wilson&amp;quot; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
              [files] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/how 2 rubbeldiekatz.jpg&lt;br /&gt;
                  [1] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/image.png&lt;br /&gt;
                  [2] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/institut-aussen.jpg&lt;br /&gt;
                  [3] =&amp;gt; tl_files/usertreffen2010/immo/tunesien-immobilie_cat_items/immo_immobilien_alle/james-wilson.jpg&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
              [meta] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                  [0] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/how 2 rubbeldiekatz-0d26e104.jpg&lt;br /&gt;
                      [alt] =&amp;gt; How 2 rubbeldiekatz&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                  [1] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/image-6a4159ed.png&lt;br /&gt;
                      [alt] =&amp;gt; Image&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
                  [2] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/institut-aussen-538b1b35.jpg&lt;br /&gt;
                      [alt] =&amp;gt; Institut-aussen&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
									[3] =&amp;gt; Array&lt;br /&gt;
                    (&lt;br /&gt;
                      [src] =&amp;gt; system/html/james-wilson-379f0b97.jpg&lt;br /&gt;
                      [alt] =&amp;gt; James-wilson&lt;br /&gt;
                      [lb] =&amp;gt; lbcatalogreader0&lt;br /&gt;
                      [w] =&amp;gt; 50&lt;br /&gt;
                      [h] =&amp;gt; 50&lt;br /&gt;
                      [wh] =&amp;gt; width=&amp;quot;50&amp;quot; height=&amp;quot;50&amp;quot;&lt;br /&gt;
                      [caption] =&amp;gt; &lt;br /&gt;
                      [metafile] =&amp;gt; &lt;br /&gt;
                    )&lt;br /&gt;
&lt;br /&gt;
								)&lt;br /&gt;
&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
          [immo_sterne] =&amp;gt; Array&lt;br /&gt;
            (&lt;br /&gt;
              [label] =&amp;gt; Sterne &amp;amp;#40;Wie viele Sterne hat das Hotel&amp;amp;#41;&lt;br /&gt;
              [type] =&amp;gt; number&lt;br /&gt;
              [raw] =&amp;gt; &lt;br /&gt;
              [value] =&amp;gt; &lt;br /&gt;
            )&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist nur ein kleiner Auszug aus der Ausgabe.&lt;br /&gt;
In dieser Ausgabe stehten verschiedene Dinge.&lt;br /&gt;
&lt;br /&gt;
Am Anfang stehen immer die Grundinformationen (id, catalog_name, parentJumpTo, tablename,showLink, class).&lt;br /&gt;
Die werden in der Regel nicht gebraucht, sind aber gut zu wissen, damit man mal kurz schauen kann ob man überhaupt richtig ist ;)&lt;br /&gt;
&lt;br /&gt;
Alle Variablen die man bekommt stehen immer in dem Array '''data'''&lt;br /&gt;
Um an die einzelnen Werte zu kommen, braucht man nur die Arrays von dem Wert durchzugehen bis nach oben.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Den Titel der Immobilie als Überschrift ausgeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;&amp;lt;?php echo $entry['data']['immo_titel']['value']; ?&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das value 'villa in tunesien' soll ausgegeben werden, welches sich in dem Array 'immo_titel' befindet und das ist in dem Array 'data'.&lt;br /&gt;
So einfach bekommt man einzelne Werte ausgegeben.&lt;br /&gt;
&lt;br /&gt;
==Die Bestandteile der meta-Arrays==&lt;br /&gt;
&lt;br /&gt;
Die Arrays in so einer Ausgabe sind immer gleich aufgebaut. Je nach Feldtyp etwas anders.&lt;br /&gt;
&lt;br /&gt;
Die Standard Informationen&lt;br /&gt;
* class -&amp;gt; die CSS-Klassen des Items (eher wichtig in einer Liste, da man dort zum Beispiel even/odd zur Verfügung hat)&lt;br /&gt;
* link -&amp;gt; Die URL der Leser Seite (auch eher Listen spezifisch)&lt;br /&gt;
* url -&amp;gt; enthält nur die URL von dem Link. Damit kann man seine eigenen Links bauen.&lt;br /&gt;
* data -&amp;gt; Hier sind alle Felder drin.&lt;br /&gt;
&lt;br /&gt;
===Die allgemeinen Parameter===&lt;br /&gt;
Jedes Feld hat immer diese 4 Parameter:&lt;br /&gt;
    * [label] =&amp;gt; Enthält das Label welches im Katalog vergeben wurde&lt;br /&gt;
    * [type] =&amp;gt; Enthält den Feldtyp. Zum Beispiel: text, file, select, tags&lt;br /&gt;
    * [raw] =&amp;gt; Enthält die Original Daten direkt aus der Datenbank. Hiermit kann man immer komplett eigene Ausgaben gestalten.&lt;br /&gt;
    * [value] =&amp;gt; Enthält die vorformatierten Daten: &lt;br /&gt;
                    Datei-Bild Feld =&amp;gt; Bild Lightbox&lt;br /&gt;
                    Datei-download =&amp;gt; den download Link&lt;br /&gt;
                    Text Feld =&amp;gt; der Formatierte String (numeric, date, etc.)&lt;br /&gt;
&lt;br /&gt;
===Die speziellen Parameter===&lt;br /&gt;
&lt;br /&gt;
====Dateien====&lt;br /&gt;
&lt;br /&gt;
* [files] =&amp;gt; Beinhaltet ein Array -&amp;gt; [0] .. [xxx] mit den Dateinamen&lt;br /&gt;
* [meta] =&amp;gt; Beinhaltet die meta-Angaben, wie oben genannt&lt;br /&gt;
&lt;br /&gt;
Wenn es sich um eine Datei handelt (kein Bild) wird das meta-Array diese Werte enthalten:&lt;br /&gt;
&lt;br /&gt;
* [url] =&amp;gt; die relative URL zum herunterladen&lt;br /&gt;
* [alt] =&amp;gt; den alt Text&lt;br /&gt;
* [caption] =&amp;gt; die Beschreibung in der meta.txt Datei&lt;br /&gt;
* [size] =&amp;gt; die größe in Byte&lt;br /&gt;
* [sizetext] =&amp;gt; die größe in lesbarer Form (z.B. 230.0 kB)&lt;br /&gt;
* [icon] =&amp;gt; das Icon (gesetzt wird der Standard vom System selber, basierend auf den Mime-Typen)&lt;br /&gt;
&lt;br /&gt;
Wenn es sich um ein Bild handelt, wird das meta-Array diese Werte enthalten:&lt;br /&gt;
&lt;br /&gt;
* [src] =&amp;gt; den Dateinamen von dem Bild in angepasster größe (wenn das benutzt wird im Katalog selber)&lt;br /&gt;
* [alt] =&amp;gt; Den alt-Text&lt;br /&gt;
* [lb] =&amp;gt; die einzigartige REL=lightbox ID damit die Slimbox angesteuert werden kann&lt;br /&gt;
* [w] =&amp;gt; Bild width&lt;br /&gt;
* [h] =&amp;gt; Bild height&lt;br /&gt;
* [wh] =&amp;gt; Bild width/height in einem String &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei einer referenzierenden Tabelle können noch folgende Inhalte vorhanden sein:&lt;br /&gt;
&lt;br /&gt;
* [parentJumpTo] =&amp;gt; die ID von dem referenzierenden Katalog (kann in Inserttags genutzt werden)&lt;br /&gt;
* [parentLink] =&amp;gt; Der komplette Link mit einem Standard Text &amp;quot;View item details&amp;quot;&lt;br /&gt;
* [parentUrl] =&amp;gt; Die relative URL zu der Detail (Leser) Seite&lt;br /&gt;
&lt;br /&gt;
=Beispiel Anpassungen=&lt;br /&gt;
&lt;br /&gt;
==Einfache Überprüfung ob Inhalt vorhanden ist==&lt;br /&gt;
Es gibt immer wieder einzelne Felder die nur optional zu befüllen sind.&lt;br /&gt;
Wenn man die Ausgabe von einem Div nur machen möchte wenn auch Inhalte vorhanden sind, kann man das einfach mit einer if-Abfrage erledigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['immo_bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
   &amp;lt;div class=&amp;quot;immo_galerie&amp;quot;&amp;gt;&amp;lt;?php echo $entry['data']['immo_bildergalerie']['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dem Beispiel wird die Bildergalerie mit dem umschließenden div nur dann ausgegeben wenn auch mindestens ein Bild vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
==Wie man in eigenen Templates beim Katalog Thumbnails generieren kann==&lt;br /&gt;
&lt;br /&gt;
Thumbnails werden in Contao mit der Methode Controller::[[Arbeiten mit Bildern#getImage()|getImage()]] generiert.&lt;br /&gt;
Wichtig dabei ist, dass nicht der ganze Code des Bildes zurückgegeben wird, sondern lediglich die URL zum Thumbnail.&lt;br /&gt;
&lt;br /&gt;
Die Methode sieht wie folgt aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
getImage($image, $width, $height, $mode='', $target=null)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Parameter erklären sich wie folgt:&lt;br /&gt;
* $image (String) ''zwingend''&lt;br /&gt;
** erwartet eine relative URL zum Bild, dass verkleinert werden soll (z.B. 'tl_files/meine_bilder/mein_bild.jpg')&lt;br /&gt;
* $width (Integer) ''bedingt optional (Achtung: mind. eine Angabe zu Breite oder Höhe ist zwingend!)''&lt;br /&gt;
** erwartet eine Zahl, die die Breite in Pixel angibt (z.B. 230)&lt;br /&gt;
* $height (Integer) ''bedingt optional (Achtung: mind. eine Angabe zu Breite oder Höhe ist zwingend!)''&lt;br /&gt;
** erwartet eine Zahl, die die Breite in Pixel angibt (z.B. 230)&lt;br /&gt;
* $mode (String) ''optional'' (weitergehende Informationen auf dem [http://www.contao.org/blog-leser/items/die-3-varianten-der-bildanpassung-in-typolight-2.8.html offiziellen Contao-Blog])&lt;br /&gt;
** erwartet einen Angabe darüber, wie das Bild behandelt werden soll. Möglich sind:&lt;br /&gt;
*** &amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt; (Exaktes Format) - default&lt;br /&gt;
*** 'proportional' (Proportional)&lt;br /&gt;
*** 'box' (An Rahmen anpassen)&lt;br /&gt;
* $target (String) ''optional''&lt;br /&gt;
** erwartet eine relative URL zu einem Bild, dass ersetzt werden soll (z.B. 'tl_files/meine_bilder/mein_zu_ersetzendes_bild.jpg')&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für ein Template mit einem Thumbnail von 430px Breite und 300px Höhe, das proportional geparst werden soll, könnte also so aussehen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;&amp;lt;?php echo $this-&amp;gt;getImage('tl_files/meine_bilder/mein_bild.jpg',430,300,'proportional'); ?&amp;gt;&amp;quot; alt=&amp;quot;Mein alt-Text für mein Bild&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fortlaufende Nummerierung der einzelnen Einträge in einer Liste==&lt;br /&gt;
&lt;br /&gt;
Die Paginierung wurde berücksichtigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$perpage=3&lt;br /&gt;
$index=0&lt;br /&gt;
foreach ($this-&amp;gt;entries as $entry):&lt;br /&gt;
  &amp;lt;$index++&lt;br /&gt;
  if (isset($_GET['page'])):&lt;br /&gt;
    $number = $index + ($perpage * ($_GET['page'] - 1))&lt;br /&gt;
  else:&lt;br /&gt;
    $number = $index&lt;br /&gt;
  endif;&lt;br /&gt;
  ...&lt;br /&gt;
endforeach;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wobei $perpage die Anzahl der Items enhält, die pro Seite ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
==Kategorien einmalig ausgeben und die Items darunter==&lt;br /&gt;
Beispiel anhand eines modifizierten catalog_simple.tpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (count($this-&amp;gt;entries)):&lt;br /&gt;
   $lastcat=''; ?&amp;gt;&lt;br /&gt;
   &amp;lt;div class=&amp;quot;layout_simple&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;?php foreach ($this-&amp;gt;entries as $entry):&lt;br /&gt;
      if ($lastcat!=$entry[data]['Kategorie']['value']):&lt;br /&gt;
         $lastcat=$entry[data]['Kategorie']['value']; ?&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;cat&amp;quot;&amp;gt;&amp;lt;?php echo $entry[data]['Kategorie']['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;item&amp;lt;?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data):&lt;br /&gt;
         if ($field=='Kategorie') continue;&lt;br /&gt;
         if (!in_array($field, array('catalog_name','parentJumpTo'))): ?&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;label&amp;quot;&amp;gt;&amp;lt;?php echo $data['label']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
         &amp;lt;?php endif;&lt;br /&gt;
      endforeach;&lt;br /&gt;
      if ($entry['showLink'] &amp;amp;&amp;amp; $entry['link']): ?&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;link&amp;quot;&amp;gt;&amp;lt;?php echo $entry['link']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif;&lt;br /&gt;
      if ($entry['linkEdit']): ?&amp;gt;&lt;br /&gt;
         &amp;lt;div class=&amp;quot;linkEdit&amp;quot;&amp;gt;&amp;lt;?php echo $entry['linkEdit']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
   &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php else:&lt;br /&gt;
   if ($this-&amp;gt;condition): ?&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;condition&amp;quot;&amp;gt;&amp;lt;?php echo $this-&amp;gt;condition; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;?php else: ?&amp;gt;&lt;br /&gt;
      &amp;lt;p class=&amp;quot;info&amp;quot;&amp;gt;There are no entries matching your search.&amp;lt;/p&amp;gt;&lt;br /&gt;
   &amp;lt;?php endif;&lt;br /&gt;
endif;&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fortlaufende Nummern für die Zellen im Katalog==&lt;br /&gt;
&lt;br /&gt;
Am Beispiel von einem simpletable.tpl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;layout_simpletable&amp;quot; summary=&amp;quot;Catalog Items&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;thead class=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;?php list($field, $heading) = each($this-&amp;gt;entries);&lt;br /&gt;
      $i = 0;&lt;br /&gt;
      foreach ($heading['data'] as $field=&amp;gt;$data):&lt;br /&gt;
      $i++;&lt;br /&gt;
        if (!in_array($field, array('catalog_name','parentJumpTo'))): ?&amp;gt;&lt;br /&gt;
          &amp;lt;th class=&amp;quot;header&amp;lt;?php echo $i; ?&amp;gt;&amp;quot;&amp;gt;&amp;lt;?php echo $data['label']; ?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;?php endif;&lt;br /&gt;
      endforeach; ?&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;/thead&amp;gt;&lt;br /&gt;
  &amp;lt;tbody class=&amp;quot;body&amp;lt;?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;?php foreach ($this-&amp;gt;entries as $entry):&lt;br /&gt;
      $n++ ?&amp;gt;&lt;br /&gt;
      &amp;lt;tr class=&amp;quot;item&amp;lt;?php echo $n; ?&amp;gt;&amp;lt;?php echo $entry['class'] ? '  '.$entry['class'] : ''; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data):&lt;br /&gt;
        $k++;&lt;br /&gt;
          if (!in_array($field, array('catalog_name','parentJumpTo'))): ?&amp;gt;&lt;br /&gt;
            &amp;lt;td class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;lt;?php echo $k; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;?php if (strlen($data['value'])):&lt;br /&gt;
              if ($entry['url'] &amp;amp;&amp;amp; $field == 'title'): ?&amp;gt;&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['url']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;?php endif;&lt;br /&gt;
            echo $data['value'];&lt;br /&gt;
              if ($entry['url'] &amp;amp;&amp;amp; $field == 'title'): ?&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
              &amp;lt;?php endif;&lt;br /&gt;
            endif; ?&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;?php endif;&lt;br /&gt;
        endforeach; ?&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
  &amp;lt;/tbody&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eine Bildergalerie erstellen, wo nur das 1. Bild ausgegeben wird und die anderen in der Lightbox vorhanden sind==&lt;br /&gt;
&lt;br /&gt;
{{Achtung|diese beiden Herangehensweisen sind noch ungetestet.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTML:&lt;br /&gt;
Die Ausgabe sollte ungefähr so aussehen:&lt;br /&gt;
&amp;lt;spurce lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;tl_files/image01.jpg&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/image01.jpg&amp;quot; alt=&amp;quot;bla&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;tl_files/image02.jpg&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das 1. Bild mit Vorschaubild und die anderen Bilder nur als Link, damit diese ausgegeben werden, aber erst mal nix zu sehen ist.&lt;br /&gt;
&lt;br /&gt;
Es gibt da ja im Grunde 2 Herangehensweisen:&lt;br /&gt;
1. Im Backend gibt man 1 Bild an und dann noch mehrere Bilder als Galerie (so hat man die volle Kontrolle darüber welches das Vorschaubild ist)&lt;br /&gt;
2. Man gibt nur eine Bildergalerie an.&lt;br /&gt;
&lt;br /&gt;
Template (Grundüberlegung):&lt;br /&gt;
1. Grundüberlegung der Ausgabe allgemein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['einzelbild']['meta']):?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bilder&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;strong&amp;gt;&amp;lt;?php echo $entry['data']['einzelbild']['value']; ?&amp;gt;&amp;lt;/strong&amp;gt;&lt;br /&gt;
      &amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&amp;lt;?php echo $entry['data']['bildergalerie']['value']; ?&amp;gt;&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Grundüberlegung der Ausgabe allgemein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bilder&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;?php echo $entry['data']['bildergalerie']['value']; ?&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Damit hat man einfach nur die normale Galerie. Das wäre für diesem Fall ja nicht passend; sei an dieser Stelle jedoch noch mal dokumentiert sein.&lt;br /&gt;
&lt;br /&gt;
Um das jetzt zu verbinden, gibt es verschiedene Vorgehensweisen:&lt;br /&gt;
1.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['einzelbild']['meta']):?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bilder&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;strong&amp;gt;&amp;lt;?php echo $entry['data']['einzelbild']['value']; ?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['data']['einzelbild']['files']['0'];?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&amp;lt;?php echo $entry['data']['einzelbild']['meta']['0']['src'];?&amp;gt;&amp;quot; alt=&amp;quot;bla&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/strong&amp;gt;&lt;br /&gt;
 &amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['bildergalerie']['value'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['bildergalerie']['value']['meta'][$field]['src'] ?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot; &amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Für das 1. Bild (in Array ja die 0 eine andere Ausgabe machen):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if($entry['data']['bildergalerie']['value']):?&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['bildergalerie']['value'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;?php if(($entry['bildergalerie']['value']['meta'][$field])=='0'):?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['data']['einzelbild']['files']['0'];?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot; rel=&amp;quot;lightbox[lightbox_1]&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&amp;lt;?php echo $entry['bildergalerie']['value']['meta'][$field]['src'] ?&amp;gt;&amp;quot; alt=&amp;quot;bla&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;?php else;?&amp;gt;&lt;br /&gt;
&amp;lt;a rel=&amp;quot;lightbox[lightbox_1]&amp;quot; href=&amp;quot;&amp;lt;?php echo $entry['bildergalerie']['value']['meta'][$field]['src'] ?&amp;gt;&amp;quot; title=&amp;quot;bla&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;?php endif;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==2 Katalog referenzieren==&lt;br /&gt;
Hier im Forum ist die Herangehensweise beschrieben, wie man das machen kann ohne mit Referenzen aus catalog 2 zu arbeiten:&lt;br /&gt;
[http://www.contao-community.de/showthread.php?5448-2-Kataloge-referenzieren-GEL%D6ST]&lt;br /&gt;
&lt;br /&gt;
Hier noch ein kurzes Beispiel wie das gehen kann:&lt;br /&gt;
&lt;br /&gt;
In dem Catalog Leser von einem Autoren sollen die Bücher dargestellt werden (diese sind mit dem Feldtyp Tags referenziert). Die Bücher sind in dem Fall innerhalb des Array 'ref':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($data['ref'] as $id=&amp;gt;$ref): ?&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;div class=&amp;quot;row_&amp;lt;?php echo $id; ?&amp;gt; buch &amp;lt;?php if($ref['bilder_buch']) echo &amp;quot;buch_mitbild&amp;quot;;?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Alle Werte ausgeben und nur einen Anpassen (als Beispiel Bilder mit eigner Beschreibung) ==&lt;br /&gt;
&lt;br /&gt;
Hier ein Auszug wie bei dem Feld beispiel_bild der gewünschte Code ausgegeben wird und ansonsten die Werte einfach normal vom Catalog ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php if($field=='beispiel_bild'):?&amp;gt;&lt;br /&gt;
{{image::&amp;lt;?php echo $data['files']['0']; ?&amp;gt;?width=&amp;lt;?php echo $data['meta']['0']['w']; ?&amp;gt;&amp;amp;height=&amp;lt;?php echo $data['meta']['0']['h']; ?&amp;gt;&amp;amp;alt=&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;amp;mode=crop&amp;amp;rel=lightbox}}&lt;br /&gt;
&amp;lt;?php elseif(!in_array($field, array('catalog_name','parentJumpTo'))):?&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;label&amp;quot;&amp;gt;&amp;lt;?php echo $data['label']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele finden sich im engl. Wiki vom Catalog==&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/typolight-catalog/wiki/EN_CatalogTemplatesTutorial http://code.google.com/p/typolight-catalog/wiki/EN_CatalogTemplatesTutorial]&lt;br /&gt;
&lt;br /&gt;
==Beispiele im Forum:==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao-community.de/showthread.php?10335-Berufs-und-Ausstellerverzeichnis-kombinieren&amp;amp;p=74438#post74438 Zwei Kataloge im Template verbinden]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:MacKP|MacKP]] 21:44, 21. Mai 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Alle Werte ausgeben und nur einen anpassen und als Bild ausgeben (Taxonomie mit verlinkten Icons) ==&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie im obrigen Beispiel, wird hier eine Spalte so angepasst, dass die Taxonomie IDs gegen Icons getauscht werden (auch ideal für Immobilien, Ferienwohnungen). &lt;br /&gt;
&lt;br /&gt;
Zunächst wird abgefragt, welches Katalogfeld seperat behandelt wird  &amp;lt;nowiki&amp;gt;&amp;lt;?php if($field=='tags'):?&amp;gt; &amp;lt;/nowiki&amp;gt;. Zwischen den Kommentaren wird zunächst zum einfacheren Vorgehen die (verlinkten) Icons in eine Variable gespeichert ($icons) und darunter mittels foreach das Puffer-Array angesprochen und ausgegeben. Dadurch lassen sich auch Tageinträge größer eins verarbeiten:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php foreach ($entry['data'] as $field=&amp;gt;$data): ?&amp;gt;&lt;br /&gt;
&amp;lt;td class=&amp;quot;field &amp;lt;?php echo $field; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php if($field=='tags'):?&amp;gt;&lt;br /&gt;
&amp;lt;!------------------ ANFANG ------------------&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$icons=array(&lt;br /&gt;
  // Schema: 'id' =&amp;gt; 'zu generierender html code',&lt;br /&gt;
  '2' =&amp;gt; '&amp;lt;a href=&amp;quot;#&amp;quot; title=&amp;quot;eins&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/eins.gif&amp;quot; alt=&amp;quot;eins&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;',&lt;br /&gt;
  '3' =&amp;gt; '&amp;lt;a href=&amp;quot;#&amp;quot; title=&amp;quot;eins&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/zwei.gif&amp;quot; alt=&amp;quot;zwei&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;',&lt;br /&gt;
  '4' =&amp;gt; '&amp;lt;a href=&amp;quot;#&amp;quot; title=&amp;quot;eins&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;tl_files/drei.gif&amp;quot; alt=&amp;quot;drei&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;'&lt;br /&gt;
);&lt;br /&gt;
foreach($data['ref'] as $info)&lt;br /&gt;
  echo $icons[$info['id']];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;!------------------ ENDE ------------------&amp;gt;&lt;br /&gt;
 &amp;lt;?php elseif(!in_array($field, array('catalog_name','parentJumpTo'))):?&amp;gt;&lt;br /&gt;
     &amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;?php endforeach; ?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:carino|carino]] 10:30, 24. Juli 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Zeilenumbruch im textarea Feld des Backend als HTML ausgeben==&lt;br /&gt;
Ist ein Feld vom Typ textarea, kann man dort Zeilenumbrüche eingeben und speichern. Diese werden im Frontend aber nicht angezeigt.&lt;br /&gt;
Mit folgendem Befehl werden die Umbrüche in HTML umgewandelt und damit im Frontend sichtbar. Den Code einfach vor der Ausgabe des description Feldes einfügen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// replace new line feed \n (0x0A) in description field by HTML line break &amp;lt;br/&amp;gt;&lt;br /&gt;
$entry['data']['description']['value'] = str_replace(&amp;quot;\xa&amp;quot;, &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;, $entry['data']['description']['value']); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Google_Analytics</id>
		<title>Google Analytics</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Google_Analytics"/>
				<updated>2011-03-16T17:36:20Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Core]]&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|TLVersion=bis 2.8.x&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
[[w:de:Google_Analytics|Google Analytics]] ist ein kostenloser Dienst, welcher der Analyse von Zugriffen auf Webseiten dient (Es gilt nur ein monatliches Limit an Seitenaufrufen in Höhe von 5.000.000 Aufrufen).&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Um Verfälschungen auszuschließen, wird der Google Analytics Code erst im Frontend angezeigt, wenn man sich aus dem Backend ausgeloggt hat.}}&lt;br /&gt;
&lt;br /&gt;
==Alternativen==&lt;br /&gt;
Eine Alternative zu Google Analytics stellt [[Piwik]] dar.&lt;br /&gt;
&lt;br /&gt;
==Rechtliches==&lt;br /&gt;
Es ist rechtlich noch nicht klar, ob es nun verboten ist, die Daten in Deutschland mit Google-Analytics zu erfassen. 2 Dinge sprechen erst einmal dagegen:&lt;br /&gt;
#Die Google Server sind nicht unbedingt in Deutschland.&lt;br /&gt;
#Die IP wird erfasst und die gewonnenen Daten können nicht einfach von einem Seitenbetreiber gelöscht werden, wenn ein Besucher dies verlangt.&lt;br /&gt;
&lt;br /&gt;
Es gibt inzwischen ein Addon für einige Browser von Google, die Analytics Datensammlung deaktivieren: http://tools.google.com/dlpage/gaoptout?hl=de&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, der kann ab Contao 2.9 die IP von den Besuchern anonymisieren und so dem Datenschutz genügen (siehe [[#IP-Adressen_anonymisieren|IP-Adresse anonymisieren]]).&lt;br /&gt;
&lt;br /&gt;
{{Achtung|'''Dies ist keine Rechtsberatung.''' Detaillierte Angaben zur rechtlichen Situation beim Einsatz von Google Analytics sind von jeder selbst bei einem Rechtsanwalt zu erfragen (am besten in dem Fachgebiet Internet).}}&lt;br /&gt;
&lt;br /&gt;
=Google Analytics Konto erstellen=&lt;br /&gt;
Um den Dienst ''Google Analytics'' (nachfolgend GA) nutzen zu können, muss man sich zuerst ein GA-Konto [http://www.google.com/analytics/ erstellen].&amp;lt;br /&amp;gt;&lt;br /&gt;
Nach dem Erstellen eines Accounts gibt man GA die Domain bekannt, auf der der Dienst laufen soll. Dazu klickt man auf ''Neues Konto'' ...&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_createaccount.png|Google Analytics Account erstellen]]&lt;br /&gt;
&lt;br /&gt;
... und anschließend auf ''Anmelden''.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_login.png|Webseite hinzufügen]]&lt;br /&gt;
&lt;br /&gt;
Anschließend erfolgen die Angaben zur Webseite, auf der GA laufen soll.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_websitesettings.png|Webseiten Angaben]]&lt;br /&gt;
&lt;br /&gt;
Nachdem man den Geschäftsbedingungen zugestimmt hat, kommt man zur Seite mit dem Tracking-Code. In diesem Code notiert man sich die Account-Nummer; die wird später noch benötigt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis| In den Google Geschäftsbedingungen (PUnkt 8.1) wird man Aufgefordert einen dort angegebenen Satz auf seiner Webseite einzubringen. Das sollte man auf jeden Fall machen, da es dort um die Datenschutzrichtlinien geht, die eh jeder auf seiner Internetseite auszeichnen sollte! }}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_trackingcode.png|Tracking Code]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der Eingaben kommt man zur Übersicht, wo nun die erstellte Webseite auf scheint.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_overview.png]]&lt;br /&gt;
=Einbinden von Google Analytics mittels der Core-Funktion=&lt;br /&gt;
==Typolight bis 2.8.x==&lt;br /&gt;
Um GA in TYPOlight bis 2.8.x einzubinden, bearbeitet man das entsprechende Seitenlayout und fügt unter ''Experten-Einstellungen'' im Feld ''Google Analytics Id'' die vorhin notierte GA-ID ein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout_tl.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
Anschließend speichert und schließt man das Layout.&lt;br /&gt;
&lt;br /&gt;
==Contao ab 2.9==&lt;br /&gt;
Seit Contao 2.9 wird GA über das Template ''moo_analytics.tpl'' eingebunden. Wie man ein Template über den im Core integrierten Template-Editor einbindet, ist [[Templates_bearbeiten|hier]] beschrieben. Nachdem das Template ausgewählt wurde, wird das Template bearbeitet.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_templateedit.png|Template bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Wie schon in dem Kommentar des Templates vermerkt ist, braucht nur die im Code eingefügte Blind-ID (UA-XXXXX-X) gegen die vorhin notierte GA-ID ausgetauscht werden. Anschließend kann das Template gespeichert und geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Nun muss im Seitenlayout das Script eingebunden werden. Dazu setzt man unter ''Skript-Einstellungen'' einen Haken bei dem Punkt ''moo_analytics''. Es muss darauf geachtet werden, dass dieses Skript als letztes eingebunden wird! Anschließend wird das Layout gespeichert und geschlossen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
===IP-Adressen anonymisieren===&lt;br /&gt;
Aus Datenschutzgründen bietet GA seit geraumer Zeit die Möglichkeit, die geloggten IP-Adressen der Besucher zu anonymisieren. Dazu muss nochmal das Template bearbeitet werden und zwischen der Zeile &amp;lt;code&amp;gt;_gaq.push(['_setAccount', 'UA-XXXXX-X']);&amp;lt;/code&amp;gt; und der Zeile &amp;lt;code&amp;gt;_gaq.push(['_trackPageview']);&amp;lt;/code&amp;gt; eine neue Zeile mit folgendem Inhalt eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ganze Template sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * To use the script, replace UA-XXXXX-X in the code below with your Google&lt;br /&gt;
 * Analytics ID and then add it to a Contao page layout. Make sure to insert&lt;br /&gt;
 * it as the last moo_ script (!) and note that it will only be added to the&lt;br /&gt;
 * page if you are not logged into the back end.&lt;br /&gt;
 */&lt;br /&gt;
if (!BE_USER_LOGGED_IN &amp;amp;&amp;amp; sha1(session_id() . (!$GLOBALS['TL_CONFIG']['disableIpCheck'] ? $this-&amp;gt;Environment-&amp;gt;ip : '') . 'BE_USER_AUTH') != $this-&amp;gt;Input-&amp;gt;cookie('BE_USER_AUTH')):&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--//--&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!--&lt;br /&gt;
var _gaq = _gaq || [];&lt;br /&gt;
_gaq.push(['_setAccount', 'UA-XXXXX-X']);&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
_gaq.push(['_trackPageview']);&lt;br /&gt;
(function() {&lt;br /&gt;
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;&lt;br /&gt;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';&lt;br /&gt;
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);&lt;br /&gt;
})();&lt;br /&gt;
//--&amp;gt;&amp;lt;!]]&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Einbinden von Google Analytics mit Erweiterungen=&lt;br /&gt;
Statt der Anapssung an den Templates (ab Contao 2.9) kann die Erweiterung [[GoogleAnalytics]] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bestimmte Rechner (Webmaster, Kunden) vom Tracking ausschliessen=&lt;br /&gt;
Mit GA ist es möglich, bestimmte Rechner von den Statistiken auszuschliessen. Zum Beispiel ist es sinnvoll, den Entwickler oder Webmaster von der Datenerfassung auszuschliessen, da sonst die Statistik verfälscht wird. GA bietet dafür [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 die Filter Funktion auf Profil-Ebene].&amp;lt;br /&amp;gt;&lt;br /&gt;
Eine Möglichkeit, um gezielt Rechner auszuschliessen besteht darin, auf diesen Rechnern ein bestimmtes Cookie zu installieren. GA erkennt dieses Cookie und führt dann kein Tracking aus. &lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
===Google Analytics Filter===&lt;br /&gt;
In der GA Konto- bzw. Profilübersicht wählt man ''Bearbeiten'' für die gewünschte Domain. In den Profileinstellungen dann &amp;quot;Filter hinzufügen&amp;quot; wählen, dann die Felder wie folgt ausfüllen:&amp;lt;br /&amp;gt;&lt;br /&gt;
Filtername: nach cookie, Benutzerdefinierter Filter, Ausschliessen, Filterfeld: Benutzerdefiniert, Filtermuster: no_report, Gross-/Klein: Nein.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;Änderungen Speichern&amp;quot; wählen um den Filter zu erstellen.&lt;br /&gt;
&lt;br /&gt;
===Auszuschliessende Rechner identifizieren===&lt;br /&gt;
Damit die Webseite erkennt, ob der ausführende Rechner vom Tracking ausgeschlossen werden soll oder nicht, wird ein Cookie verwendet. Das Cookie wird bei jedem Webseitenaufruf automatisch per Javascript installiert. Allerdings nur auf den Rechnern, die ein solches Cookie explizit wünschen. Das Javascript erkennt anhand des [[w:de:User_Agent|userAgent]] Strings, ob der Rechner ein Cookie wünscht oder nicht. Wenn der Google Analytics Tracking Code im userAgent String vorkommt, wird das Cookie installiert. &lt;br /&gt;
&lt;br /&gt;
Um den userAgent String anzupassen kann wie folgt vorgegangen werden:&lt;br /&gt;
* '''Internet Explorer''': Um den userAgent String im Internet Explorer anzupassen, muss in die Registry eingegriffen werden. Dazu den folgenden Code in den Editor kopieren, den GA Tracking Code UA-XXXXX-X an den eigenen anpassen und als *.reg speichern. Anschliessend die Datei doppelklicken.&lt;br /&gt;
Für '''IE7:'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;reg&amp;quot;&amp;gt;&lt;br /&gt;
Windows Registry Editor Version 5.00&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;UA-XXXXX-X&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;UA-XXXXX-X&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Für '''IE8:'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;reg&amp;quot;&amp;gt;&lt;br /&gt;
Windows Registry Editor Version 5.00&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;UA-XXXXX-X&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;UA-XXXXX-X&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Für '''IE9:'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;reg&amp;quot;&amp;gt;&lt;br /&gt;
Windows Registry Editor Version 5.00&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
@=&amp;quot;Mozilla/5.0&amp;quot;&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;MSIE 9.0 UA-XXXXX-X&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent]&lt;br /&gt;
@=&amp;quot;Mozilla/5.0&amp;quot;&lt;br /&gt;
&amp;quot;Version&amp;quot;=&amp;quot;MSIE 9.0 UA-XXXXX-X&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Quelle: [http://www.ideadapt.net ideadapt]&lt;br /&gt;
* '''Mozilla Firefox''': about:config in Adresszeile eingeben, Warnung aktzeptieren, Liste nach general.useragent.extra.firefox filtern, Eintrag mit Doppelklick bearbeiten und gewünschten Tracking Code am Ende einfügen, Änderungen mit OK übernehmen und Firefox neu starten.&lt;br /&gt;
* '''Opera''': opera:config#ISP|Id in Adresszeile eingeben, im Feld Id den Tracking Code eingeben, Änderungen speichern und Opera neu starten.&lt;br /&gt;
* '''Safari''': Im Menu auf Bearbeiten &amp;gt; Einstellungen, dann auf den Tab Erweitert, die Einstellung &amp;quot;Menu 'Entwickler' in der Menüleiste anzeigen&amp;quot; aktivieren. Einstellungen schliessen. Im Menu auf Entwickler &amp;gt; User Agent &amp;gt; Anderer ... Den Tracking Code am Ende einfügen und mit OK Änderungen speichern. Neustart nicht erforderlich.&lt;br /&gt;
* Allgmeine Anleitungen: [[w:de:User_Agent#Benutzerdefiniert|Wikipedia - für verschiedene Browser]], [http://www.fiddlertool.com/ua.aspx fiddlertool - Anzeige von userAgent und Installationsanleitungen]&lt;br /&gt;
&lt;br /&gt;
===Google Analytics Javascript anpassen===&lt;br /&gt;
Das folgende Javascript sollte bei jedem Seitenaufruf ausgeführt werden. Dementsprechend also z.B. im Head Bereich des HTML entsprechend einbinden. Zuvor noch UA-XXXXX-X durch den eigenen Tracking Code ersetzen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(navigator.userAgent &amp;amp;&amp;amp; navigator.userAgent.match(/UA-XXXXX-X/)){&lt;br /&gt;
 _gaq.push(['_setVar', 'no_report']); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dieses Script bezieht sich möglicherweise nicht auf die von Ihnen verwendete GA API Version. [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 Welche Version verwende ich?]&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Catalog</id>
		<title>Catalog</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Catalog"/>
				<updated>2011-03-07T16:42:04Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Folder-URL und der catalog wollen nicht so recht */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Catalog-Modul ermöglicht eine vielfältige Kategorisierung beliebiger Daten in hierarchischen und flachen Strukturen. Beispiele umfassen [http://www.tuerkischdeutsche-literatur.de Literaturverzeichnisse] oder eine Immobilienverwaltung (mit Frontendeingabe und Workflow) oder einer Rezeptdatenbank (zu sehen auf [http://catalogdemo.dasprojekt.org http://catalogdemo.dasprojekt.org] ).&lt;br /&gt;
&lt;br /&gt;
Da dieses Modul sehr komplex ist, findet man einzelne Dokumantationen in der Kategorie [[:Category:Catalog|Catalog]].&lt;br /&gt;
&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|TLVersion=ab 2.8&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
|Ext1=Catalog ab 2.0beta1&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
[[Category:Catalog]]&lt;br /&gt;
&lt;br /&gt;
=Forum=&lt;br /&gt;
Fragen rund um den Catalog werden im Forum hier behandelt: [http://www.contao-community.de/forumdisplay.php?18-catalog Forum - Catalog Bereich]&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
Catalog kann ganz normal über die Erweiterungsverwaltung des Contao-Backend installiert werden. Eine manuelle Installation ist auch möglich, dazu muss man sich die benötigen Dateien des [http://www.contao.org/erweiterungsliste/view/catalog.html catalog aus dem Extension Repository herunterladen] (abhängige Erweiterungen nicht vergessen!).&lt;br /&gt;
&lt;br /&gt;
Den jeweils neusten Build kann man sich aus dem [http://code.google.com/p/typolight-catalog/source/checkout SVN-Repository] herunterladen. Einzig das Modul backend_filterwiz muss dabei separat installiert werden, alle weiteren Module sind im Repository vorhanden. Man sollte darauf achten, welche Ordner wohin in der Installation kommen!&lt;br /&gt;
&lt;br /&gt;
==Migration von Version 1 auf Version 2==&lt;br /&gt;
In Version 2 wurde Einiges geändert. So ist es u. a. nicht mehr nötig catalog und catalog_ext zu installieren, da diese Erweiterungen zusammengelegt wurden. Damit es zu keinem Datenverlust kommt, muss bei einem manuellen Update wie folgt vorgegangen werden:&lt;br /&gt;
* Zuerst die alten Modulordner entfernen,&lt;br /&gt;
* danach die neuen Modulordner hochladen.&lt;br /&gt;
* Erst zum Schluss das Datenbankupdate ausführen!&lt;br /&gt;
&lt;br /&gt;
Beim Update über das Contao-ExtensionRepository sollte man die Reihenfolge beachten:&lt;br /&gt;
* Catalog 2 installieren und Datenbank-Update ausführen.&lt;br /&gt;
* Catalog_ext deinstallieren und erneut Datenbank-Update ausführen.&lt;br /&gt;
* Zur Sicherheit alle catalog-Module etc. noch mal öffnen und speichern, damit auch alles glatt läuft.&lt;br /&gt;
* Neue Einstellungen vornehmen.&lt;br /&gt;
&lt;br /&gt;
Katalogfelder vom Typ &amp;quot;Taxonomie&amp;quot; müssen umgestellt werden auf &amp;quot;Auswahl&amp;quot; mit der Datentabelle &amp;quot;tl_taxonomy&amp;quot;, Option Spaltenwert = name. Für eine schönere Darstellung aktiviert man &amp;quot;Die Optionsauswahl individualisieren&amp;quot;, dann kann man auch Teilbereiche aus der Taxonomie vorgeben und die Anzeige auf &amp;quot;Baum nur mit auswählbaren Kindeinträgen&amp;quot; stellen.&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Testumgebung und Vortrag vom Usertreffen 2010:&lt;br /&gt;
* Vortrag / Testumgebung -&amp;gt; http://catalogdemo.dasprojekt.org/&lt;br /&gt;
* Benutzer: tlut2010&lt;br /&gt;
* Passwort: catalogisttoll&lt;br /&gt;
&lt;br /&gt;
==Backend==&lt;br /&gt;
Mit dem Catalog bekommt man im Backend unter dem Menüpunkt 'Inhalte' 2 neue Menüeinträge:&lt;br /&gt;
* Katalog&lt;br /&gt;
* Mit '''Taxonomie''' können Stichworte hierarchisch angelegt und verwaltet werden. Diese sind Grundlage für Filter, Navigation und Verschlagwortung (sog. ''Tagging'') in den Katalogen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-be.png|Cat Backend]]&lt;br /&gt;
&lt;br /&gt;
==Frontend-Module==&lt;br /&gt;
Für eine Basisanwendung der Katalog-Erweiterung können folgende Module eingesetzt werden:&lt;br /&gt;
* Mit '''Catalog List''' kann eine Liste von Einträgen angezeigt werden.&lt;br /&gt;
* Eine Detailansicht eines Eintrags kann mit Hilfe des '''Catalog Reader''' angezeigt werden. Eine ''Catalog List'' verweist dabei auf den ''Catalog Reader''. Der ''Catalog Reader'' muss natürlich nur dann verwendet werden, wenn von einer Auflistung aus eine Detailseite eines Eintrags angezeigt werden soll.&lt;br /&gt;
&lt;br /&gt;
Für eine weiterführende Benutzung der Katalog-Erweiterung stehen optional diese Module zur Verfügung:&lt;br /&gt;
* Catalog Filter (Mit Hilfe von einem Filter können Besucher die Liste eines Catalogs filtern und die Anzeige eingrenzen)&lt;br /&gt;
* Catalog Navigation (Mit dieser Navigation kann man eine Navigation erstellen. Die Navigation besteht zum Beispiel aus Kategorien)&lt;br /&gt;
* Catalog Notify (Hiermit wird ein Formular erstellt, welches zur schnellen Kontaktaufnahme bei einem einzelnen Item dargestellt wird)&lt;br /&gt;
* Catalog Featured (Hiermit kann man eine besondere Liste erstellen, die besondere Items darstellt. Die Liste wird per Zufall zusammengestellt.)&lt;br /&gt;
* Catalog Related (Hiermit erstellt man eine Liste von ähnlichen Items - Einzusezten auf einer Seite wo auch der Catalog Reader enthalten ist. Zufallsausgabe)&lt;br /&gt;
* Catalog Reference (Hiermit erstellt man eine Liste von Items mit einer gleichen Eigenschaft.)&lt;br /&gt;
* Catalog Edit (Um ein Item im Frontend editieren zu können, wird anstelle von Catalog Reader dieses Modul verwendet)&lt;br /&gt;
&lt;br /&gt;
=Erstellen eines Katalogs (Backend)=&lt;br /&gt;
Um einen neuen catalog zu erstellen, klickt man links im Backend unter 'Inhalte' auf 'Katalog'. Anschliessend im Hauptbereich auf den Button 'Neuer Katalog'.&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-newcat.png|Neuen Cat erstellen]]&lt;br /&gt;
&lt;br /&gt;
* Name des Katalogs angeben&lt;br /&gt;
* Einen Tabellennamen angeben (Der catalog legt diese Tabelle selbstständig an. Es hat sich bewährt eine Tabelle anzulegen ohne tl_ als präfix, da Contao diese Tabellen sonst zum Entfernen vorschlägt. Ich empfehle den präfix cat_ damit man die Tabellen schnell wiederfindet.)&lt;br /&gt;
* Alias field (kann erst später ausgefüllt werden) -&amp;gt; anstelle der ID wird der Alias genutzt bei den Links&lt;br /&gt;
* publishField (kann erst später ausgefüllt werden) -&amp;gt; Hier kann ein Checkboxfeld ausgewählt werden, was die Funktion eines 'Auges' = on-/offline hat (z.B. Ein Feld mit dem Namen online)&lt;br /&gt;
* Jump to page -&amp;gt; Hier muss die Detail Seite mit dem Modul Catalog Reader angegeben werden. {{Achtung|Die richtige Zuweisung der Readerseite erfolgt in den Kataloglisten Modulen, diese Zuweisung hier ist jedoch nötig damit der Katalog die Items in die xml-Sitemap eintragen kann. Wird diese Zuweisung hier nicht vorgenommen, so &amp;quot;weiss&amp;quot; der Katalog nicht, auf welchem Reader die Items dargestellt werden sollen und trägt sie daher nicht in der sitemap.xml ein. Auch für die Contao Suche muss diese Angabe gemacht werden.}}&lt;br /&gt;
* Ein Bild hinzufügen -&amp;gt; Hier kann ein Bild für den Katalog hinzugefügt werden, um im Backend den Katalog schnell von anderen unterscheiden zu können&lt;br /&gt;
* Zeichenkette des Titels formatieren (wird erst später gebraucht) -&amp;gt; Um im Backend die Übersicht von vielen Items besser gewährleisten zu können, kann man hier die Anzeigen der einzelnen Items konfigurieren&lt;br /&gt;
* Allow comments -&amp;gt; Kommentare bei den einzelnen Items erlauben und konfigurieren (Funktion ist wie bei News o.ä. daher wird hier nicht genauer darauf eingegangen)&lt;br /&gt;
* Searchable -&amp;gt; Wenn man die Items auch in der Contao Suche indexieren lassen möchte. Nach Aktivierung ist es möglich, Conditions (Ausnahmen) einzugeben und das Title Feld anzugeben von einem Item (weiteres zu Conditions und Title finden Sie weiter unten) Wichtig: Weiterleitungsseite muss angegeben werden!&lt;br /&gt;
** Condition -&amp;gt; Um Felder direkt aus der Suche herauszunehmen (damit unveröffentlichte Items nicht in die Suche aufgenommen werden o.ä.)&lt;br /&gt;
** Page title field -&amp;gt; Den Namen des Items auswählen, damit dieser für die Ergebnisanzeige der Suche genutzt wird ('''und auch für den Title''')&lt;br /&gt;
* Enable CSV import -&amp;gt; Damit ist es möglich CSV-Dateien zu importieren. Natürlich sollte man das nicht einfach so machen und nur von Leuten die wissen was sie tun. Daher kann hier festgelegt werden, das nur Administratoren das machen dürften und ob Items überschrieben werden oder nicht&lt;br /&gt;
* Generate feed -&amp;gt; Hier kann festgelegt werden, dass ein RSS-Feed generiert wird aus den Items (Funktion ist wie bei News o.ä., daher wird hier nicht genauer darauf eingegangen)&lt;br /&gt;
&lt;br /&gt;
==Nachträgliches Bearbeiten eines Katalogs==&lt;br /&gt;
Um die Grundeinstellungen eines Katalogs nachträglich noch einmal bearbeiten zu können, klickt man in der Katalogübersicht auf den Felder-Button...&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-editfields.png|Cat Felder editieren]]&lt;br /&gt;
&lt;br /&gt;
...und anschließend im Übersichtsfeld des Katalogs auf 'Bearbeiten'.&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-editcat.png|Cat Catalog editieren]]&lt;br /&gt;
&lt;br /&gt;
=Erstellen von Attributen/Feldern von Items in einem Katalog=&lt;br /&gt;
Nun ist die Grundkonfiguration von einem Katalog erst einmal abgeschlossen. Aber es ist noch nicht festgelegt aus welchen Feldern ein Item denn nun besteht, also welche Attribute ein Item besitzen kann.&lt;br /&gt;
Dazu kommen wir jetzt. Um neue Felder für den Katalog zu erstellen, klickt man in der Katalogübersicht auf 'Felder für Katalog erstellen'....&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-editfields.png|Cat Felder editieren]]&lt;br /&gt;
&lt;br /&gt;
...und danach auf 'Neues Feld'.&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-newfield.png|Cat Neues Feld anlegen]]&lt;br /&gt;
&lt;br /&gt;
==Die Standardwerte von Feldern==&lt;br /&gt;
Die speziellen Felder werden erst sichtbar, wenn man einen Feldtyp ausgewählt hat. Diese Werte werden weiter unten erläutert.&lt;br /&gt;
* Field configuration&lt;br /&gt;
** Bezeichnung (Eine eindeutige Bezeichnung für das Feld. Diese sollte möglichst selbsterklärend sein.)&lt;br /&gt;
** Beschreibung (Um im Backend und beim Frontend-Editing eine Beschreibung anzuzeigen für die Ersteller eines Items)&lt;br /&gt;
** Spaltenname (der Spaltenname in der Tabelle. Dieser muss eindeutig sein und so vergeben werden, das er logisch ist, da man beim Template erstellen diese Namen benutzt um an die Inhalte zu kommen)&lt;br /&gt;
** '''Typ''' (weiter unten)&lt;br /&gt;
* Display Settings (Diese Einstellungen sind für die Ansicht im Backend zuständig)&lt;br /&gt;
** Kontroll-Checkbox (Wenn eine Kontroll-Checkbox angegeben wird, wird dieses Feld erst angezeigt, wenn das Kontroll-Checkbox Feld angekreuzt ist)&lt;br /&gt;
** Vorher Umbruch einfügen (Um dieses Eingabefeld in einer neuen Zeile zu beginnen)&lt;br /&gt;
*** Legend Titel (hier kann dann ein Name für den Legend Titel angegeben werden -&amp;gt; die Grün geschriebenen Titel im Backend)&lt;br /&gt;
** Enable half width (um 2 Felder nebeneinander anzuzeigen - seit TYPOlight 2.7 möglich)&lt;br /&gt;
* Backend filter settings (hier kann festgelegt werden, ob das Feld im Backend zur Filterung angezeigt wird)&lt;br /&gt;
** Sortieren ('''Muss zum Filtern etc. angegeben werden.''' Sonst weiß Contao nicht wie der Filter erstellt werden soll. Für '''Datum''' ist zwangsweise die Angabe nötig ob nach Jahr, Monat oder Tag sortiert werden soll!)&lt;br /&gt;
** Filter&lt;br /&gt;
** Suche&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Pflichtfeld -&amp;gt; Dieses Feld muss ausgefüllt werden&lt;br /&gt;
* Frontend editing&lt;br /&gt;
** Frontend editing groups -&amp;gt; Welche Gruppen dürfen dieses Feld im Frontend bearbeiten (Mehrfachangabe ist möglich). Wenn hier nichts angegeben wird, dürfen alle Gruppen dieses Feld im Frontend editieren&lt;br /&gt;
&lt;br /&gt;
==Typ - Feldtypen von Feldern==&lt;br /&gt;
Hier werden die Angaben für die jeweiligen Typen aufgelistet und erläutert.&lt;br /&gt;
===Text===&lt;br /&gt;
* Format settings&lt;br /&gt;
** Prefix und Suffix Strings&lt;br /&gt;
** Format&lt;br /&gt;
*** Formattyp&lt;br /&gt;
**** Zeichenkette&lt;br /&gt;
**** Nummer&lt;br /&gt;
**** Datum&lt;br /&gt;
*** Zeichenfolge für Formatierung&lt;br /&gt;
&lt;br /&gt;
===Alias===&lt;br /&gt;
'''Es ist immer nur ein Alias Feld erlaubt in einem Katalog.'''&lt;br /&gt;
Die Funktion ist die selbe wie bei einem Alias für eine Seite.&lt;br /&gt;
* Alias-Titel-Feld (Aus diesem Feld wird automatisch ein Alias generiert, wenn keine Angabe beim Alias gemacht wurde. Dieses Feld muss '''nicht''' Eindeutig sein. Der Alias wird aber eindeutig generiert und ist damit genau so benutzbar wie eine eindeutige ID)&lt;br /&gt;
&lt;br /&gt;
===Langtext===&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Allow html (wenn erlaubt werden in dem Feld HTML-Tags erlaubt - Liste der erlaubten HTML-Tags ist in den Eigenschaften von Contao editierbar)&lt;br /&gt;
** Rich Text (wenn angekreuzt wird der TinyMCE angezeigt)&lt;br /&gt;
&lt;br /&gt;
===Nummer===&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Minimum (legt den Minimalwert fest, den ein Benutzer eingeben kann)&lt;br /&gt;
** Maximum (legt den Maximalwert fest, den ein Benutzer eingeben kann)&lt;br /&gt;
* Format settings&lt;br /&gt;
** Prefix und Suffix Strings&lt;br /&gt;
** Format&lt;br /&gt;
*** Formattyp&lt;br /&gt;
**** Zeichenkette&lt;br /&gt;
**** Nummer&lt;br /&gt;
**** Datum&lt;br /&gt;
*** Zeichenfolge für Formatierung&lt;br /&gt;
&lt;br /&gt;
===Dezimal===&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Minimum (legt den Minimalwert fest, den ein Benutzer eingeben kann)&lt;br /&gt;
** Maximum (legt den Maximalwert fest, den ein Benutzer eingeben kann)&lt;br /&gt;
* Format settings&lt;br /&gt;
** Prefix und Suffix Strings&lt;br /&gt;
** Format&lt;br /&gt;
*** Formattyp&lt;br /&gt;
**** Zeichenkette&lt;br /&gt;
**** Nummer&lt;br /&gt;
**** Datum&lt;br /&gt;
*** Zeichenfolge für Formatierung&lt;br /&gt;
&lt;br /&gt;
===Datum===&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Zeiteingabe (Falls ausgewählt, darf der Benutzer Datum '''und''' Zeit eingeben&lt;br /&gt;
** Format&lt;br /&gt;
*** Formattyp&lt;br /&gt;
**** Zeichenkette&lt;br /&gt;
**** Nummer&lt;br /&gt;
**** Datum&lt;br /&gt;
*** Zeichenfolge für Formatierung&lt;br /&gt;
&lt;br /&gt;
===Checkbox===&lt;br /&gt;
Zum Erstellen einer einfachen Checkbox. Hier kann nicht viel eingestellt werden, da ja nur 1 oder 0 als Zustand gilt.&lt;br /&gt;
&lt;br /&gt;
===Auswahl===&lt;br /&gt;
Hiermit kann man ein Auswahl-Feld (Select) erstellen, das als Grundlage eine andere Tabelle nutzt. Das kann Taxonomie sein oder auch ein anderer Katalog.&lt;br /&gt;
&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Include blank option (Um bei der Drop-Down Liste auch die Möglichkeit zu haben, eine leere Auswahl anzubieten)&lt;br /&gt;
* Options settings&lt;br /&gt;
** Tabelle für Optionen (Hier muss die Tabelle ausgewählt werden, in der die Optionen stehen - Taxonomie wäre -&amp;gt; tl_taxonomie)&lt;br /&gt;
** Spalte für Tabellenwerte (Eine Spalte für die Speicherung einer Option auswählen. Hier sind nur die Spalten vorgegeben, die sich auch in der Tabelle befinden)&lt;br /&gt;
** Anzeige der Sortierspalte (Um die Sortierung der Optionen vorzunehmen kann hier eine andere Spalte ausgewählt werden.)&lt;br /&gt;
** Filter items (Hier kann man wieder eigene Filter definieren, um die Auswahl einzugrenzen)&lt;br /&gt;
** Auswahl der Einträge&lt;br /&gt;
*** Optionen (Hier kann man noch mal genau auswählen, welche Optionen man anbieten möchte)&lt;br /&gt;
*** Modus für Unterauswahl&lt;br /&gt;
**** Show selected items collapsed (Nur die ausgewählten Items anzeigen)&lt;br /&gt;
**** Show children of selected items collapsed  (Nur die Kinder der selektierten Items anzeigen)&lt;br /&gt;
**** Tree with all items selectable (Baumansicht mit allen Items als Option auswählbar)&lt;br /&gt;
**** Tree with only children selectable (Baumansicht nur mit den Kind-Items auswählbar)&lt;br /&gt;
*** Parent Filter (Hier kann man das Eltern Element angeben, welches die Optionen enthält. Praktisch wenn man 2 Bäume bei der Taxonomie hat und nur einen zur Auswahl geben will)&lt;br /&gt;
&lt;br /&gt;
===Tags===&lt;br /&gt;
Auch Tags sind ähnlich der Auswahl dazu da, eine andere Tabelle als Wert anzugeben.&lt;br /&gt;
&lt;br /&gt;
Der Unterschied besteht darin, das Tags eine Checkboxliste ergeben, mit der auch eine Mehrfachauswahl möglich ist.&lt;br /&gt;
&lt;br /&gt;
* Advanced settings&lt;br /&gt;
** Include blank option (Um bei der Drop-Down Liste auch die Möglichkeit zu haben, eine leere Auswahl anzubieten)&lt;br /&gt;
* Options settings&lt;br /&gt;
** Tabelle für Optionen (Hier muss die Tabelle ausgewählt werden, in der die Optionen stehen - Taxonomie wäre -&amp;gt; tl_taxonomie)&lt;br /&gt;
** Spalte für Tabellenwerte (Eine Spalte für die Speicherung einer Option auswählen. Hier sind nur die Spalten vorgegeben, die sich auch in der Tabelle befinden)&lt;br /&gt;
** Anzeige der Sortierspalte (Um die Sortierung der Optionen vorzunehmen kann hier eine andere Spalte ausgewählt werden.)&lt;br /&gt;
** Filter items (Hier kann man wieder eigene Filter definieren, um die Auswahl einzugrenzen)&lt;br /&gt;
** Auswahl der Einträge&lt;br /&gt;
*** Optionen (Hier kann man noch mal genau auswählen, welche Optionen man anbieten möchte)&lt;br /&gt;
*** Modus für Unterauswahl&lt;br /&gt;
**** Show selected items collapsed (Nur die ausgewählten Items anzeigen)&lt;br /&gt;
**** Show children of selected items collapsed  (Nur die Kinder der selectierten Items anzeigen)&lt;br /&gt;
**** Tree with all items selectable (Baumansicht mit allen Items als Option auswählbar)&lt;br /&gt;
**** Tree with only children selectable (Baumansicht nur mit den Kind-Items auswählbar)&lt;br /&gt;
*** Parent Filter (Hier kann man das Eltern Element angeben, welches die Optionen enthält. Praktisch wenn man 2 Bäume bei der Taxonomie hat und nur einen zur Auswahl geben will)&lt;br /&gt;
&lt;br /&gt;
===URL===&lt;br /&gt;
Der Feldtyp URL hat keine besonderen Parameter. Er dient lediglich der Ein- und Ausgabe einer URL.&lt;br /&gt;
&lt;br /&gt;
===Datei===&lt;br /&gt;
Dieser Feldtyp ist für die Ein- und Ausgabe von Dateien vorhanden. Man kann damit Downloads oder Galerien erstellen. Falls die ausgewählte Datei nicht unter den Contao-Einstellungen eingetragen ist, so bleibt das Feld &amp;quot;value&amp;quot; (mehr dazu siehe &amp;quot;Welche Variablen hat man in einem Template zur Verfügung?&amp;quot;) leer. Aus diesem Grund sollte man im Vorhinein die entsprechenden Dateitypen freischalten.&lt;br /&gt;
* Advanced Settings&lt;br /&gt;
** Mehrere Dateien (Wenn ausgewählt können mehrere Dateien ausgewählt werden)&lt;br /&gt;
** Ändern des Dateibaumes &lt;br /&gt;
*** Setzen des Ordners für das Wurzelverzeichnis (Hier kann ein spezieller Dateibaum gewählt werden, um unnötige Wege zu verkürzen)&lt;br /&gt;
*** Gültige Dateitypen (In einer Komma-separierten Liste kann man hier die Dateitypen auf eine gültige Liste einschränken)&lt;br /&gt;
*** Nur Dateien erlauben (Ordner sind dann nicht anwählbar)&lt;br /&gt;
*Format settings&lt;br /&gt;
** Bild anzeigen (Um ein Bild / eine Bildergalerie anzeigen zu lassen)&lt;br /&gt;
*** Bildbreite und -höhe sind auswählbar&lt;br /&gt;
** Link erzeugen&lt;br /&gt;
*** Um einen Link zum Herunterladen der Datei zu erzeugen oder bei einem Bild eine Vollansicht (Lightbox) anzubieten&lt;br /&gt;
&lt;br /&gt;
===Calculate===&lt;br /&gt;
Um Berechnungen auf SQL Ebene vorzunehmen&lt;br /&gt;
* Calculation formula (Eingabe von einer SQL calculation für das Feld, wie '(price*1.15)*qty'&lt;br /&gt;
* Format settings&lt;br /&gt;
** Prefix und Suffix Strings&lt;br /&gt;
** Format&lt;br /&gt;
*** Formattyp&lt;br /&gt;
**** Zeichenkette&lt;br /&gt;
**** Nummer&lt;br /&gt;
**** Datum&lt;br /&gt;
*** Zeichenfolge für Formatierung&lt;br /&gt;
&lt;br /&gt;
===Bewertungen===&lt;br /&gt;
Die Besucher der Internetseite können bei Angabe eines solchen Feldtypes eine Bewertung vornehmen&lt;br /&gt;
* ajaxratingfield (Angabe von maximalen Punkten die ein Besucher vergeben kann)&lt;br /&gt;
&lt;br /&gt;
===Zugriffszähler===&lt;br /&gt;
Ohne Optionen. Hiermint wird einfach gezählt und ausgegeben wie oft auf dieses Item zugegriffen wurde. Es ist auf ein Klick per IP pro Tag festgelegt.&lt;br /&gt;
&lt;br /&gt;
===Frontend Benutzer===&lt;br /&gt;
Ohne Optionen.&lt;br /&gt;
Um die Items nur dem jeweiligen Frontendbenutzer der sie angelegt hat zuzuweisen muss ein Feldtyp dieser Art angelegt sein.&lt;br /&gt;
&lt;br /&gt;
===Meta Keywords===&lt;br /&gt;
Ohne Optionen.&lt;br /&gt;
Um eine Liste von Keywords für diese Item eingeben zu können.&lt;br /&gt;
{{Anmerkung|der Feldtyp &amp;quot;Meta Keywords&amp;quot; ist veraltet, da in der Katalog Konfiguration direkt nun ein Textfeld als Quelle der META Keywords gewählt werden kann.}}&lt;br /&gt;
&lt;br /&gt;
===Mehrspaltiger Text===&lt;br /&gt;
&lt;br /&gt;
Nur verfügbar wenn zusätzlich installiert: [http://www.contao.org/erweiterungsliste/view/catalogmultitextwizardfield.html direkt zum ER]&lt;br /&gt;
&lt;br /&gt;
Hiermit kann ein Feld ähnlich des Tabellenelements in Contao angelegt werden.&lt;br /&gt;
Man definiert einmal die Spaltenanzahl und Überschriften.&lt;br /&gt;
Beim Anlegen des Items hat man dann die Möglichkeit beliebig viele Zeilen anzugeben.&lt;br /&gt;
* Spaltenüberschriften (Angabe der Anzahl, der Reihenfolge und der Titel der Spaltenüberschriften)&lt;br /&gt;
&lt;br /&gt;
Für das Frontend Editing (wenn man dieses Feld dort editieren möchte) braucht man die Erweiterung [http://www.contao.org/erweiterungsliste/view/x_FrontendMultiTextWizard.de.html xFrontend MultiTextWizard]. Ansonsten ist dieses Feld nicht editierbar.&lt;br /&gt;
&lt;br /&gt;
===Produktvariante (Besonderheit vom chshop -&amp;gt; wird dort erläutert)===&lt;br /&gt;
&lt;br /&gt;
=== Merkliste und Varianten ===&lt;br /&gt;
Mit diesem Feldtyp ist es möglich Items für eine Merkliste vorzubereiten.&lt;br /&gt;
* Notelistvariants sind die Varianten, die ein Item besitzen können. Die Liste der Varianten besteht aus Select- und Tagfields des Katalogs. Dadurch ist es möglich Varianten von der Taxonomie oder von anderen Katalogen zu erstellen, indem man in diesem Katalog Auswahlen dafür anlegt.&lt;br /&gt;
&lt;br /&gt;
==Sobald man Felder definiert hat==&lt;br /&gt;
ist in der Übersicht bei den Feldern zu sehen ob ein Feld:&lt;br /&gt;
* zur Suche markiert ist&lt;br /&gt;
* Sortierbar ist&lt;br /&gt;
* Gruppiert wurde (um die Reihenfolge festzulegen)&lt;br /&gt;
* ein Pflichtfeld ist&lt;br /&gt;
* ob es eine Kontrol Checkbox ist (nur wenn angewählt wird es sichtbar)&lt;br /&gt;
* Ob es ein Dateityp ist&lt;br /&gt;
* Ob es sich um ein Bild handelt&lt;br /&gt;
* in der halben Breite im Backend angezeigt wird&lt;br /&gt;
* Ob darüber ein Filter angewendet wird&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-fieldpreview.png|Felderübersicht]]&lt;br /&gt;
&lt;br /&gt;
=Frontend Module und ihre Attribute=&lt;br /&gt;
&lt;br /&gt;
Bei den verschiedenen Modulen muss zunächst eine Auswahl getroffen werden, für welchen Katalog das Modul gemacht wird. Dabei kann immer nur ein Katalog gewählt werden. &lt;br /&gt;
&lt;br /&gt;
'''Allgemeine Einstellungen (die alle Module haben):'''&lt;br /&gt;
* Titel&lt;br /&gt;
* Überschrift&lt;br /&gt;
* Modultyp (mit den unten stehenden Modultypen)&lt;br /&gt;
* Zugriffsschutz (Nur bestimmten Gruppen das Modul anzeigen)&lt;br /&gt;
* Experten Einstellungen&lt;br /&gt;
** Nur Gästen anzeigen&lt;br /&gt;
** CSS-ID/Klasse&lt;br /&gt;
** Abstand davor und dahinter&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-view-list.jpg|Cat Modul Liste]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:cat-cat2-view-reader.jpg|Cat Modul Reader]]&lt;br /&gt;
&lt;br /&gt;
==Catalog List==&lt;br /&gt;
Zur Ausgabe einer Liste von Items wird das Modul [[ModuleCatalogList]] verwendet.&lt;br /&gt;
&lt;br /&gt;
==Catalog Reader==&lt;br /&gt;
Um die Details von einem einzelnen Item anzuzeigen&lt;br /&gt;
* Als Wichtigstes muss eine Weiterleitungsseite eingestellt werden. Auf dieser Seite muss der Catalog Reader vorhanden sein.&lt;br /&gt;
* catalog layout (Auswahl des Templates für den Reader)&lt;br /&gt;
** catalog_full (Standardtemplate um Alles auszugeben)&lt;br /&gt;
** catalog_full_rev (Template um alle Felder auszugeben - Entwickler Version)&lt;br /&gt;
* Visible Fields - Sichbare Felder. Diese Felder sind dann im Template verfügbar. Man kann auch die Reihenfolge der Ausgabe bestimmen.&lt;br /&gt;
&lt;br /&gt;
==Catalog Filter==&lt;br /&gt;
Mit Hilfe von einem Filter können Besucher die Liste eines Catalogs filtern und die Anzeige eingrenzen. Die Filter können hier genau eingestellt werden. Sogar ein eigenes Suchfeld nur für den einen Katalog kann hier erstellt werden.&lt;br /&gt;
* Catalog -&amp;gt; für welchen Katalog soll dieser Filter benutzt werden (es kann nur ein Katalog angegeben werden)&lt;br /&gt;
* Weiterleitungsseite (auf welche Seite soll bei Klick weitergeleitet werden. Üblicherweise ist das eine Seite mit dem Modul 'cataloglist', da hier dann nur noch die Items angezeigt werden, die zu der gefilterten Ausgabe passen)&lt;br /&gt;
* Filter layout (default -&amp;gt; filter_default | zum Entwickeln ist das filter_widget Template gedacht)&lt;br /&gt;
* Enables Filter By section (Einen Filter erstellen)&lt;br /&gt;
** Filter Headline (Überschrift für diese(n) Filter)&lt;br /&gt;
** Filter Fields (Hier kann man das Feld und die Art des Filters auswählen)&lt;br /&gt;
*** Die Reihenfolge bestimmt man mit den grünen Pfeilen neben der Feldbezeichnung&lt;br /&gt;
*** Tree View (Ankreuzen wenn es eine baumartige Struktur sein soll, bzw. bei diesem Feld eine baumartige Struktur eingegeben wurde. Die Kindelemente reagieren dabei auf die Auswahl der Elternelemente)&lt;br /&gt;
*** None (default Wert -&amp;gt; es wird von diesem Feld kein Filter erstellt)&lt;br /&gt;
*** Links List (eine einfache Link Liste wird von dem Feld erstellt)&lt;br /&gt;
*** Radio Button (Eine Auswahl mittels Radio Button wird erstellt, so ist die Auswahl nur von einem Wert möglich)&lt;br /&gt;
*** Select drop-down (Eine Auswahl mittels einer Select-Box wird erstellt. Nur ein Wert kann ausgewählt werden.)&lt;br /&gt;
** Reveal tree view sequentially (Die Filter werden erst nach und nach eingeblendet. Die Reihenfolge bestimmt dabei die Einblendung. So wird der 2. Filter erst eingeblendet, wenn im ersten etwas ausgewählt wurde. Eine Möglichkeit wäre hier die Auswahl von Städten, die erst erscheint, wenn ein Bundesland ausgewählt wurde)&lt;br /&gt;
** Tags multiple select allowed (Wenn dieses Feld ausgewählt wurde, wird aus dem Radio Button eine Checkbox und aus der Select drop-down Liste eine Liste mit der Möglichkeit meherere auszuwählen.)&lt;br /&gt;
* Enables Range section (Hier können Felder ausgewählt werden, wo ein Minimum und Maximum eingegeben werden kann um darüber zu Filtern)&lt;br /&gt;
** Range Headline (Überschrift angeben)&lt;br /&gt;
** Range Fields (Auswahl der Felder für die ein Bereichsauswahl erstellt werden soll. Die Liste ist auch wieder sortierbar)&lt;br /&gt;
* Enables Date section (Hier können Felder ausgewählt werden, welche nach Datum zusammengefasst werden können)&lt;br /&gt;
** Dates Headline (Überschrift angeben)&lt;br /&gt;
** Date Fields (Hier sind nur Datumsfelder zur Auswahl angeboten. Man kann bestimmen, welches benutzt werden soll)&lt;br /&gt;
** Date Ranges (Hier kann angegeben werden, welche Auswahl der Besucher hat, um die Daten zu filtern):&lt;br /&gt;
*** Last year&lt;br /&gt;
*** Last 6 months&lt;br /&gt;
*** Last month&lt;br /&gt;
*** Last week&lt;br /&gt;
*** Yesterday&lt;br /&gt;
*** Today&lt;br /&gt;
*** Tomorrow&lt;br /&gt;
*** Next week&lt;br /&gt;
*** Next month&lt;br /&gt;
*** Next 6 months&lt;br /&gt;
*** Next year&lt;br /&gt;
* Enables Sort section (Hier wird eingestellt, welche Felder vom Besucher überhaupt sortierbar sind und wie das geschehen soll) &lt;br /&gt;
** Sort Headline (Überschrift angeben)&lt;br /&gt;
** Sort Fields (Hier muss angegeben werden, welche Felder sortierbar sein sollen. Die Reihenfolge kann wieder über die grünen Pfeile bestimmt werden)&lt;br /&gt;
** Sort form control type Hier wird festgelegt, wie die Besucher bestimmen können wie sortiert wird:&lt;br /&gt;
*** select (Über eine Select Auswahl)&lt;br /&gt;
*** list (Mit hilfe einer Linkliste)&lt;br /&gt;
*** radio (Über einen Radio Button)&lt;br /&gt;
* Enables Search Box (Eine Suchbox einschalten. Nur Text, langtext Felder werden unterstützt)&lt;br /&gt;
** Search Headline (Überschrift eingeben)&lt;br /&gt;
** Search Fields (Hier können die Felder ausgewählt werden, in denen gesucht werden soll)&lt;br /&gt;
* Use filter condition from lister on same page (Wenn auf derselben Seite auch eine List-Modul von dem Katalog eingesetzt wird und diese Liste mit conditions eingeschränkt ist, werden bei Auswahl dieses Feldes die Filter mit Berücksichtigung der conditions erstellt.)&lt;br /&gt;
&lt;br /&gt;
==Catalog Navigation==&lt;br /&gt;
Mit diesem Modul kann man eine Navigation durch einen Katalogs erstellen. Die Navigation besteht zum Beispiel aus Kategorien.&lt;br /&gt;
* Catalog -&amp;gt; für welchen Katalog soll diese Navigation genommen werden (es kann nur ein Katalog ausgewählt werden)&lt;br /&gt;
* Weiterleitungsseite (auf welche Seite soll bei Klick weitergeleitet werden. Üblicherweise ist das eine Seite mit dem Modul [[ModuleCatalogList|Katalog liste]], da hier dann nur noch die Items angezeigt werden, die zu der Kategorie passen)&lt;br /&gt;
* Navigations field -&amp;gt; Hier muss das Feld angegeben werden, aus dem die Navigation zusammengesetzt wird. Also ein Selectfield aus dem gewählten Katalog. (Andere Felder wie Tagfield gehen nicht und stehen deswegen nicht zur Auswahl!)&lt;br /&gt;
* Alle anderen Einstellungen der Navigation funktionieren genau so wie beim normalen [[ModulNavigation|Navigationsmodul]]&lt;br /&gt;
&lt;br /&gt;
==Catalog Notify==&lt;br /&gt;
Hiermit wird ein Formular erstellt, welches zur schnellen Kontaktaufnahme bei einem einzelnen Item dargestellt wird. Z.B.: Möchten Sie nähere Informationen zu diesem Produkt? Dann schicken Sie uns bitte Ihre Kontaktdaten, damit wir uns bei Ihnen melden können.&lt;br /&gt;
* Catalog (Hier muss wieder der Katalog angegeben werden, in dem das Item dargestellt werden soll)&lt;br /&gt;
* Form Fields (Hier können Sie Felder angeben, die der Benutzer ausfüllen soll, damit Sie Kontakt zu ihm aufnehmen können)&lt;br /&gt;
{{Anmerkung|Der folgende Punkt ist in catalog 2.0.0 beta1 Build 51 nicht, oder nicht mehr vorhanden!}}&lt;br /&gt;
* Sicherheitsfrage deaktivieren (nicht empfohlen! Nur sinnvoll, wenn die Benutzer schon in einem Bereich sind, in dem man sich anmelden muss)&lt;br /&gt;
* Subject (Betreff der Email, hier können spezielle Inserttags benutzt werden in der Art -&amp;gt; &amp;lt;nowiki&amp;gt;{{catalog::Spaltenbezeichnung}}&amp;lt;/nowiki&amp;gt;. Z.B. &amp;lt;nowiki&amp;gt;{{catalog::title}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Recipients List (Liste von Emailadressen, die eine Email mit dem Inhalt erhalten sollen)&lt;br /&gt;
* Body text (Text der Email. Auch hier sind die speziellen Inserttags &amp;lt;nowiki&amp;gt;{{catalog::Spaltenbezeichnung}}&amp;lt;/nowiki&amp;gt; möglich. Zusätzlich sind noch die Variablen ##catalog## und ##link## verfügbar. Wobei catalog durch den Katalog und link durch den direkten Link zu dem Item ersetzt werden.&lt;br /&gt;
* Catalog Template (Hier kann das passende Template angegeben werden um das Formular darzustellen. Default ist mod_catalognotify)&lt;br /&gt;
&lt;br /&gt;
==Catalog Featured==&lt;br /&gt;
Hiermit kann man eine Liste erstellen, die besondere Items darstellt. Die Liste wird per Zufall zusammengestellt.&lt;br /&gt;
* Grundeinstellungen sind wie bei der Catalog-List&lt;br /&gt;
* Besonderheiten:&lt;br /&gt;
** Number of items (Hier kann die Anzahl der Items dargestellt werden. 0 zeigt alle)&lt;br /&gt;
** Custom ordering (Die Reihenfolge kann hier festgelegt werden)&lt;br /&gt;
* Um spezielle Einträge anzulegen braucht nur ein extra Feld (checkbox) erstellt werden (z.B. hervorgehoben) und in der Condition können dann Items festgelegt werden, deren Wert 1 ist -&amp;gt; spalte_hervorgehoben=1&lt;br /&gt;
&lt;br /&gt;
==Catalog Related==&lt;br /&gt;
Hiermit erstellt man eine Liste von ähnlichen Items - einzusetzen auf einer Seite, auf der auch der Catalog Reader enthalten ist. Zufallsausgabe.&lt;br /&gt;
* Grundeinstellungen sind wie bei der Catalog-List&lt;br /&gt;
* Besonderheiten:&lt;br /&gt;
** Related fields to match (Angabe der Felder, die bei den darzustellenden Items gleich sein sollen)&lt;br /&gt;
** Amount of tags that must be in common (Einstellen der Anzahl der Übereinstimmungen -&amp;gt; Minimumangabe. d.h. wenn 3 Felder angegeben wurden, die übereinstimmen sollen, kann bei einer Angabe von 1 auch ein Item angezeigt werden, welches nur eine Übereinstimmung hat und nicht alle 3)&lt;br /&gt;
** Number of items (Hier kann die Anzahl der Items dargestellt werden. 0 zeigt alle)&lt;br /&gt;
** Custom ordering (Die Reihenfolge kann hier festgelegt werden)&lt;br /&gt;
&lt;br /&gt;
==Catalog Reference==&lt;br /&gt;
Hiermit erstellt man eine Liste von Items mit einer gleichen Eigenschaft. Diese muss zusammen mit dem Catalog Reader eingesetzt werden und ist für die Anzeige von Items aus einem '''anderen''' Katalog.&lt;br /&gt;
* Grundeinstellungen sind wie bei der Catalog-List&lt;br /&gt;
* Besonderheiten:&lt;br /&gt;
** Select the match field (Das Feld auswählen, welches die Verbindung zum anderen Katalog herstellt)&lt;br /&gt;
** Select reference catalog (Den zweiten Katalog auswählen, wo die anzuzeigenden Items enthalten sind)&lt;br /&gt;
** Select the reference field (Das Feld angeben, welches im 2. Katalog für die Identifizierung genutzt wird. Es soll dasselbe Feld angegeben werden, welchen auch schon für die Verknüpfung genommen wurde)&lt;br /&gt;
** Number of items (Hier kann die Anzahl der Items dargestellt werden. 0 zeigt alle)&lt;br /&gt;
** Custom ordering (Die Reihenfolge kann hier festgelegt werden)&lt;br /&gt;
&lt;br /&gt;
==Catalog Edit==&lt;br /&gt;
Um ein Item im Frontend editieren und erstellen zu können. Dieses Modul wird anstelle von Catalog Reader verwendet.&lt;br /&gt;
*Catalog (den Katalog auswählen, dessen Items im Frontend editierbar sein soll)&lt;br /&gt;
* Editable Fields (Angabe der Felder, die editierbar sein sollen. Mit den Pfeilen kann man diese in der Reihenfolge anordnen)&lt;br /&gt;
* Weiterleitungsseite (Seite die angezeigt werden soll, wenn das Formular abgesendet wurde. Meistens wird wieder zurück zu der Liste weitergeleitet)&lt;br /&gt;
* Sicherheitsabfrage deaktivieren (Nicht empfohlen! Es sei denn, nur angemeldete Benutzer haben Zugriff auf diese Seite)&lt;br /&gt;
* Restricted fields (Mit dieser Einstellung können Vorbelegungen, die _nicht_ geändert werden können, vorgenommen werden. Diese Felder sollten nicht als Editable Fields konfiguriert sein)&lt;br /&gt;
** Wählen Sie hier die Felder aus, welche vorbelegt sein sollen&lt;br /&gt;
** Restricted fields default values (Sind erst '''nach dem Speichern einstellbare Vorgaben''' für die Felder, die vorher ausgewählt wurden -&amp;gt; Jeder Feldtyp ist individuell einstellbar.)&lt;br /&gt;
** Beispiel für ein Restricted field: Ein Feld mit einer Checkbox, ob das Item online sein soll. 'online' bekommt als default Wert 'Nein'. Nun ist jedes Item, was über diesen Catalog Editor erstellt oder bearbeitet wird offline! So kann man im Frontend mit einer extra Gruppe, die dieses Feld bearbeiten kann und eben keine default Vorgabe hat die Items freischalten. Die 'normalen' Benutzer haben dieses Recht dann nicht.&lt;br /&gt;
&lt;br /&gt;
=Weitere Einstellungsmöglichkeiten=&lt;br /&gt;
&lt;br /&gt;
== Merkliste - Formulargenerator ==&lt;br /&gt;
Die Merkliste wird nicht als extra Modul erstellt, sondern in einem Formular mit dem Formulargenerator von Contao.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt es ein neuen Feldtyp 'Merkliste' der zum Beispiel am Anfang positioniert werden kann.&lt;br /&gt;
Der Besucher kann später das Formular ausfüllen und so die Liste an den Emailempfänger versenden, um sich so zum Beispiel ein Angebot für die Items einzuholen.&lt;br /&gt;
&lt;br /&gt;
Einstellungen:&lt;br /&gt;
* Feldname (der Feldname für diesen Feldtyp)&lt;br /&gt;
* Feldbezeichnung (diese wird normalerweise für Felder als Label angezeigt und sollte daher hier '''leer''' gelassen werden)&lt;br /&gt;
* Text (Hier kann ein Text angegeben werden, der über der Liste der Items angezeigt wird)&lt;br /&gt;
* Katalog (Den Katalog angeben, der die Items enthält)&lt;br /&gt;
* Sichtbare Felder (Die anzuzeigenden Felder von den Items, die Liste ist auch hier wieder über die Pfeile sortierbar)&lt;br /&gt;
&lt;br /&gt;
=== Templates für die Merkliste ===&lt;br /&gt;
* form_catalognotelist.tpl (Template für die Liste im Formular)&lt;br /&gt;
* form_catalognotelist_mail.tpl (Template für die Email, welche die Items vom Merkzettel enthält. Hier kann genau festgelegt werden, welche Felder in der Email von einem Item angezeigt werden.)&lt;br /&gt;
&lt;br /&gt;
=Tipps und Tricks zur Umsetzung=&lt;br /&gt;
&lt;br /&gt;
==Welche Variablen hat man in einem Template zur Verfügung?==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php print_r($this-&amp;gt;entries); ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php $this-&amp;gt;showTemplateVars(); ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Damit bekommt man das komplette Array ausgegeben.&lt;br /&gt;
&lt;br /&gt;
==Zeichenkette des Titels formatieren==&lt;br /&gt;
Warum wird bei mir nichts angezeigt, obwohl ich da etwas angegeben habe?&lt;br /&gt;
* Wichtig: man muss bei den Feldern die man später hier benutzen möchte folgendes Ankreuzen -&amp;gt; Anzeige-Einstellungen &amp;gt; Sichtbar in der Backend-Listen-Ansicht&lt;br /&gt;
&lt;br /&gt;
==Wie kann man in der Detail Ansicht den meta-title so beeinflussen, das dieser den Namen von dem Item nimmt?==&lt;br /&gt;
* Einfach das Feld für den Namen mit title benennen (das ist die Fallback Methode, wenn die andere -&amp;gt; Page title field nicht benutzt wird). Der catalog wird dann automatisch dieses Feld benutzen um den meta-title zu generieren.&lt;br /&gt;
* Page title field beim Katalog sezten. Zu finden unter 'Search' in den Einstellungen vom Katalog.&lt;br /&gt;
&lt;br /&gt;
==Titel so beeinflussen, das die aktuelle Kategorie einer Liste dort steht==&lt;br /&gt;
Im Catalog Template folgendes nutzen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if(strlen($this-&amp;gt;Input-&amp;gt;get('kategorie')))&lt;br /&gt;
{&lt;br /&gt;
   global $objPage;&lt;br /&gt;
   $objPage-&amp;gt;pageTitle = &amp;quot;&amp;quot;.$entry['data']['kategorie']['value'].&amp;quot; - XYZ&amp;quot;;  &lt;br /&gt;
}&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In dem Beispiel wird jetzt (nur wenn eine Kategorie gewählt ist) der Wert von '''$entry['data']['kategorie']['value']''' eingesetzt.&lt;br /&gt;
&lt;br /&gt;
==Wie bekommt man ein Auge bei den Items? / on- offline Schalten von Items==&lt;br /&gt;
Zuerst muss man sich in Feld vom Typ 'Checkbox' anlegen. Zum Beispiel mit dem Namen 'online'.&lt;br /&gt;
Jetzt kann man den Katalog konfigurieren und bei '''Feld veröffentlichen''' (publish Field) das Checkbox-Feld auswählen.&lt;br /&gt;
Ab jetzt ist im Backend bei den Items eines Katalogs ein graues oder grünes Auge (je nach Zustand) sichtbar.&lt;br /&gt;
&lt;br /&gt;
==Detail Seiten in die sitemap.xml und ins Modul Sitemap bringen==&lt;br /&gt;
* sitemap.xml -&amp;gt; Den Katalog einfach für die Indexierung der Suche freigeben -&amp;gt; [http://tip.dasprojekt.org/Catalog_2#Erstellen_von_einem_Katalog_.28Backend.29 Searchable] (Achtung: eine Weiterleitungsseite muss auf jeden Fall angegeben sein beim Katalog selber. Diese Seite wird dann in der Sitemap benutzt um die Items darzustellen.)&lt;br /&gt;
* Modul Sitemap -&amp;gt; Hier werden die Detailseiten nicht integriert, da es bei einem normalen Katalog schon zu viele Einträge wären, um diese dort sinnvoll darzustellen.&lt;br /&gt;
&lt;br /&gt;
==Alias bei Links benutzen (anstelle der ID)==&lt;br /&gt;
Dazu brauchst man nur ein Pflichtfeld (Namen von dem Item) und erstellt dann noch ein Feld vom Typ Alias. Das Alias-Titel-Feld ist dann der Name des Items.&lt;br /&gt;
Bei dem Katalog selber muss noch ausgewählt werden, welches das Alias Feld ist.&lt;br /&gt;
Das Alias Feld ist genau so wie das Alias Feld von Seiten etc., man kann selbst etwas eintragen oder den Inhalt automatisch generieren lassen, wenn man das leer lässt.&lt;br /&gt;
Nachdem die Suche und die Seiten neu generiert wurden (Systemwartung) sollte der Alias bei der Suche und auch bei der Detailansicht (URL) genutzt werden.&lt;br /&gt;
'''Im Moment muss in der Liste das Alias Feld als 'Sichtbar' ausgewählt werden. Sonst funktioniert die Verlinkung nicht! (Sollte in der Endversion behoben sein)'''&lt;br /&gt;
&lt;br /&gt;
==Folder-URL und der catalog wollen nicht so recht==&lt;br /&gt;
&lt;br /&gt;
Unter Einstellungen kann unter Sicherheitseinstellungen eine Liste von Variablennamen angeben werden, welche von der Erweiterung Folder-URL als Parameter erkannt werden sollen. Hier muss &amp;quot;orderby,sort,search&amp;quot; angegeben werden. Dadurch ignoriert Folderurl diese Parameter und der catalog ist wie immer nutzbar.&lt;br /&gt;
&lt;br /&gt;
Es sollten alle Schlüsselwörter der Filtermöglichkeiten hinzugefügt werden. Wenn man die Einträge des Kataloges nach z.B. &amp;quot;Ort&amp;quot; sortieren will, gibt es einen Fehler, wenn das Feld der Datenbanktabelle nicht im Feld &amp;quot;URL Schlüsselworte&amp;quot; in den Einstellungen auftaucht.&lt;br /&gt;
&lt;br /&gt;
==Eine Liste im Frontend so sortieren wie im Backend==&lt;br /&gt;
&lt;br /&gt;
Um eine Liste genau so zu sortieren wie im Backend braucht man einfach nur bei der Sortierung nach dem Feld 'sorting' zu sortieren (z.B. sorting ASC). Im Backend können Einträge nur dann manuell sortiert (verschoben) werden, wenn bei keinem Feld die Einstellung 'Sortier DropDown aktivieren' aktiv ist.&lt;br /&gt;
&lt;br /&gt;
{{Achtung|Bitte klären, da die Filterung dann nicht mehr funktioniert. Siehe Thread im Forum: [http://www.contao-community.de/showthread.php?13299-BE-Eintr%E4ge-verwalten-kein-Button-Anwenden-f%FCr-Filterung-vorhanden BE, Einträge verwalten, kein Button 'Anwenden' für Filterung vorhanden ]&lt;br /&gt;
[[http://code.google.com/p/typolight-catalog/issues/detail?id=199 Bug-Report]] [[http://code.google.com/p/typolight-catalog/source/detail?r=198 fixed in r198]]}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Mit der Erweiterung [[catalog_manualsort]] ist es möglich die Reihenfolge der Einträge im Backend trotzdem zu ändern, auch wenn die Sortieroption für bestimmte Felder aktiv ist.}}&lt;br /&gt;
&lt;br /&gt;
==Items im Backend verschieben==&lt;br /&gt;
Damit man Items im Backend verschieben kann darf die '''Sortierungs Option''' (Feld-Eigenschaften-&amp;gt;Backend Filter Einstellungen-&amp;gt;'Sortierungs Dropdown aktivieren') '''bei keinem Feld aktiviert''' sein.&lt;br /&gt;
{{Achtung|Bitte klären, da die Filterung dann nicht mehr funktioniert. Siehe Thread im Forum: [http://www.contao-community.de/showthread.php?13299-BE-Eintr%E4ge-verwalten-kein-Button-Anwenden-f%FCr-Filterung-vorhanden BE, Einträge verwalten, kein Button 'Anwenden' für Filterung vorhanden ]}}&lt;br /&gt;
&lt;br /&gt;
==Bedingung bei Strings==&lt;br /&gt;
&lt;br /&gt;
Um eine Bedingung anzugeben, die innerhalb eines Strings vorhanden ist, reicht es ja nicht einfach nur einen Vergleich per SQL vorzunehmen.&lt;br /&gt;
Beispiel: Über den Feldtyp Tag sind Taxonomieen einem Produkt zugeordnet. Da das mehrere sein können muss man die Bedingung in der Liste wie folgt abfragen -&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
FIND_IN_SET(7, kategorie)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
D.h.: es soll innerhalb von kategorie nach der ID 7 gesucht werden.&lt;br /&gt;
&lt;br /&gt;
==Formatieren der Felder vom Typ Text, Nummer und Dezimal==&lt;br /&gt;
Options-Checkbox: '''Zusätzliche Format-Funktionen aktivieren.'''&lt;br /&gt;
&lt;br /&gt;
Das Auswahlmenü '''Format-Funktion''' erlaubt es, die Feldtypen '''Text''', '''Nummer''' und '''Dezimal''' zu formatieren. So gehts:&lt;br /&gt;
&lt;br /&gt;
=== Zeichenkette ===&lt;br /&gt;
Hier gibt man einen sprintf Formatierungs-String ein (siehe [http://de3.php.net/sprintf PHP: sprintf - Manual]) &lt;br /&gt;
&lt;br /&gt;
''Beispiel Zeichenkette:''&lt;br /&gt;
* '''Feldinhalt:''' Broccoli&lt;br /&gt;
* '''Formatierungs-String:''' Auf zum %s!&lt;br /&gt;
* '''Ausgabe:''' Auf zum Broccoli!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Nummer ===&lt;br /&gt;
Hier gibt man nur die Anzahl der gewünschten Nachkommastellen an. In der Ausgabe erscheinen nun die in Contao festgelegten Tausender- und Dezimal-Trennzeichen.&lt;br /&gt;
&lt;br /&gt;
''Beispiel Nummer:''&lt;br /&gt;
* '''Feldinhalt:''' 1000&lt;br /&gt;
* '''Nachkommastellen:''' 2&lt;br /&gt;
* '''Ausgabe:''' 1.000,00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Datum ===&lt;br /&gt;
Hier gibt man ein Formatierungsmuster ein (siehe [http://de.php.net/manual/de/function.date.php PHP: date - Manual])&lt;br /&gt;
&lt;br /&gt;
''Beispiel Datum:''&lt;br /&gt;
* '''Feldinhalt (Unix Timestamp):''' 1293217200&lt;br /&gt;
* '''Formatierungsmuster:''' Y-m-d H:i&lt;br /&gt;
* '''Ausgabe:''' 2010-12-24 18:00&lt;br /&gt;
&lt;br /&gt;
==Filtern nach Datum==&lt;br /&gt;
&lt;br /&gt;
Aufgabenstellung:&lt;br /&gt;
Das Datumsfeld ist in dem Format 'dd.mm.yyyy' vorhanden.&lt;br /&gt;
Es soll nun für das aktuelle Jahr eine Ausgabe erfolgen und für die vergangenen Jahre ein Archiv erstellt werden.&lt;br /&gt;
&lt;br /&gt;
Das Problem:&lt;br /&gt;
Die Datum Angaben werden als timestamp gespeichert und sind in einem char Feld.&lt;br /&gt;
&lt;br /&gt;
Lösungsansatz:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
meinedatumsvariable BETWEEN UNIX_TIMESTAMP('{{date::Y}}-01-01') AND UNIX_TIMESTAMP('{{date::Y}}-12-31')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So kommt man an die Daten des aktuellen Jahres, um die Daten von 2009 auszugeben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
meinedatumsvariable BETWEEN UNIX_TIMESTAMP('2009-01-01') AND UNIX_TIMESTAMP('2009-12-31')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Probleme die bei Unix Timestamp auftreten können===&lt;br /&gt;
Es kann passieren, das der Unix Timestamp beim Verarbeiten von PHP falsch interpretiert wird (nicht als Zahl).&lt;br /&gt;
Daher kann es nötig sein, diesen erst durch einen kleinen Trick auf jeden Fall in einen Zahlenwert umzuwandeln:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
ROUND(datum)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Damit wird auf einen Zahlenwert gerundet (da es sich schon um Integer Werte handelt geht dabei nichts verloren).&lt;br /&gt;
&lt;br /&gt;
Beispiel (von do_while) aus dem Forum:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
ROUND(datum) BETWEEN UNIX_TIMESTAMP('{{date::Y}}-01-01') AND UNIX_TIMESTAMP('{{date::Y}}-12-31')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier wird nach dem Datum sortiert.&lt;br /&gt;
&lt;br /&gt;
==Mit DCA Felder besser einschränken==&lt;br /&gt;
Inzwischen ist es möglich Felder über DCA zu steuern. Der Vorteil: dadurch kann man wesendlich besser Fehleingaben abfangen.&lt;br /&gt;
Hier unter 'Felder' kann mna die Möglichkeiten der Konfiguration sehen -&amp;gt; [http://www.contao.org/referenz.html http://www.contao.org/referenz.html]&lt;br /&gt;
&lt;br /&gt;
Um ein Feld zum Beispiel nur für den Lesenden Zugriff freizugeben kann man diese Syntax nutzen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tabellenname']['fields']['spaltenname']['eval']['readonly'] = true;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder die Eingabe von einer E-Mail überprüfen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tabellenname']['fields']['spaltenname']['eval']['rgxp'] = 'email';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CSV import==&lt;br /&gt;
Um die Daten richtig importieren zu können muss darauf geachtet werden, das diese UTF-8 kodiert sein müssen. Das wird von Exel nicht direkt so gemacht.&lt;br /&gt;
&lt;br /&gt;
==Mehrsprachige Filter mit dem Taxonomie Modul==&lt;br /&gt;
Möchte man einen Mehrsprachigen Katalog erstellen und diesen nach Taxonomien Filtern, so gibt es u.a. zwei Möglichkeiten dies zu tun:&lt;br /&gt;
* Für jede Sprache einen Taxonomiebaum erstellen. Problem: Doppelte Zuweisung im Katalog-Item + mehrere Taxonomiebäume&lt;br /&gt;
* Bessere Lösung: Man arbeitet mit den sprachabhängigen Inserttags. So kann man je nach Spracheinstellungen der Seite eine passende Frontend-Ausgabe erreichen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Möchte man jedem Item ein Land zuordnen, so erstellt man einen Taxonomie-Eintrag &amp;quot;Länder&amp;quot; und in fügt in diesen die auswählbaren Länder ein. Für &amp;quot;Deutschland&amp;quot; könnte das dann z.B. so aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{iflng::de}}&amp;lt;/nowiki&amp;gt;Deutschland&amp;lt;nowiki&amp;gt;{{iflng}}{{iflng::en}}&amp;lt;/nowiki&amp;gt;Germany&amp;lt;nowiki&amp;gt;{{iflng}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nun sollte der Filter auf der deutschen Seite &amp;quot;Deutschland&amp;quot;, und auf der englischen &amp;quot;Germany&amp;quot; ausgeben.&lt;br /&gt;
Dabei gibt es allerdings ein Problem mit dem Feldtyp in der Datenbank. Dieser ist auf wenige Zeichen beschränkt, wird somit bei entsprechender Länge gekürzt. Um dies '''nicht updatesicher''' zu korrigieren, muss man ins phpMyAdmin gehen und unter tl_taxonomy die Länge des entsprechenden Feldes (ich glaube es ist: &amp;quot;name&amp;quot;) ändern. (wird später genauer beschrieben)&lt;br /&gt;
&lt;br /&gt;
==Frontendausgabe Sortieren bei einem Feld was von einem anderen Catalog oder der Taxonomie kommt==&lt;br /&gt;
Beispiel:&lt;br /&gt;
Katalog A hat ein Select wo man Items aus Katalog B auswählen kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;(SELECT sorting FROM catalog_tabellenname AS cs WHERE cs.id=catalog_feld) ASC&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
catalog_tabellenname = Tabelle die das Feld beinhaltet (Katalog B)&lt;br /&gt;
catalog_feld = Name von dem Feld welches im Select genutz wird. (Feld in Katalog B)&lt;br /&gt;
&lt;br /&gt;
=Video Tutorials aus dem Internet=&lt;br /&gt;
Ein paar Videos zu dem Catalog:&lt;br /&gt;
&lt;br /&gt;
{{#widget:YouTube|id=Dg55QT7uGEI}} {{#widget:YouTube|id=wwhuSCQ4Jb4}}&lt;br /&gt;
&lt;br /&gt;
=Tutorials=&lt;br /&gt;
* [[Catalog Merkzettel erstellen]]&lt;br /&gt;
* [[Catalog mit Frontend-Editing und Workflow erstellen]]&lt;br /&gt;
* [[Catalog Templates anpassen]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Toflar|Toflar]] 15:12, 15. Mai 2010 (UTC+1)&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:MacKP|MacKP]] 13:02, 5. Apr. 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Nils.riel|Nils.riel]] 12:04, 24. Nov. 2010 (CET)&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Google_Analytics</id>
		<title>Google Analytics</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Google_Analytics"/>
				<updated>2011-02-03T08:58:17Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Auszuschliessende Rechner identifizieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Core]]&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|TLVersion=bis 2.8.x&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
[[w:de:Google_Analytics|Google Analytics]] ist ein kostenloser Dienst, welcher der Analyse von Zugriffen auf Webseiten dient (Es gilt nur ein monatliches Limit an Seitenaufrufen in Höhe von 5.000.000 Aufrufen).&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Um Verfälschungen auszuschließen, wird der Google Analytics Code erst im Frontend angezeigt, wenn man sich aus dem Backend ausgeloggt hat.}}&lt;br /&gt;
&lt;br /&gt;
==Alternativen==&lt;br /&gt;
Eine Alternative zu Google Analytics stellt [[Piwik]] dar.&lt;br /&gt;
&lt;br /&gt;
==Rechtliches==&lt;br /&gt;
Es ist rechtlich noch nicht klar, ob es nun verboten ist, die Daten in Deutschland mit Google-Analytics zu erfassen. 2 Dinge sprechen erst einmal dagegen:&lt;br /&gt;
#Die Google Server sind nicht unbedingt in Deutschland.&lt;br /&gt;
#Die IP wird erfasst und die gewonnenen Daten können nicht einfach von einem Seitenbetreiber gelöscht werden, wenn ein Besucher dies verlangt.&lt;br /&gt;
&lt;br /&gt;
Es gibt inzwischen ein Addon für einige Browser von Google, die Analytics Datensammlung deaktivieren: http://tools.google.com/dlpage/gaoptout?hl=de&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, der kann ab Contao 2.9 die IP von den Besuchern anonymisieren und so dem Datenschutz genügen (siehe [[#IP-Adressen_anonymisieren|IP-Adresse anonymisieren]]).&lt;br /&gt;
&lt;br /&gt;
{{Achtung|'''Dies ist keine Rechtsberatung.''' Detaillierte Angaben zur rechtlichen Situation beim Einsatz von Google Analytics sind von jeder selbst bei einem Rechtsanwalt zu erfragen (am besten in dem Fachgebiet Internet).}}&lt;br /&gt;
&lt;br /&gt;
=Google Analytics Konto erstellen=&lt;br /&gt;
Um den Dienst ''Google Analytics'' (nachfolgend GA) nutzen zu können, muss man sich zuerst ein GA-Konto [http://www.google.com/analytics/ erstellen].&amp;lt;br /&amp;gt;&lt;br /&gt;
Nach dem Erstellen eines Accounts gibt man GA die Domain bekannt, auf der der Dienst laufen soll. Dazu klickt man auf ''Neues Konto'' ...&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_createaccount.png|Google Analytics Account erstellen]]&lt;br /&gt;
&lt;br /&gt;
... und anschließend auf ''Anmelden''.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_login.png|Webseite hinzufügen]]&lt;br /&gt;
&lt;br /&gt;
Anschließend erfolgen die Angaben zur Webseite, auf der GA laufen soll.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_websitesettings.png|Webseiten Angaben]]&lt;br /&gt;
&lt;br /&gt;
Nachdem man den Geschäftsbedingungen zugestimmt hat, kommt man zur Seite mit dem Tracking-Code. In diesem Code notiert man sich die Account-Nummer; die wird später noch benötigt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis| In den Google Geschäftsbedingungen (PUnkt 8.1) wird man Aufgefordert einen dort angegebenen Satz auf seiner Webseite einzubringen. Das sollte man auf jeden Fall machen, da es dort um die Datenschutzrichtlinien geht, die eh jeder auf seiner Internetseite auszeichnen sollte! }}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_trackingcode.png|Tracking Code]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der Eingaben kommt man zur Übersicht, wo nun die erstellte Webseite auf scheint.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_overview.png]]&lt;br /&gt;
=Einbinden von Google Analytics mittels der Core-Funktion=&lt;br /&gt;
==Typolight bis 2.8.x==&lt;br /&gt;
Um GA in TYPOlight bis 2.8.x einzubinden, bearbeitet man das entsprechende Seitenlayout und fügt unter ''Experten-Einstellungen'' im Feld ''Google Analytics Id'' die vorhin notierte GA-ID ein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout_tl.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
Anschließend speichert und schließt man das Layout.&lt;br /&gt;
&lt;br /&gt;
==Contao ab 2.9==&lt;br /&gt;
Seit Contao 2.9 wird GA über das Template ''moo_analytics.tpl'' eingebunden. Wie man ein Template über den im Core integrierten Template-Editor einbindet, ist [[Templates_bearbeiten|hier]] beschrieben. Nachdem das Template ausgewählt wurde, wird das Template bearbeitet.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_templateedit.png|Template bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Wie schon in dem Kommentar des Templates vermerkt ist, braucht nur die im Code eingefügte Blind-ID (UA-XXXXX-X) gegen die vorhin notierte GA-ID ausgetauscht werden. Anschließend kann das Template gespeichert und geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Nun muss im Seitenlayout das Script eingebunden werden. Dazu setzt man unter ''Skript-Einstellungen'' einen Haken bei dem Punkt ''moo_analytics''. Es muss darauf geachtet werden, dass dieses Skript als letztes eingebunden wird! Anschließend wird das Layout gespeichert und geschlossen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
===IP-Adressen anonymisieren===&lt;br /&gt;
Aus Datenschutzgründen bietet GA seit geraumer Zeit die Möglichkeit, die geloggten IP-Adressen der Besucher zu anonymisieren. Dazu muss nochmal das Template bearbeitet werden und zwischen der Zeile &amp;lt;code&amp;gt;_gaq.push(['_setAccount', 'UA-XXXXX-X']);&amp;lt;/code&amp;gt; und der Zeile &amp;lt;code&amp;gt;_gaq.push(['_trackPageview']);&amp;lt;/code&amp;gt; eine neue Zeile mit folgendem Inhalt eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ganze Template sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * To use the script, replace UA-XXXXX-X in the code below with your Google&lt;br /&gt;
 * Analytics ID and then add it to a Contao page layout. Make sure to insert&lt;br /&gt;
 * it as the last moo_ script (!) and note that it will only be added to the&lt;br /&gt;
 * page if you are not logged into the back end.&lt;br /&gt;
 */&lt;br /&gt;
if (!BE_USER_LOGGED_IN &amp;amp;&amp;amp; sha1(session_id() . (!$GLOBALS['TL_CONFIG']['disableIpCheck'] ? $this-&amp;gt;Environment-&amp;gt;ip : '') . 'BE_USER_AUTH') != $this-&amp;gt;Input-&amp;gt;cookie('BE_USER_AUTH')):&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--//--&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!--&lt;br /&gt;
var _gaq = _gaq || [];&lt;br /&gt;
_gaq.push(['_setAccount', 'UA-XXXXX-X']);&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
_gaq.push(['_trackPageview']);&lt;br /&gt;
(function() {&lt;br /&gt;
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;&lt;br /&gt;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';&lt;br /&gt;
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);&lt;br /&gt;
})();&lt;br /&gt;
//--&amp;gt;&amp;lt;!]]&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Einbinden von Google Analytics mit Erweiterungen=&lt;br /&gt;
Statt der Anapssung an den Templates (ab Contao 2.9) kann die Erweiterung [[GoogleAnalytics]] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bestimmte Rechner (Webmaster, Kunden) vom Tracking ausschliessen=&lt;br /&gt;
Mit GA ist es möglich bestimmte Rechner von den Statistiken auszuschliessen. Zum Beispiel ist es sinnvoll den Entwickler oder Webmaster von der Datenerfassung auszuschliessen, da sonst die Statistik verfälscht wird. GA bietet dafür [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 die Filter Funktion auf Profil-Ebene]. &lt;br /&gt;
Eine Möglichkeit, um geziehlt Rechner auszuschliessen besteht darin, auf diesen Rechnern ein bestimmtes Cookie zu installieren. GA erkennt dieses Cookie und führt dann kein Tracking aus. &lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
===Google Analytics Filter===&lt;br /&gt;
In der GA Konto- bzw. Profilübersicht 'Bearbeiten' wählen für die gewünschte Domain. In den Profileinstellungen dann &amp;quot;Filter hinzufügen&amp;quot; wählen. Dann die Felder wie folgt ausfüllen:&lt;br /&gt;
Filtername: nach cookie, Benutzerdefinierter Filter, Ausschliessen, Filterfeld: Benutzerdefiniert, Filtermuster: no_report, Gross-/Klein: Nein. &amp;quot;Änderungen Speichern&amp;quot; wählen um den Filter zu erstellen.&lt;br /&gt;
&lt;br /&gt;
===Auszuschliessende Rechner identifizieren===&lt;br /&gt;
Damit die Webseite erkennt, ob der ausführende Rechner vom Tracking ausgeschlossen werden soll oder nicht, wird ein Cookie verwendet. Das Cookie wird bei jedem Webseitenaufruf automatisch per Javascript installiert. Allerdings nur auf den Rechnern, die ein solches Cookie explizit wünschen. Das Javascript erkennt anhand des [http://de.wikipedia.org/wiki/User_Agent userAgent] Strings, ob der Rechner ein Cookie wünscht oder nicht. Wenn der Google Analytics Tracking Code im userAgent String vorkommt, wird das Cookie installiert. &lt;br /&gt;
&lt;br /&gt;
Um den userAgent String anzupassen kann wie folgt vorgegangen werden:&lt;br /&gt;
* '''Internet Explorer''': Die [http://ideadapt.net/share/ga_noreport.rar Windows Registry Dateien] herunterladen, entpacken und in den reg-Dateien den GA Tracking Code UA-XXXXX-X an den eigenen anpassen.&lt;br /&gt;
* '''Mozilla Firefox''': about:config in Adresszeile eingeben, Warnung aktzeptieren, Liste nach general.useragent.extra.firefox filtern, Eintrag mit Doppelklick bearbeiten und gewünschten Tracking Code am Ende einfügen, Änderungen mit OK übernehmen. Firefox neu starten.&lt;br /&gt;
* '''Opera''': opera:config#ISP|Id in Adresszeile eingeben, im Feld Id den Tracking Code eingeben und Änderungen speichern. Opera neu starten&lt;br /&gt;
* '''Safari''': Im Menu auf Bearbeiten &amp;gt; Einstellungen, dann auf den Tab Erweitert, Die Einstellung &amp;quot;Menu 'Entwickler' in der Menüleiste anzeigen&amp;quot; aktivieren. Einstellungen schliessen. Im Menu auf Entwickler &amp;gt; User Agent &amp;gt; Anderer ... Den Tracking Code am Ende einfügen und mit OK Änderungen speichern. Neustart nicht erforderlich.&lt;br /&gt;
* Allgmeine Anleitungen: [http://de.wikipedia.org/wiki/User_Agent#Benutzerdefiniert Wikipedia - für verschiedene Browser], [http://www.fiddlertool.com/ua.aspx fiddlertool - Anzeige von userAgent und Installationsanleitungen]&lt;br /&gt;
&lt;br /&gt;
===Google Analytics Javascript anpassen===&lt;br /&gt;
Das folgende Javascript sollte bei jedem Seitenaufruf ausgeführt werden. Dementsprechend also z.B. im Head Bereich des HTML entsprechend einbinden. Zuvor noch UA-XXXXX-X durch den eigenen Tracking Code ersetzen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(navigator.userAgent &amp;amp;&amp;amp; navigator.userAgent.match(/UA-XXXXX-X/)){&lt;br /&gt;
 _gaq.push(['_setVar', 'no_report']); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dieses Script bezieht sich möglicherweise nicht auf die von Ihnen verwendete GA API Version. [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 Welche Version verwende ich?]&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Google_Analytics</id>
		<title>Google Analytics</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Google_Analytics"/>
				<updated>2011-02-03T08:57:27Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Auszuschliessende Rechner identifizieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Core]]&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|TLVersion=bis 2.8.x&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
[[w:de:Google_Analytics|Google Analytics]] ist ein kostenloser Dienst, welcher der Analyse von Zugriffen auf Webseiten dient (Es gilt nur ein monatliches Limit an Seitenaufrufen in Höhe von 5.000.000 Aufrufen).&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Um Verfälschungen auszuschließen, wird der Google Analytics Code erst im Frontend angezeigt, wenn man sich aus dem Backend ausgeloggt hat.}}&lt;br /&gt;
&lt;br /&gt;
==Alternativen==&lt;br /&gt;
Eine Alternative zu Google Analytics stellt [[Piwik]] dar.&lt;br /&gt;
&lt;br /&gt;
==Rechtliches==&lt;br /&gt;
Es ist rechtlich noch nicht klar, ob es nun verboten ist, die Daten in Deutschland mit Google-Analytics zu erfassen. 2 Dinge sprechen erst einmal dagegen:&lt;br /&gt;
#Die Google Server sind nicht unbedingt in Deutschland.&lt;br /&gt;
#Die IP wird erfasst und die gewonnenen Daten können nicht einfach von einem Seitenbetreiber gelöscht werden, wenn ein Besucher dies verlangt.&lt;br /&gt;
&lt;br /&gt;
Es gibt inzwischen ein Addon für einige Browser von Google, die Analytics Datensammlung deaktivieren: http://tools.google.com/dlpage/gaoptout?hl=de&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, der kann ab Contao 2.9 die IP von den Besuchern anonymisieren und so dem Datenschutz genügen (siehe [[#IP-Adressen_anonymisieren|IP-Adresse anonymisieren]]).&lt;br /&gt;
&lt;br /&gt;
{{Achtung|'''Dies ist keine Rechtsberatung.''' Detaillierte Angaben zur rechtlichen Situation beim Einsatz von Google Analytics sind von jeder selbst bei einem Rechtsanwalt zu erfragen (am besten in dem Fachgebiet Internet).}}&lt;br /&gt;
&lt;br /&gt;
=Google Analytics Konto erstellen=&lt;br /&gt;
Um den Dienst ''Google Analytics'' (nachfolgend GA) nutzen zu können, muss man sich zuerst ein GA-Konto [http://www.google.com/analytics/ erstellen].&amp;lt;br /&amp;gt;&lt;br /&gt;
Nach dem Erstellen eines Accounts gibt man GA die Domain bekannt, auf der der Dienst laufen soll. Dazu klickt man auf ''Neues Konto'' ...&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_createaccount.png|Google Analytics Account erstellen]]&lt;br /&gt;
&lt;br /&gt;
... und anschließend auf ''Anmelden''.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_login.png|Webseite hinzufügen]]&lt;br /&gt;
&lt;br /&gt;
Anschließend erfolgen die Angaben zur Webseite, auf der GA laufen soll.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_websitesettings.png|Webseiten Angaben]]&lt;br /&gt;
&lt;br /&gt;
Nachdem man den Geschäftsbedingungen zugestimmt hat, kommt man zur Seite mit dem Tracking-Code. In diesem Code notiert man sich die Account-Nummer; die wird später noch benötigt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis| In den Google Geschäftsbedingungen (PUnkt 8.1) wird man Aufgefordert einen dort angegebenen Satz auf seiner Webseite einzubringen. Das sollte man auf jeden Fall machen, da es dort um die Datenschutzrichtlinien geht, die eh jeder auf seiner Internetseite auszeichnen sollte! }}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_trackingcode.png|Tracking Code]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der Eingaben kommt man zur Übersicht, wo nun die erstellte Webseite auf scheint.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_overview.png]]&lt;br /&gt;
=Einbinden von Google Analytics mittels der Core-Funktion=&lt;br /&gt;
==Typolight bis 2.8.x==&lt;br /&gt;
Um GA in TYPOlight bis 2.8.x einzubinden, bearbeitet man das entsprechende Seitenlayout und fügt unter ''Experten-Einstellungen'' im Feld ''Google Analytics Id'' die vorhin notierte GA-ID ein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout_tl.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
Anschließend speichert und schließt man das Layout.&lt;br /&gt;
&lt;br /&gt;
==Contao ab 2.9==&lt;br /&gt;
Seit Contao 2.9 wird GA über das Template ''moo_analytics.tpl'' eingebunden. Wie man ein Template über den im Core integrierten Template-Editor einbindet, ist [[Templates_bearbeiten|hier]] beschrieben. Nachdem das Template ausgewählt wurde, wird das Template bearbeitet.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_templateedit.png|Template bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Wie schon in dem Kommentar des Templates vermerkt ist, braucht nur die im Code eingefügte Blind-ID (UA-XXXXX-X) gegen die vorhin notierte GA-ID ausgetauscht werden. Anschließend kann das Template gespeichert und geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Nun muss im Seitenlayout das Script eingebunden werden. Dazu setzt man unter ''Skript-Einstellungen'' einen Haken bei dem Punkt ''moo_analytics''. Es muss darauf geachtet werden, dass dieses Skript als letztes eingebunden wird! Anschließend wird das Layout gespeichert und geschlossen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
===IP-Adressen anonymisieren===&lt;br /&gt;
Aus Datenschutzgründen bietet GA seit geraumer Zeit die Möglichkeit, die geloggten IP-Adressen der Besucher zu anonymisieren. Dazu muss nochmal das Template bearbeitet werden und zwischen der Zeile &amp;lt;code&amp;gt;_gaq.push(['_setAccount', 'UA-XXXXX-X']);&amp;lt;/code&amp;gt; und der Zeile &amp;lt;code&amp;gt;_gaq.push(['_trackPageview']);&amp;lt;/code&amp;gt; eine neue Zeile mit folgendem Inhalt eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ganze Template sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * To use the script, replace UA-XXXXX-X in the code below with your Google&lt;br /&gt;
 * Analytics ID and then add it to a Contao page layout. Make sure to insert&lt;br /&gt;
 * it as the last moo_ script (!) and note that it will only be added to the&lt;br /&gt;
 * page if you are not logged into the back end.&lt;br /&gt;
 */&lt;br /&gt;
if (!BE_USER_LOGGED_IN &amp;amp;&amp;amp; sha1(session_id() . (!$GLOBALS['TL_CONFIG']['disableIpCheck'] ? $this-&amp;gt;Environment-&amp;gt;ip : '') . 'BE_USER_AUTH') != $this-&amp;gt;Input-&amp;gt;cookie('BE_USER_AUTH')):&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--//--&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!--&lt;br /&gt;
var _gaq = _gaq || [];&lt;br /&gt;
_gaq.push(['_setAccount', 'UA-XXXXX-X']);&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
_gaq.push(['_trackPageview']);&lt;br /&gt;
(function() {&lt;br /&gt;
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;&lt;br /&gt;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';&lt;br /&gt;
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);&lt;br /&gt;
})();&lt;br /&gt;
//--&amp;gt;&amp;lt;!]]&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Einbinden von Google Analytics mit Erweiterungen=&lt;br /&gt;
Statt der Anapssung an den Templates (ab Contao 2.9) kann die Erweiterung [[GoogleAnalytics]] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bestimmte Rechner (Webmaster, Kunden) vom Tracking ausschliessen=&lt;br /&gt;
Mit GA ist es möglich bestimmte Rechner von den Statistiken auszuschliessen. Zum Beispiel ist es sinnvoll den Entwickler oder Webmaster von der Datenerfassung auszuschliessen, da sonst die Statistik verfälscht wird. GA bietet dafür [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 die Filter Funktion auf Profil-Ebene]. &lt;br /&gt;
Eine Möglichkeit, um geziehlt Rechner auszuschliessen besteht darin, auf diesen Rechnern ein bestimmtes Cookie zu installieren. GA erkennt dieses Cookie und führt dann kein Tracking aus. &lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
===Google Analytics Filter===&lt;br /&gt;
In der GA Konto- bzw. Profilübersicht 'Bearbeiten' wählen für die gewünschte Domain. In den Profileinstellungen dann &amp;quot;Filter hinzufügen&amp;quot; wählen. Dann die Felder wie folgt ausfüllen:&lt;br /&gt;
Filtername: nach cookie, Benutzerdefinierter Filter, Ausschliessen, Filterfeld: Benutzerdefiniert, Filtermuster: no_report, Gross-/Klein: Nein. &amp;quot;Änderungen Speichern&amp;quot; wählen um den Filter zu erstellen.&lt;br /&gt;
&lt;br /&gt;
===Auszuschliessende Rechner identifizieren===&lt;br /&gt;
Damit die Webseite erkennt, ob der ausführende Rechner vom Tracking ausgeschlossen werden soll oder nicht, wird ein Cookie verwendet. Das Cookie wird bei jedem Webseitenaufruf automatisch per Javascript installiert. Allerdings nur auf den Rechnern, die ein solches Cookie explizit wünschen. Das Javascript erkennt anhand des [http://de.wikipedia.org/wiki/User_Agent userAgent] Strings, ob der Rechner ein Cookie wünscht oder nicht. Wenn der Google Analytics Tracking Code im userAgent String vorkommt, wird das Cookie installiert. &lt;br /&gt;
&lt;br /&gt;
Um den userAgent String anzupassen kann wie folgt vorgegangen werden:&lt;br /&gt;
* '''Internet Explorer''': Die [http://ideadapt.net/share/ga_noreport.rar Windows Registry Dateien] herunterladen, entpacken und in den reg-Dateien den GA Tracking Code UA-XXXXX-X an den eigenen anpassen.&lt;br /&gt;
* '''Mozilla Firefox''': about:config in Adresszeile eingeben, Warnung aktzeptieren, Liste nach general.useragent.extra.firefox filtern, Eintrag mit Doppelklick bearbeiten und gewünschten Tracking Code am Ende einfügen, Änderungen mit OK übernehmen. Firefox neu starten.&lt;br /&gt;
* '''Opera''': opera:config#ISP|Id in Adresszeile eingeben, im Feld Id den Tracking Code eingeben und Änderungen speichern. Opera neu starten&lt;br /&gt;
* '''Safari''': Im Menu auf Bearbeiten &amp;gt; Einstellungen, dann auf den Tab Erweitert, Die Einstellung &amp;quot;Menu 'Entwickler' in der Menüleiste anzeigen' aktivieren. Einstellungen schliessen. Im Menu auf Entwickler &amp;gt; User Agent &amp;gt; Anderer ... Den Tracking Code am Ende einfügen und mit Ok Änderungen speichern. Neustart nicht erforderlich.&lt;br /&gt;
* Allgmeine Anleitungen: [http://de.wikipedia.org/wiki/User_Agent#Benutzerdefiniert Wikipedia - für verschiedene Browser], [http://www.fiddlertool.com/ua.aspx fiddlertool - Anzeige von userAgent und Installationsanleitungen]&lt;br /&gt;
&lt;br /&gt;
===Google Analytics Javascript anpassen===&lt;br /&gt;
Das folgende Javascript sollte bei jedem Seitenaufruf ausgeführt werden. Dementsprechend also z.B. im Head Bereich des HTML entsprechend einbinden. Zuvor noch UA-XXXXX-X durch den eigenen Tracking Code ersetzen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(navigator.userAgent &amp;amp;&amp;amp; navigator.userAgent.match(/UA-XXXXX-X/)){&lt;br /&gt;
 _gaq.push(['_setVar', 'no_report']); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dieses Script bezieht sich möglicherweise nicht auf die von Ihnen verwendete GA API Version. [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 Welche Version verwende ich?]&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Google_Analytics</id>
		<title>Google Analytics</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Google_Analytics"/>
				<updated>2011-02-03T08:47:15Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Auszuschliessende Rechner identifizieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Core]]&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|TLVersion=bis 2.8.x&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
[[w:de:Google_Analytics|Google Analytics]] ist ein kostenloser Dienst, welcher der Analyse von Zugriffen auf Webseiten dient (Es gilt nur ein monatliches Limit an Seitenaufrufen in Höhe von 5.000.000 Aufrufen).&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Um Verfälschungen auszuschließen, wird der Google Analytics Code erst im Frontend angezeigt, wenn man sich aus dem Backend ausgeloggt hat.}}&lt;br /&gt;
&lt;br /&gt;
==Alternativen==&lt;br /&gt;
Eine Alternative zu Google Analytics stellt [[Piwik]] dar.&lt;br /&gt;
&lt;br /&gt;
==Rechtliches==&lt;br /&gt;
Es ist rechtlich noch nicht klar, ob es nun verboten ist, die Daten in Deutschland mit Google-Analytics zu erfassen. 2 Dinge sprechen erst einmal dagegen:&lt;br /&gt;
#Die Google Server sind nicht unbedingt in Deutschland.&lt;br /&gt;
#Die IP wird erfasst und die gewonnenen Daten können nicht einfach von einem Seitenbetreiber gelöscht werden, wenn ein Besucher dies verlangt.&lt;br /&gt;
&lt;br /&gt;
Es gibt inzwischen ein Addon für einige Browser von Google, die Analytics Datensammlung deaktivieren: http://tools.google.com/dlpage/gaoptout?hl=de&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, der kann ab Contao 2.9 die IP von den Besuchern anonymisieren und so dem Datenschutz genügen (siehe [[#IP-Adressen_anonymisieren|IP-Adresse anonymisieren]]).&lt;br /&gt;
&lt;br /&gt;
{{Achtung|'''Dies ist keine Rechtsberatung.''' Detaillierte Angaben zur rechtlichen Situation beim Einsatz von Google Analytics sind von jeder selbst bei einem Rechtsanwalt zu erfragen (am besten in dem Fachgebiet Internet).}}&lt;br /&gt;
&lt;br /&gt;
=Google Analytics Konto erstellen=&lt;br /&gt;
Um den Dienst ''Google Analytics'' (nachfolgend GA) nutzen zu können, muss man sich zuerst ein GA-Konto [http://www.google.com/analytics/ erstellen].&amp;lt;br /&amp;gt;&lt;br /&gt;
Nach dem Erstellen eines Accounts gibt man GA die Domain bekannt, auf der der Dienst laufen soll. Dazu klickt man auf ''Neues Konto'' ...&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_createaccount.png|Google Analytics Account erstellen]]&lt;br /&gt;
&lt;br /&gt;
... und anschließend auf ''Anmelden''.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_login.png|Webseite hinzufügen]]&lt;br /&gt;
&lt;br /&gt;
Anschließend erfolgen die Angaben zur Webseite, auf der GA laufen soll.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_websitesettings.png|Webseiten Angaben]]&lt;br /&gt;
&lt;br /&gt;
Nachdem man den Geschäftsbedingungen zugestimmt hat, kommt man zur Seite mit dem Tracking-Code. In diesem Code notiert man sich die Account-Nummer; die wird später noch benötigt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis| In den Google Geschäftsbedingungen (PUnkt 8.1) wird man Aufgefordert einen dort angegebenen Satz auf seiner Webseite einzubringen. Das sollte man auf jeden Fall machen, da es dort um die Datenschutzrichtlinien geht, die eh jeder auf seiner Internetseite auszeichnen sollte! }}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_trackingcode.png|Tracking Code]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der Eingaben kommt man zur Übersicht, wo nun die erstellte Webseite auf scheint.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_overview.png]]&lt;br /&gt;
=Einbinden von Google Analytics mittels der Core-Funktion=&lt;br /&gt;
==Typolight bis 2.8.x==&lt;br /&gt;
Um GA in TYPOlight bis 2.8.x einzubinden, bearbeitet man das entsprechende Seitenlayout und fügt unter ''Experten-Einstellungen'' im Feld ''Google Analytics Id'' die vorhin notierte GA-ID ein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout_tl.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
Anschließend speichert und schließt man das Layout.&lt;br /&gt;
&lt;br /&gt;
==Contao ab 2.9==&lt;br /&gt;
Seit Contao 2.9 wird GA über das Template ''moo_analytics.tpl'' eingebunden. Wie man ein Template über den im Core integrierten Template-Editor einbindet, ist [[Templates_bearbeiten|hier]] beschrieben. Nachdem das Template ausgewählt wurde, wird das Template bearbeitet.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_templateedit.png|Template bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Wie schon in dem Kommentar des Templates vermerkt ist, braucht nur die im Code eingefügte Blind-ID (UA-XXXXX-X) gegen die vorhin notierte GA-ID ausgetauscht werden. Anschließend kann das Template gespeichert und geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Nun muss im Seitenlayout das Script eingebunden werden. Dazu setzt man unter ''Skript-Einstellungen'' einen Haken bei dem Punkt ''moo_analytics''. Es muss darauf geachtet werden, dass dieses Skript als letztes eingebunden wird! Anschließend wird das Layout gespeichert und geschlossen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
===IP-Adressen anonymisieren===&lt;br /&gt;
Aus Datenschutzgründen bietet GA seit geraumer Zeit die Möglichkeit, die geloggten IP-Adressen der Besucher zu anonymisieren. Dazu muss nochmal das Template bearbeitet werden und zwischen der Zeile &amp;lt;code&amp;gt;_gaq.push(['_setAccount', 'UA-XXXXX-X']);&amp;lt;/code&amp;gt; und der Zeile &amp;lt;code&amp;gt;_gaq.push(['_trackPageview']);&amp;lt;/code&amp;gt; eine neue Zeile mit folgendem Inhalt eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ganze Template sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * To use the script, replace UA-XXXXX-X in the code below with your Google&lt;br /&gt;
 * Analytics ID and then add it to a Contao page layout. Make sure to insert&lt;br /&gt;
 * it as the last moo_ script (!) and note that it will only be added to the&lt;br /&gt;
 * page if you are not logged into the back end.&lt;br /&gt;
 */&lt;br /&gt;
if (!BE_USER_LOGGED_IN &amp;amp;&amp;amp; sha1(session_id() . (!$GLOBALS['TL_CONFIG']['disableIpCheck'] ? $this-&amp;gt;Environment-&amp;gt;ip : '') . 'BE_USER_AUTH') != $this-&amp;gt;Input-&amp;gt;cookie('BE_USER_AUTH')):&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--//--&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!--&lt;br /&gt;
var _gaq = _gaq || [];&lt;br /&gt;
_gaq.push(['_setAccount', 'UA-XXXXX-X']);&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
_gaq.push(['_trackPageview']);&lt;br /&gt;
(function() {&lt;br /&gt;
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;&lt;br /&gt;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';&lt;br /&gt;
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);&lt;br /&gt;
})();&lt;br /&gt;
//--&amp;gt;&amp;lt;!]]&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Einbinden von Google Analytics mit Erweiterungen=&lt;br /&gt;
Statt der Anapssung an den Templates (ab Contao 2.9) kann die Erweiterung [[GoogleAnalytics]] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bestimmte Rechner (Webmaster, Kunden) vom Tracking ausschliessen=&lt;br /&gt;
Mit GA ist es möglich bestimmte Rechner von den Statistiken auszuschliessen. Zum Beispiel ist es sinnvoll den Entwickler oder Webmaster von der Datenerfassung auszuschliessen, da sonst die Statistik verfälscht wird. GA bietet dafür [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 die Filter Funktion auf Profil-Ebene]. &lt;br /&gt;
Eine Möglichkeit, um geziehlt Rechner auszuschliessen besteht darin, auf diesen Rechnern ein bestimmtes Cookie zu installieren. GA erkennt dieses Cookie und führt dann kein Tracking aus. &lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
===Google Analytics Filter===&lt;br /&gt;
In der GA Konto- bzw. Profilübersicht 'Bearbeiten' wählen für die gewünschte Domain. In den Profileinstellungen dann &amp;quot;Filter hinzufügen&amp;quot; wählen. Dann die Felder wie folgt ausfüllen:&lt;br /&gt;
Filtername: nach cookie, Benutzerdefinierter Filter, Ausschliessen, Filterfeld: Benutzerdefiniert, Filtermuster: no_report, Gross-/Klein: Nein. &amp;quot;Änderungen Speichern&amp;quot; wählen um den Filter zu erstellen.&lt;br /&gt;
&lt;br /&gt;
===Auszuschliessende Rechner identifizieren===&lt;br /&gt;
Damit die Webseite erkennt, ob der ausführende Rechner vom Tracking ausgeschlossen werden soll oder nicht, wird ein Cookie verwendet. Das Cookie wird bei jedem Webseitenaufruf automatisch per Javascript installiert. Allerdings nur auf den Rechnern, die ein solches Cookie explizit wünschen. Das Javascript erkennt anhand des [http://de.wikipedia.org/wiki/User_Agent userAgent] Strings, ob der Rechner ein Cookie wünscht oder nicht. Wenn der Google Analytics Tracking Code im userAgent String vorkommt, wird das Cookie installiert. &lt;br /&gt;
&lt;br /&gt;
Um den userAgent String anzupassen kann wie folgt vorgegangen werden:&lt;br /&gt;
* '''Internet Explorer''': Die [http://ideadapt.net/share/ga_noreport.rar Windows Registry Dateien] herunterladen, entpacken und in den reg-Dateien den GA Tracking Code UA-XXXXX-X an den eigenen anpassen.&lt;br /&gt;
* '''Mozilla Firefox''': about:config in Adresszeile eingeben, Warnung aktzeptieren, Liste nach general.useragent.extra.firefox filtern, Eintrag mit Doppelklick bearbeiten und gewünschten Tracking Code am Ende einfügen, Änderungen mit OK übernehmen. Firefox neu starten.&lt;br /&gt;
* '''Opera''': opera:config#ISP|Id in Adresszeile eingeben, im Feld Id den Tracking Code eingeben und Änderungen speichern. Opera neu starten&lt;br /&gt;
* Allgmeine Anleitungen: [http://de.wikipedia.org/wiki/User_Agent#Benutzerdefiniert Wikipedia - für verschiedene Browser], [http://www.fiddlertool.com/ua.aspx fiddlertool - Anzeige von userAgent und Installationsanleitungen]&lt;br /&gt;
&lt;br /&gt;
===Google Analytics Javascript anpassen===&lt;br /&gt;
Das folgende Javascript sollte bei jedem Seitenaufruf ausgeführt werden. Dementsprechend also z.B. im Head Bereich des HTML entsprechend einbinden. Zuvor noch UA-XXXXX-X durch den eigenen Tracking Code ersetzen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(navigator.userAgent &amp;amp;&amp;amp; navigator.userAgent.match(/UA-XXXXX-X/)){&lt;br /&gt;
 _gaq.push(['_setVar', 'no_report']); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dieses Script bezieht sich möglicherweise nicht auf die von Ihnen verwendete GA API Version. [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 Welche Version verwende ich?]&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Google_Analytics</id>
		<title>Google Analytics</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Google_Analytics"/>
				<updated>2011-01-31T11:44:36Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Core]]&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|TLVersion=bis 2.8.x&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
[[w:de:Google_Analytics|Google Analytics]] ist ein kostenloser Dienst, welcher der Analyse von Zugriffen auf Webseiten dient (Es gilt nur ein monatliches Limit an Seitenaufrufen in Höhe von 5.000.000 Aufrufen).&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Um Verfälschungen auszuschließen, wird der Google Analytics Code erst im Frontend angezeigt, wenn man sich aus dem Backend ausgeloggt hat.}}&lt;br /&gt;
&lt;br /&gt;
==Alternativen==&lt;br /&gt;
Eine Alternative zu Google Analytics stellt [[Piwik]] dar.&lt;br /&gt;
&lt;br /&gt;
==Rechtliches==&lt;br /&gt;
Es ist rechtlich noch nicht klar, ob es nun verboten ist, die Daten in Deutschland mit Google-Analytics zu erfassen. 2 Dinge sprechen erst einmal dagegen:&lt;br /&gt;
#Die Google Server sind nicht unbedingt in Deutschland.&lt;br /&gt;
#Die IP wird erfasst und die gewonnenen Daten können nicht einfach von einem Seitenbetreiber gelöscht werden, wenn ein Besucher dies verlangt.&lt;br /&gt;
&lt;br /&gt;
Es gibt inzwischen ein Addon für einige Browser von Google, die Analytics Datensammlung deaktivieren: http://tools.google.com/dlpage/gaoptout?hl=de&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, der kann ab Contao 2.9 die IP von den Besuchern anonymisieren und so dem Datenschutz genügen (siehe [[#IP-Adressen_anonymisieren|IP-Adresse anonymisieren]]).&lt;br /&gt;
&lt;br /&gt;
{{Achtung|'''Dies ist keine Rechtsberatung.''' Detaillierte Angaben zur rechtlichen Situation beim Einsatz von Google Analytics sind von jeder selbst bei einem Rechtsanwalt zu erfragen (am besten in dem Fachgebiet Internet).}}&lt;br /&gt;
&lt;br /&gt;
=Google Analytics Konto erstellen=&lt;br /&gt;
Um den Dienst ''Google Analytics'' (nachfolgend GA) nutzen zu können, muss man sich zuerst ein GA-Konto [http://www.google.com/analytics/ erstellen].&amp;lt;br /&amp;gt;&lt;br /&gt;
Nach dem Erstellen eines Accounts gibt man GA die Domain bekannt, auf der der Dienst laufen soll. Dazu klickt man auf ''Neues Konto'' ...&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_createaccount.png|Google Analytics Account erstellen]]&lt;br /&gt;
&lt;br /&gt;
... und anschließend auf ''Anmelden''.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_login.png|Webseite hinzufügen]]&lt;br /&gt;
&lt;br /&gt;
Anschließend erfolgen die Angaben zur Webseite, auf der GA laufen soll.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_websitesettings.png|Webseiten Angaben]]&lt;br /&gt;
&lt;br /&gt;
Nachdem man den Geschäftsbedingungen zugestimmt hat, kommt man zur Seite mit dem Tracking-Code. In diesem Code notiert man sich die Account-Nummer; die wird später noch benötigt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis| In den Google Geschäftsbedingungen (PUnkt 8.1) wird man Aufgefordert einen dort angegebenen Satz auf seiner Webseite einzubringen. Das sollte man auf jeden Fall machen, da es dort um die Datenschutzrichtlinien geht, die eh jeder auf seiner Internetseite auszeichnen sollte! }}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_trackingcode.png|Tracking Code]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der Eingaben kommt man zur Übersicht, wo nun die erstellte Webseite auf scheint.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_overview.png]]&lt;br /&gt;
=Einbinden von Google Analytics mittels der Core-Funktion=&lt;br /&gt;
==Typolight bis 2.8.x==&lt;br /&gt;
Um GA in TYPOlight bis 2.8.x einzubinden, bearbeitet man das entsprechende Seitenlayout und fügt unter ''Experten-Einstellungen'' im Feld ''Google Analytics Id'' die vorhin notierte GA-ID ein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout_tl.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
Anschließend speichert und schließt man das Layout.&lt;br /&gt;
&lt;br /&gt;
==Contao ab 2.9==&lt;br /&gt;
Seit Contao 2.9 wird GA über das Template ''moo_analytics.tpl'' eingebunden. Wie man ein Template über den im Core integrierten Template-Editor einbindet, ist [[Templates_bearbeiten|hier]] beschrieben. Nachdem das Template ausgewählt wurde, wird das Template bearbeitet.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_templateedit.png|Template bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Wie schon in dem Kommentar des Templates vermerkt ist, braucht nur die im Code eingefügte Blind-ID (UA-XXXXX-X) gegen die vorhin notierte GA-ID ausgetauscht werden. Anschließend kann das Template gespeichert und geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Nun muss im Seitenlayout das Script eingebunden werden. Dazu setzt man unter ''Skript-Einstellungen'' einen Haken bei dem Punkt ''moo_analytics''. Es muss darauf geachtet werden, dass dieses Skript als letztes eingebunden wird! Anschließend wird das Layout gespeichert und geschlossen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
===IP-Adressen anonymisieren===&lt;br /&gt;
Aus Datenschutzgründen bietet GA seit geraumer Zeit die Möglichkeit, die geloggten IP-Adressen der Besucher zu anonymisieren. Dazu muss nochmal das Template bearbeitet werden und zwischen der Zeile &amp;lt;code&amp;gt;_gaq.push(['_setAccount', 'UA-XXXXX-X']);&amp;lt;/code&amp;gt; und der Zeile &amp;lt;code&amp;gt;_gaq.push(['_trackPageview']);&amp;lt;/code&amp;gt; eine neue Zeile mit folgendem Inhalt eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ganze Template sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * To use the script, replace UA-XXXXX-X in the code below with your Google&lt;br /&gt;
 * Analytics ID and then add it to a Contao page layout. Make sure to insert&lt;br /&gt;
 * it as the last moo_ script (!) and note that it will only be added to the&lt;br /&gt;
 * page if you are not logged into the back end.&lt;br /&gt;
 */&lt;br /&gt;
if (!BE_USER_LOGGED_IN &amp;amp;&amp;amp; sha1(session_id() . (!$GLOBALS['TL_CONFIG']['disableIpCheck'] ? $this-&amp;gt;Environment-&amp;gt;ip : '') . 'BE_USER_AUTH') != $this-&amp;gt;Input-&amp;gt;cookie('BE_USER_AUTH')):&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--//--&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!--&lt;br /&gt;
var _gaq = _gaq || [];&lt;br /&gt;
_gaq.push(['_setAccount', 'UA-XXXXX-X']);&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
_gaq.push(['_trackPageview']);&lt;br /&gt;
(function() {&lt;br /&gt;
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;&lt;br /&gt;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';&lt;br /&gt;
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);&lt;br /&gt;
})();&lt;br /&gt;
//--&amp;gt;&amp;lt;!]]&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Einbinden von Google Analytics mit Erweiterungen=&lt;br /&gt;
Statt der Anapssung an den Templates (ab Contao 2.9) kann die Erweiterung [[GoogleAnalytics]] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bestimmte Rechner (Webmaster, Kunden) vom Tracking ausschliessen=&lt;br /&gt;
Mit GA ist es möglich bestimmte Rechner von den Statistiken auszuschliessen. Zum Beispiel ist es sinnvoll den Entwickler oder Webmaster von der Datenerfassung auszuschliessen, da sonst die Statistik verfälscht wird. GA bietet dafür [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 die Filter Funktion auf Profil-Ebene]. &lt;br /&gt;
Eine Möglichkeit, um geziehlt Rechner auszuschliessen besteht darin, auf diesen Rechnern ein bestimmtes Cookie zu installieren. GA erkennt dieses Cookie und führt dann kein Tracking aus. &lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
===Google Analytics Filter===&lt;br /&gt;
In der GA Konto- bzw. Profilübersicht 'Bearbeiten' wählen für die gewünschte Domain. In den Profileinstellungen dann &amp;quot;Filter hinzufügen&amp;quot; wählen. Dann die Felder wie folgt ausfüllen:&lt;br /&gt;
Filtername: nach cookie, Benutzerdefinierter Filter, Ausschliessen, Filterfeld: Benutzerdefiniert, Filtermuster: no_report, Gross-/Klein: Nein. &amp;quot;Änderungen Speichern&amp;quot; wählen um den Filter zu erstellen.&lt;br /&gt;
&lt;br /&gt;
===Auszuschliessende Rechner identifizieren===&lt;br /&gt;
Damit die Webseite erkennt, ob der ausführende Rechner vom Tracking ausgeschlossen werden soll oder nicht, wird ein Cookie verwendet. Das Cookie wird bei jedem Webseitenaufruf automatisch per Javascript installiert. Allerdings nur auf den Rechnern, die ein solches Cookie explizit wünschen. Das Javascript erkennt anhand des [http://de.wikipedia.org/wiki/User_Agent userAgent] Strings, ob der Rechner ein Cookie wünscht oder nicht. Wenn der Google Analytics Tracking Code im userAgent String vorkommt, wird das Cookie installiert. &lt;br /&gt;
&lt;br /&gt;
Um den userAgent String anzupassen kann wie folgt vorgegangen werden:&lt;br /&gt;
* Internet Explorer: Die [http://ideadapt.net/share/ga_noreport.rar Windows Registry Dateien] herunterladen, entpacken und in den reg-Dateien den GA Tracking Code UA-XXXXX-X an den eigenen anpassen.&lt;br /&gt;
* Mozilla Firefox: about:config in Adresszeile eingeben, Warnung aktzeptieren, Liste nach general.useragent.extra.firefox filtern, Eintrag mit Doppelklick bearbeiten und gewünschten Tracking Code am Ende einfügen, Änderungen mit OK übernehmen.&lt;br /&gt;
* Allgmeine Anleitungen: [http://de.wikipedia.org/wiki/User_Agent#Benutzerdefiniert Wikipedia - für verschiedene Browser], [http://www.fiddlertool.com/ua.aspx fiddlertool, Anzeige von userAgent und Installationsanleitungen]&lt;br /&gt;
&lt;br /&gt;
===Google Analytics Javascript anpassen===&lt;br /&gt;
Das folgende Javascript sollte bei jedem Seitenaufruf ausgeführt werden. Dementsprechend also z.B. im Head Bereich des HTML entsprechend einbinden. Zuvor noch UA-XXXXX-X durch den eigenen Tracking Code ersetzen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(navigator.userAgent &amp;amp;&amp;amp; navigator.userAgent.match(/UA-XXXXX-X/)){&lt;br /&gt;
 _gaq.push(['_setVar', 'no_report']); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dieses Script bezieht sich möglicherweise nicht auf die von Ihnen verwendete GA API Version. [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 Welche Version verwende ich?]&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Google_Analytics</id>
		<title>Google Analytics</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Google_Analytics"/>
				<updated>2011-01-31T11:36:26Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Core]]&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|TLVersion=bis 2.8.x&lt;br /&gt;
|Version=ab 2.9&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
[[w:de:Google_Analytics|Google Analytics]] ist ein kostenloser Dienst, welcher der Analyse von Zugriffen auf Webseiten dient (Es gilt nur ein monatliches Limit an Seitenaufrufen in Höhe von 5.000.000 Aufrufen).&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Um Verfälschungen auszuschließen, wird der Google Analytics Code erst im Frontend angezeigt, wenn man sich aus dem Backend ausgeloggt hat.}}&lt;br /&gt;
&lt;br /&gt;
==Alternativen==&lt;br /&gt;
Eine Alternative zu Google Analytics stellt [[Piwik]] dar.&lt;br /&gt;
&lt;br /&gt;
==Rechtliches==&lt;br /&gt;
Es ist rechtlich noch nicht klar, ob es nun verboten ist, die Daten in Deutschland mit Google-Analytics zu erfassen. 2 Dinge sprechen erst einmal dagegen:&lt;br /&gt;
#Die Google Server sind nicht unbedingt in Deutschland.&lt;br /&gt;
#Die IP wird erfasst und die gewonnenen Daten können nicht einfach von einem Seitenbetreiber gelöscht werden, wenn ein Besucher dies verlangt.&lt;br /&gt;
&lt;br /&gt;
Es gibt inzwischen ein Addon für einige Browser von Google, die Analytics Datensammlung deaktivieren: http://tools.google.com/dlpage/gaoptout?hl=de&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, der kann ab Contao 2.9 die IP von den Besuchern anonymisieren und so dem Datenschutz genügen (siehe [[#IP-Adressen_anonymisieren|IP-Adresse anonymisieren]]).&lt;br /&gt;
&lt;br /&gt;
{{Achtung|'''Dies ist keine Rechtsberatung.''' Detaillierte Angaben zur rechtlichen Situation beim Einsatz von Google Analytics sind von jeder selbst bei einem Rechtsanwalt zu erfragen (am besten in dem Fachgebiet Internet).}}&lt;br /&gt;
&lt;br /&gt;
=Google Analytics Konto erstellen=&lt;br /&gt;
Um den Dienst ''Google Analytics'' (nachfolgend GA) nutzen zu können, muss man sich zuerst ein GA-Konto [http://www.google.com/analytics/ erstellen].&amp;lt;br /&amp;gt;&lt;br /&gt;
Nach dem Erstellen eines Accounts gibt man GA die Domain bekannt, auf der der Dienst laufen soll. Dazu klickt man auf ''Neues Konto'' ...&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_createaccount.png|Google Analytics Account erstellen]]&lt;br /&gt;
&lt;br /&gt;
... und anschließend auf ''Anmelden''.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_login.png|Webseite hinzufügen]]&lt;br /&gt;
&lt;br /&gt;
Anschließend erfolgen die Angaben zur Webseite, auf der GA laufen soll.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_websitesettings.png|Webseiten Angaben]]&lt;br /&gt;
&lt;br /&gt;
Nachdem man den Geschäftsbedingungen zugestimmt hat, kommt man zur Seite mit dem Tracking-Code. In diesem Code notiert man sich die Account-Nummer; die wird später noch benötigt.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis| In den Google Geschäftsbedingungen (PUnkt 8.1) wird man Aufgefordert einen dort angegebenen Satz auf seiner Webseite einzubringen. Das sollte man auf jeden Fall machen, da es dort um die Datenschutzrichtlinien geht, die eh jeder auf seiner Internetseite auszeichnen sollte! }}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_trackingcode.png|Tracking Code]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern der Eingaben kommt man zur Übersicht, wo nun die erstellte Webseite auf scheint.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_overview.png]]&lt;br /&gt;
=Einbinden von Google Analytics mittels der Core-Funktion=&lt;br /&gt;
==Typolight bis 2.8.x==&lt;br /&gt;
Um GA in TYPOlight bis 2.8.x einzubinden, bearbeitet man das entsprechende Seitenlayout und fügt unter ''Experten-Einstellungen'' im Feld ''Google Analytics Id'' die vorhin notierte GA-ID ein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout_tl.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
Anschließend speichert und schließt man das Layout.&lt;br /&gt;
&lt;br /&gt;
==Contao ab 2.9==&lt;br /&gt;
Seit Contao 2.9 wird GA über das Template ''moo_analytics.tpl'' eingebunden. Wie man ein Template über den im Core integrierten Template-Editor einbindet, ist [[Templates_bearbeiten|hier]] beschrieben. Nachdem das Template ausgewählt wurde, wird das Template bearbeitet.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_templateedit.png|Template bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Wie schon in dem Kommentar des Templates vermerkt ist, braucht nur die im Code eingefügte Blind-ID (UA-XXXXX-X) gegen die vorhin notierte GA-ID ausgetauscht werden. Anschließend kann das Template gespeichert und geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Nun muss im Seitenlayout das Script eingebunden werden. Dazu setzt man unter ''Skript-Einstellungen'' einen Haken bei dem Punkt ''moo_analytics''. Es muss darauf geachtet werden, dass dieses Skript als letztes eingebunden wird! Anschließend wird das Layout gespeichert und geschlossen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ga_layout.png|Seitenlayout]]&lt;br /&gt;
&lt;br /&gt;
===IP-Adressen anonymisieren===&lt;br /&gt;
Aus Datenschutzgründen bietet GA seit geraumer Zeit die Möglichkeit, die geloggten IP-Adressen der Besucher zu anonymisieren. Dazu muss nochmal das Template bearbeitet werden und zwischen der Zeile &amp;lt;code&amp;gt;_gaq.push(['_setAccount', 'UA-XXXXX-X']);&amp;lt;/code&amp;gt; und der Zeile &amp;lt;code&amp;gt;_gaq.push(['_trackPageview']);&amp;lt;/code&amp;gt; eine neue Zeile mit folgendem Inhalt eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ganze Template sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * To use the script, replace UA-XXXXX-X in the code below with your Google&lt;br /&gt;
 * Analytics ID and then add it to a Contao page layout. Make sure to insert&lt;br /&gt;
 * it as the last moo_ script (!) and note that it will only be added to the&lt;br /&gt;
 * page if you are not logged into the back end.&lt;br /&gt;
 */&lt;br /&gt;
if (!BE_USER_LOGGED_IN &amp;amp;&amp;amp; sha1(session_id() . (!$GLOBALS['TL_CONFIG']['disableIpCheck'] ? $this-&amp;gt;Environment-&amp;gt;ip : '') . 'BE_USER_AUTH') != $this-&amp;gt;Input-&amp;gt;cookie('BE_USER_AUTH')):&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--//--&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!--&lt;br /&gt;
var _gaq = _gaq || [];&lt;br /&gt;
_gaq.push(['_setAccount', 'UA-XXXXX-X']);&lt;br /&gt;
_gaq.push(['_gat._anonymizeIp']);&lt;br /&gt;
_gaq.push(['_trackPageview']);&lt;br /&gt;
(function() {&lt;br /&gt;
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;&lt;br /&gt;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';&lt;br /&gt;
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);&lt;br /&gt;
})();&lt;br /&gt;
//--&amp;gt;&amp;lt;!]]&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Einbinden von Google Analytics mit Erweiterungen=&lt;br /&gt;
Statt der Anapssung an den Templates (ab Contao 2.9) kann die Erweiterung [[GoogleAnalytics]] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bestimmte Rechner (Webmaster, Kunden) vom Tracking ausschliessen=&lt;br /&gt;
Mit GA ist es möglich bestimmte Rechner von den Statistiken auszuschliessen. Zum Beispiel ist es sinnvoll den Entwickler oder Webmaster von der Datenerfassung auszuschliessen, da sonst die Statistik verfälscht wird. GA bietet dafür [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 die Filter Funktion auf Profil-Ebene]. &lt;br /&gt;
Eine Möglichkeit, um geziehlt Rechner auszuschliessen besteht darin, auf diesen Rechnern ein bestimmtes Cookie zu installieren. GA erkennt dieses Cookie und führt dann kein Tracking aus. &lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
===Google Analytics Filter===&lt;br /&gt;
In der GA Konto- bzw. Profilübersicht 'Bearbeiten' wählen für die gewünschte Domain. In den Profileinstellungen dann &amp;quot;Filter hinzufügen&amp;quot; wählen. Dann die Felder wie folgt ausfüllen:&lt;br /&gt;
Filtername: nach cookie, Benutzerdefinierter Filter, Ausschliessen, Filterfeld: Benutzerdefiniert, Filtermuster: no_report, Gross-/Klein: Nein. &amp;quot;Änderungen Speichern&amp;quot; wählen um den Filter zu erstellen.&lt;br /&gt;
&lt;br /&gt;
===Auszuschliessende Rechner identifizieren===&lt;br /&gt;
Damit die Webseite erkennt, ob der ausführende Rechner vom Tracking ausgeschlossen werden soll oder nicht, wird ein Cookie verwendet. Das Cookie wird bei jedem Webseitenaufruf automatisch per Javascript installiert. Allerdings nur auf den Rechnern, die ein solches Cookie explizit wünschen. Das Javascript erkennt anhand des [http://de.wikipedia.org/wiki/User_Agent userAgent] Strings, ob der Rechner ein Cookie wünscht oder nicht. Wenn der Google Analytics Tracking Code im userAgent String vorkommt, wird das Cookie installiert. &lt;br /&gt;
&lt;br /&gt;
Um den userAgent String anzupassen kann wie folgt vorgegangen werden:&lt;br /&gt;
* Internet Explorer: Die [[Datei:ga_noreport.rar|Windows Registry]] herunterladen, entpacken und in den reg-Dateien den GA Tracking Code UA-XXXXX-X an den eigenen anpassen.&lt;br /&gt;
* Mozilla Firefox: about:config in Adresszeile eingeben, Warnung aktzeptieren, Liste nach general.useragent.extra.firefox filtern, Eintrag mit Doppelklick bearbeiten und gewünschten Tracking Code am Ende einfügen, Änderungen mit OK übernehmen.&lt;br /&gt;
* Allgmeine Anleitungen: [http://de.wikipedia.org/wiki/User_Agent#Benutzerdefiniert Wikipedia - für verschiedene Browser], [http://www.fiddlertool.com/ua.aspx fiddlertool, Anzeige von userAgent und Installationsanleitungen]&lt;br /&gt;
&lt;br /&gt;
===Google Analytics Javascript anpassen===&lt;br /&gt;
Das folgende Javascript sollte bei jedem Seitenaufruf ausgeführt werden. Dementsprechend also z.B. im Head Bereich des HTML entsprechend einbinden. Zuvor noch UA-XXXXX-X durch den eigenen Tracking Code ersetzen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(navigator.userAgent &amp;amp;&amp;amp; navigator.userAgent.match(/UA-XXXXX-X/)){&lt;br /&gt;
 _gaq.push(['_setVar', 'no_report']); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dieses Script bezieht sich möglicherweise nicht auf die von Ihnen verwendete GA API Version. [http://www.google.com/support/analytics/bin/answer.py?hl=de&amp;amp;answer=55481 Welche Version verwende ich?]&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Konfiguration</id>
		<title>Konfiguration</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Konfiguration"/>
				<updated>2011-01-29T20:49:05Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: /* Allgemein */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev HOWTOS]]&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|Version=2.9.0}}&lt;br /&gt;
&lt;br /&gt;
=Allgemein=&lt;br /&gt;
&lt;br /&gt;
Hier soll eine Sammlung der Einstellungen entstehen, die in den Dateien localconfig, config, etc. eingestellt werden können.&lt;br /&gt;
Also Einstellungen der Form:&lt;br /&gt;
&lt;br /&gt;
Das Array $GLOBALS, in dem die Einstellungen gespeichert werden, hat folgende Schlüssel:&lt;br /&gt;
&lt;br /&gt;
* '''BE_MOD''': Backend-Module&lt;br /&gt;
* '''BE_FFL''': Backend Forumular-Felder&lt;br /&gt;
* '''FE_MOD''': Frontend-Module&lt;br /&gt;
* '''FE_FFL''': Frontend Formular-Felder&lt;br /&gt;
* '''TL_PTY''': Seitentypen&lt;br /&gt;
* '''TL_CACHE''': Cache-Tabellen&lt;br /&gt;
* '''TL_CRON''': Zeitgesteuerte Skripts (cronjobs)&lt;br /&gt;
* '''TL_HOOKS''': Erweiterungspunkte&lt;br /&gt;
* '''TL_MIME''': MIME-Typen.&lt;br /&gt;
* '''TL_DCA''': Data Container Array (Backend Formulare, Felder, Listen).&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['BE_MOD'];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:BackendModule.jpg|frame|center|Backend-Module]]&lt;br /&gt;
&lt;br /&gt;
=BE_MOD=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['BE_MOD'];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dieser Teil des Konfigurationarrays enthält alle Einstellungen für die Backendmodule. Es enthält das Sub-Array SECTION.&lt;br /&gt;
&lt;br /&gt;
==SECTION==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['BE_MOD'][SECTION];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dieser Teil des Konfigurationarrays enthält standardmäßig die 5 folgenden Bereiche:&lt;br /&gt;
&lt;br /&gt;
* content: Das sind jene Module, die unter dem Menüpunkt &amp;quot;Inhalte&amp;quot; im Contao-Backend erscheinen.&lt;br /&gt;
* design: Das sind jene Module, die unter dem Menüpunkt &amp;quot;Layout&amp;quot; im Contao-Backend erscheinen.&lt;br /&gt;
* accounts: Das sind jene Module, die unter dem Menüpunkt &amp;quot;Benutzerverwaltung&amp;quot; im Contao-Backend erscheinen.&lt;br /&gt;
* system: Das sind jene Module, die unter dem Menüpunkt &amp;quot;System&amp;quot; im Contao-Backend erscheinen.&lt;br /&gt;
* profile: Das sind jene Module, die unter dem Menüpunkt &amp;quot;Benutzerfunktionen&amp;quot; im Contao-Backend erscheinen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['BE_MOD']['content'];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sieht so aus:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:InhalteSektion.jpg|center|frame|Sektion &amp;quot;Inhalte&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Es können hier natürlich aus eigene (neue) Sektionen eingeführt werde, dazu muss man einfach das Array um den gewünschten Wert ergänzen, bzw. den gewünschten wert an der richtigen Stelle im Array einfügen.&lt;br /&gt;
Jede Sektion enthält ein weiteres Sub-Array MODULE&lt;br /&gt;
&lt;br /&gt;
===MODULE===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['BE_MOD'][SEKTION][MODULE];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Teil des Konfigurationarrays enthält die Bezeichnungen der Module, die unter den jeweiligen Sektionen geladen werden sollen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['BE_MOD']['content']['article'];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sieht so aus:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:ModuleArtikel.jpg|center|frame|Modul &amp;quot;Artikel&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Jedes Modul enthält wiederum ein Sub-Array, in dem die Einstellungen für dieses Modul zu finden sind. Siehe OPTION.&lt;br /&gt;
&lt;br /&gt;
====OPTION====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['BE_MOD'][SECTION][MODULE][OPTION] = Wert;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier können die einzelnen Einstellungen für ein Modul vorgenommen werden. Die möglichen Einstellungen sind aus der unteren Tabelle ersichtlich.&lt;br /&gt;
Es gilt dabei, dass der Typ FUNKTION ein Array der Form&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;array('PHP-Klasse','Funktion der PHP-Klasse')&amp;lt;/source&amp;gt;&lt;br /&gt;
ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border:1px #aaa solid;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;'''OPTION'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;'''Beschreibung'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;'''Typ'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;'''Beispielhafter Wert'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Ein Array der Tabellen die dieses Modul verwendet.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ARRAY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;array('tl_article','tl_content')&amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;icon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Ein Pfad zu einem Bild, dass als icon für dieses Modul&amp;lt;br&amp;gt;&lt;br /&gt;
angezeigt wird.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STRING&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;'system/modules/newsletter/html/icon.gif'&amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;callback&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Eine eigene Klasse, die das komplette Aussehen des&lt;br /&gt;
Moduls steuert. Die Klasse muss eine Methode&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;generate()&amp;lt;/source&amp;gt; haben, die eine Form zurückgibt, die angezeigt werden soll.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STRING&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;'RepositoryCatalog'&amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;import&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Funktion, dass den Datenimporter für die Kindtabelle implementiert.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FUNKTION&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;array('Newsletter', 'importRecipients')&amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;importTheme&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Funktion, dass einen Datenimporter für die Haupttabelle implementiert.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FUNKTION&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;array('Theme', 'importTheme')&amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;exportTheme&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Funktion, dass einen Datenexporter für die einzelnen Elemente der Haupttabelle implementiert.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FUNKTION&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;array('Theme', 'exportTheme')&amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;table&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UNKLAR: ???&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FUNKTION&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;array('TableWizard', 'importTable')&amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;list&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UNKLAR: ???&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FUNKTION&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;array('ListWizard', 'importList')&amp;lt;/source&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=BE_FFL=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['BE_FFL'];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Teil des Konfigurationsarrays enthält alle Einstellungen für die Backend-Formular-Felder.&lt;br /&gt;
Dieses Element hat ein Sub-Array mit den Backend-Formular-Widgets. Siehe BE_WIDGETS.&lt;br /&gt;
&lt;br /&gt;
==BE_WIDGETS==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['BE_FFL'][BE_WIDGET] = Wert;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Teil können die neuen Backend-Formular-Widgets hinzugefügt werden. Dazu überträgt man als Werte einfach den Namen der Klasse, die dieses Widget implementiert.&lt;br /&gt;
Standardmäßig sind die folgenden Elemente implementiert:&lt;br /&gt;
&lt;br /&gt;
* '''text''': Einfaches Textfeld.&lt;br /&gt;
* '''password''': Ein Passwortfeld in dem die Eingabe mit Punkten ersetzt wird.&lt;br /&gt;
* '''textStore''': ???&lt;br /&gt;
* '''textarea''': Ein mehrzeiliges Eingabefeld. (RTE Feld, etc.)&lt;br /&gt;
* '''select''': Ein Auswahl-Menü (Dropdown-Box)&lt;br /&gt;
* '''checkBox''': Eine Auswahlbox, die man anhaken kann.&lt;br /&gt;
* '''checkboxWizard''': ???&lt;br /&gt;
* '''radio''': Eine runde Auswahlbox&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['BE_FFL']['text'] = 'TextField';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sieht so aus&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:BackendTextField.jpg|center|frame|Backend-Text Field]]&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Vorhandene_Module_erweitern</id>
		<title>Vorhandene Module erweitern</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Vorhandene_Module_erweitern"/>
				<updated>2011-01-20T20:15:48Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev_HOWTOS]]{{AppliesTo&lt;br /&gt;
|Version=2.9 RC1&lt;br /&gt;
}}&lt;br /&gt;
=Vorwort=&lt;br /&gt;
Dieses Tutorial soll neben anderen vorhandenen Tutorials beim Einstieg in die Modulprogrammierung helfen. Hier wird kein eigenständiges Modul erstellt, sondern auf ein vorhandenes Core-Modul und der Demo-Installation ''Music Academy'' aufgebaut.&lt;br /&gt;
&lt;br /&gt;
=Anforderung=&lt;br /&gt;
Die Music Academy hat in diesem Jahr so viele talentierte Schüler, dass sie mit Hilfe deren musikalischer Unterstützung verschiedene Abendveranstaltungen durchführen möchte. Manche der Veranstaltungen werden mit kostenlosem Eintritt angeboten, andere Veranstaltungen sollen kostenpflichtig sein. Um den besonders kostenbewussten Musikliebhabern in der '''Veranstaltungsliste''' auf einem Blick aufzuzeigen, welche Veranstaltungen kostenfrei sind, soll '''diese Information''' in Zukunft '''bei jeder einzelnen Veranstaltung''' direkt angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Zur Umsetzung der Anforderung wird das Formular zur Eingabe von Terminen um eine zusätzliche Checkbox erweitert. Diese Checkbox ist bei Veranstaltungen mit kostenlosem Eintritt zu aktivieren. Falls die Prüfung im Template ergibt, dass der Wert der Checkbox gesetzt ist, wird eine entsprechende Information im Frontend ausgegeben.&lt;br /&gt;
&lt;br /&gt;
=Kurzanleitung=&lt;br /&gt;
# ''TL_ROOT/system/modules/calendarFreeEntry'' - neues Modulverzeichnis mit nötiger Verzeichnis- und Dateistruktur erstellen&lt;br /&gt;
# ''TL_ROOT/system/modules/calendarFreeEntry/config/database.sql'' – Datenbanktabelle um neues Feld ''freeEntry'' erweitern&lt;br /&gt;
# ''TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php'' – Data Container Array erweitern&lt;br /&gt;
# ''TL_ROOT/system/modules/calendarFreeEntry/languages'' – Sprachdateien um neues Feld ''freeEntry'' erweitern&lt;br /&gt;
# ''TL_ROOT/system/modules/calendarFreeEntry/templates'' – Erweiterung Template um Laden der Sprachdatei, Prüfung des Feldes freeEntry und abhängiger Ausgabe&lt;br /&gt;
# ''&amp;lt;nowiki&amp;gt;http://www.meinedomain.de/contao/install.php&amp;lt;/nowiki&amp;gt;'' - Datenbank-Update durchführen, Template in der Eventliste ändern, Termin einstellen, testen&lt;br /&gt;
&lt;br /&gt;
=Detailanleitung=&lt;br /&gt;
==Erstellen des neuen Modulverzeichnis mit nötiger Verzeichnis- und Dateistruktur==&lt;br /&gt;
In dieser Anleitung wird die Extension-Erweiterung lokal erstellt und anschließend auf den Webserver hoch geladen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
TL_ROOT/system/modules/calendarFreeEntry&lt;br /&gt;
TL_ROOT/system/modules/calendarFreeEntry/config&lt;br /&gt;
TL_ROOT/system/modules/calendarFreeEntry/config/database.sql&lt;br /&gt;
TL_ROOT/system/modules/calendarFreeEntry/dca&lt;br /&gt;
TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php&lt;br /&gt;
TL_ROOT/system/modules/calendarFreeEntry/languages&lt;br /&gt;
TL_ROOT/system/modules/calendarFreeEntry/languages/de&lt;br /&gt;
TL_ROOT/system/modules/calendarFreeEntry/languages/de/tl_calendar_events.php&lt;br /&gt;
TL_ROOT/system/modules/calendarFreeEntry/languages/en&lt;br /&gt;
TL_ROOT/system/modules/calendarFreeEntry/languages/en/tl_calendar_events.php&lt;br /&gt;
TL_ROOT/system/modules/calendarFreeEntry/templates/&lt;br /&gt;
TL_ROOT/system/modules/calendarFreeEntry/templates/event_list_freeEntry.tpl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Erweiterung der vorhandenen Datenbanktabelle tl_calendar_events==&lt;br /&gt;
Dazu die Datei ''TL_ROOT/system/modules/calendarFreeEntry/config/database.sql'' öffnen und folgenden Inhalt einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
--		Table `tl_calendar_events`&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `tl_calendar_events` (&lt;br /&gt;
	`freeEntry` char(1) NOT NULL default '',&lt;br /&gt;
) ENGINE=MyISAM DEFAULT CHARSET=utf8;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschliessend speichern und schliessen.&lt;br /&gt;
&lt;br /&gt;
==Erweiterung des vorhandenen Data Container Arrays (DCA)==&lt;br /&gt;
Dazu die Datei ''TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php'' öffnen und folgenden Inhalt einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if (!defined('TL_ROOT')) die('You can not access this file directly!');&lt;br /&gt;
&lt;br /&gt;
//Anzeige im Backend&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default'] = str_replace('title,','title,freeEntry,', $GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default']);&lt;br /&gt;
&lt;br /&gt;
//Beschreibung des Feldes&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_calendar_events']['fields']['freeEntry'] = array&lt;br /&gt;
(&lt;br /&gt;
'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'],&lt;br /&gt;
'inputType'               =&amp;gt; 'checkbox'&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschliessend speichern und schliessen.&lt;br /&gt;
&lt;br /&gt;
==Erweiterung der vorhandenen Sprachdateien==&lt;br /&gt;
''TL_ROOT/system/modules/calendarFreeEntry/languages/de/tl_calendar_events.php''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if (!defined('TL_ROOT')) die('You can not access this file directly!');&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry']        = array('Free entry', 'Zeigen Sie den Termin mit kostenlosen Eintritt an.'); &lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''TL_ROOT/system/modules/calendarFreeEntry/languages/en/tl_calendar_events.php''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if (!defined('TL_ROOT')) die('You can not access this file directly!');&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry']        = array('Free Entry', 'Display the event with free entry.');&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Erweiterung des vorhandenen Templates==&lt;br /&gt;
Damit im Template die gewünschte Information ausgegeben werden kann, wird das vorhandene Template der Kerninstallation kopiert, in das neue Modulverzeichnis eingefügt und die PHP-Logik entsprechend ergänzt. Dazu wird eine Prüfung eingebaut, die prüft, ob der Wert der Checkbox gesetzt wurde. Bei gesetztem Wert soll im Template sprachabhängig die Information ausgegeben, dass es sich um eine kostenlose Veranstaltung handelt. Damit die Inhalte der Sprachdateien zugegriffen werden kann, muss die Sprachdatei zu erst noch geladen werden. Contao wurde so konzipiert, dass ausschließlich nur die benötigten Ressourcen geladen werden, um das System auch in der Laufzeit möglichst performant zu halten.&lt;br /&gt;
&lt;br /&gt;
Vorhandene Datei aus ''TL_ROOT/system/modules/calendar/templates/event_list.tpl'' in ''TL_ROOT/system /modules/calendarFreeEntry/templates'' kopieren, in ''event_list_freeEntry.tpl'' umbenennen und entsprechend erweitern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//Load language file&lt;br /&gt;
&amp;lt;?php $this-&amp;gt;loadLanguageFile('tl_calendar_events'); ?&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
//Check field freeEntry&lt;br /&gt;
&amp;lt;?php if ($this-&amp;gt;freeEntry): ?&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;freeEntry&amp;quot;&amp;gt;&amp;lt;?php echo $GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][0]; ?&amp;gt;&amp;lt;/p&amp;gt;  &lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies war die letzte Datei, die erstellt / bearbeitet werden musste. Nun muss das ganze Paket in die Contao-Installation hoch geladen werden. Beim Hochladen ist darauf zu achten, dass der Ordner an die richtige Stelle kopiert wird.&lt;br /&gt;
&lt;br /&gt;
[[Datei:moduleext_ftp.png|FTP]]&lt;br /&gt;
&lt;br /&gt;
==Datenbank-Update, Veranstaltung eintragen, Test==&lt;br /&gt;
Über ''&amp;lt;nowiki&amp;gt;http://www.meinedomain.de/typolight/install.php&amp;lt;/nowiki&amp;gt;'' ein Datenbank-Update durchführen (vorgeschlagene Änderungen per Haken aktivieren =&amp;gt; Update Database).&lt;br /&gt;
&lt;br /&gt;
[[Datei:moduleext_updatedb.png|Datenbank-Update durchführen]] &lt;br /&gt;
&lt;br /&gt;
Anschließend im Backend unter Themes das MusicAcademy-Theme bearbeiten und bei den Frontend-Modulen das Modul ''Calendar - Event List (Eventliste)'' suchen und dieses ebenfalls bearbeiten. Unter dem Punkt ''Template-Einstellungen'' wählt man nun das neu erstellte Template ''event_list_freeEntry'' aus.&lt;br /&gt;
&lt;br /&gt;
[[Datei:moduleext_template.png|Erstelltes Template auswählen]]&lt;br /&gt;
&lt;br /&gt;
Wenn man nun ein neues Event erstellt oder ein vorhandenes bearbeitet, hat man unter dem ''Title''-Feld eine neue Auswahl ''Free entry'' zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
[[Datei:moduleext_editevent.png|Event bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Wird diese Einstellung aktiviert, so wird im Frontend in der Eventliste (.../contao_music/index.php/event-list.html?month=201001) zu den normalen Informationen zusätzlich der Eintrag ''Free Entry'' angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:moduleext_fe.png|Frontend Ausgabe]]&lt;br /&gt;
&lt;br /&gt;
=Credits=&lt;br /&gt;
Die Orginal-Anleitung wurde erstellt von manela&amp;lt;br /&amp;gt;&lt;br /&gt;
Div. Korrekturen und Anpassungen an die Contao-Version durch [[user:Toflar|Toflar]], [[user:BugBuster|BugBuster]] und [[user:manitougs|manitougs]]&lt;br /&gt;
=Verwandte Themen=&lt;br /&gt;
[[Eigene_Templates_trotz_fehlender_Auswahlmöglichkeit|Templates Erweitern]]&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Eigene_Templates_trotz_fehlender_Auswahlm%C3%B6glichkeit</id>
		<title>Eigene Templates trotz fehlender Auswahlmöglichkeit</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Eigene_Templates_trotz_fehlender_Auswahlm%C3%B6glichkeit"/>
				<updated>2011-01-20T20:12:48Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AppliesTo|TLVersion=Alle Versionen|Version=ab 2.9}}&lt;br /&gt;
[[Category: Admin_HOWTOS]]&lt;br /&gt;
[[Category: Dev_HOWTOS]]&lt;br /&gt;
&lt;br /&gt;
Es gibt den ein oder anderen Fall, wo man gerne verschiedene Templates in Modulen nutzen möchte, aber leider nicht die Auswahl hat im Modul selber.&lt;br /&gt;
&lt;br /&gt;
Da kann man sich mit einem kleinen Trick behelfen.&lt;br /&gt;
&lt;br /&gt;
Man vergibt der Stelle wo man ein extra Template nutzen möchte eine bestimmte CSS Klasse und fragt diese ab. Je nach dem, läd man dann die passende eigene Template Datei.&lt;br /&gt;
&lt;br /&gt;
=Vorgehen '''Möglichkeit 1'''=&lt;br /&gt;
&lt;br /&gt;
# Kopie des Original Templates anlegen (siehe auch [[Templates_bearbeiten|Templates_bearbeiten]])&lt;br /&gt;
# Zwei neue Templates anlegen (oder mehr.. wenn man das braucht) die man dann später benutzen möchte:&lt;br /&gt;
#* template_1.tpl mit dem Oringinal Code&lt;br /&gt;
#* template_2.tpl mit dem geänderten&lt;br /&gt;
# Jetzt nimmt man sich das Template was immer geladen wird und bringt dort die If-Abfrage ein, welches Template man nun wirklich laden möchte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  $pos = strpos($this-&amp;gt;class, 'klasse_die_man_abfragen_will');&lt;br /&gt;
  if ($pos === false)&lt;br /&gt;
  {&lt;br /&gt;
    include('template_1.tpl');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    include('template_2.tpl');&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Vorgehen '''Möglichkeit 2''' (mit nur einer Datei)=&lt;br /&gt;
&lt;br /&gt;
Man kopiert das entsprechende Core-Template in den Ordner '''roots/templates/''' (per FTP oder übers BE) und erzeugt darin folgende Struktur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if (strpos($this-&amp;gt;class, 'klasse-die-man-abfragen-will') !== false): ?&amp;gt;&lt;br /&gt;
  eigenes Template&lt;br /&gt;
&amp;lt;?php else: ?&amp;gt;&lt;br /&gt;
  default Template&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist eben, das man die Klasse auch richtig vergibt ;-)&lt;br /&gt;
&lt;br /&gt;
'''Möglichkeit 2''' ist mehrfach getestet.&lt;br /&gt;
&lt;br /&gt;
Dann hier noch ein paar Zusatzinfos warum mit strpos gearbeitet wird: [http://php.net/manual/de/function.strpos.php]&lt;br /&gt;
Kurz und knapp: mit einem einfachen Vergleich wie $this-&amp;gt;class == 'meineklasse' kommt man nur dann klar, wenn nur eine Klasse vergeben wurde. strpos funktioniert aber auch dann, wenn mehr als nur eine Klasse da drinn vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:MacKP|MacKP]] 17:36, 29. Sep. 2010 (CEST)&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Benutzer:Bubblez</id>
		<title>Benutzer:Bubblez</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Benutzer:Bubblez"/>
				<updated>2011-01-10T20:08:12Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: Die Seite wurde neu angelegt: „'''Nick''': bubblez  '''Real Name''': Ueli Kunz  '''Beruf''': Webentwickler seit 2003, z.Z. Student für Informatik  '''Internetseite''': www.ideadapt.net  '''Int…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Nick''': bubblez&lt;br /&gt;
&lt;br /&gt;
'''Real Name''': Ueli Kunz&lt;br /&gt;
&lt;br /&gt;
'''Beruf''': Webentwickler seit 2003, z.Z. Student für Informatik&lt;br /&gt;
&lt;br /&gt;
'''Internetseite''': www.ideadapt.net&lt;br /&gt;
&lt;br /&gt;
'''Interessen''': Javascript, CSS, Usability, .Net&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:Screen_manualsort.png</id>
		<title>Datei:Screen manualsort.png</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:Screen_manualsort.png"/>
				<updated>2011-01-10T19:59:08Z</updated>
		
		<summary type="html">&lt;p&gt;Bubblez: hat eine neue Version von „Datei:Screen manualsort.png“ hochgeladen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bubblez</name></author>	</entry>

	</feed>