<?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=Flex</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=Flex"/>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Spezial:Beitr%C3%A4ge/Flex"/>
		<updated>2026-04-30T11:06:18Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>https://de.contaowiki.org/Soll_diese_Seite_wirklich_verlassen_werden_/_JavaScript_im_Backend_geht_nicht</id>
		<title>Soll diese Seite wirklich verlassen werden / JavaScript im Backend geht nicht</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Soll_diese_Seite_wirklich_verlassen_werden_/_JavaScript_im_Backend_geht_nicht"/>
				<updated>2014-05-02T11:40:12Z</updated>
		
		<summary type="html">&lt;p&gt;Flex: /* Eigene tinyMCE.php */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fehlersuche]]&lt;br /&gt;
Es gibt mehrere Gründe, warum diese Fehlermeldung kommen kann oder warum im Backend das JavaScript nicht richtig funktioniert:&lt;br /&gt;
=Contao ist in einem Unterordner installiert=&lt;br /&gt;
Contao ist in einem Unterordner installiert und im übergeordneten Ordner ist eine .htaccess aktiv (die .htaccess der betroffenen Contao-Installation ist nicht aktiv)&lt;br /&gt;
&lt;br /&gt;
'''Lösung:'''&lt;br /&gt;
&amp;quot;URL Umschreiben&amp;quot; im Contao-Backend einschalten (unter Einstellungen) und die eigene .htaccess im Root-Verzeichnis der Contao-Installation aktivieren indem man die Datei &amp;quot;.htaccess.default&amp;quot; in &amp;quot;.htaccess&amp;quot; umbenennt. Zusätzlich muss in der .htaccess noch die RewriteBase angepasst werden. Dazu öffnet man die .htaccess in einem Editor und sucht nach der Zeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 #RewriteBase /&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese ändert man dann in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 RewriteBase /unterordner/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder (falls man eine subdomain direkt auf den Unterordner zeigen lässt):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und speichert die Änderung ab&lt;br /&gt;
&lt;br /&gt;
= Url's umschreiben=&lt;br /&gt;
Man hat die Einstellung &amp;quot;URL Umschreiben&amp;quot; im Contao-Backend eingeschaltet aber die .htaccess noch nicht aktiviert und angepasst.&lt;br /&gt;
&lt;br /&gt;
'''Lösung:''' &lt;br /&gt;
Die .htaccess aktivieren und die Zeile RewriteBase anpassen (siehe obigen Abschnitt)&lt;br /&gt;
=Kompression=&lt;br /&gt;
Die .js und .css Kompression funktioniert auf dem Server nicht (ist im Backend unter Einstellungen eingeschaltet und die .htaccess ist aktiv).&lt;br /&gt;
&lt;br /&gt;
'''Lösung:''' &lt;br /&gt;
In der .htaccess diese Bereiche entfernen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
##&lt;br /&gt;
# Compress .js and .css files&lt;br /&gt;
##&lt;br /&gt;
AddEncoding gzip .gz&lt;br /&gt;
AddType &amp;quot;text/javascript&amp;quot; .gz&lt;br /&gt;
AddType &amp;quot;text/css&amp;quot; .gz&lt;br /&gt;
RewriteCond %{HTTP:Accept-encoding} gzip&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} \.(js|css)$&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}.gz -f&lt;br /&gt;
RewriteRule ^(.*)$ $1.gz [L]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Angepasstes Backend-Template=&lt;br /&gt;
Man hat das Backend-Template be_main.tpl angepasst und nach einem Update funktioniert dieses nicht mehr richtig (aktuell kann dieser Fehler bei einen Update von 2.7.x auf 2.8 passieren).&lt;br /&gt;
&lt;br /&gt;
'''Lösung:'''&lt;br /&gt;
Der mootools Aufruf funktioniert nicht mehr im Header. Um diesen Fehler zu beheben, muss der alte mootools-Code entfernt werden und an der Stelle der neue mootools-Code eingefügt werden. Dieser besteht aus folgenden 2 Zeilen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;plugins/mootools/mootools-core.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;plugins/mootools/mootools-more.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:MacKP|MacKP]] 10:34, 7. Mär. 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
=Eigene tinyMCE.php=&lt;br /&gt;
&lt;br /&gt;
Bei einigen Contao Versionen wird tinyMCE aktualisiert und hier ändern sich Konfigurationsnamen oder Plugins oder Pfade, usw.&lt;br /&gt;
Nach einem Update sollte also die eigene tinyMCE Konfiguration abgeglichen werden.&lt;br /&gt;
&lt;br /&gt;
--Flex 12:37, 2. Mai 2014 (UTC)&lt;/div&gt;</summary>
		<author><name>Flex</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Soll_diese_Seite_wirklich_verlassen_werden_/_JavaScript_im_Backend_geht_nicht</id>
		<title>Soll diese Seite wirklich verlassen werden / JavaScript im Backend geht nicht</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Soll_diese_Seite_wirklich_verlassen_werden_/_JavaScript_im_Backend_geht_nicht"/>
				<updated>2014-05-02T11:38:07Z</updated>
		
		<summary type="html">&lt;p&gt;Flex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fehlersuche]]&lt;br /&gt;
Es gibt mehrere Gründe, warum diese Fehlermeldung kommen kann oder warum im Backend das JavaScript nicht richtig funktioniert:&lt;br /&gt;
=Contao ist in einem Unterordner installiert=&lt;br /&gt;
Contao ist in einem Unterordner installiert und im übergeordneten Ordner ist eine .htaccess aktiv (die .htaccess der betroffenen Contao-Installation ist nicht aktiv)&lt;br /&gt;
&lt;br /&gt;
'''Lösung:'''&lt;br /&gt;
&amp;quot;URL Umschreiben&amp;quot; im Contao-Backend einschalten (unter Einstellungen) und die eigene .htaccess im Root-Verzeichnis der Contao-Installation aktivieren indem man die Datei &amp;quot;.htaccess.default&amp;quot; in &amp;quot;.htaccess&amp;quot; umbenennt. Zusätzlich muss in der .htaccess noch die RewriteBase angepasst werden. Dazu öffnet man die .htaccess in einem Editor und sucht nach der Zeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 #RewriteBase /&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese ändert man dann in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 RewriteBase /unterordner/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder (falls man eine subdomain direkt auf den Unterordner zeigen lässt):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und speichert die Änderung ab&lt;br /&gt;
&lt;br /&gt;
= Url's umschreiben=&lt;br /&gt;
Man hat die Einstellung &amp;quot;URL Umschreiben&amp;quot; im Contao-Backend eingeschaltet aber die .htaccess noch nicht aktiviert und angepasst.&lt;br /&gt;
&lt;br /&gt;
'''Lösung:''' &lt;br /&gt;
Die .htaccess aktivieren und die Zeile RewriteBase anpassen (siehe obigen Abschnitt)&lt;br /&gt;
=Kompression=&lt;br /&gt;
Die .js und .css Kompression funktioniert auf dem Server nicht (ist im Backend unter Einstellungen eingeschaltet und die .htaccess ist aktiv).&lt;br /&gt;
&lt;br /&gt;
'''Lösung:''' &lt;br /&gt;
In der .htaccess diese Bereiche entfernen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
##&lt;br /&gt;
# Compress .js and .css files&lt;br /&gt;
##&lt;br /&gt;
AddEncoding gzip .gz&lt;br /&gt;
AddType &amp;quot;text/javascript&amp;quot; .gz&lt;br /&gt;
AddType &amp;quot;text/css&amp;quot; .gz&lt;br /&gt;
RewriteCond %{HTTP:Accept-encoding} gzip&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} \.(js|css)$&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}.gz -f&lt;br /&gt;
RewriteRule ^(.*)$ $1.gz [L]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Angepasstes Backend-Template=&lt;br /&gt;
Man hat das Backend-Template be_main.tpl angepasst und nach einem Update funktioniert dieses nicht mehr richtig (aktuell kann dieser Fehler bei einen Update von 2.7.x auf 2.8 passieren).&lt;br /&gt;
&lt;br /&gt;
'''Lösung:'''&lt;br /&gt;
Der mootools Aufruf funktioniert nicht mehr im Header. Um diesen Fehler zu beheben, muss der alte mootools-Code entfernt werden und an der Stelle der neue mootools-Code eingefügt werden. Dieser besteht aus folgenden 2 Zeilen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;plugins/mootools/mootools-core.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;plugins/mootools/mootools-more.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:MacKP|MacKP]] 10:34, 7. Mär. 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
=Eigene tinyMCE.php=&lt;br /&gt;
&lt;br /&gt;
Bei einigen Contao Versionen wird tinyMCE aktualisiert und hier ändern sich Konfigurationsnamen oder Plugins oder Pfade, usw.&lt;br /&gt;
Nach einem Update sollte also die eigene tinyMCE Konfiguration abgeglichen werden.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Flex|Flex]] 12:37, 2. Mai 2014 (UTC)&lt;/div&gt;</summary>
		<author><name>Flex</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope_Hooks</id>
		<title>Isotope Hooks</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope_Hooks"/>
				<updated>2013-11-19T09:40:35Z</updated>
		
		<summary type="html">&lt;p&gt;Flex: /* Isotope Hooks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Isotope Hooks =&lt;br /&gt;
&lt;br /&gt;
Das ist eine Liste von Isotope Hooks aus dem aktuellen Source (1.4.7).&lt;br /&gt;
Die Liste hat keinerlei Anspruch auf Vollständigkeit.&lt;br /&gt;
&lt;br /&gt;
=== Isotope.php ===&lt;br /&gt;
calculatePrice&lt;br /&gt;
&amp;lt;br&amp;gt;calculateTax&lt;br /&gt;
&amp;lt;br&amp;gt;useTaxRate&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeAutomator.php ===&lt;br /&gt;
convertCurrency&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeBackend.php ===&lt;br /&gt;
getAllowedProductIds&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeCart.php ===&lt;br /&gt;
checkoutSurcharge&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeFrontend.php ===&lt;br /&gt;
watermarkImage&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeOrder.php ===&lt;br /&gt;
preCheckout&lt;br /&gt;
&amp;lt;br&amp;gt;postCheckout&lt;br /&gt;
&amp;lt;br&amp;gt;preOrderStatusUpdate&lt;br /&gt;
&amp;lt;br&amp;gt;postOrderStatusUpdate&lt;br /&gt;
&amp;lt;br&amp;gt;getOrderEmailData&lt;br /&gt;
&amp;lt;br&amp;gt;generateOrderId&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeProduct.php ===&lt;br /&gt;
productAttributes&lt;br /&gt;
&amp;lt;br&amp;gt;buttons&lt;br /&gt;
&amp;lt;br&amp;gt;generateProduct&lt;br /&gt;
&amp;lt;br&amp;gt;generateAjaxProduct&lt;br /&gt;
&amp;lt;br&amp;gt;generateAttribute&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeProductCollection.php ===&lt;br /&gt;
saveCollection&lt;br /&gt;
&amp;lt;br&amp;gt;deleteCollection&lt;br /&gt;
&amp;lt;br&amp;gt;addProductToCollection&lt;br /&gt;
&amp;lt;br&amp;gt;updateProductInCollection&lt;br /&gt;
&amp;lt;br&amp;gt;deleteProductFromCollection&lt;br /&gt;
&amp;lt;br&amp;gt;transferCollection&lt;br /&gt;
&amp;lt;br&amp;gt;transferredCollection&lt;br /&gt;
&amp;lt;br&amp;gt;generateCollection&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== ModuleIsotopeCart.php ===&lt;br /&gt;
compileCart&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== ModuleIsotopeCheckout.php ===&lt;br /&gt;
addCustomAddress&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== ModuleIsotopeProductFilter.php ===&lt;br /&gt;
generateFilters&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== ModuleIsotopeProductList.php ===&lt;br /&gt;
generateProductList&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== postsale.php ===&lt;br /&gt;
initializePostsale&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== ProductCallbacks.php ===&lt;br /&gt;
applyAdvancedFilters&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== tl_iso_orders.php ===&lt;br /&gt;
saveCollection&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== tl_iso_products.php ===&lt;br /&gt;
addAssetImportRegexp&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== tl_module.php ===&lt;br /&gt;
buttons&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flex</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Isotope_Hooks</id>
		<title>Isotope Hooks</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Isotope_Hooks"/>
				<updated>2013-11-19T09:40:12Z</updated>
		
		<summary type="html">&lt;p&gt;Flex: Die Seite wurde neu angelegt: „= Isotope Hooks =  Das ist eine Liste von Isotope Hooks die auf die Schnelle aus dem aktuellen Source gezogen habe (1.4.7). Die Liste hat keinerlei Anspruch auf V…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Isotope Hooks =&lt;br /&gt;
&lt;br /&gt;
Das ist eine Liste von Isotope Hooks die auf die Schnelle aus dem aktuellen Source gezogen habe (1.4.7).&lt;br /&gt;
Die Liste hat keinerlei Anspruch auf Vollständigkeit.&lt;br /&gt;
&lt;br /&gt;
=== Isotope.php ===&lt;br /&gt;
calculatePrice&lt;br /&gt;
&amp;lt;br&amp;gt;calculateTax&lt;br /&gt;
&amp;lt;br&amp;gt;useTaxRate&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeAutomator.php ===&lt;br /&gt;
convertCurrency&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeBackend.php ===&lt;br /&gt;
getAllowedProductIds&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeCart.php ===&lt;br /&gt;
checkoutSurcharge&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeFrontend.php ===&lt;br /&gt;
watermarkImage&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeOrder.php ===&lt;br /&gt;
preCheckout&lt;br /&gt;
&amp;lt;br&amp;gt;postCheckout&lt;br /&gt;
&amp;lt;br&amp;gt;preOrderStatusUpdate&lt;br /&gt;
&amp;lt;br&amp;gt;postOrderStatusUpdate&lt;br /&gt;
&amp;lt;br&amp;gt;getOrderEmailData&lt;br /&gt;
&amp;lt;br&amp;gt;generateOrderId&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeProduct.php ===&lt;br /&gt;
productAttributes&lt;br /&gt;
&amp;lt;br&amp;gt;buttons&lt;br /&gt;
&amp;lt;br&amp;gt;generateProduct&lt;br /&gt;
&amp;lt;br&amp;gt;generateAjaxProduct&lt;br /&gt;
&amp;lt;br&amp;gt;generateAttribute&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== IsotopeProductCollection.php ===&lt;br /&gt;
saveCollection&lt;br /&gt;
&amp;lt;br&amp;gt;deleteCollection&lt;br /&gt;
&amp;lt;br&amp;gt;addProductToCollection&lt;br /&gt;
&amp;lt;br&amp;gt;updateProductInCollection&lt;br /&gt;
&amp;lt;br&amp;gt;deleteProductFromCollection&lt;br /&gt;
&amp;lt;br&amp;gt;transferCollection&lt;br /&gt;
&amp;lt;br&amp;gt;transferredCollection&lt;br /&gt;
&amp;lt;br&amp;gt;generateCollection&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== ModuleIsotopeCart.php ===&lt;br /&gt;
compileCart&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== ModuleIsotopeCheckout.php ===&lt;br /&gt;
addCustomAddress&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== ModuleIsotopeProductFilter.php ===&lt;br /&gt;
generateFilters&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== ModuleIsotopeProductList.php ===&lt;br /&gt;
generateProductList&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== postsale.php ===&lt;br /&gt;
initializePostsale&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== ProductCallbacks.php ===&lt;br /&gt;
applyAdvancedFilters&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== tl_iso_orders.php ===&lt;br /&gt;
saveCollection&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== tl_iso_products.php ===&lt;br /&gt;
addAssetImportRegexp&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== tl_module.php ===&lt;br /&gt;
buttons&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flex</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/C3:_Tutorial_Extension_Entwicklung_2.Teil:_Selective_DCA_Paletten_und_Subpaletten</id>
		<title>C3: Tutorial Extension Entwicklung 2.Teil: Selective DCA Paletten und Subpaletten</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/C3:_Tutorial_Extension_Entwicklung_2.Teil:_Selective_DCA_Paletten_und_Subpaletten"/>
				<updated>2013-05-02T11:29:43Z</updated>
		
		<summary type="html">&lt;p&gt;Flex: /* Was man wissen sollte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev HOWTOS]] &lt;br /&gt;
=Einleitung= &lt;br /&gt;
Dieses Tutorial ist der zweite Teil einer Tutorial-Reihe: &amp;lt;br/&amp;gt;&lt;br /&gt;
http://de.contaowiki.org/C3:_Tutorial_Extension_Entwicklung_1.Teil:_Grundlagen&lt;br /&gt;
&lt;br /&gt;
...es basiert auf der großartigen Screencast-Reihe von Tristan Lins. Unbedingt ansehen!&amp;lt;br/&amp;gt;&lt;br /&gt;
Videolink : [http://www.youtube.com/watch?v=I1-1mqIR_B4&amp;amp;list=PL3mn8AtCRAstvuAWY8dhrHisMYapPxOnt&amp;amp;index=4 DCA Paletten und Subpaletten, MetaPalettes]&lt;br /&gt;
&lt;br /&gt;
==An wen richtet sich dieses Tutorial?==&lt;br /&gt;
Dieses Tutorial ist für all diejenigen gedacht, die ein Step-by-Step Tutorial zum Einstieg in die Extension-Entwicklung mit Contao 3 suchen.&lt;br /&gt;
&lt;br /&gt;
==Lernziel==&lt;br /&gt;
Das Screencast-Modul aus dem ersten Teil wird um zusätzliche Funktionen erweitert: Der BE-User kann nun unter verschiedenen Screencast-Quellen auswählen. In Abhängigkeit der Quellen ändern sich die nachfolgenden Eingabe- bzw. Auswahlfelder. Diese kontextsensitiven Felder bezeichnet man in Conato als selektive Paletten.&lt;br /&gt;
&lt;br /&gt;
So sieht eine Ansicht unserer fertigen Erweiterung aus:&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Datei:T2_youtube.png]]&lt;br /&gt;
&lt;br /&gt;
==Was man wissen sollte==&lt;br /&gt;
Grundlagen in PHP, objektorientierter Programmierung und SQL sind nötig.&lt;br /&gt;
Ferner sollte man Grundlagen der Extension-Entwicklung in Contao verstanden haben (Verzeichnisstruktur, DCA, Templates).&lt;br /&gt;
&lt;br /&gt;
Wer damit noch Schwierigkeiten hat, der sollte hier:&amp;lt;br/&amp;gt;&lt;br /&gt;
http://de.contaowiki.org/C3:_Tutorial_Extension_Entwicklung_1.Teil:_Grundlagen&amp;lt;br/&amp;gt;&lt;br /&gt;
nochmal die Grundlagen nachlesen.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung==&lt;br /&gt;
Der fertige Quellcode aus dem ersten Teil muss vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
==Source-Code==&lt;br /&gt;
Den Quellcode könnt ihr hier:&lt;br /&gt;
https://github.com/bit3/contao-screencast3&lt;br /&gt;
herunterladen.&lt;br /&gt;
 {{Hinweis|Es kann sein, dass der Quellcode auf github bereits einer fortgeschritteneren Version entspricht. Passt die Dateien daher ggf. dem Code der beiden Tutorials an oder (am besten) programmiert alles selber! }}&lt;br /&gt;
&lt;br /&gt;
=Definition der Anwendungsfälle=&lt;br /&gt;
Unsere Anwendung soll folgendes leisten:&lt;br /&gt;
#Zunächst hat der BE-User nur die Auswahl, welche Screencast-Quelle er eingeben möchte und welchen Titel er dieser Quelle gibt. Zur Auswahl stehen hier: Keine Quelle (default), Remote-Quelle oder Lokale-Quelle.&lt;br /&gt;
#Hat er die Wahl getroffen, werden zusätzliche Optionen sichtbar.&lt;br /&gt;
&lt;br /&gt;
==1. Fall: Keine Quelle==&lt;br /&gt;
Es werden keine zusätzlichen Optionen angezeigt.&lt;br /&gt;
&lt;br /&gt;
==2. Fall: Lokal== &lt;br /&gt;
Es wird die Möglichkeit gegeben, direkt auf eine Datei aus der Dateiverwaltung zu verlinken.&lt;br /&gt;
&lt;br /&gt;
==3. Fall: Remote==&lt;br /&gt;
Es wird die Möglichkeit gegeben, zwischen zwei Remote-Plattformen zu wählen (Youtube und Vimeo).&lt;br /&gt;
&lt;br /&gt;
Entscheidet sich der User für &amp;quot;Youtube&amp;quot;, erhält er die Optionen die Video-URL einzutragen, nach Ende des Videos vorgeschlagene Videos einzublenden, über HTTPS zu streamen, erweiterten Datenschutz zu aktivieren und die Größe anzugeben.&lt;br /&gt;
Bei der Größe kann er zusätzlich zwischen zwei Optionen wählen: Vordefinierte Größe und individuelle Größe.&lt;br /&gt;
&lt;br /&gt;
Bei &amp;quot;Vimeo&amp;quot; erhält er die Optionen die Video-URL einzutragen und eine Größe anzuwählen.&lt;br /&gt;
Auch hier hat er bei der Größe zusätzlich die Wahl zwischen zwei Optionen: Vordefinierte Größe und individuelle Größe.&lt;br /&gt;
&lt;br /&gt;
=Die DCA-Paletten=&lt;br /&gt;
&lt;br /&gt;
==Was sind Paletten und Subpaletten?==&lt;br /&gt;
Bei Paletten handelt es sich um eine Gruppe von Eingabe und Auswahlfeldern, die zu einem Modul oder Element gehören. Paletten sind logischerweise immer an den Anwendungsfall angepasst.&lt;br /&gt;
&lt;br /&gt;
Hier zwei Beispiele für wohlbekannte Paletten: Die der Inhaltselemente &amp;quot;Überschrift&amp;quot; und &amp;quot;Hyperlink&amp;quot;.&lt;br /&gt;
[[Datei:T2_cPaletten.png|Unterschiedliche C3 Paletten]]&lt;br /&gt;
&lt;br /&gt;
Paletten können sich aber nicht nur grundsätzlich (Überschrift, Hyperlink, News,...) sondern auch dynamisch innerhalb eines Moduls bzw. Elements unterscheiden:&amp;lt;br/&amp;gt;&lt;br /&gt;
Hier ein Beispiel für unterschiedliche Paletten unserer Extension &amp;quot;Screencast&amp;quot;:&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Datei:T2_mcPaletten.png]]&lt;br /&gt;
&lt;br /&gt;
Subpaletten ergänzen Paletten um einzelne Felder. Subpaletten werden innerhalb eines Moduls oder Elements meist von mehreren Paletten gemeinsam verwendet.&amp;lt;br/&amp;gt;&lt;br /&gt;
Hier ein Beispiel für Anzeigeoptionen der Videos. Diese wird gemeinsam von der Palette Youtube und Vimeo verwendet:&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Datei:T2_subPaletten.png]]&lt;br /&gt;
&lt;br /&gt;
Für die unterschiedlichen Ansichten müssen daher die jeweiligen Paletten definiert werden.&lt;br /&gt;
&lt;br /&gt;
==Definition der Paletten==&lt;br /&gt;
&lt;br /&gt;
*Öffnet die Datei d''ca/tl_screencast.php'' und modifiziert den Code im Bereich palettes wie folgt:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	// Palettes&lt;br /&gt;
	'palettes' =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'__selector__'  =&amp;gt; array('type', 'platform', 'defineSize'),&lt;br /&gt;
		'default'       =&amp;gt; '{title_legend},type,title',&lt;br /&gt;
		'remote'        =&amp;gt; '{title_legend},type,title;{screencast_legend},platform',&lt;br /&gt;
		'remote_youtube' =&amp;gt; '{title_legend},type,title;{screencast_legend},platform,url,youtubeShowSuggestions,youtubeHttps,youtubeExtendedDataSecurity;{display_legend:hide},defineSize',&lt;br /&gt;
		'remote_vimeo'   =&amp;gt; '{title_legend},type,title;{screencast_legend},platform,url;{display_legend:hide},defineSize',&lt;br /&gt;
		'local'         =&amp;gt; '{title_legend},type,title;{screencast_legend},path',&lt;br /&gt;
	),&lt;br /&gt;
		// Subpalettes&lt;br /&gt;
	'subpalettes' =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'defineSize_predefined' =&amp;gt; 'sizePredefined',&lt;br /&gt;
		'defineSize_custom'	=&amp;gt; 'sizeCustom'&lt;br /&gt;
	),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Was passiert hier?''&amp;lt;br/&amp;gt;&lt;br /&gt;
Im ersten Teil dieser Reihe gab es nur eine Palette (''default''). &lt;br /&gt;
In unserem erweiterten Modul Screencast werden nun für die verschiedenen Anwendungsfälle unterschiedliche Eingabe- und Auswahlfelder nötig. Diese werden in den unterschiedlichen Paletten definiert.&lt;br /&gt;
&lt;br /&gt;
Gehen wir die Paletten in der Reihenfolge durch, wie sie auch in der Extension auftauchen. Achtet dabei auf die Parallelen in der folgenden Beschreibung (type, local, remote) und in der Palettendefinition:&lt;br /&gt;
===Die default Palette===&lt;br /&gt;
Die default-Palette wird immer zuerst angezeigt. In unserem Beispiel hat der BE-User also zuächst nur die Möglichkeit, einen bestimmten Screencast-Typ (type) auszuwählen und einen Titel (title) einzugeben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:T2_pdefault.png]]&lt;br /&gt;
===Die local Palette===&lt;br /&gt;
Die local Palette zeigt sich dem User, wenn er im Bereich type die Auswahl local trifft. &lt;br /&gt;
&lt;br /&gt;
[[Datei:T2_plocal.png]]&lt;br /&gt;
===Die remote Palette===&lt;br /&gt;
Die remote Palette zeigt sich dem User, wenn er im Bereich type die Auswahl remote trifft.&lt;br /&gt;
&lt;br /&gt;
[[Datei:T2_premote.png]]&lt;br /&gt;
&lt;br /&gt;
===Die remote_youtube Palette===&lt;br /&gt;
Die remote_youtube Palette zeigt sich dem User, wenn er im Bereich type die Auswahl remote trifft und anschließend im Feld Plattform youtube wählt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:T2_pyoutube.png]]&lt;br /&gt;
&lt;br /&gt;
===Die remote_vimeo Palette===&lt;br /&gt;
Die remote_vimeo Palette zeigt sich dem User, wenn er im Bereich type die Auswahl remote trifft und anschließend im Feld Plattform vimeo wählt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:T2_pvimeo.png]]&lt;br /&gt;
&lt;br /&gt;
===Die Subpalette defineSize===&lt;br /&gt;
Die defineSize Subpalette ist eine Zusatzpalette, die angezeigt wird, wenn der User im Bereich type die Auswahl remote trifft, sich daraufhin im Feld Plattform für vimeo oder youtube entscheidet und dann noch eine Option zur Einstellung der Videogröße wählt.&lt;br /&gt;
[[Datei:T2_subPaletten.png]]&lt;br /&gt;
&lt;br /&gt;
==Wozu dient dann __selector__?==&lt;br /&gt;
Im Bereich palettes wird auch definiert, welche Felder überhaupt zu einem Wechsel der Paletten führen können.&amp;lt;br/&amp;gt;&lt;br /&gt;
In unserem Beispiel wechseln die Paletten also, wenn der User einen bestimmten ''type'', eine ''platform'' oder eine bestimmte Größe (''defineSize'') ausgewählt hat. &amp;lt;br/&amp;gt;&lt;br /&gt;
Dies sagt jedoch noch nichts darüber aus, welche Werte die Felder haben müssen, um z.B. die Palette ''remote_youtube'' aufzurufen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Dies geschieht in der Definition der Felder:&lt;br /&gt;
&lt;br /&gt;
=Die Eingabe- und Auswahlfelder anlegen=&lt;br /&gt;
*Ergänzt euren Code im Bereich ''fields'' um folgende Zeilen. Der Ordnung halber am besten unter dem Feld ''tstamp'':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	'type'  =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'     =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['type'],&lt;br /&gt;
			'inputType' =&amp;gt; 'select',&lt;br /&gt;
			'exclude'   =&amp;gt; true,&lt;br /&gt;
			'sorting'   =&amp;gt; true,&lt;br /&gt;
			'flag'      =&amp;gt; 1,&lt;br /&gt;
			'options'   =&amp;gt; array('remote', 'local'),&lt;br /&gt;
			'reference' =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast'],&lt;br /&gt;
			'eval'      =&amp;gt; array(&lt;br /&gt;
				'includeBlankOption' =&amp;gt; true,&lt;br /&gt;
				'submitOnChange'     =&amp;gt; true,&lt;br /&gt;
				'mandatory'          =&amp;gt; true,&lt;br /&gt;
				'tl_class'           =&amp;gt; 'w50',&lt;br /&gt;
			),&lt;br /&gt;
			'sql'       =&amp;gt; &amp;quot;varchar(10) NOT NULL default ''&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Was passiert hier?''&lt;br /&gt;
&lt;br /&gt;
Die meisten Einträge sollten aus dem 1. Tutorial bekannt sein.&lt;br /&gt;
Interessant sind folgende Elemente:&amp;lt;br/&amp;gt;&lt;br /&gt;
	*''inputType:'' Hier soll nun ein Select-Feld angezeigt werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
	*''options:'' Hier werden die Optionen des Select-Feldes definiert. '''Beachtet, dass hier die Werte für die entsprechenden neuen Paletten definiert werden.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
	*''includeBlankOption:'' In den Optionen der Select-Felder erscheint auch ein leerer Eintrag (nichts gewählt).&amp;lt;br/&amp;gt;&lt;br /&gt;
	*''submitOnChange:'' Die Formularfelder werden immer abgesendet, wenn ihr eine neue Option im Selectfeld wählt. Das ist praktisch, da der User sonst immer erst auf &amp;quot;Speichern&amp;quot; klicken müsste, um die geänderte Palette zu sehen.&lt;br /&gt;
&lt;br /&gt;
*Speichert die Datei und aktualisiert eure Datenbank.&lt;br /&gt;
*In eurer Erweiterung solltet ihr nun eine Typ-Auswahlmöglichkeit haben.&lt;br /&gt;
&lt;br /&gt;
Da jedoch jede Menge Felder, die bereits in den Paletten definiert wurden fehlen, hält sich der Spaß noch in Grenzen.&lt;br /&gt;
&lt;br /&gt;
*Tauscht euren Code im ''fields''-Bereich mit folgendem Code aus bzw. modifiziert ihn entsprechend:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	// Fields&lt;br /&gt;
	'fields'   =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'id'     =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'sql' =&amp;gt; &amp;quot;int(10) unsigned NOT NULL auto_increment&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
		'tstamp' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'sql' =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
		'type'  =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'     =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['type'],&lt;br /&gt;
			'inputType' =&amp;gt; 'select',&lt;br /&gt;
			'exclude'   =&amp;gt; true,&lt;br /&gt;
			'sorting'   =&amp;gt; true,&lt;br /&gt;
			'flag'      =&amp;gt; 1,&lt;br /&gt;
			'options'   =&amp;gt; array('remote', 'local'),&lt;br /&gt;
			'reference' =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast'],&lt;br /&gt;
			'eval'      =&amp;gt; array(&lt;br /&gt;
				'includeBlankOption' =&amp;gt; true,&lt;br /&gt;
				'submitOnChange'     =&amp;gt; true,&lt;br /&gt;
				'mandatory'          =&amp;gt; true,&lt;br /&gt;
				'tl_class'           =&amp;gt; 'w50',&lt;br /&gt;
			),&lt;br /&gt;
			'sql'       =&amp;gt; &amp;quot;varchar(10) NOT NULL default ''&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
		'title'  =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'     =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['title'],&lt;br /&gt;
			'inputType' =&amp;gt; 'text',&lt;br /&gt;
			'exclude'   =&amp;gt; true,&lt;br /&gt;
			'sorting'   =&amp;gt; true,&lt;br /&gt;
			'flag'      =&amp;gt; 1,&lt;br /&gt;
			'search'    =&amp;gt; true,&lt;br /&gt;
			'eval'      =&amp;gt; array(&lt;br /&gt;
				'mandatory' =&amp;gt; true,&lt;br /&gt;
				'unique'    =&amp;gt; true,&lt;br /&gt;
				'maxlength' =&amp;gt; 255,&lt;br /&gt;
				'tl_class'  =&amp;gt; 'w50'&lt;br /&gt;
			),&lt;br /&gt;
			'sql'       =&amp;gt; &amp;quot;varchar(255) NOT NULL default ''&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
		'platform'  =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'     =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['platform'],&lt;br /&gt;
			'inputType' =&amp;gt; 'select',&lt;br /&gt;
			'exclude'   =&amp;gt; true,&lt;br /&gt;
			'sorting'   =&amp;gt; true,&lt;br /&gt;
			'flag'      =&amp;gt; 1,&lt;br /&gt;
			'options'   =&amp;gt; array('remote_youtube', 'remote_vimeo'),&lt;br /&gt;
			'reference' =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast'],&lt;br /&gt;
			'eval'      =&amp;gt; array(&lt;br /&gt;
				'includeBlankOption' =&amp;gt; true,&lt;br /&gt;
				'submitOnChange'     =&amp;gt; true,&lt;br /&gt;
				'mandatory'          =&amp;gt; true,&lt;br /&gt;
				'tl_class'           =&amp;gt; 'w50',&lt;br /&gt;
			),&lt;br /&gt;
			'sql'       =&amp;gt; &amp;quot;varchar(20) NOT NULL default ''&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
		'url'    =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'     =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['url'],&lt;br /&gt;
			'inputType' =&amp;gt; 'text',&lt;br /&gt;
			'exclude'   =&amp;gt; true,&lt;br /&gt;
			'eval'      =&amp;gt; array(&lt;br /&gt;
				'tl_class' =&amp;gt; 'w50'&lt;br /&gt;
			),&lt;br /&gt;
			'sql'       =&amp;gt; &amp;quot;text NULL&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
		'path'    =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'     =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['path'],&lt;br /&gt;
			'inputType' =&amp;gt; 'fileTree',&lt;br /&gt;
			'exclude'   =&amp;gt; true,&lt;br /&gt;
			'sql'       =&amp;gt; &amp;quot;text NULL&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
		'youtubeShowSuggestions'    =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'     =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['youtubeShowSuggestions'],&lt;br /&gt;
			'inputType' =&amp;gt; 'checkbox',&lt;br /&gt;
			'exclude'   =&amp;gt; true,&lt;br /&gt;
			'eval'      =&amp;gt; array(&lt;br /&gt;
				'tl_class' =&amp;gt; 'w50 m12'&lt;br /&gt;
			),&lt;br /&gt;
			'sql'       =&amp;gt; &amp;quot;char(1) NOT NULL default ''&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
		'youtubeHttps'    =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'     =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['youtubeHttps'],&lt;br /&gt;
			'inputType' =&amp;gt; 'checkbox',&lt;br /&gt;
			'exclude'   =&amp;gt; true,&lt;br /&gt;
			'eval'      =&amp;gt; array(&lt;br /&gt;
				'tl_class' =&amp;gt; 'w50 m12'&lt;br /&gt;
			),&lt;br /&gt;
			'sql'       =&amp;gt; &amp;quot;char(1) NOT NULL default ''&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
		'youtubeExtendedDataSecurity'    =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'     =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['youtubeExtendedDataSecurity'],&lt;br /&gt;
			'inputType' =&amp;gt; 'checkbox',&lt;br /&gt;
			'exclude'   =&amp;gt; true,&lt;br /&gt;
			'eval'      =&amp;gt; array(&lt;br /&gt;
				'tl_class' =&amp;gt; 'w50 m12'&lt;br /&gt;
			),&lt;br /&gt;
			'sql'       =&amp;gt; &amp;quot;char(1) NOT NULL default ''&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
		'defineSize'    =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'     =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['defineSize'],&lt;br /&gt;
			'default'   =&amp;gt; 'predefined',&lt;br /&gt;
			'inputType' =&amp;gt; 'select',&lt;br /&gt;
			'exclude'   =&amp;gt; true,&lt;br /&gt;
			'options'   =&amp;gt; array('predefined', 'custom'),&lt;br /&gt;
			'reference' =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast'],&lt;br /&gt;
			'eval'      =&amp;gt; array(&lt;br /&gt;
				'submitOnChange' =&amp;gt; true,&lt;br /&gt;
				'tl_class'       =&amp;gt; 'clr w50 m12'&lt;br /&gt;
			),&lt;br /&gt;
			'sql'       =&amp;gt; &amp;quot;varchar(12) NOT NULL default ''&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
		'sizeCustom'    =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'     =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['sizeCustom'],&lt;br /&gt;
			'inputType' =&amp;gt; 'text',&lt;br /&gt;
			'exclude'   =&amp;gt; true,&lt;br /&gt;
			'eval'      =&amp;gt; array(&lt;br /&gt;
				'multiple' =&amp;gt; true,&lt;br /&gt;
				'size'     =&amp;gt; 2,&lt;br /&gt;
				'tl_class' =&amp;gt; 'clr w50'&lt;br /&gt;
			),&lt;br /&gt;
			'sql'       =&amp;gt; &amp;quot;varchar(255) NOT NULL default ''&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
			'sizePredefined'    =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'     =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['sizePredefined'],&lt;br /&gt;
			'inputType' =&amp;gt; 'radio',&lt;br /&gt;
			'exclude'   =&amp;gt; true,&lt;br /&gt;
			'options' 	=&amp;gt; array('640x480', '854x480'),&lt;br /&gt;
			'eval'      =&amp;gt; array(&lt;br /&gt;
				'multiple' =&amp;gt; true,&lt;br /&gt;
				'size'     =&amp;gt; 2,&lt;br /&gt;
				'tl_class' =&amp;gt; 'clr w50'&lt;br /&gt;
			),&lt;br /&gt;
			'sql'       =&amp;gt; &amp;quot;varchar(12) NOT NULL default ''&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
	)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich habe hier jetzt das komplette Ende der DCA-Datei aufgeführt, damit evtl. Tipp-, Klammerfehler o.ä. vermieden werden.&lt;br /&gt;
&lt;br /&gt;
==Die Beziehung zwischen den Paletten und den Feldern==&lt;br /&gt;
Wer sein Augenmerk auf die Eigenschaft ''options'' der Felder ''type'' und ''platform'' richtet, wird feststellen, dass an dieser Stelle die Werte für den Aufruf der entsprechenden Paletten definiert werden.&lt;br /&gt;
 {{Achtung|Hier besteht eine Abweichung vom Source Code auf github. Ich finde es nachvollziehbarer, wenn die options-Werte genauso lauten, wie die Paletten.}}&lt;br /&gt;
&lt;br /&gt;
==Die Beziehung zwischen den Subpaletten und den Feldern==&lt;br /&gt;
Bei den Subpaletten ist das ein klein wenig anders (wenigsten bei select-Feldern und radio-Buttons).&lt;br /&gt;
&lt;br /&gt;
Das Feld ''defineSize'' ist ein Select-Feld, welches als'' options'' die Werte ''predefined'' und ''custom'' erhält.&lt;br /&gt;
&lt;br /&gt;
Um je nach Auswahl die Subpaletten wechseln zu lassen, müssen diese Werte in der Definition der Subpalettes als Suffix an den aufrufenden Feldnamen angehängt werden.&lt;br /&gt;
Bei checkboxen reicht der direkte Verweis auf das neue Feld.&lt;br /&gt;
Schaut da z.B. mal in die DCA tl_news.php. Dort sieht man das ganz schön.&lt;br /&gt;
&lt;br /&gt;
 {{Achtung|Hier besteht eine Abweichung vom Source Code auf github. Bitte ändert den Code entsprechend.}}&lt;br /&gt;
&lt;br /&gt;
=Die Übersetzung=&lt;br /&gt;
*Tauscht den Code in der Datei ''languages/de/tl_screencast.php'' gegen diesen hier aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['title_legend'] = 'Titel';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['path'][0] = 'Dateipfad';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['path'][1] = 'Pfad zum lokalen Video';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['type'][0] = 'Typ';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['type'][1] = 'Wählen Sie hier aus, ob es sich um ein externes oder lokales Video handelt.';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['title'][0] = 'Titel';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['title'][1] = 'Geben Sie hier den Screencast Titel ein.';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['screencast_legend'] = 'Screencast';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['platform'][0] = 'Platform';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['platform'][1] = 'Wählen Sie hier die Videoplatform aus.';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['url'][0] = 'Video URL';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['url'][1] = 'Geben Sie hier die Video URL ein.';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['youtubeShowSuggestions'][0] = 'Vorgeschlagene Videos anzeigen';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['youtubeShowSuggestions'][1] = 'Nach Ende des Videos vorgeschlagene Videos anzeigen.';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['youtubeHttps'][0] = 'HTTPS verwenden';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['youtubeHttps'][1] = 'Streamt das Video via HTTPS.';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['youtubeExtendedDataSecurity'][0] = 'Erweiterter Datenschutz';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['youtubeExtendedDataSecurity'][1] = 'Aktiviert den erweiterten Datenschutz Modus.';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['display_legend'] = 'Anzeige';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['defineSize'][0] = 'Größenoptionen wählen';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['defineSize'][1] = 'Wählen Sie, ob Sie eine festgelegte Größe oder eine individuelle Größe festelegen möchten.';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['sizePredefined'][0] = 'Größe festlegen';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['sizePredefined'][1] = 'Legt die Ausgabegröße fest.';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['sizeCustom'][0] = 'Größe';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['sizeCustom'][1] = 'Geben Sie hier die Größe an.';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['new'][0] = 'Neuer Screencast';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['new'][1] = 'Einen neuen Screencast anlegen';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['edit'][0] = 'Screencast bearbeiten';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['edit'][1] = 'Screencast ID %s bearbeiten';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['delete'][0] = 'Screencast löschen';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['delete'][1] = 'Screencast ID %s löschen';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['show'][0] = 'Screencastdetails';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['show'][1] = 'Details des Screencast ID %s anzeigen';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['remote'] = 'Externes Video';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['local']  = 'Lokales Video';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['remote_youtube'] = 'YouTube';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['remote_vimeo']   = 'Vimeo';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['predefined'] = 'Vordefinierte Größe';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['custom']   = 'Individuelle Größe';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Was passiert hier?''&lt;br /&gt;
Die Übersetzungen werden analog zum 1. Tutorial für die entsprechenden Felder eingepflegt.&lt;br /&gt;
=Geschafft!=&lt;br /&gt;
Wenn ich mich nicht verschrieben habe und ihr alles richtig gemacht habt, könnt ihr eure erweitertes Screencast-Modul nun einsetzen.&lt;br /&gt;
&lt;br /&gt;
=Was fehlt?=&lt;br /&gt;
Die Erweiterung der Klasse ModuleScreencastList.php, die Ausgabe im Template und die Übersetzung. Das überlasse ich erstmal euch;-)&lt;br /&gt;
&lt;br /&gt;
=Ausblick=&lt;br /&gt;
Sobald Tristan einen neuen Screencast zum Thema bringt, haue ich wieder in die Tasten.&lt;br /&gt;
Grüße von kobajashi&lt;br /&gt;
&lt;br /&gt;
=Weiterführende Links=&lt;br /&gt;
Die Erweiterung Metapalletes&lt;br /&gt;
http://de.contaowiki.org/MetaPalettes&lt;/div&gt;</summary>
		<author><name>Flex</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/C3:_Tutorial_Extension_Entwicklung_1.Teil:_Grundlagen</id>
		<title>C3: Tutorial Extension Entwicklung 1.Teil: Grundlagen</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/C3:_Tutorial_Extension_Entwicklung_1.Teil:_Grundlagen"/>
				<updated>2013-05-02T11:29:11Z</updated>
		
		<summary type="html">&lt;p&gt;Flex: /* Weiterführende Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev HOWTOS]] &lt;br /&gt;
&lt;br /&gt;
=Einleitung= &lt;br /&gt;
Seit 2010 arbeite ich nun schon mit Contao. Vorher habe ich die CMS Joomla, Typo3 und Drupal ausprobiert und muss sagen: Contao rocks! Leider hat das CMS aus meiner Sicht jedoch einen entscheidenden Nachteil gegenüber anderen Systemen: Es gibt nur wenige Tutorials, die &amp;quot;semiprofessionellen&amp;quot; Programmierern einen schrittweisen und zusammenhängenden Einstieg in die Extension-Entwicklung mit Contao 3 anhand eines Praxisbeispiels ermöglichen. &lt;br /&gt;
&lt;br /&gt;
Die Screencast-Reihe von '''Tristan Lins auf Youtube''' stellt dabei eine Ausnahme dar. Ich persönlich mag es aber, Tutorials auch in geschriebener Form vor mir zu haben. Daher habe ich damit begonnen, die Videos in dieses Wiki zu übertragen. Viel Spaß damit! &lt;br /&gt;
&lt;br /&gt;
Videolink:  [http://www.youtube.com/watch?v=WeN5a0R9asQ&amp;amp;feature=share&amp;amp;list=PL3mn8AtCRAstvuAWY8dhrHisMYapPxOnt Basics - der Contao Aufbau, DCA]&lt;br /&gt;
==An wen richtet sich dieses Tutorial?==&lt;br /&gt;
Dieses Tutorial ist für all diejenigen gedacht, die ein Step-by-Step Tutorial zum Einstieg in die Extension-Entwicklung mit Contao 3 suchen. &lt;br /&gt;
&lt;br /&gt;
==Lernziel==&lt;br /&gt;
In diesem Tutorial lernt ihr die Grundlagen der Extension-Entwicklung mit Contao 3 anhand eines praktischen Beispiels. Es wird ein Modul programmiert, welches verschiedene Screencast-URLs inkl. Titel auflistet.&lt;br /&gt;
&lt;br /&gt;
'''So sieht das fertige Modul aus:'''&lt;br /&gt;
&lt;br /&gt;
[[Datei:T1_fertigesModul.jpg|Fertiges Modul]]&lt;br /&gt;
&lt;br /&gt;
==Was man wissen sollte==&lt;br /&gt;
Grundlagen in PHP, objektorientierter Programmierung und SQL sind nötig. Natürlich sollte man sich auch mit den Grundlagen von Contao 3 auskennen.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung==&lt;br /&gt;
Eine Version von Contao 3.0.4 oder höher sollte installiert sein.&lt;br /&gt;
Optional: Da die Extension in das bestehende „Music Academy“-Theme integriert wird, empfiehlt es sich, selbiges zu installieren.&lt;br /&gt;
Ferner sollte folgende Ordnerstruktur in&lt;br /&gt;
''contao/system/modules''&lt;br /&gt;
angelegt werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:T1_vorbereitung.png|Verzeichnisstruktur der Erweiterung]]&lt;br /&gt;
&lt;br /&gt;
Zum Verständnis: Im Verzeichnis modules liegen die Module, die bereits von Contao mitgeliefert werden, wie z.B. FAQ, Calendar etc. Auch unser Erweiterungsmodul 'screencast' gehört in dieses Verzeichnis.&lt;br /&gt;
&lt;br /&gt;
==Source-Code==&lt;br /&gt;
Den Quellcode könnt ihr hier:&lt;br /&gt;
https://github.com/bit3/contao-screencast3&lt;br /&gt;
herunterladen.&lt;br /&gt;
 {{Hinweis|Es kann sein, dass der Quellcode auf github bereits einer fortgeschritteneren Version entspricht. Passt die Dateien daher ggf. dem Code dieses Tutorials an oder (am besten) programmiert alles selber! }}&lt;br /&gt;
&lt;br /&gt;
=Einen Menüeintrag im Inhaltsbereich der Backend-Module erzeugen.=&lt;br /&gt;
*Erstellt im Verzeichnis ''config'' die Datei ''config.php''. &amp;lt;br/&amp;gt;In der ''config.php'' werden z.B. Frontend- und Backend-Module registriert.&lt;br /&gt;
*Schreibt in die ''config.php'' folgenden Code:&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;
&lt;br /&gt;
/**&lt;br /&gt;
 * Back end modules&lt;br /&gt;
 */&lt;br /&gt;
$GLOBALS['BE_MOD']['content']['screencast'] = array(&lt;br /&gt;
	'tables' =&amp;gt; array('tl_screencast'),&lt;br /&gt;
	'icon'   =&amp;gt; 'system/modules/screencast/assets/images/screencast.png'&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei steht ''['BE_MOD']['content']'' für die Elemente der Backend-Module im Inhaltsbereich (Array). Durch die Erweiterung des Arrays um ''['screencast']'' wird unser neues Modul referenziert.&lt;br /&gt;
Als Wert wird dem Array ein assoziatives Array mit zwei Einträgen (Verweis auf die Tabelle in der Datenbank, sowie auf die Bilddatei) übergeben.&lt;br /&gt;
*Fügt in den Ordner ''screencast/assets/images'' ein Icon für euer Modul ein.&lt;br /&gt;
*Da das assets-Verzeichnis geschützt ist, müsst ihr noch eine ''.htaccess'' Datei in ''screencast/assets/'' speichern. Darin muss stehen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
Order Allow, Deny&lt;br /&gt;
Allow from all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun soll in der Auflistung der Elemente im Backend-Modul auch eine entsprechende Übersetzung ausgegeben werden. &lt;br /&gt;
*Erstellt hierzu ein Verzeichnis de in eurem Verzeichnis ''screencast/languages/''&lt;br /&gt;
*Erstellt in diesem Verzeichnis eine Datei ''modules.php''&lt;br /&gt;
*In diese Datei gebt ihr folgenden Code ein:&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;
$GLOBALS['TL_LANG']['MOD']['screencast'][0] = 'Screencasts';&lt;br /&gt;
$GLOBALS['TL_LANG']['MOD']['screencast'][1] = 'Screencasts verwalten';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*Öffnet eure Contao-Backend und navigiert dort zu ''System-&amp;gt;Einstellungen''&lt;br /&gt;
*Setzt dort einen Haken unter den ''Sicherheitseinstellungen-&amp;gt;Internen Cach''e umgehen.  Und &amp;lt;br/&amp;gt;''Sicherheitseinstellungen-&amp;gt;Fehlermeldungen'' anzeigen.&lt;br /&gt;
*Eure Seitenleiste sollte nach einer Aktualisierung der Seite nun so aussehen:&lt;br /&gt;
[[Datei:t1_BE_Module.png|Die Backend-Module sind nun um den Eintrag &amp;quot;Screencasts&amp;quot; erweitert]]&lt;br /&gt;
&lt;br /&gt;
Heureka! Der Eintrag erscheint in der Liste. Leider wirft Contao jedoch nach Klick auf Screencast noch eine Fehlermeldung.&lt;br /&gt;
&lt;br /&gt;
Was fehlt? Contao kann noch kein DCA-Objekt erstellen. &lt;br /&gt;
&lt;br /&gt;
==Was macht ein DCA?==&lt;br /&gt;
&amp;quot;Data Container Arrays (DCAs) dienen zur Speicherung von Tabellen-Metadaten. Jedes DCA beschreibt die Konfiguration einer bestimmten Tabelle, ihre Beziehungen zu anderen Tabellen sowie die einzelnen Felder. Die Contao Core-Engine erkennt anhand dieser Metadaten, wie Datensätze aufgelistet, bearbeitet und gespeichert werden.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(Quelle: https://contao.org/de/manual/3.0/data-container-arrays.html, Stand: 6.4.13)&lt;br /&gt;
&lt;br /&gt;
==Wie ist ein DCA aufgebaut?==&lt;br /&gt;
&amp;quot;Ein Data Container Array ist in 6 Sektionen unterteilt. Die erste Sektion speichert globale Informationen wie z.B. Relationen zu anderen Tabellen. Die zweite und dritte Sektion legt fest, wie Datensätze aufgelistet werden und welche Aktionen ein Benutzer ausführen kann. Die vierte Sektion definiert verschiedene Gruppen von Eingabefelder (Paletten) und die letzten beiden Sektionen beschreiben die Eingabefelder im Detail.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(Quelle: https://contao.org/de/manual/3.0/data-container-arrays.html, Stand: 6.4.13)&lt;br /&gt;
&lt;br /&gt;
Neu in Contao 3: In der DCA-Datei werden auch die SQL-Befehle eingetragen. Eine separate Datei ist nicht mehr notwendig.&lt;br /&gt;
&lt;br /&gt;
Alles klar? Nicht? Ok...dann Schritt für Schritt.&lt;br /&gt;
&lt;br /&gt;
=Das Formular zur Eintragung der Daten erstellen, sowie die Datenbank-Tabelle anlegen.=&lt;br /&gt;
Erstellt im Verzeichnis ''screencast/dca/'' eine Datei mit Namen ''tl_screencast.php''. &lt;br /&gt;
&lt;br /&gt;
==Die Tabellenkonfiguartion==&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Ab jetzt ist &amp;quot;Mut zur Lücke&amp;quot; gefordert. Einige Sachverhalte sind mir in dem Screencast nicht ganz klar geworden. Leider ist auch die Dokumentation auf Contao.org in diesem Bereich noch recht rudimentär. Ich schreib daher auf, was ich verstanden habe.&lt;br /&gt;
&lt;br /&gt;
Auf der Contao-Seite kann man sich über die möglichen Einträge in den DCA informieren.&lt;br /&gt;
https://contao.org/de/manual/3.0/data-container-arrays.html&lt;br /&gt;
&lt;br /&gt;
Leider ist hier derzeit noch nicht aufgeführt, welchem Array-Abschnitt welche Einträge zugeordnet sind. Tristan empfiehlt, sich die Verwendungsmöglichkeiten in bestehenden Modulen abzugucken. &lt;br /&gt;
Für die nachfolgenden Erklärungen empfiehlt es sich jedoch trotzdem, den DCA-Teil der Online-Doku aufzufrufen, um scih über die Bedeutung der Arrayeinträge zu informieren. &lt;br /&gt;
&lt;br /&gt;
Wer nicht alles selber schreiben möchte, kopiert sich nun erstmal den gesamten Inhalt der Datei ''sytem/modules/core/dca/tl_theme.php'' in die ''tl_screencast.php'' und modifiziert diese nur entsprechend der folgenden Beispiele.&lt;br /&gt;
&lt;br /&gt;
*Schreibt in die Datei ''tl_screencast.php'' folgende Zeilen Code:&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;
/**&lt;br /&gt;
 * Table tl_screencast&lt;br /&gt;
 */&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_screencast'] = array&lt;br /&gt;
(&lt;br /&gt;
&lt;br /&gt;
	// Config&lt;br /&gt;
	'config'   =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'dataContainer'    =&amp;gt; 'Table',&lt;br /&gt;
		'enableVersioning' =&amp;gt; true,&lt;br /&gt;
		'sql'              =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'keys' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'id' =&amp;gt; 'primary'&lt;br /&gt;
			)&lt;br /&gt;
		),&lt;br /&gt;
	),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Was passiert hier?'' &lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt legen wir die Grundeinstellungen für unser Modul fest, so z.B. woher die Daten kommen. &lt;br /&gt;
Ergänzt die Datei mit folgendem Code (Video: 17:47):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// List&lt;br /&gt;
	'list'     =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'sorting'           =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'mode'        =&amp;gt; 2,&lt;br /&gt;
			'fields'      =&amp;gt; array('title'),&lt;br /&gt;
			'flag'        =&amp;gt; 1,&lt;br /&gt;
			'panelLayout' =&amp;gt; 'filter;sort,search,limit'&lt;br /&gt;
		),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''Was passiert hier?''&lt;br /&gt;
&lt;br /&gt;
Im diesem Abschnitt wird festgelegt, wie die Datensätze aufgelistet werden und welche Sortieroptionen dem Nutzer zur Verfügung stehen sollen.&lt;br /&gt;
So steht ''panelLayout'' z.B. dafür, welche Optionen in der Kopzeile erscheinen sollen. Semiokolon oder Komma stehen dafür, ob das Layout (ein- oder mehrzeilig). Fragt mich aber nicht, warum ''filter'' in Tristans Beispiel nicht auftaucht.&lt;br /&gt;
&lt;br /&gt;
[[Datei:t1_panelLayout.png|Die Elemente des Panel Layouts]]&lt;br /&gt;
&lt;br /&gt;
Schaut bzgl. der anderen Optionen der Online-Doku unter &amp;quot;Datensätze auflisten&amp;quot; nach. &lt;br /&gt;
*Ergänzt die Datei mit folgendem Code (Video: 20:45):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'label'             =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'fields' =&amp;gt; array('title'),&lt;br /&gt;
			'format' =&amp;gt; '%s',&lt;br /&gt;
		),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was passiert hier?&lt;br /&gt;
&lt;br /&gt;
Hier werden die Bezeichnungen gesetzt, die später in der Listenansicht erscheinen sollen. In unserem Fall also immer der Titel der Screencasts.&lt;br /&gt;
&lt;br /&gt;
[[Datei:t1_screencastListe.png|Die Titel der Screencasts]]&lt;br /&gt;
&lt;br /&gt;
*Ergänzt die Datei mit folgendem Code (Video: 21:25):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'global_operations' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'all' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'      =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['MSC']['all'],&lt;br /&gt;
				'href'       =&amp;gt; 'act=select',&lt;br /&gt;
				'class'      =&amp;gt; 'header_edit_all',&lt;br /&gt;
				'attributes' =&amp;gt; 'onclick=&amp;quot;Backend.getScrollOffset()&amp;quot; accesskey=&amp;quot;e&amp;quot;'&lt;br /&gt;
			)&lt;br /&gt;
		),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Was passiert hier?&lt;br /&gt;
&lt;br /&gt;
Bei den 'global operations' handelt es sich um die Bearbeitungsfelder unterhalb der Filterfelder.&lt;br /&gt;
&lt;br /&gt;
[[Datei:t1_globalOperations.png|Die Global Operations]]&lt;br /&gt;
&lt;br /&gt;
*Ergänzt die Datei mit folgendem Code (Video: 21:44):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'operations'        =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'edit'   =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label' =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['edit'],&lt;br /&gt;
				'href'  =&amp;gt; 'act=edit',&lt;br /&gt;
				'icon'  =&amp;gt; 'edit.gif'&lt;br /&gt;
			),&lt;br /&gt;
			'delete' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'      =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['delete'],&lt;br /&gt;
				'href'       =&amp;gt; 'act=delete',&lt;br /&gt;
				'icon'       =&amp;gt; 'delete.gif',&lt;br /&gt;
				'attributes' =&amp;gt; 'onclick=&amp;quot;if(!confirm(\'' . $GLOBALS['TL_LANG']['MSC']['deleteConfirm'] . '\'))return false;Backend.getScrollOffset()&amp;quot;'&lt;br /&gt;
			),&lt;br /&gt;
			'show'   =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'      =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['show'],&lt;br /&gt;
				'href'       =&amp;gt; 'act=show',&lt;br /&gt;
				'icon'       =&amp;gt; 'show.gif',&lt;br /&gt;
				'attributes' =&amp;gt; 'style=&amp;quot;margin-right:3px&amp;quot;'&lt;br /&gt;
			),&lt;br /&gt;
		)&lt;br /&gt;
	),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''Was passiert hier?''&lt;br /&gt;
&lt;br /&gt;
Bei den 'operations' handelt es sich um die Bearbeitungsfelder zu jedem Listeneintrag.&lt;br /&gt;
&lt;br /&gt;
[[Datei:t1_operations.png|Die Operations]]&lt;br /&gt;
&lt;br /&gt;
Nun kommen wir zum eigentlichen Herzstück einer jeden Erweiterung: Das BE-Formular mit den Eingabefeldern.&lt;br /&gt;
Im DCA wird dies definiert unter dem Bereich ''palettes''.&lt;br /&gt;
*Ergänzt die Datei mit folgendem Code (Video: 22:55):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Palettes&lt;br /&gt;
	'palettes' =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'default'       =&amp;gt; '{title_legend},type,title,{screencast_legend},url'&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''Was passiert hier?''&lt;br /&gt;
&lt;br /&gt;
Die Grobstruktur des Formulars wird angelegt, also das, was später dem BE-User zur Dateneingabe präsentiert wird. Dabei stehen in den geschweifen Klammern immer die Abschnittsnamen. Es folgen die Felder. Ein Semikolon leitet einen neuen Abschnitt ein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:t1_beModule.png|Das BE Formular des Screencast Moduls]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Ergänzt die Datei mit folgendem Code (Video: 24:30)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Fields&lt;br /&gt;
	'fields'   =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'id'     =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'sql' =&amp;gt; &amp;quot;int(10) unsigned NOT NULL auto_increment&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
		'tstamp' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'sql' =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
		'title'  =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'     =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['title'],&lt;br /&gt;
			'inputType' =&amp;gt; 'text',&lt;br /&gt;
			'exclude'   =&amp;gt; true,&lt;br /&gt;
			'sorting'   =&amp;gt; true,&lt;br /&gt;
			'flag'      =&amp;gt; 1,&lt;br /&gt;
                        'search'    =&amp;gt; true,&lt;br /&gt;
			'eval'      =&amp;gt; array(&lt;br /&gt;
				'mandatory'   =&amp;gt; true,&lt;br /&gt;
                                'unique'         =&amp;gt; true,&lt;br /&gt;
                                'maxlength'   =&amp;gt; 255,&lt;br /&gt;
				'tl_class'        =&amp;gt; 'w50',&lt;br /&gt;
&lt;br /&gt;
			),&lt;br /&gt;
			'sql'       =&amp;gt; &amp;quot;varchar(255) NOT NULL default ''&amp;quot;&lt;br /&gt;
		),&lt;br /&gt;
                'url'    =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'         =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_screencast']['url'],&lt;br /&gt;
			'inputType' =&amp;gt; 'text',&lt;br /&gt;
			'exclude'     =&amp;gt; true,&lt;br /&gt;
			'sql'            =&amp;gt; &amp;quot;text NULL&amp;quot;&lt;br /&gt;
		)&lt;br /&gt;
       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Was passiert hier?''&lt;br /&gt;
&lt;br /&gt;
Im Abschnitt ''fields'' werden alle Felder definiert, die in der Datenbank-Tabelle angelegt werden sollen. Dies sind meist mehr Felder, als im Formular des Backend-Moduls ausgegeben werden (z.B. wird man die id wohl fast immer automatisch setzen). &lt;br /&gt;
Die Felder ''id'' und ''tstamp'' sind übrigens immer Pflicht. ''sql'' ist (Überraschung) immer das SQL-Statement.&lt;br /&gt;
&lt;br /&gt;
Kümmern wir uns der um die einzelnen Felder:&lt;br /&gt;
'title' und 'url' sind die beiden Eingabefelder im BE-Modul. Diese haben wir auch in den 'palettes' definiert. Beide felder werden noch mit einigen weiteren Eigenschaften konfikuriert:&lt;br /&gt;
&lt;br /&gt;
*label: Ist eine Referenz auf die Sprachvariable, die noch erstellt wird.&lt;br /&gt;
*inputType: (s. Contao-Docs) in userem Fall ein Textfeld&lt;br /&gt;
*exclude: Erlaubt dem Admin, dieses Feld später für Redakteure zu sperren.&lt;br /&gt;
*sorting: Bestimmt, dass dieses Feld oben in der Sortierpalette angewählt werden kann&lt;br /&gt;
*flag: Regelt die Sortierreihenfolge&lt;br /&gt;
*search: Bestimmt, dass nach dieses Feld oben in der Sortierpalette gesucht werden kann&lt;br /&gt;
*eval: Konfiguriert ein Eingabefeld im Detail (s. Contao-Docs). In unserem Fall ob es  ein Pflichtfeld ist, ob es einzigartig ist, die Textfeldlänge sowie die Darstellung, wie dieses Feld im BE-Modul angezeigt wird. Schaut euch zu ''tl_class'' auch das Video an oder den Abschnitt ''Felder ausrichten'' in den Docs.&lt;br /&gt;
&lt;br /&gt;
*Diejenigen, die den Code aus der ''tl_theme.php'' kopiert haben:&lt;br /&gt;
Löscht bitte den nachfolgenden Code aus eurer Datei. Die Klassendefinition wird für diese Beispiel nicht benötigt.&lt;br /&gt;
*Der große Moment ist nah: Navigiert im Contao-BE zu ''System-&amp;gt;Erweiterungskatalog'' und klickt auf Datenbank aktualisieren.&lt;br /&gt;
Wenn ihr alles richtig gemacht habt, solltet ihr nun eine Meldung von Contao darüber erhalten, dass eine neue Tabelle angelegt wird. Klickt auf Aktualisieren.&lt;br /&gt;
*Jetzt könntet ihr eigentlich schon einen Screencast anlegen....aber es fehlen noch die Sprachvariablen.&lt;br /&gt;
*Erstellt daher eine Datei ''tl_screencast.php'' im Verzeichnis ''screencast/languages/de''. &lt;br /&gt;
*Gebt folgenden Code in diese Datei ein (Video: 32:30):&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;
$GLOBALS['TL_LANG']['tl_screencast']['title_legend'] = 'Titel';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['type'][0] = 'Typ';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['type'][1] = 'Wählen Sie hier aus, ob es sich um ein externes oder lokales Video handelt.';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['title'][0] = 'Titel';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['title'][1] = 'Geben Sie hier den Screencast Titel ein.';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['screencast_legend'] = 'Screencast';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['url'][0] = 'Video URL';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['url'][1] = 'Geben Sie hier die Video URL ein.';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['new'][0] = 'Neuer Screencast';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['new'][1] = 'Einen neuen Screencast anlegen';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['edit'][0] = 'Screencast bearbeiten';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['edit'][1] = 'Screencast ID %s bearbeiten';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['delete'][0] = 'Screencast löschen';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['delete'][1] = 'Screencast ID %s löschen';&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['show'][0] = 'Screencastdetails';&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_screencast']['show'][1] = 'Details des Screencast ID %s anzeigen';&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Was passiert hier?''&lt;br /&gt;
&lt;br /&gt;
Es werden alle Übersetzungen angelegt, die für das Backend notwendig sind.&lt;br /&gt;
Die notwendigen Keys der Arrays findet ihr z.T. in der DCA-Datei unter ''paletts'' bzw. im Bereich  ''global operations'' und ''operations''. Die Beschreibungen der Felder liegen immer auf dem zweiten Arrayeintrag.&lt;br /&gt;
&lt;br /&gt;
''Beispiel:''&lt;br /&gt;
&lt;br /&gt;
''['title']'' bezieht sich auf das den paletts-Eintrag title. ''[0]'' ist dabei der Titel des BE-Feldes.''[1]'' ist die Beschreibung unterhalb des Feldes. Diese wird automatisch hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:t1_title.png|Die Übersetzungen zu den Feldern]]&lt;br /&gt;
&lt;br /&gt;
=Anlegen der Klasse für die Ausgabe-Logik=&lt;br /&gt;
 (Video:39:00)&lt;br /&gt;
*Legt im Verzeichnis ''screencast/modules/'' die Datei ''ModuleScreencastList.php''&lt;br /&gt;
*Legt im Verzeichnis ''screencast/templates'' die Datei ''mod_screencast_list.html5'' an. Wer noch mit xhtml arbeitet: Legt auch noch eine ''mod_screencast_list.xhtm''l an. Ich gehe im Folgenden aber nur auf die .html5 Datei ein.&lt;br /&gt;
*Fügt dort folgenden Code in die Datei ''ModuleScreencastList.php'' ein:&lt;br /&gt;
&amp;lt;source lang=php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class ModuleScreencastList extends Module&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Template&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected $strTemplate = 'mod_screencast_list';&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Compile the current element&lt;br /&gt;
	 */&lt;br /&gt;
	protected function compile()&lt;br /&gt;
	{&lt;br /&gt;
		/** @var \Contao\Database\Result $rs */&lt;br /&gt;
		$rs = Database::getInstance()&lt;br /&gt;
			-&amp;gt;query('SELECT * FROM tl_screencast ORDER BY title');&lt;br /&gt;
&lt;br /&gt;
		$this-&amp;gt;Template-&amp;gt;screencasts = $rs-&amp;gt;fetchAllAssoc();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Was passiert hier?''&lt;br /&gt;
In dieser Datei werden die Datensätze aus der Datenbank gelesen und an das FE-Template übergeben.&lt;br /&gt;
Die hierzu notwendige Klasse muss den selben Namen erhalten, wie der Dateiname. Ferner muss die Klasse von der übergeordneten Klasse ''Module'' erben.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Anweisungen kann man eigentlich nur richtig verstehen, wenn man sich die Datei module.php in system/modules/core/modules anschaut, bzw. einen Blick in die weiter übergeordnetetn Klassen wirft.&lt;br /&gt;
&lt;br /&gt;
Ich versuch's mal ohne Referenz auf die übergeordneten Klassen:&lt;br /&gt;
#Zunächst wird Contao die Template-Datei übergeben ($strTemplate).&lt;br /&gt;
#Anschließend folgt die Methode compile(), welche für die Daten für die Übergabe an das Template vorbereitet.&lt;br /&gt;
#Nun wird über die statische Methode getInstance() ein Contao-Datenbankobjekt erzeugt (system/modules/core/library/Contao/Database.php). Dieses Objekt hat die Methoden query und liefert ein Contao-DB-Ergebnisobjekt zurück (system/modules/core/library/Contao/Database/Result.php). Dieses Objekt wiederum hat die Methode fetchAllAssoc(), welche ein assoziatives Array zurückgibt (Key=Feldnamen). Diese speichern wir in der Variablen screencasts, welche durch die übergeordneten Klassen von ModuleScreencastList einem FE-Templateobjekt zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
=Das FE-Template erstellen=&lt;br /&gt;
(Video 43:00)&lt;br /&gt;
&lt;br /&gt;
Wer faul ist, kopiert sich den Code aus der ''mod_flash.html5'' (system/modules/core/templates) in seine Datei ''mod_screencast_list.html5''.&lt;br /&gt;
&lt;br /&gt;
Am Ende sollte der Code wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;&amp;lt;?php echo $this-&amp;gt;class; ?&amp;gt; block&amp;quot;&amp;lt;?php echo $this-&amp;gt;cssID; ?&amp;gt;&amp;lt;?php if ($this-&amp;gt;style): ?&amp;gt; style=&amp;quot;&amp;lt;?php echo $this-&amp;gt;style; ?&amp;gt;&amp;quot;&amp;lt;?php endif; ?&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;?php if ($this-&amp;gt;headline): ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;?php echo $this-&amp;gt;hl; ?&amp;gt;&amp;gt;&amp;lt;?php echo $this-&amp;gt;headline; ?&amp;gt;&amp;lt;/&amp;lt;?php echo $this-&amp;gt;hl; ?&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php foreach ($this-&amp;gt;screencasts as $screencast): ?&amp;gt;&lt;br /&gt;
	&amp;lt;h2&amp;gt;&amp;lt;?php echo $screencast['title']; ?&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		&amp;lt;iframe width=&amp;quot;560&amp;quot; height=&amp;quot;315&amp;quot; src=&amp;quot;http://www.youtube-nocookie.com/embed/&amp;lt;?php echo str_replace('http://youtu.be/', '', $screencast['url']); ?&amp;gt;?rel=0&amp;quot; frameborder=&amp;quot;0&amp;quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Was passiert hier?''&lt;br /&gt;
&lt;br /&gt;
Das Template wird im Kontext der FE-Templateklasse ausgegeben. Daher kann mit ''$this'' auf die Attribute und Methoden des Objekts zugegriffen werden. Dies haben wir in der compile()-Methode in ''ModuleScreencastList.php'' definiert.&lt;br /&gt;
&lt;br /&gt;
=Das FE-Template im System registrieren (Video 44:00)=&lt;br /&gt;
(Video 43:00)&lt;br /&gt;
Ergänzt die Datei config.php um folgenden Code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Front end modules&lt;br /&gt;
 */&lt;br /&gt;
$GLOBALS['FE_MOD']['screencast'] = array&lt;br /&gt;
(&lt;br /&gt;
	'screencast_list'     =&amp;gt; 'ModuleScreencastList',&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Was passiert hier?''&lt;br /&gt;
Unser FE-Template muss noch dem Contao-System bekannt gemacht werden. Jetzt sollte man das Modul bereits im Backend in der Modulliste auswählen können. Es fehlt jedoch noch die Übersetzung. &lt;br /&gt;
&lt;br /&gt;
=Die Übersetzung für das FE-Template erstellen (Video 44:00)=&lt;br /&gt;
Öffnet die Datei modules.php in screencast/languages/de/ und ergänzt folgende Zeilen Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$GLOBALS['TL_LANG']['FMD']['screencast_list'] = 'Screencast Liste';&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Was passiert hier?''&lt;br /&gt;
Nun....in der Modulliste steht künftig &amp;quot;Screencast Liste&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Erstellung der autoloader-Dateien=&lt;br /&gt;
Der Autoloader sorgt z.B. dafür, dass alle notwendigen Templates bzw. Klassen des Moduls im Contao-System registriert werden. Praktischerweise können die autoloader-Dateien automatisch generiert werden. &lt;br /&gt;
Navigiert hierzu im Backend auf ''Entwickler-Tools-&amp;gt;Autoload-Creator''.&lt;br /&gt;
Wählt das Modul screencast aus und klickt auf ''Autoload-Dateien erstellen''.&lt;br /&gt;
Prüft, ob die Dateien ''autoload.php'' und autiload.ini in eurem ''config''-Verzeichnis erstellt wurden.&lt;br /&gt;
autoload.php:&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;
&lt;br /&gt;
/**&lt;br /&gt;
 * Contao Open Source CMS&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2005-2013 Leo Feyer&lt;br /&gt;
 * &lt;br /&gt;
 * @package Screencast&lt;br /&gt;
 * @link    https://contao.org&lt;br /&gt;
 * @license http://www.gnu.org/licenses/lgpl-3.0.html LGPL&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Register the classes&lt;br /&gt;
 */&lt;br /&gt;
ClassLoader::addClasses(array&lt;br /&gt;
(&lt;br /&gt;
	// Modules&lt;br /&gt;
	'ModuleScreencastList' =&amp;gt; 'system/modules/screencast/modules/ModuleScreencastList.php',&lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Register the templates&lt;br /&gt;
 */&lt;br /&gt;
TemplateLoader::addFiles(array&lt;br /&gt;
(&lt;br /&gt;
	'mod_screencast_list' =&amp;gt; 'system/modules/screencast/templates',&lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
autoload.ini&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;&lt;br /&gt;
; Configure what you want the autoload creator to register&lt;br /&gt;
;;&lt;br /&gt;
register_namespaces = true&lt;br /&gt;
register_classes    = true&lt;br /&gt;
register_templates  = true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Geschafft!=&lt;br /&gt;
Wenn ich mich nicht verschrieben habe und ihr alles richtig gemacht habt, könnt ihr eure Screencast-Modul nun einsetzen.&lt;br /&gt;
&lt;br /&gt;
=Ausblick=&lt;br /&gt;
Im folgenden Teil wird unser Modul erweitert. Dabei geht es schwerpunktsmässig um das Hinzufügen von sog. Subpaletten, die eine kontextsensitive (schönes Wort) Auswahl von Einstellungen im Modulbereich erlauben. Zu Deutsch: Wenn der Nutzer die Wahl zwischen verschiedenen Screencast-Quellen (z.B. Youtube, Vimeo etc.) hat, verändern sich die folgenden Eingabe-/Auswahlfelder.&lt;br /&gt;
&lt;br /&gt;
Das Video könnt ihr euch hier schon ansehen:&lt;br /&gt;
Videolink : [http://www.youtube.com/watch?v=I1-1mqIR_B4&amp;amp;list=PL3mn8AtCRAstvuAWY8dhrHisMYapPxOnt&amp;amp;index=4 DCA Paletten und Subpaletten, MetaPalettes]&lt;br /&gt;
&lt;br /&gt;
So...ich habe erstmal fertig. Bis demnächst.&lt;br /&gt;
Grüße von&lt;br /&gt;
kobajashi&lt;br /&gt;
&lt;br /&gt;
=Weiterführende Links=&lt;br /&gt;
[[C3: Tutorial Extension Entwicklung 2.Teil: Selective DCA Paletten und Subpaletten|2. Teil Selective DCA Paletten und Subpaletten]]&lt;/div&gt;</summary>
		<author><name>Flex</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/MooTools_Snippets</id>
		<title>MooTools Snippets</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/MooTools_Snippets"/>
				<updated>2012-11-17T11:18:14Z</updated>
		
		<summary type="html">&lt;p&gt;Flex: Eine Sammlung von MooTools Code Snippets.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MooTools Snippets =&lt;br /&gt;
[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Dev Snippets]]&lt;br /&gt;
== Einführung ==&lt;br /&gt;
&lt;br /&gt;
Immer wieder komme ich an die Situation, dass ich ein wenig JavaScript schreiben muss, was ich leider nur leidlich beherrsche...&lt;br /&gt;
Deshalb dachte ich mir, lege ich mal eine Sammlung von Snippets an, die ich so benutze und vielleicht auch andere Leute brauchen könnten bzw. eigene hinzufügen wollen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
=== Bildwechsel bei Hover ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEvent('domready', function() {&lt;br /&gt;
    $$('.hover img').each(function(img) {&lt;br /&gt;
      var src = img.getProperty('src');&lt;br /&gt;
      var extension = src.substring(src.lastIndexOf('.'),src.length)&lt;br /&gt;
      img.addEvent('mouseenter', function() { img.setProperty('src',src.replace(extension,'-mo' + extension)); });&lt;br /&gt;
      img.addEvent('mouseleave', function() { img.setProperty('src',src); });&lt;br /&gt;
    });&lt;br /&gt;
});;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses Snippet ersetzt die Bilder bei einem Mousehover. Es kann einfach per Hinzufügen der Klasse &amp;quot;hover&amp;quot; an das jeweilige Bildelement (oder Textelement) eingebunden werden.&lt;br /&gt;
Das Bild wird dabei durch das gleichnamige Bild mit dem Zusatz &amp;quot;-mo&amp;quot; im gleichen Pfad ersetzt. &lt;br /&gt;
Beispiel:&lt;br /&gt;
tl_files/images/foobar.jpg =&amp;gt; tl/files/images/foobar-mo.jpg&lt;br /&gt;
&lt;br /&gt;
Beachtet man dies bei der Namensgebung, so sollte das problemlos funktionieren...&lt;br /&gt;
&lt;br /&gt;
[http://davidwalsh.name/mootools-image-mouseovers Quelle]&lt;/div&gt;</summary>
		<author><name>Flex</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Contao2Go</id>
		<title>Contao2Go</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Contao2Go"/>
				<updated>2011-08-31T11:35:20Z</updated>
		
		<summary type="html">&lt;p&gt;Flex: /* Tips und Tricks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sonstiges]]&lt;br /&gt;
&lt;br /&gt;
=Grundlagen=&lt;br /&gt;
Contao2Go ist ein selbst konfigurierendes WAMP System, welches ohne Installation von Software auskommt.&lt;br /&gt;
Ein einfaches Auspacken und Starten der Server2Go.exe ermoeglicht, Contao (sowie durch nachladbare C2G Pakete auch TYPOlight) lokal ausgiebig zu testen.&lt;br /&gt;
&lt;br /&gt;
Besonderheit hierbei ist das Snapshot System, womit jederzeit der Zustand einer Entwicklung eingefroren werden kann und jederzeit wiederherstellbar ist.&lt;br /&gt;
&lt;br /&gt;
Hierdurch ist es zum Beispiel moeglich, Kundenpraesentationen mit unterschiedlichen Designs aufzubauen, ohne das man spaeter beim Kunden gross im Backend etwas aendern muss. Es muss nur in den Designphasen ein SnapShot erstellt werden.&lt;br /&gt;
Dieser kann dann komfortabel mittels Klick innerhalb weniger Sekunden wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind folgende Moeglichkeiten vorhanden :&lt;br /&gt;
*vHost Uebersicht&lt;br /&gt;
**vorhandene Installationen aufzeigen, incl. der Moeglichkeit, direkt in einem neuen Fenster das Frontend oder das Backend aufzurufen.&lt;br /&gt;
**Snapshot der Installation erstellen&lt;br /&gt;
**Installation incl. Datenbank entfernen &lt;br /&gt;
&lt;br /&gt;
*Sicherungen&lt;br /&gt;
**Vorhandene SIcherungen einsehen, hierbei sind die Sicherungen Installationsbezogen geordnet&lt;br /&gt;
**Sicherungen wiederherstellen&lt;br /&gt;
**Sicherungen loeschen&lt;br /&gt;
&lt;br /&gt;
=Wirtssystem=&lt;br /&gt;
==Windows==&lt;br /&gt;
Um Contao2Go unter Windows nutzen zu können, muss die entsprechende exe-Datei von der Projekthomepage [http://www.contao2go.org/herunterladen.html heruntergeladen] werden. Diese exe-Datei ist ein selbstextrahierendes Zip-Paket, welches man nach einem Doppelklick darauf an einen Ort seiner Wahl entpackt.&amp;lt;br /&amp;gt;&lt;br /&gt;
In dem Ordner findet man eine Datei namens ''Server2Go.exe''; mit dieser wird Contao2Go gestartet. Wenn Contao2Go korrekt gestartet wurde, erscheint im Infobereich neben der Uhr ein entsprechendes Icon.&lt;br /&gt;
&lt;br /&gt;
[[Datei:c2g_systray.png|Contao2Go-Icon im Infobereich|center|frame]]&lt;br /&gt;
&lt;br /&gt;
Contao2Go ist nun einsatzbereit und kann über den Link [http://localhost:4001 http://localhost:4001] aufgerufen und verwendet werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Will man Contao2Go an einen anderen Ort verschieben oder beenden, klickt man auf das Icon im Infobereich und wählt ''Close Contao2Go''.&lt;br /&gt;
&lt;br /&gt;
===Update===&lt;br /&gt;
Bevor man das Wirtssystem von Contao2Go updaten kann, muss man von jeden vHost eine Sicherung erstellen. Dies geschieht in der Übersichtsseite von Contao2Go. Anschliessend beendet man Contao2Go und sichert den Ordner ''\Contao2Go\htdocs\backups'', indem sich die Sicherungen befinden. Im nächsten Schritt lädt man sich das aktuelle Contao2Go von der Projekthomepage und entpackt es in einen '''neuen''' Ordner. Nun spielt man den zuvor gesicherten Ordner ''backups'' wieder in das neue Contao2Go ein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Nachdem man kontrolliert hat, ob alle Sicherungen wieder vorhanden sind, kann man den alten Contao2Go-Ordner löschen.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
noch nicht veröffentlicht...&lt;br /&gt;
==Mac OS X==&lt;br /&gt;
noch nicht veröffentlicht...&lt;br /&gt;
==Sonderfall c2gadmin==&lt;br /&gt;
{{msgWarning|Contao2Go ist nicht für einen Online-Einsatz vorgesehen und sollte aus Sicherheitsgründen nicht öffentlich im Netz betrieben werden!}}&lt;br /&gt;
Ein Sonderfall ist c2gadmin, mit der Contao2Go einfach in eine existierende Contao-Installation eingebunden werden kann. Dazu installiert man sich einfach über die Erweiterungsverwaltung einer Contao-Installation die Erweiterung [http://www.contao.org/erweiterungsliste/view/c2gadmin.10000006.de.html c2gadmin].&amp;lt;br /&amp;gt;&lt;br /&gt;
Anschliessend stehen in den Artikeln 2 neue Inhaltselemente bereit:&lt;br /&gt;
*c2g_listBackups: Als Weiterleitungsseite muss jene Seite angegeben werden, auf der das zweite Inhaltselement (c2g_listVHosts) eingebunden ist.&lt;br /&gt;
*c2g_listVHosts: Als Weiterleitungsseite muss jene Seite angegeben werden, auf der das erste Inhaltselement (c2g_listBackups) eingebunden ist.&lt;br /&gt;
&lt;br /&gt;
=Nutzung=&lt;br /&gt;
{{msgInfo|In C2G-SnapShots ist die Datenbank anonymisiert. D.h. Datenbank Eintraege in der localconfig.php werden automatisch entfernt und beim Import automatisch basierend auf dem aktuellen System gesetzt. Somit ist auch eine Weitergabe der C2G Pakete an Kunden problemlos moeglich.}}&lt;br /&gt;
==Eine neue Installation erstellen==&lt;br /&gt;
Dazu wechselt man in der Contao2Go-Verwaltung auf die Seite ''Informationen'', klickt den Link [http://localhost:4001/phpmyadmin /phpmyadmin] und loggt sich mit dem Benutzernamen ''root'' ein (Passwort ist keines erforderlich). Anschliessend erstellt man in dem auf der Startseite befindlichen Bereich ''My SQL localhost'' eine neue Datenbank mit der Kollation ''utf8_general_ci''.&lt;br /&gt;
&lt;br /&gt;
[[Datei:c2g_phpmyadmin_newdb.png|Neue Datenbank erstellen|center|frame]]&lt;br /&gt;
&lt;br /&gt;
Danach kann phpmyadmin geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Als nächsten Schritt wechselt man im Dateiexplorer des Betriebssystems in den Ordner von Contao2Go und von dort aus in den Unterordner ''\Contao2Go\htdocs\vhosts''. Hier erstellt man einen Ordner (z.B. namens testseite).&amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem Ordner kopiert man den Inhalt der Core-Installation, den man sich von der [http://www.contao.org/herunterladen.html Contao-Homepage] heruntergeladen hat.&lt;br /&gt;
&lt;br /&gt;
[[Datei:c2g_filebrowser.png|Dateisystem|frame|center]]&lt;br /&gt;
&lt;br /&gt;
Ab diesem Zeitpunkt ist die Seite in der Contao2Go-Verwaltung unter ''Hosts'' gelistet.&lt;br /&gt;
&lt;br /&gt;
Nun kann man Contao wie gewohnt über das [http://localhost:4001/vhosts/testseite/contao/install.php Installtool] installieren.  Bei der Installation ist darauf zu achten, dass man die korrekten Datenbank-Daten verwendet:&lt;br /&gt;
*Treiber: MySQL&lt;br /&gt;
*Host: localhost&lt;br /&gt;
*Benutzername: root&lt;br /&gt;
*Datenbank: test&lt;br /&gt;
*Dauerhafte Verbindung: nein&lt;br /&gt;
*Zeichensatz: UTF8&lt;br /&gt;
*Portnummer: 7188&lt;br /&gt;
&lt;br /&gt;
Nach der Installation kann die Seite verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==Eine bestehende Installation integrieren==&lt;br /&gt;
Eine bestehende Installation (z.B. aus XAMPP oder einer Live-Webseite) in Contao2Go integrieren funktioniert prinzipiell nach dem selben System wie eine [[Contao2Go#Eine_neue_Installation_erstellen|neue Installation zu erstellen]]:&lt;br /&gt;
*Eine Sicherung des existierenden Dateisystem nach ''\Contao2Go\htdocs\vhosts\testseite\ kopieren.&lt;br /&gt;
*Ein Backup der existierenden Datenbank erstellen (z.B. mit der Erweiterung [[BackupDB]]).&lt;br /&gt;
*Eine leere Datenbank in phpmyadmin erstellen und das zuvor erstellte Datenbank-Backup in diese Datenbank importieren.&lt;br /&gt;
*Die Datei ''\Contao2Go\htdocs\vhosts\testseite\system\config\localconfig.php öffnen und die Zugangsdaten der Datenbank anpassen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_CONFIG']['dbDriver'] = 'MySQL';&lt;br /&gt;
$GLOBALS['TL_CONFIG']['dbHost'] = 'localhost';&lt;br /&gt;
$GLOBALS['TL_CONFIG']['dbUser'] = 'root';&lt;br /&gt;
$GLOBALS['TL_CONFIG']['dbPass'] = '';&lt;br /&gt;
$GLOBALS['TL_CONFIG']['dbDatabase'] = 'test';&lt;br /&gt;
$GLOBALS['TL_CONFIG']['dbPconnect'] = false;&lt;br /&gt;
$GLOBALS['TL_CONFIG']['dbCharset'] = 'UTF8';&lt;br /&gt;
$GLOBALS['TL_CONFIG']['dbPort'] = 7188;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*Falls eine .htaccess - Datei verwendet wird, diese kontrollieren (z.B. auf Hosterspezifische Einträge).&lt;br /&gt;
*Anschliessend wird das Installtool der Webseite aufgerufen. Dies dient dazu, um a) die neuen Seitenpfade zu erstellen (geschieht automatisch, ohne dass man etwas machen muss) und b) um die Datenbank-Verbindung zu prüfen.&lt;br /&gt;
*Zuletzt loggt man sich im Backend ein und kontrolliert in der Seitenstruktur im ''Startpunkt der Webseite'' im Abschnitt ''DNS-Einstellungen'' das Feld ''Domainname''. Sollte ein Eintrag vorhanden sein, löscht man diesen.&lt;br /&gt;
&lt;br /&gt;
==Ein c2g-Paket importieren==&lt;br /&gt;
Zuerst lädt man sich das gewünschte c2g-Paket von der [http://contao2go.org/pakete.html Projekt-Homepage] auf seinen Computer. Anschliessend wechselt man in seiner lokalen C2G-Webseite auf die Seite [http://localhost:4001/importieren.html Importieren]. Dort klickt man auf den Button ''Durchsuchen'' und wählt das herunter geladene c2g-Paket aus; gefolgt von einem Klick auf den Button ''Importieren''.&lt;br /&gt;
&lt;br /&gt;
[[Datei:c2g_import.png|c2g-Paket importieren|center|frame]]&lt;br /&gt;
&lt;br /&gt;
Nachdem der Import erfolgreich durchgeführt wurde, erscheint eine entsprechende Meldung. Anschliessend wechselt man mit dem darunter stehenden Link auf die Sicherungsübersicht.&lt;br /&gt;
&lt;br /&gt;
[[Datei:c2g_importsuccess.png|Import erfolgreich durchgeführt|center|frame]]&lt;br /&gt;
&lt;br /&gt;
In der Sicherungsübersicht erscheint nun das vorhin importierte c2g-Paket.&lt;br /&gt;
&lt;br /&gt;
[[Datei:c2g_backups.png|Sicherungsübersicht|center|frame]]&lt;br /&gt;
&lt;br /&gt;
Mit einem Klick auf den Button ''Sicherung wiederherstellen'' (2 gelben Pfeile) wird die Sicherung nun wiederhergestellt. Auf der Seite ''Hosts'' ist das importierte c2g-Paket nun als entsprechende Webseite gelistet und kann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:c2g_hosts.png|Host Übersicht|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=Tips und Tricks=&lt;br /&gt;
==Beschreibung für einen vHost erstellen==&lt;br /&gt;
Um eine Beschreibung für die vHost-Übersicht bereit zu stellen, muss eine Datei namens ''package.info'' im Root-Verzeichnis des jeweiligen vHosts erstellt werden.&lt;br /&gt;
Der Inhalt dieser Datei entspricht einer XML-Datei und kann mehrsprachigen Beschreibungstext enthalten. Pflichtsprache ist englisch (en), da diese als Standardsprache verwendet wird. Weitere Sprachen können mit den üblichen 2 Zeichen Ländercodes hinzugefügt werden. Anbei ein Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;package&amp;gt;&lt;br /&gt;
    &amp;lt;de&amp;gt;    &lt;br /&gt;
        &amp;lt;description&amp;gt;&lt;br /&gt;
        &amp;lt;![CDATA[&lt;br /&gt;
            Standardinstallation des Contao2Go Paketes.&amp;lt;br&amp;gt;&lt;br /&gt;
            Beinhaltet die Themes &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://www.contaothemes.de/&amp;quot; title=&amp;quot;fences&amp;quot; onclick=&amp;quot;window.open(this.href); return false;&amp;quot;&amp;gt;fences&amp;lt;/a&amp;gt; der &amp;lt;a href=&amp;quot;http://www.contao.org/partner.html?show=5334&amp;quot; title=&amp;quot;piyo medienagentur&amp;quot; onclick=&amp;quot;window.open(this.href); return false;&amp;quot;&amp;gt;piyo medienagentur (Lars Tubies)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://themes.contao-agentur.de/ka-classic/&amp;quot; title=&amp;quot;kl_classic&amp;quot; onclick=&amp;quot;window.open(this.href); return false;&amp;quot;&amp;gt;ka_classic&amp;lt;/a&amp;gt; der &amp;lt;a href=&amp;quot;http://www.contao.org/partner.html?show=502&amp;quot; title=&amp;quot;Die Kommunikationsabteilung&amp;quot; onclick=&amp;quot;window.open(this.href); return false;&amp;quot;&amp;gt;Kommunikationsabteilung (Fabian Fauth)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            ]]&amp;gt;&lt;br /&gt;
        &amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;/de&amp;gt;&lt;br /&gt;
    &amp;lt;en&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&lt;br /&gt;
        &amp;lt;![CDATA[&lt;br /&gt;
            Standardinstallation for Contao2Go package&amp;lt;br&amp;gt;&lt;br /&gt;
            Contains following Themes &amp;lt;ul&amp;gt;&lt;br /&gt;
            &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://www.contaothemes.de/&amp;quot; title=&amp;quot;fences&amp;quot; onclick=&amp;quot;window.open(this.href); return false;&amp;quot;&amp;gt;fences&amp;lt;/a&amp;gt; from &amp;lt;a href=&amp;quot;http://www.contao.org/partner.html?show=5334&amp;quot; title=&amp;quot;piyo medienagentur&amp;quot; onclick=&amp;quot;window.open(this.href); return false;&amp;quot;&amp;gt;piyo medienagentur (Lars Tubies)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://themes.contao-agentur.de/ka-classic/&amp;quot; title=&amp;quot;kl_classic&amp;quot; onclick=&amp;quot;window.open(this.href); return false;&amp;quot;&amp;gt;ka_classic&amp;lt;/a&amp;gt; from &amp;lt;a href=&amp;quot;http://www.contao.org/partner.html?show=502&amp;quot; title=&amp;quot;Die Kommunikationsabteilung&amp;quot; onclick=&amp;quot;window.open(this.href); return false;&amp;quot;&amp;gt;Kommunikationsabteilung (Fabian Fauth)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
            ]]&amp;gt;&lt;br /&gt;
        &amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;/en&amp;gt;&lt;br /&gt;
&amp;lt;/package&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==max_execution_time erhöhen==&lt;br /&gt;
Bei grossen c2g-Paketen oder bei langsamen USB-Sticks kann es vorkommen, dass es bei der Sicherungswiederherstellung zu einem timeout kommt. In der Regel wird das mit folgender Fehlermeldung quittiert:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Fatal error: Maximum execution time of 10 seconds exceeded in D:\Contao2Go\htdocs\system\modules\c2gadmin\c2g_functions.php on line 259&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Abhilfe schafft hier die Erhöhung der max_execution_time des Servers. Dazu wechstelt man im Dateisystem in den Ordner ''\Contao2Go\server\config_tpl\'' und öffnet die Datei ''php.ini''. In dieser sucht man nach der Zeile:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
max_execution_time = 120&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Nun kann man die Zeit entsprechend erhöhen (z.B. 180 oder 240). Anschliessend startet man Contao2Go neu.&lt;br /&gt;
==MySQLi aktivieren==&lt;br /&gt;
Damit es läuft muss man ''server/config_tpl'' die ''php.ini'' bearbeiten und unter den '';Windows Extensions'' folgende Zeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
extension=php_mysqli.dll&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Wichtig'''&lt;br /&gt;
&lt;br /&gt;
Beim Erstellen einer Verbindung muss man nur bedenken, dass der Standard MySQL Port hier auf 7188 steht und man deshalb beim Erstellen einer Verbindung den Port 3306 mitgibt.&lt;br /&gt;
&lt;br /&gt;
=Screenshots=&lt;br /&gt;
&lt;br /&gt;
[[Datei:Contao2go_28012011_201855.png|center|frame|v-Hosts Übersicht]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Contao2go_28012011_201943.png|center|frame|Sicherung erstellen]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Contao2go_28012011_201957.png|center|frame|Sicherungen Übersicht]]&lt;/div&gt;</summary>
		<author><name>Flex</name></author>	</entry>

	</feed>