<?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=Samson1964</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=Samson1964"/>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Spezial:Beitr%C3%A4ge/Samson1964"/>
		<updated>2026-05-01T18:47:57Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>https://de.contaowiki.org/GetTemplateGroup</id>
		<title>GetTemplateGroup</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/GetTemplateGroup"/>
				<updated>2020-06-11T10:06:53Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: Code für Contao 2-4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Dev Snippets]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.8|Version=ab 2.9}}&lt;br /&gt;
Mit der Methode &amp;lt;nowiki&amp;gt;getTemplateGroup&amp;lt;/nowiki&amp;gt; ist es in einem Modul möglich, dem Nutzer im Backend die Auswahl von Templates zu ermöglichen, die im Frontend dann verwendet werden sollen. Damit ist es möglich, eigene Templates zu erstellen und zu verwenden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Bis Contao 2.8.4 wurden die Templates im Verzeichnis '''templates''' des Moduls gesucht und anschließend im Verzeichnis '''TL_ROOT/templates'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ab Contao 2.9 wurde auf Grund des Theme-Managers diese Methode erweitert, damit diese nun auch im Template Verzeichnis des Themes gesucht werden.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Hier nun beide Varianten kurz erläutert. Beide funktionieren dabei in Contao 2.9, die erste nur bis Contao 2.8.4&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=getTemplateGroup in Contao 2.8.x=&lt;br /&gt;
In Contao 2.8.x (und früher) spielt es keine Rolle, an welcher Stelle man die Auswahl für ein Template einbaut, dass muss nicht beim Anlegen des Frontend Moduls sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Beispielsweise wird/wurde im Modul Banner unter dem Punkt Inhalte als erstes eine Kategorie angelegt, in dieser dann kam die Template Auswahl.&amp;lt;br &amp;gt;&lt;br /&gt;
Dem Frontend Modul wurde dann eine Kategorie zugewiesen, über diese konnte das Modul dann das gewählte Template erfahren.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tabellen Angaben==&lt;br /&gt;
Zum Abspeichern benötigt man natürlich ein Feld in der jeweiligen Tabelle. Hier ein Auszug aus dem Banner Modul.&amp;lt;br&amp;gt;&lt;br /&gt;
Für die Kategorie:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TABLE `tl_banner_category` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL auto_increment,&lt;br /&gt;
  `tstamp` int(10) unsigned NOT NULL default '0',&lt;br /&gt;
...&lt;br /&gt;
  `banner_template` varchar(32) NOT NULL default '', &lt;br /&gt;
...&lt;br /&gt;
  PRIMARY KEY  (`id`)&lt;br /&gt;
) ENGINE=MyISAM DEFAULT CHARSET=utf8;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für das Frontend Modul in tl_module:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TABLE `tl_module` (&lt;br /&gt;
...&lt;br /&gt;
  `banner_categories` varchar(255) NOT NULL default '',&lt;br /&gt;
...&lt;br /&gt;
) ENGINE=MyISAM DEFAULT CHARSET=utf8; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses Felder müssen nun über die DCA Datei gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
==DCA Angaben==&lt;br /&gt;
In der DCA, hier &amp;quot;tl_banner_category.php&amp;quot;, erfolgte nun im Abschnitt &amp;quot;fields&amp;quot; dieser Teil:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	'banner_template'            =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
           'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_banner_category']['banner_template'],&lt;br /&gt;
           'default'                 =&amp;gt; 'mod_banner_list_all',&lt;br /&gt;
           'exclude'                 =&amp;gt; true,&lt;br /&gt;
           'inputType'               =&amp;gt; 'select',&lt;br /&gt;
           'options'                 =&amp;gt; $this-&amp;gt;getTemplateGroup('mod_banner_list_'),&lt;br /&gt;
           'eval'                    =&amp;gt; array('tl_class'=&amp;gt;'w50')&lt;br /&gt;
	),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier ist nun ein Select Feld zu sehen, welches als Default das Template &amp;quot;mod_banner_list_all&amp;quot; nimmt. Gesucht werden Templates, welche mit &amp;quot;mod_banner_list_&amp;quot; beginnen und mit &amp;quot;.tpl&amp;quot; enden. Die Endung kann dabei hier nicht angegeben werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
In dem Fall wird vom Framework zuerst im Verzeichnis &amp;quot;templates&amp;quot; vom Modul gesucht, anschließend im Verzeichnis &amp;quot;TL_ROOT/templates&amp;quot;. Liegen im letzterem Templates mit gleichem Namen werden diese bevorzugt. Damit wurde die Möglichkeit geschaffen, updatesichere Templates auch für Module anzulegen, die keine Auswahlmöglichkeit bieten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der Name wird nach Auswahl und Speicherung in der Datenbank abgelegt und kann nun vom Frontend Modul ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Zuvor muss im Frontend Modul natürlich die Kategorie abgelegt werden, dazu auch hier eine DCA Field Angabe:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Add fields to tl_module&lt;br /&gt;
 */ &lt;br /&gt;
$GLOBALS['TL_DCA']['tl_module']['fields']['banner_categories'] = array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_module']['banner_categories'],&lt;br /&gt;
	'exclude'                 =&amp;gt; true,&lt;br /&gt;
	'inputType'               =&amp;gt; 'checkbox',&lt;br /&gt;
	'foreignKey'              =&amp;gt; 'tl_banner_category.title',&lt;br /&gt;
	'eval'                    =&amp;gt; array('multiple'=&amp;gt;true, 'mandatory'=&amp;gt;true)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier als Checkbox, da es die Möglichkeit geben sollte, mehrere Kategorien zu wählen.&lt;br /&gt;
&lt;br /&gt;
==Frontend Modul==&lt;br /&gt;
Das Frontend Modul schaut nun per SQL nach, welches Template verwendet werden soll. Um beim Beispiel Banner Modul zu bleiben: erst wird die Kategorie ermittelt und damit dann das Template.&amp;lt;br &amp;gt;&lt;br /&gt;
Wenn der Name des Templates vom Default abweicht, muss innerhalb der eigenen Methode &amp;quot;compile&amp;quot; das neue Template aktiviert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Hier mal kurze Code Sequenzen, die das Ganze etwas deutlicher machen sollten.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ModuleBanner extends Module&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Template&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected $strTemplate = 'mod_banner_list_all'; // Das Default Template wie in der DCA definiert&lt;br /&gt;
....&lt;br /&gt;
        /**&lt;br /&gt;
	 * Generate module&lt;br /&gt;
	 */&lt;br /&gt;
	protected function compile()&lt;br /&gt;
	{&lt;br /&gt;
            // Contao legt checkbox Felder als serialisiertes Array ab in der DB (darin die IDs der Kategorien)&lt;br /&gt;
            $this-&amp;gt;arrBannerCategories = deserialize($this-&amp;gt;banner_categories, true);  &lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
            $objBanners = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT TLB.id FROM tl_banner AS TLB &amp;quot;&lt;br /&gt;
	                                            . &amp;quot; LEFT JOIN tl_banner_category ON (tl_banner_category.id=TLB.pid)&amp;quot;&lt;br /&gt;
	                                            . &amp;quot; WHERE pid IN(&amp;quot; . implode(',', $this-&amp;gt;arrBannerCategories) . &amp;quot;)&amp;quot;&lt;br /&gt;
                                                    // und noch viel mehr, aber hier nicht wichtig :-)&lt;br /&gt;
					 -&amp;gt;execute();&lt;br /&gt;
...&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
            //Wenn nötig, dann neues Template aktivieren&lt;br /&gt;
	    if (($objBanners-&amp;gt;banner_template != $this-&amp;gt;strTemplate) &amp;amp;&amp;amp; ($objBanners-&amp;gt;banner_template != '')) &lt;br /&gt;
            {&lt;br /&gt;
	              $this-&amp;gt;strTemplate = $objBanners-&amp;gt;banner_template;&lt;br /&gt;
	              $this-&amp;gt;Template = new FrontendTemplate($this-&amp;gt;strTemplate);&lt;br /&gt;
	    }&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So bekommt also das Frontend Modul über einige Ecken den Namen des Templates.&lt;br /&gt;
&lt;br /&gt;
Natürlich kann man die Template Auswahl direkt im Frontend Modul machen. Das und die Änderung für Contao 2.9 zeigt der nächste Abschnitt.&lt;br /&gt;
&lt;br /&gt;
=getTemplateGroup in Contao 2.9.x=&lt;br /&gt;
In Contao 2.9 ist es möglich in der Theme Konfiguration ein eigenes Template Verzeichnis zu definieren. Technisch gesehen ist es ein Unterverzeichnis von &amp;quot;TL_ROOT/templates&amp;quot;. Da diese Templates sich auf das Theme beziehen, muss auch die Auswahl innerhalb eines ermittelbaren Themes erfolgen. Am einfachsten gehts das direkt im Frontend Modul. (Diese werden ja nun innerhalb eines Themes angelegt)&lt;br /&gt;
&lt;br /&gt;
==Tabellen Angaben==&lt;br /&gt;
Hierzu braucht nur im Modul ein Feld angelegt werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
-- &lt;br /&gt;
-- Table `tl_module`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `tl_module` (&lt;br /&gt;
  `banner_template` varchar(32) 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;
==DCA Angaben==&lt;br /&gt;
In der DCA, hier &amp;quot;tl_module.php&amp;quot;, erfolgte nun im Abschnitt &amp;quot;fields&amp;quot; dieser Teil:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_module']['fields']['banner_template'] = array&lt;br /&gt;
(&lt;br /&gt;
    'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_module']['banner_template'],&lt;br /&gt;
    'default'                 =&amp;gt; 'mod_banner_list_all',&lt;br /&gt;
    'exclude'                 =&amp;gt; true,&lt;br /&gt;
    'inputType'               =&amp;gt; 'select',&lt;br /&gt;
    //'options'                 =&amp;gt; $this-&amp;gt;getTemplateGroup('mod_banner_list_'), // Das wäre die alte Variante&lt;br /&gt;
    'options_callback'        =&amp;gt; array('tl_module_banner', 'getBannerTemplates')&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die alte Variante (hier auskommentiert) ist hier auch dargestellt, welche wie oben beschrieben funktionieren würde.&amp;lt;br /&amp;gt;&lt;br /&gt;
Bei der neuen Variante ist zu sehen, dass ein &amp;quot;options_callback&amp;quot; nötig ist. Grund ist, dass die Methode &amp;quot;getTemplateGroup&amp;quot; einen optionalen zweiten Parameter neuerdings versteht. Dieser Parameter ist die Theme-ID. Da diese aber hier nicht zur Verfügung steht, holt man sich diese per callback:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class tl_module_banner	extends Backend &lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Template over theme id&lt;br /&gt;
	 */&lt;br /&gt;
	public function getBannerTemplates(DataContainer $dc)&lt;br /&gt;
	{&lt;br /&gt;
            if (version_compare(VERSION.BUILD, '2.9.0', '&amp;gt;=')) {&lt;br /&gt;
	        return $this-&amp;gt;getTemplateGroup('mod_banner_list_', $dc-&amp;gt;activeRecord-&amp;gt;pid);&lt;br /&gt;
            } else {&lt;br /&gt;
                return $this-&amp;gt;getTemplateGroup('mod_banner_list_');&lt;br /&gt;
            }&lt;br /&gt;
	}  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier wieder zu sehen, beginnt die Suche nach Templates mit &amp;quot;mod_banner_list_&amp;quot;. Hier wird nun in folgender Reihenfolge gesucht:&lt;br /&gt;
# Verzeichnis templates des Moduls&lt;br /&gt;
# Verzeichnis TL_ROOT/templates (nicht rekursiv!)&lt;br /&gt;
# Im Template Verzeichnis des Themes, z.b. TL_ROOT/templates/mein_theme/meine_templates&lt;br /&gt;
{{Achtung|Werden gleichnamige Template Dateien gefunden, wird nur das zuletzt gefundene angezeigt bezogen auf die oben gezeigten Reihenfolge.&amp;lt;br /&amp;gt;Das Theme Verzeichnis hat also die höchste Priorität.}}&lt;br /&gt;
&lt;br /&gt;
Im obigen Beispiel wurde noch ein Versionsvergleich eingebaut. Somit arbeitet diese Methode sowohl in Contao 2.8 als auch in Contao 2.9.&lt;br /&gt;
&lt;br /&gt;
==Frontend Modul==&lt;br /&gt;
Das Frontend Modul bekommt hier durch das Framework die Felder aus tl_module automatisch, dazu braucht es also keine SQL Abfrage. Daher verkürzt sich die Sache sehr.&amp;lt;br /&amp;gt;&lt;br /&gt;
Hier mal kurze Code Sequenzen, die das Ganze etwas deutlicher machen sollten.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ModuleBanner 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_banner_list_all';  // Default wie in DCA definiert&lt;br /&gt;
&lt;br /&gt;
        /**&lt;br /&gt;
	 * Generate module&lt;br /&gt;
	 */&lt;br /&gt;
	protected function compile()&lt;br /&gt;
	{&lt;br /&gt;
....&lt;br /&gt;
             if (($this-&amp;gt;banner_template != $this-&amp;gt;strTemplate) &amp;amp;&amp;amp; ($this-&amp;gt;banner_template != '')) &lt;br /&gt;
             {&lt;br /&gt;
                $this-&amp;gt;strTemplate = $this-&amp;gt;banner_template;&lt;br /&gt;
                $this-&amp;gt;Template = new FrontendTemplate($this-&amp;gt;strTemplate);&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;
=getTemplateGroup ab Contao 4.8 (abwärtskompatibel)=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function getTemplates($dc)&lt;br /&gt;
{&lt;br /&gt;
	if(version_compare(VERSION.BUILD, '2.9.0', '&amp;gt;=') &amp;amp;&amp;amp; version_compare(VERSION.BUILD, '4.8.0', '&amp;lt;'))&lt;br /&gt;
	{&lt;br /&gt;
		// Den 2. Parameter gibt es nur ab Contao 2.9 bis 4.7&lt;br /&gt;
		return $this-&amp;gt;getTemplateGroup('mail_trainerlizenzen_', $dc-&amp;gt;activeRecord-&amp;gt;id);&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		// Ohne 2. Parameter bis Contao 2.8 und ab Contao 4.8&lt;br /&gt;
		return $this-&amp;gt;getTemplateGroup('mail_trainerlizenzen_');&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=getTemplateGroup in Contao 2.9.x und CE=&lt;br /&gt;
Bei Content Elementen in Artikel sieht das Ganze wieder komplizierter aus. Das Grundprinzip ist aber das gleiche. Es wird über Artikel und Seitenstruktur ermittelt, in welchem Theme sich dieses CE befindet und mit der Theme ID wird dann wie bei der Modul Variante wieder nach Templates gesucht.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier beispielsweise ein Auszug aus dem DCA der Contao-internen Galerie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function getGalleryTemplates(DataContainer $dc)&lt;br /&gt;
{&lt;br /&gt;
	// Ermitteln der Seiten ID&lt;br /&gt;
	$objArticle = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT pid FROM tl_article WHERE id=?&amp;quot;)&lt;br /&gt;
								 -&amp;gt;limit(1)&lt;br /&gt;
								 -&amp;gt;execute($dc-&amp;gt;activeRecord-&amp;gt;pid);&lt;br /&gt;
&lt;br /&gt;
	// Vererbung der Seiteneigenschaften&lt;br /&gt;
	$objPage = $this-&amp;gt;getPageDetails($objArticle-&amp;gt;pid);&lt;br /&gt;
&lt;br /&gt;
	// Ermitteln der Theme ID&lt;br /&gt;
	$objLayout = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT pid FROM tl_layout WHERE id=?&amp;quot;)&lt;br /&gt;
								-&amp;gt;limit(1)&lt;br /&gt;
								-&amp;gt;execute($objPage-&amp;gt;layout);&lt;br /&gt;
&lt;br /&gt;
	// Alle verfügbaren Galerie-Templates anzeigen&lt;br /&gt;
	return $this-&amp;gt;getTemplateGroup('gallery_', $objLayout-&amp;gt;pid);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[Benutzer:BugBuster|BugBuster]] 14:23, 15. Jul. 2010 (CEST)&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datenbank_Klasse_verwenden</id>
		<title>Datenbank Klasse verwenden</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datenbank_Klasse_verwenden"/>
				<updated>2019-08-20T09:42:37Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Datensätze lesen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Informationen zur Datenbank-Klasse =&lt;br /&gt;
&lt;br /&gt;
Contao bietet für Entwickler eine Klasse an, um mit der Datenbank zu kommunizieren. Diese sollte beim Entwickeln von Erweiterungen unbedingt verwendet werden!&lt;br /&gt;
&lt;br /&gt;
* [http://api.contao.org/Library/_libraries---Database.php.html Dokumentation der Klasse]&lt;br /&gt;
&lt;br /&gt;
Die Datenbank-Klasse bietet mehrere Vorteile:&lt;br /&gt;
* Die Daten werden &amp;quot;gesäubert&amp;quot; und störende Zeichen maskiert&lt;br /&gt;
* Ein Objekt der Klasse Database_Result wird zurückgegeben. Dieses enthält alle Informationen zum Query&lt;br /&gt;
* Ersparnis von Schreibarbeit&lt;br /&gt;
&lt;br /&gt;
= Operationen auf der Datenbank =&lt;br /&gt;
&lt;br /&gt;
Die Beispiele setzen voraus, dass zuvor das Datenbank-Modul geladen wurde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;import('Database');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Datensätze lesen ==&lt;br /&gt;
&lt;br /&gt;
'''Lesen von Datensätzen ohne Bedingung'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$result = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT * FROM tl_log&amp;quot;)-&amp;gt;execute();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ausgeben der Datensätze'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo $result-&amp;gt;numRows; // Anzahl der gefundenen Datensätze ausgeben&lt;br /&gt;
echo $result-&amp;gt;id; // ID des 1. Datensatzes ausgeben&lt;br /&gt;
// Und alle anderen ID's ausgeben&lt;br /&gt;
while($result-&amp;gt;next())&lt;br /&gt;
{&lt;br /&gt;
  echo $result-&amp;gt;id;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lesen von Datensätzen mit Bedingung'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$result = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT * FROM tl_log WHERE id=?&amp;quot;)-&amp;gt;execute(1);&lt;br /&gt;
$result = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT * FROM tl_log WHERE id=? OR id=?&amp;quot;)-&amp;gt;execute(1, 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Fragezeichen sind Wildcards. Sie werden der Reihenfolge nach von den Parametern der execute-Funktion ersetzt. Dabei werden die parameter escaped, also für die Datenbank aufbereitet.&lt;br /&gt;
Das schützt allerdings '''nicht''' vor boshaften Benutzereingaben. Diese sollten immer mit der Input-Klasse verarbeitet werden!&lt;br /&gt;
&lt;br /&gt;
'''Lesen von Datensätzen mit Limit'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$result = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT * FROM tl_log&amp;quot;)-&amp;gt;limit(30)-&amp;gt;execute();&lt;br /&gt;
$result = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT * FROM tl_log&amp;quot;)-&amp;gt;limit(30, 40)-&amp;gt;execute();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das erste Beispiel liest die (ersten) 30 Datensätze, die mit der Suchbedingung (hier alle Datensätze) übereinstimmen. Das zweite Beispiel liest die 30 Datensätze ab Datensatz Nr. 40.&lt;br /&gt;
&lt;br /&gt;
== Datensätze schreiben ==&lt;br /&gt;
&lt;br /&gt;
Datensätze können auch über die Datenbank-Klasse geschrieben werden. Es gibt dafür zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
'''Einzelne Werte per Wildcard setzten'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lng=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_log SET source = ? WHERE id=?&amp;quot;)-&amp;gt;execute('BE', 12345);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mehrere Werte per set-Methode setzten'''&lt;br /&gt;
&amp;lt;source lng=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$set = array('tstamp' =&amp;gt; time(), 'source' =&amp;gt; 'BE', 'action' =&amp;gt; 'GENERAL');&lt;br /&gt;
$this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_log %s WHERE id=?&amp;quot;)-&amp;gt;set($set)-&amp;gt;execute(12345);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Methode funktioniert natürlich auch mit einem INSERT-Statement. Hier das Beispiel, wo Sie anschließend auch gleich die ID des neuen Datensatzes bekommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lng=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$set = array('tstamp' =&amp;gt; time(), 'source' =&amp;gt; 'BE', 'action' =&amp;gt; 'GENERAL');&lt;br /&gt;
$objInsert = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;INSERT INTO tl_log %s&amp;quot;)-&amp;gt;set($set)-&amp;gt;execute();&lt;br /&gt;
echo $objInsert-&amp;gt;insertId;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Das Ergebnis auswerten ==&lt;br /&gt;
&lt;br /&gt;
= Tipps &amp;amp; Tricks =&lt;br /&gt;
* [[SQL Like Abfrage in doppelten Prozentzeichen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Benutzer:Samson1964/URL%27s_generieren</id>
		<title>Benutzer:Samson1964/URL's generieren</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Benutzer:Samson1964/URL%27s_generieren"/>
				<updated>2018-08-18T17:39:04Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Funktion addToUrl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für eigene Erweiterungen stellt der Core folgende Funktionen zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
= Funktion addToUrl =&lt;br /&gt;
&lt;br /&gt;
Als aktuelle Seite wird in allen Beispielen eine Seite mit dem Alias '''test''' angenommen.&lt;br /&gt;
&lt;br /&gt;
== Variante 1 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;addToUrl('foo=bar');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vor Contao 3.2.8 war das Ergebnis: '''test.html?foo=bar'''&amp;lt;br&amp;gt;&lt;br /&gt;
Seit Contao 3.2.8 ist das Ergebnis: '''test/foo/bar.html'''&amp;lt;br&amp;gt;&lt;br /&gt;
Siehe dazu auch [https://github.com/contao/core/issues/6736 github.com/contao/core/issues/6736].&lt;br /&gt;
&lt;br /&gt;
Die bessere Schreibweise ab Contao 3.5 ist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
\Frontend::addToUrl('foo=bar');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Benutzer:Samson1964/URL%27s_generieren</id>
		<title>Benutzer:Samson1964/URL's generieren</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Benutzer:Samson1964/URL%27s_generieren"/>
				<updated>2018-08-18T17:34:20Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: Die Seite wurde neu angelegt: „Für eigene Erweiterungen stellt der Core folgende Funktionen zur Verfügung:  = Funktion addToUrl =  Als aktuelle Seite wird in allen Beispielen eine Seite mi…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für eigene Erweiterungen stellt der Core folgende Funktionen zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
= Funktion addToUrl =&lt;br /&gt;
&lt;br /&gt;
Als aktuelle Seite wird in allen Beispielen eine Seite mit dem Alias '''test''' angenommen.&lt;br /&gt;
&lt;br /&gt;
== Variante 1 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;addToUrl('foo=bar');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vor Contao 3.2.8 war das Ergebnis: '''test.html?foo=bar'''&lt;br /&gt;
Seit Contao 3.2.8 ist das Ergebnis: '''test/foo/bar.html'''&lt;br /&gt;
Siehe dazu auch [https://github.com/contao/core/issues/6736].&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Benutzer:Samson1964</id>
		<title>Benutzer:Samson1964</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Benutzer:Samson1964"/>
				<updated>2018-08-18T17:24:57Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Nick:''' Samson1964&amp;lt;br&amp;gt;&lt;br /&gt;
'''Realer Name:''' Frank Hoppe&amp;lt;br&amp;gt;&lt;br /&gt;
'''Geburtstag:''' 19.09.1964&amp;lt;br&amp;gt;&lt;br /&gt;
'''Wohnort:''' Berlin&amp;lt;br&amp;gt;&lt;br /&gt;
'''Arbeit''': Angestellter&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tätigkeit:''' Webmaster beim [http://www.schachbund.de/ Deutschen Schachbund]&amp;lt;br&amp;gt;&lt;br /&gt;
'''Hobbies:''' Programmieren (BASIC, Perl, PHP, C, CSS, HTML), Schach, Fotografieren&amp;lt;br&amp;gt;&lt;br /&gt;
'''Private Website:''' [http://www.schachbulle.de/ Schachbulle]&amp;lt;br&amp;gt;&lt;br /&gt;
'''Websites als Webmaster:''' [https://www.schachbund.de/ Deutscher Schachbund], [https://www.berlinerschachverband.de Berliner Schachverband]&amp;lt;br&amp;gt;&lt;br /&gt;
'''Bisher benutzte CMS:''' [http://www.phpcms.de/ phpCMS], [http://wpde.org/ WordPress], [http://mozilo.de/ moziloCMS], [http://www.joomla.de/ Joomla!], Limbo, [http://pivotx.net/ PivotX], Contao und testweise [http://www.drupal.de/ Drupal]&amp;lt;br&amp;gt;&lt;br /&gt;
'''Forum:''' [https://community.contao.org/de/member.php?10642-Samson1964 Samson1964]&lt;br /&gt;
&lt;br /&gt;
Ich benutze Contao seit Mai 2013 und will damit die neue Webpräsenz des Deutschen Schachbundes umsetzen. Bisher setze ich hier auf das altbewährte phpCMS und PivotX - beides ohne MySQL-Datenbank.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-11-08T14:19:56Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Anpassung von C3-Erweiterungen auf die C4-Umgebung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 und PHP 7 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache eines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von system/modules ==&lt;br /&gt;
&lt;br /&gt;
Für jede der Erweiterungen in diesem Verzeichnis von Contao 3 habe ich über Google auf packagist.org entsprechende Bundles gesucht. Da bei Domainfactory die Installation eines solchen Bundles mit dem Contao Manager nicht möglich ist, mußte ich immer auf die Shell ausweichen. Der Befehl muß natürlich im Ordner web ausgeführt werden, wo die Datei contao-manager.phar.php gespeichert ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require BUNDLENAME&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Bei der Installation mußte ich auf diverse Fehlermeldungen reagieren:&lt;br /&gt;
* Bundle nicht kompatibel mit Contao 4 -&amp;gt; einfach die C3-Erweiterung nach system/modules kopieren&lt;br /&gt;
* Bundle kann erforderliche externe Bundles nicht installieren -&amp;gt; C3-Erweiterung in system/modules von Contao 4 löschen, danach Installation wiederholen&lt;br /&gt;
* Bundle craffft/contao-calendar-ical-bundle läßt sich nicht installieren -&amp;gt; &amp;quot;dev-master&amp;quot; im Shell-Aufruf anhängen (mit den Hochkommata!)&lt;br /&gt;
Den zweiten Fall bekam ich bei der Installation von terminal42/contao-leads auf den Monitor. Da ich vorher bereits die Erweiterungen Haste und multicolumnwizard aus meiner C3-Installation nach system/modules kopiert hatte, wollte der Composer die C4-Bundles von Haste und multicolumnwizard nicht installieren.&lt;br /&gt;
&lt;br /&gt;
Nach jeder Installation bzw. jedem Kopiervorgang leerte ich den Cache und erstellte die Symlinks neu, um danach zu überprüfen, ob insbesondere die C3-Erweiterungen funktionieren. Fehlermeldungen im Zusammenhang mit der PHP7-Kompatibilität konnte sofort beseitigen, die schwierigeren Fälle hob ich mir für später auf.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
== CSS-Dateien von Erweiterungen werden nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
Trotz Cacheleeren will der Server partout keine CSS-Dateien aus public-Verzeichnissen o.ä. von Erweiterungen laden. Es kommt immer eine 404-Fehlermeldung. Schuld ist wahrscheinlich ein nichtgenerierter Symlink. Hier hilft ein Aufruf von &amp;quot;Symlinks neu erstellen&amp;quot; in der Systemwartung im C4-Backend. Siehe dazu auch: [https://www.marcosimbuerger.ch/contao-kurzanleitungen-details/contao-3-erweiterung-in-contao-4-installieren.html Contao 3 Erweiterung in Contao 4 installieren]&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
Eine interessante Variante habe ich auf [http://forum.premium-contao-themes.com/forum/customelements-vorlagen-pool-aa/7882-contao-4-4-internen-prod-cache-leeren-beim-laden dieser Webseite] gefunden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
\Files::getInstance()-&amp;gt;rrdir('var/cache/prod', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
soll in die system/config/initconfig.php eingetragen werden. Dann wird bei jedem Laden der Seite der produktive Cache gelöscht.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
= Anpassung von C3-Erweiterungen auf die C4-Umgebung =&lt;br /&gt;
&lt;br /&gt;
Weiterleitungen auf die main.php funktionieren in Contao 4 nicht mehr:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$backlink = 'main.php?do=erweiterung&amp;amp;act=edit&amp;amp;id='.$id.'&amp;amp;rt='.REQUEST_TOKEN;&lt;br /&gt;
header('Location:'.$backlink); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Erweiterung [timelinejs] ==&lt;br /&gt;
&lt;br /&gt;
Für diese Erweiterung gibt es kein C4-Bundle. Ich kopierte deshalb die C3-Version in meine C4-Installation, doch die Erweiterung lief weder im FE noch im BE. Ursache waren die fehlenden Abhängigkeiten [dca_rules] und [metapalettes]. Von letzterer Erweiterung gibt es ein C4-Bundle, das sich aber über die Shell nicht installieren ließ - ganz am Ende, als schon ich auf die Erfolgsmeldung wartete, kam ein Timeout. Ich habe deshalb von beiden Erweiterungen die C3-Versionen kopiert.&lt;br /&gt;
&lt;br /&gt;
== Erweiterung [chronik] ==&lt;br /&gt;
&lt;br /&gt;
Das ist eine selbstprogrammierte Erweiterung zur Verwaltung von historischen Ereignissen. Im FE bekam ich einen 404-Fehler. Ursache ist ein Fehler in meiner URL-Umschreibung. Insbesondere komme ich hier mit dem Developer-Modus noch nicht klar. Im Contao-Forum gibt es hierzu ein [https://community.contao.org/de/showthread.php?68635-Strukturierte-URL-s-mit-app_dev Thema].&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-11-08T05:52:39Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Kopieren von system/modules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 und PHP 7 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache eines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von system/modules ==&lt;br /&gt;
&lt;br /&gt;
Für jede der Erweiterungen in diesem Verzeichnis von Contao 3 habe ich über Google auf packagist.org entsprechende Bundles gesucht. Da bei Domainfactory die Installation eines solchen Bundles mit dem Contao Manager nicht möglich ist, mußte ich immer auf die Shell ausweichen. Der Befehl muß natürlich im Ordner web ausgeführt werden, wo die Datei contao-manager.phar.php gespeichert ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require BUNDLENAME&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Bei der Installation mußte ich auf diverse Fehlermeldungen reagieren:&lt;br /&gt;
* Bundle nicht kompatibel mit Contao 4 -&amp;gt; einfach die C3-Erweiterung nach system/modules kopieren&lt;br /&gt;
* Bundle kann erforderliche externe Bundles nicht installieren -&amp;gt; C3-Erweiterung in system/modules von Contao 4 löschen, danach Installation wiederholen&lt;br /&gt;
* Bundle craffft/contao-calendar-ical-bundle läßt sich nicht installieren -&amp;gt; &amp;quot;dev-master&amp;quot; im Shell-Aufruf anhängen (mit den Hochkommata!)&lt;br /&gt;
Den zweiten Fall bekam ich bei der Installation von terminal42/contao-leads auf den Monitor. Da ich vorher bereits die Erweiterungen Haste und multicolumnwizard aus meiner C3-Installation nach system/modules kopiert hatte, wollte der Composer die C4-Bundles von Haste und multicolumnwizard nicht installieren.&lt;br /&gt;
&lt;br /&gt;
Nach jeder Installation bzw. jedem Kopiervorgang leerte ich den Cache und erstellte die Symlinks neu, um danach zu überprüfen, ob insbesondere die C3-Erweiterungen funktionieren. Fehlermeldungen im Zusammenhang mit der PHP7-Kompatibilität konnte sofort beseitigen, die schwierigeren Fälle hob ich mir für später auf.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
== CSS-Dateien von Erweiterungen werden nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
Trotz Cacheleeren will der Server partout keine CSS-Dateien aus public-Verzeichnissen o.ä. von Erweiterungen laden. Es kommt immer eine 404-Fehlermeldung. Schuld ist wahrscheinlich ein nichtgenerierter Symlink. Hier hilft ein Aufruf von &amp;quot;Symlinks neu erstellen&amp;quot; in der Systemwartung im C4-Backend. Siehe dazu auch: [https://www.marcosimbuerger.ch/contao-kurzanleitungen-details/contao-3-erweiterung-in-contao-4-installieren.html Contao 3 Erweiterung in Contao 4 installieren]&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
Eine interessante Variante habe ich auf [http://forum.premium-contao-themes.com/forum/customelements-vorlagen-pool-aa/7882-contao-4-4-internen-prod-cache-leeren-beim-laden dieser Webseite] gefunden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
\Files::getInstance()-&amp;gt;rrdir('var/cache/prod', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
soll in die system/config/initconfig.php eingetragen werden. Dann wird bei jedem Laden der Seite der produktive Cache gelöscht.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
= Anpassung von C3-Erweiterungen auf die C4-Umgebung =&lt;br /&gt;
&lt;br /&gt;
Weiterleitungen auf die main.php funktionieren in Contao 4 nicht mehr:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$backlink = 'main.php?do=erweiterung&amp;amp;act=edit&amp;amp;id='.$id.'&amp;amp;rt='.REQUEST_TOKEN;&lt;br /&gt;
header('Location:'.$backlink); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-11-08T05:52:03Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Kopieren von fehlenden Dateien */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 und PHP 7 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache eines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von system/modules ==&lt;br /&gt;
&lt;br /&gt;
Für jede der Erweiterungen in diesem Verzeichnis von Contao 3 habe ich über Google auf packagist.org entsprechende Bundles gesucht. Da bei Domainfactory die Installation eines solchen Bundles nicht möglich ist, mußte ich immer auf die Shell ausweichen. Der Befehl muß natürlich im Ordner web ausgeführt werden, wo die Datei contao-manager.phar.php gespeichert ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require BUNDLENAME&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Bei der Installation mußte ich auf diverse Fehlermeldungen reagieren:&lt;br /&gt;
* Bundle nicht kompatibel mit Contao 4 -&amp;gt; einfach die C3-Erweiterung nach system/modules kopieren&lt;br /&gt;
* Bundle kann erforderliche externe Bundles nicht installieren -&amp;gt; C3-Erweiterung in system/modules von Contao 4 löschen, danach Installation wiederholen&lt;br /&gt;
* Bundle craffft/contao-calendar-ical-bundle läßt sich nicht installieren -&amp;gt; &amp;quot;dev-master&amp;quot; im Shell-Aufruf anhängen (mit den Hochkommata!)&lt;br /&gt;
Den zweiten Fall bekam ich bei der Installation von terminal42/contao-leads auf den Monitor. Da ich vorher bereits die Erweiterungen Haste und multicolumnwizard aus meiner C3-Installation nach system/modules kopiert hatte, wollte der Composer die C4-Bundles von Haste und multicolumnwizard nicht installieren.&lt;br /&gt;
&lt;br /&gt;
Nach jeder Installation bzw. jedem Kopiervorgang leerte ich den Cache und erstellte die Symlinks neu, um danach zu überprüfen, ob insbesondere die C3-Erweiterungen funktionieren. Fehlermeldungen im Zusammenhang mit der PHP7-Kompatibilität konnte sofort beseitigen, die schwierigeren Fälle hob ich mir für später auf.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
== CSS-Dateien von Erweiterungen werden nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
Trotz Cacheleeren will der Server partout keine CSS-Dateien aus public-Verzeichnissen o.ä. von Erweiterungen laden. Es kommt immer eine 404-Fehlermeldung. Schuld ist wahrscheinlich ein nichtgenerierter Symlink. Hier hilft ein Aufruf von &amp;quot;Symlinks neu erstellen&amp;quot; in der Systemwartung im C4-Backend. Siehe dazu auch: [https://www.marcosimbuerger.ch/contao-kurzanleitungen-details/contao-3-erweiterung-in-contao-4-installieren.html Contao 3 Erweiterung in Contao 4 installieren]&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
Eine interessante Variante habe ich auf [http://forum.premium-contao-themes.com/forum/customelements-vorlagen-pool-aa/7882-contao-4-4-internen-prod-cache-leeren-beim-laden dieser Webseite] gefunden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
\Files::getInstance()-&amp;gt;rrdir('var/cache/prod', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
soll in die system/config/initconfig.php eingetragen werden. Dann wird bei jedem Laden der Seite der produktive Cache gelöscht.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
= Anpassung von C3-Erweiterungen auf die C4-Umgebung =&lt;br /&gt;
&lt;br /&gt;
Weiterleitungen auf die main.php funktionieren in Contao 4 nicht mehr:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$backlink = 'main.php?do=erweiterung&amp;amp;act=edit&amp;amp;id='.$id.'&amp;amp;rt='.REQUEST_TOKEN;&lt;br /&gt;
header('Location:'.$backlink); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-11-08T05:49:38Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Datenbestand */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 und PHP 7 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von system/modules ==&lt;br /&gt;
&lt;br /&gt;
Für jede der Erweiterungen in diesem Verzeichnis von Contao 3 habe ich über Google auf packagist.org entsprechende Bundles gesucht. Da bei Domainfactory die Installation eines solchen Bundles nicht möglich ist, mußte ich immer auf die Shell ausweichen. Der Befehl muß natürlich im Ordner web ausgeführt werden, wo die Datei contao-manager.phar.php gespeichert ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require BUNDLENAME&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Bei der Installation mußte ich auf diverse Fehlermeldungen reagieren:&lt;br /&gt;
* Bundle nicht kompatibel mit Contao 4 -&amp;gt; einfach die C3-Erweiterung nach system/modules kopieren&lt;br /&gt;
* Bundle kann erforderliche externe Bundles nicht installieren -&amp;gt; C3-Erweiterung in system/modules von Contao 4 löschen, danach Installation wiederholen&lt;br /&gt;
* Bundle craffft/contao-calendar-ical-bundle läßt sich nicht installieren -&amp;gt; &amp;quot;dev-master&amp;quot; im Shell-Aufruf anhängen (mit den Hochkommata!)&lt;br /&gt;
Den zweiten Fall bekam ich bei der Installation von terminal42/contao-leads auf den Monitor. Da ich vorher bereits die Erweiterungen Haste und multicolumnwizard aus meiner C3-Installation nach system/modules kopiert hatte, wollte der Composer die C4-Bundles von Haste und multicolumnwizard nicht installieren.&lt;br /&gt;
&lt;br /&gt;
Nach jeder Installation bzw. jedem Kopiervorgang leerte ich den Cache und erstellte die Symlinks neu, um danach zu überprüfen, ob insbesondere die C3-Erweiterungen funktionieren. Fehlermeldungen im Zusammenhang mit der PHP7-Kompatibilität konnte sofort beseitigen, die schwierigeren Fälle hob ich mir für später auf.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
== CSS-Dateien von Erweiterungen werden nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
Trotz Cacheleeren will der Server partout keine CSS-Dateien aus public-Verzeichnissen o.ä. von Erweiterungen laden. Es kommt immer eine 404-Fehlermeldung. Schuld ist wahrscheinlich ein nichtgenerierter Symlink. Hier hilft ein Aufruf von &amp;quot;Symlinks neu erstellen&amp;quot; in der Systemwartung im C4-Backend. Siehe dazu auch: [https://www.marcosimbuerger.ch/contao-kurzanleitungen-details/contao-3-erweiterung-in-contao-4-installieren.html Contao 3 Erweiterung in Contao 4 installieren]&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
Eine interessante Variante habe ich auf [http://forum.premium-contao-themes.com/forum/customelements-vorlagen-pool-aa/7882-contao-4-4-internen-prod-cache-leeren-beim-laden dieser Webseite] gefunden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
\Files::getInstance()-&amp;gt;rrdir('var/cache/prod', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
soll in die system/config/initconfig.php eingetragen werden. Dann wird bei jedem Laden der Seite der produktive Cache gelöscht.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
= Anpassung von C3-Erweiterungen auf die C4-Umgebung =&lt;br /&gt;
&lt;br /&gt;
Weiterleitungen auf die main.php funktionieren in Contao 4 nicht mehr:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$backlink = 'main.php?do=erweiterung&amp;amp;act=edit&amp;amp;id='.$id.'&amp;amp;rt='.REQUEST_TOKEN;&lt;br /&gt;
header('Location:'.$backlink); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-30T16:29:13Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Installation von C4-Erweiterungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von system/modules ==&lt;br /&gt;
&lt;br /&gt;
Für jede der Erweiterungen in diesem Verzeichnis von Contao 3 habe ich über Google auf packagist.org entsprechende Bundles gesucht. Da bei Domainfactory die Installation eines solchen Bundles nicht möglich ist, mußte ich immer auf die Shell ausweichen. Der Befehl muß natürlich im Ordner web ausgeführt werden, wo die Datei contao-manager.phar.php gespeichert ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require BUNDLENAME&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Bei der Installation mußte ich auf diverse Fehlermeldungen reagieren:&lt;br /&gt;
* Bundle nicht kompatibel mit Contao 4 -&amp;gt; einfach die C3-Erweiterung nach system/modules kopieren&lt;br /&gt;
* Bundle kann erforderliche externe Bundles nicht installieren -&amp;gt; C3-Erweiterung in system/modules von Contao 4 löschen, danach Installation wiederholen&lt;br /&gt;
* Bundle craffft/contao-calendar-ical-bundle läßt sich nicht installieren -&amp;gt; &amp;quot;dev-master&amp;quot; im Shell-Aufruf anhängen (mit den Hochkommata!)&lt;br /&gt;
Den zweiten Fall bekam ich bei der Installation von terminal42/contao-leads auf den Monitor. Da ich vorher bereits die Erweiterungen Haste und multicolumnwizard aus meiner C3-Installation nach system/modules kopiert hatte, wollte der Composer die C4-Bundles von Haste und multicolumnwizard nicht installieren.&lt;br /&gt;
&lt;br /&gt;
Nach jeder Installation bzw. jedem Kopiervorgang leerte ich den Cache und erstellte die Symlinks neu, um danach zu überprüfen, ob insbesondere die C3-Erweiterungen funktionieren. Fehlermeldungen im Zusammenhang mit der PHP7-Kompatibilität konnte sofort beseitigen, die schwierigeren Fälle hob ich mir für später auf.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
== CSS-Dateien von Erweiterungen werden nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
Trotz Cacheleeren will der Server partout keine CSS-Dateien aus public-Verzeichnissen o.ä. von Erweiterungen laden. Es kommt immer eine 404-Fehlermeldung. Schuld ist wahrscheinlich ein nichtgenerierter Symlink. Hier hilft ein Aufruf von &amp;quot;Symlinks neu erstellen&amp;quot; in der Systemwartung im C4-Backend. Siehe dazu auch: [https://www.marcosimbuerger.ch/contao-kurzanleitungen-details/contao-3-erweiterung-in-contao-4-installieren.html Contao 3 Erweiterung in Contao 4 installieren]&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
Eine interessante Variante habe ich auf [http://forum.premium-contao-themes.com/forum/customelements-vorlagen-pool-aa/7882-contao-4-4-internen-prod-cache-leeren-beim-laden dieser Webseite] gefunden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
\Files::getInstance()-&amp;gt;rrdir('var/cache/prod', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
soll in die system/config/initconfig.php eingetragen werden. Dann wird bei jedem Laden der Seite der produktive Cache gelöscht.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
= Anpassung von C3-Erweiterungen auf die C4-Umgebung =&lt;br /&gt;
&lt;br /&gt;
Weiterleitungen auf die main.php funktionieren in Contao 4 nicht mehr:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$backlink = 'main.php?do=erweiterung&amp;amp;act=edit&amp;amp;id='.$id.'&amp;amp;rt='.REQUEST_TOKEN;&lt;br /&gt;
header('Location:'.$backlink); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-30T15:24:52Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Kopieren von system/modules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von system/modules ==&lt;br /&gt;
&lt;br /&gt;
Für jede der Erweiterungen in diesem Verzeichnis von Contao 3 habe ich über Google auf packagist.org entsprechende Bundles gesucht. Da bei Domainfactory die Installation eines solchen Bundles nicht möglich ist, mußte ich immer auf die Shell ausweichen. Der Befehl muß natürlich im Ordner web ausgeführt werden, wo die Datei contao-manager.phar.php gespeichert ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require BUNDLENAME&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Bei der Installation mußte ich auf diverse Fehlermeldungen reagieren:&lt;br /&gt;
* Bundle nicht kompatibel mit Contao 4 -&amp;gt; einfach die C3-Erweiterung nach system/modules kopieren&lt;br /&gt;
* Bundle kann erforderliche externe Bundles nicht installieren -&amp;gt; C3-Erweiterung in system/modules von Contao 4 löschen, danach Installation wiederholen&lt;br /&gt;
* Bundle craffft/contao-calendar-ical-bundle läßt sich nicht installieren -&amp;gt; &amp;quot;dev-master&amp;quot; im Shell-Aufruf anhängen (mit den Hochkommata!)&lt;br /&gt;
Den zweiten Fall bekam ich bei der Installation von terminal42/contao-leads auf den Monitor. Da ich vorher bereits die Erweiterungen Haste und multicolumnwizard aus meiner C3-Installation nach system/modules kopiert hatte, wollte der Composer die C4-Bundles von Haste und multicolumnwizard nicht installieren.&lt;br /&gt;
&lt;br /&gt;
Nach jeder Installation bzw. jedem Kopiervorgang leerte ich den Cache und erstellte die Symlinks neu, um danach zu überprüfen, ob insbesondere die C3-Erweiterungen funktionieren. Fehlermeldungen im Zusammenhang mit der PHP7-Kompatibilität konnte sofort beseitigen, die schwierigeren Fälle hob ich mir für später auf.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
== CSS-Dateien von Erweiterungen werden nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
Trotz Cacheleeren will der Server partout keine CSS-Dateien aus public-Verzeichnissen o.ä. von Erweiterungen laden. Es kommt immer eine 404-Fehlermeldung. Schuld ist wahrscheinlich ein nichtgenerierter Symlink. Hier hilft ein Aufruf von &amp;quot;Symlinks neu erstellen&amp;quot; in der Systemwartung im C4-Backend. Siehe dazu auch: [https://www.marcosimbuerger.ch/contao-kurzanleitungen-details/contao-3-erweiterung-in-contao-4-installieren.html Contao 3 Erweiterung in Contao 4 installieren]&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
Eine interessante Variante habe ich auf [http://forum.premium-contao-themes.com/forum/customelements-vorlagen-pool-aa/7882-contao-4-4-internen-prod-cache-leeren-beim-laden dieser Webseite] gefunden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
\Files::getInstance()-&amp;gt;rrdir('var/cache/prod', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
soll in die system/config/initconfig.php eingetragen werden. Dann wird bei jedem Laden der Seite der produktive Cache gelöscht.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-30T15:20:35Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Kopieren von system/modules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von system/modules ==&lt;br /&gt;
&lt;br /&gt;
Für jede der Erweiterungen in diesem Verzeichnis von Contao 3 habe ich über Google auf packagist.org entsprechende Bundles gesucht. Da bei Domainfactory die Installation eines solchen Bundles nicht möglich ist, mußte ich immer auf die Shell ausweichen. Der Befehl muß natürlich im Ordner web ausgeführt werden, wo die Datei contao-manager.phar.php gespeichert ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require BUNDLENAME&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Bei der Installation mußte ich auf diverse Fehlermeldungen reagieren:&lt;br /&gt;
* Bundle nicht kompatibel mit Contao 4 -&amp;gt; einfach die C3-Erweiterung nach system/modules kopieren&lt;br /&gt;
* Bundle kann erforderliche externe Bundles nicht installieren -&amp;gt; C3-Erweiterung in system/modules von Contao 4 löschen, danach Installation wiederholen&lt;br /&gt;
* Bundle craffft/contao-calendar-ical-bundle läßt sich nicht installieren -&amp;gt; &amp;quot;dev-master&amp;quot; im Shell-Aufruf anhängen (mit den Hochkommata!)&lt;br /&gt;
Den zweiten Fall bekam ich bei der Installation von terminal42/contao-leads auf den Monitor. Da ich vorher bereits die Erweiterungen Haste und multicolumnwizard aus meiner C3-Installation nach system/modules kopiert hatte, wollte der Composer die C4-Bundles von Haste und multicolumnwizard nicht installieren.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
== CSS-Dateien von Erweiterungen werden nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
Trotz Cacheleeren will der Server partout keine CSS-Dateien aus public-Verzeichnissen o.ä. von Erweiterungen laden. Es kommt immer eine 404-Fehlermeldung. Schuld ist wahrscheinlich ein nichtgenerierter Symlink. Hier hilft ein Aufruf von &amp;quot;Symlinks neu erstellen&amp;quot; in der Systemwartung im C4-Backend. Siehe dazu auch: [https://www.marcosimbuerger.ch/contao-kurzanleitungen-details/contao-3-erweiterung-in-contao-4-installieren.html Contao 3 Erweiterung in Contao 4 installieren]&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
Eine interessante Variante habe ich auf [http://forum.premium-contao-themes.com/forum/customelements-vorlagen-pool-aa/7882-contao-4-4-internen-prod-cache-leeren-beim-laden dieser Webseite] gefunden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
\Files::getInstance()-&amp;gt;rrdir('var/cache/prod', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
soll in die system/config/initconfig.php eingetragen werden. Dann wird bei jedem Laden der Seite der produktive Cache gelöscht.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-30T15:20:10Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Kopieren von system/modules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von system/modules ==&lt;br /&gt;
&lt;br /&gt;
Für jede der Erweiterungen in diesem Verzeichnis von Contao 3 habe ich über Google auf packagist.org entsprechende Bundles gesucht. Da bei Domainfactory die Installation eines solchen Bundles nicht möglich ist, mußte ich immer auf die Shell ausweichen. Der Befehl muß natürlich im Ordner web ausgeführt werden, wo die Datei contao-manager.phar.php gespeichert ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require PAKETNAME&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Bei der Installation mußte ich auf diverse Fehlermeldungen reagieren:&lt;br /&gt;
* Bundle nicht kompatibel mit Contao 4 -&amp;gt; einfach die C3-Erweiterung nach system/modules kopieren&lt;br /&gt;
* Bundle kann erforderliche externe Bundles nicht installieren -&amp;gt; C3-Erweiterung in system/modules von Contao 4 löschen, danach Installation wiederholen&lt;br /&gt;
* Bundle craffft/contao-calendar-ical-bundle läßt sich nicht installieren -&amp;gt; &amp;quot;dev-master&amp;quot; im Shell-Aufruf anhängen (mit den Hochkommata!)&lt;br /&gt;
Den zweiten Fall bekam ich bei der Installation von terminal42/contao-leads auf den Monitor. Da ich vorher bereits die Erweiterungen Haste und multicolumnwizard aus meiner C3-Installation nach system/modules kopiert hatte, wollte der Composer die C4-Bundles von Haste und multicolumnwizard nicht installieren.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
== CSS-Dateien von Erweiterungen werden nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
Trotz Cacheleeren will der Server partout keine CSS-Dateien aus public-Verzeichnissen o.ä. von Erweiterungen laden. Es kommt immer eine 404-Fehlermeldung. Schuld ist wahrscheinlich ein nichtgenerierter Symlink. Hier hilft ein Aufruf von &amp;quot;Symlinks neu erstellen&amp;quot; in der Systemwartung im C4-Backend. Siehe dazu auch: [https://www.marcosimbuerger.ch/contao-kurzanleitungen-details/contao-3-erweiterung-in-contao-4-installieren.html Contao 3 Erweiterung in Contao 4 installieren]&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
Eine interessante Variante habe ich auf [http://forum.premium-contao-themes.com/forum/customelements-vorlagen-pool-aa/7882-contao-4-4-internen-prod-cache-leeren-beim-laden dieser Webseite] gefunden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
\Files::getInstance()-&amp;gt;rrdir('var/cache/prod', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
soll in die system/config/initconfig.php eingetragen werden. Dann wird bei jedem Laden der Seite der produktive Cache gelöscht.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-30T15:15:42Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Kopieren von system/modules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von system/modules ==&lt;br /&gt;
&lt;br /&gt;
Für jede der Erweiterungen in diesem Verzeichnis von Contao 3 habe ich über Google auf packagist.org entsprechende Bundles gesucht. Da bei Domainfactory die Installation eines solchen Bundles nicht möglich ist, mußte ich immer auf die Shell ausweichen. Der Befehl muß natürlich im Ordner web ausgeführt werden, wo die Datei contao-manager.phar.php gespeichert ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require PAKETNAME&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Bei der Installation mußte ich auf diverse Fehlermeldungen reagieren:&lt;br /&gt;
* Bundle nicht kompatibel mit Contao 4 -&amp;gt; einfach die C3-Erweiterung nach system/modules kopieren&lt;br /&gt;
* Bundle kann erforderliche externe Bundles nicht installieren -&amp;gt; C3-Erweiterung in system/modules von Contao 4 löschen, danach Installation wiederholen&lt;br /&gt;
* Bundle craffft/contao-calendar-ical-bundle läßt sich nicht installieren -&amp;gt; &amp;quot;dev-master&amp;quot; im Shell-Aufruf anhängen (mit den Hochkommata!)&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
== CSS-Dateien von Erweiterungen werden nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
Trotz Cacheleeren will der Server partout keine CSS-Dateien aus public-Verzeichnissen o.ä. von Erweiterungen laden. Es kommt immer eine 404-Fehlermeldung. Schuld ist wahrscheinlich ein nichtgenerierter Symlink. Hier hilft ein Aufruf von &amp;quot;Symlinks neu erstellen&amp;quot; in der Systemwartung im C4-Backend. Siehe dazu auch: [https://www.marcosimbuerger.ch/contao-kurzanleitungen-details/contao-3-erweiterung-in-contao-4-installieren.html Contao 3 Erweiterung in Contao 4 installieren]&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
Eine interessante Variante habe ich auf [http://forum.premium-contao-themes.com/forum/customelements-vorlagen-pool-aa/7882-contao-4-4-internen-prod-cache-leeren-beim-laden dieser Webseite] gefunden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
\Files::getInstance()-&amp;gt;rrdir('var/cache/prod', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
soll in die system/config/initconfig.php eingetragen werden. Dann wird bei jedem Laden der Seite der produktive Cache gelöscht.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-30T15:05:18Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von system/modules ==&lt;br /&gt;
&lt;br /&gt;
Für jede der Erweiterungen in diesem Verzeichnis von Contao 3 habe ich über Google auf packagist.org entsprechende Bundles gesucht. Da bei Domainfactory die Installation eines solchen Bundles nicht möglich ist, mußte ich immer auf die Shell ausweichen.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
== CSS-Dateien von Erweiterungen werden nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
Trotz Cacheleeren will der Server partout keine CSS-Dateien aus public-Verzeichnissen o.ä. von Erweiterungen laden. Es kommt immer eine 404-Fehlermeldung. Schuld ist wahrscheinlich ein nichtgenerierter Symlink. Hier hilft ein Aufruf von &amp;quot;Symlinks neu erstellen&amp;quot; in der Systemwartung im C4-Backend. Siehe dazu auch: [https://www.marcosimbuerger.ch/contao-kurzanleitungen-details/contao-3-erweiterung-in-contao-4-installieren.html Contao 3 Erweiterung in Contao 4 installieren]&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
Eine interessante Variante habe ich auf [http://forum.premium-contao-themes.com/forum/customelements-vorlagen-pool-aa/7882-contao-4-4-internen-prod-cache-leeren-beim-laden dieser Webseite] gefunden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
\Files::getInstance()-&amp;gt;rrdir('var/cache/prod', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
soll in die system/config/initconfig.php eingetragen werden. Dann wird bei jedem Laden der Seite der produktive Cache gelöscht.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-23T17:57:13Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* CSS-Dateien von Erweiterungen werden nicht gefunden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
== CSS-Dateien von Erweiterungen werden nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
Trotz Cacheleeren will der Server partout keine CSS-Dateien aus public-Verzeichnissen o.ä. von Erweiterungen laden. Es kommt immer eine 404-Fehlermeldung. Schuld ist wahrscheinlich ein nichtgenerierter Symlink. Hier hilft ein Aufruf von &amp;quot;Symlinks neu erstellen&amp;quot; in der Systemwartung im C4-Backend. Siehe dazu auch: [https://www.marcosimbuerger.ch/contao-kurzanleitungen-details/contao-3-erweiterung-in-contao-4-installieren.html Contao 3 Erweiterung in Contao 4 installieren]&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
Eine interessante Variante habe ich auf [http://forum.premium-contao-themes.com/forum/customelements-vorlagen-pool-aa/7882-contao-4-4-internen-prod-cache-leeren-beim-laden dieser Webseite] gefunden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
\Files::getInstance()-&amp;gt;rrdir('var/cache/prod', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
soll in die system/config/initconfig.php eingetragen werden. Dann wird bei jedem Laden der Seite der produktive Cache gelöscht.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-23T17:39:39Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Cache löschen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
== CSS-Dateien von Erweiterungen werden nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
Trotz Cacheleeren will der Server partout keine CSS-Dateien aus public-Verzeichnissen o.ä. von Erweiterungen laden. Es kommt immer eine 404-Fehlermeldung. Liegt es an nicht richtigen Symlinks?&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
Eine interessante Variante habe ich auf [http://forum.premium-contao-themes.com/forum/customelements-vorlagen-pool-aa/7882-contao-4-4-internen-prod-cache-leeren-beim-laden dieser Webseite] gefunden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
\Files::getInstance()-&amp;gt;rrdir('var/cache/prod', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
soll in die system/config/initconfig.php eingetragen werden. Dann wird bei jedem Laden der Seite der produktive Cache gelöscht.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-23T17:34:37Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
== CSS-Dateien von Erweiterungen werden nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
Trotz Cacheleeren will der Server partout keine CSS-Dateien aus public-Verzeichnissen o.ä. von Erweiterungen laden. Es kommt immer eine 404-Fehlermeldung. Liegt es an nicht richtigen Symlinks?&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T18:45:34Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Cache löschen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T18:45:09Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Debugmodus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Cache löschen =&lt;br /&gt;
&lt;br /&gt;
In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php app/console cache:clear --env=prod --no-debug&lt;br /&gt;
php app/console cache:clear --env=dev --no-debug&lt;br /&gt;
php bin/console cache:clear --env=prod --no-debug&lt;br /&gt;
php vendor/bin/contao-console cache:clear --env=dev --no-debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Welcher Befhel der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.&lt;br /&gt;
&lt;br /&gt;
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T18:39:17Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T09:18:11Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Debugmodus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
muß im Root der Contao-Installation ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T09:14:31Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
= Debugmodus =&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine [https://contao.ninja/contao-4-login-fuer-app_dev-php-setzen.html Anleitung] online gestellt, da der Zugang zu app_dev.php geschützt ist.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T08:55:55Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Shell-Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei beachten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T08:55:29Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Installation von C4-Erweiterungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;br /&gt;
&lt;br /&gt;
== Shell-Installation ==&lt;br /&gt;
&lt;br /&gt;
Einige Beispielaufrufe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer&lt;br /&gt;
php contao-manager.phar.php composer require contao-legacy/simple_columns&lt;br /&gt;
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu&lt;br /&gt;
php contao-manager.phar.php composer update contao/core-bundle&lt;br /&gt;
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dabei baechten:&lt;br /&gt;
* Der Aliasaufruf &amp;quot;php&amp;quot; am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist &amp;quot;php&amp;quot; mit PHP 4.4.9 verknüft.&lt;br /&gt;
* Der Befehl muß im web-Verzeichnis ausgeführt werden.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T08:44:15Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
== Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ... ==&lt;br /&gt;
&lt;br /&gt;
Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T08:39:48Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Vorbereitung Datenbank */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T08:37:04Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code style=&amp;quot;color:blue&amp;quot;&amp;gt;mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code style=&amp;quot;color:blue&amp;quot;&amp;gt;mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Migration =&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T08:15:27Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Vorbereitung Datenbank */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code style=&amp;quot;color:blue&amp;quot;&amp;gt;mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code style=&amp;quot;color:blue&amp;quot;&amp;gt;mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T08:12:53Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: Samson1964 verschob die Seite Benutzer:Samson1964/Migration Contao 3 zu 4 nach Installation Contao 4 und Migration Contao 3 bei Domainfactory: Neu erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;code&amp;gt;mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;code&amp;gt;mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Benutzer:Samson1964/Migration_Contao_3_zu_4</id>
		<title>Benutzer:Samson1964/Migration Contao 3 zu 4</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Benutzer:Samson1964/Migration_Contao_3_zu_4"/>
				<updated>2017-10-22T08:12:53Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: Samson1964 verschob die Seite Benutzer:Samson1964/Migration Contao 3 zu 4 nach Installation Contao 4 und Migration Contao 3 bei Domainfactory: Neu erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[Installation Contao 4 und Migration Contao 3 bei Domainfactory]]&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T08:11:49Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Installation und Updates]]&lt;br /&gt;
&lt;br /&gt;
= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;code&amp;gt;mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;code&amp;gt;mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T08:10:08Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Installation von C4-Erweiterungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;code&amp;gt;mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;code&amp;gt;mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T08:09:20Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:&lt;br /&gt;
&lt;br /&gt;
Export einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;code&amp;gt;mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 &amp;gt; [Datei]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import einer MySQL-Datenbank:&lt;br /&gt;
&amp;lt;code&amp;gt;mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] &amp;lt; [Datei]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.&lt;br /&gt;
&lt;br /&gt;
== Kopieren von fehlenden Dateien ==&lt;br /&gt;
&lt;br /&gt;
Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich &amp;quot;mc&amp;quot; ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.&lt;br /&gt;
&lt;br /&gt;
Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.&lt;br /&gt;
&lt;br /&gt;
Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.&lt;br /&gt;
&lt;br /&gt;
= Installation von C4-Erweiterungen =&lt;br /&gt;
&lt;br /&gt;
Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory</id>
		<title>Installation Contao 4 und Migration Contao 3 bei Domainfactory</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Installation_Contao_4_und_Migration_Contao_3_bei_Domainfactory"/>
				<updated>2017-10-22T07:42:37Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: Neu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4 =&lt;br /&gt;
&lt;br /&gt;
Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.&lt;br /&gt;
&lt;br /&gt;
== Datenbestand ==&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen für Contao 4 ==&lt;br /&gt;
&lt;br /&gt;
Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.&lt;br /&gt;
* Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
* Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung Webspace == &lt;br /&gt;
&lt;br /&gt;
Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Logdateien_schreiben</id>
		<title>Logdateien schreiben</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Logdateien_schreiben"/>
				<updated>2017-07-26T08:12:46Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: Die Seite wurde neu angelegt: „Category:Dev HOWTOS  == Schreiben von Logdateien ==  Bei der Erweiterungsentwicklung und auch später ist es sinnvoll Ausgaben in Logdateien zu schreiben. …“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev HOWTOS]]&lt;br /&gt;
&lt;br /&gt;
== Schreiben von Logdateien ==&lt;br /&gt;
&lt;br /&gt;
Bei der Erweiterungsentwicklung und auch später ist es sinnvoll Ausgaben in Logdateien zu schreiben. Contao bietet dafür eine einfache Funktion, die fast überall im PHP-Code genutzt werden kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
log_message('Text','logdatei.log');&lt;br /&gt;
log_message(print_r($array,true),'logdatei2.log');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Systemwartung:_Cachebereinigung_nutzen</id>
		<title>Systemwartung: Cachebereinigung nutzen</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Systemwartung:_Cachebereinigung_nutzen"/>
				<updated>2017-07-25T19:16:22Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: Aus Benutzernamensraum verschoben und Kategorie ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev HOWTOS]]&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Informationen ==&lt;br /&gt;
&lt;br /&gt;
Unter System -&amp;gt; Systemwartung bietet das Contao-Backend die Möglichkeit der Bereinigung von Tabellen und Verzeichnissen. Darüberhinaus gibt es noch eine benutzerdefinierte Möglichkeit der Bereinigung. Hier ein Screenshot aus einem Backend einer Contao-3.5.28-Installation:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Systemwartung_bild1.jpg]]&lt;br /&gt;
&lt;br /&gt;
Um die Bereinigung in eigenen Erweiterungen zu nutzen, muß die config/config.php bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
== Tabellen bereinigen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_PURGE']['tables']['meine_erweiterung'] = array&lt;br /&gt;
(&lt;br /&gt;
	'callback' =&amp;gt; array('Namensraum\Klasse','purgeCache'),&lt;br /&gt;
	'affected' =&amp;gt; array('tl_tabelle1','tl_tabelle2')&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Callback-Funktion wird nur ausgeführt, wenn das Häkchen gesetzt und die Bereinigung damit gestartet wurde. Bei der bloßen Anzeige der Systemwartung passiert noch nichts. Mit dem Bereinigen an sich hat die Callback-Funktion nichts zu tun, aber kann man z.B. in Logdateien schreiben oder irgendetwas anderes machen.&amp;lt;br&amp;gt;&lt;br /&gt;
Für die in affected angegebenen Tabellen ermittelt Contao die Anzahl der Einträge und den Speicherplatz und zeigt diese Informationen im Backend an, siehe Screenshot oben.&lt;br /&gt;
&lt;br /&gt;
== Verzeichnisse bereinigen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_PURGE']['folders']['meine_erweiterung'] = array&lt;br /&gt;
(&lt;br /&gt;
	'callback' =&amp;gt; array('Namensraum\Klasse','purgeCache'),&lt;br /&gt;
	'affected' =&amp;gt; array('assets/meincache','system/cache/auchmeincache')&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Callback-Funktion wird nur ausgeführt, wenn das Häkchen gesetzt und die Bereinigung damit gestartet wurde. Bei der bloßen Anzeige der Systemwartung passiert noch nichts. Mit dem Bereinigen an sich hat die Callback-Funktion nichts zu tun, aber kann man z.B. in Logdateien schreiben oder irgendetwas anderes machen.&amp;lt;br&amp;gt;&lt;br /&gt;
Für die in affected angegebenen Verzeichnisse ermittelt Contao die Anzahl der Dateien und zeigt diese Informationen im Backend an, siehe Screenshot oben.&lt;br /&gt;
&lt;br /&gt;
== Benutzerdefiniert bereinigen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_PURGE']['custom']['meine_erweiterung'] = array&lt;br /&gt;
(&lt;br /&gt;
	'callback' =&amp;gt; array('Namensraum\Klasse','purgeCache')&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Callback-Funktion wird nur ausgeführt, wenn das Häkchen gesetzt und die Bereinigung damit gestartet wurde. Bei der bloßen Anzeige der Systemwartung passiert noch nichts. In der Callback-Funktion müssen Sie im Gegensatz zu den beiden anderen Möglichkeiten alles selbst machen, also auch Ihre Bereinigungsaufgaben. Ein affected-Array wird bei custom nicht benötigt.&lt;br /&gt;
&lt;br /&gt;
Der zweite Screenshot zeigt zwei benutzerdefinierte Bereinigungsfunktionen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Systemwartung_bild2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Um in die Anzeige ein paar Detailinformationen zur bevorstehenden Bereinigung zu bekommen, muß man etwas tricksen:&lt;br /&gt;
&lt;br /&gt;
== Sprachvariablen ==&lt;br /&gt;
&lt;br /&gt;
In der Datei languages/de/tl_maintenance.php können die deutschen Übersetzungen für die Anzeige abgespeichert werden. Für das Beispiel im zweiten Screenshot sieht das so aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_maintenance_jobs']['dewis'] = array('DeWIS-Cache leeren','Löscht den Cache der DeWIS-Abfrage. Dieser Cache kann in den Backend-Einstellungen dauerhaft deaktiviert werden.');&lt;br /&gt;
// Ausgabe ergänzen&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_maintenance_jobs']['dewis'][0] .= \Samson\DeWIS\DeWIS::calcCache();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Funktion calcCache ist bei mir für die Detailinformationen zuständig. Die werden einfach an das Label rangehangen.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Benutzer:Samson1964/Systemwartung:_Cachebereinigung_nutzen</id>
		<title>Benutzer:Samson1964/Systemwartung: Cachebereinigung nutzen</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Benutzer:Samson1964/Systemwartung:_Cachebereinigung_nutzen"/>
				<updated>2017-07-25T19:15:28Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: Samson1964 verschob die Seite Benutzer:Samson1964/Systemwartung: Cachebereinigung nutzen nach Systemwartung: Cachebereinigung nutzen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[Systemwartung: Cachebereinigung nutzen]]&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Systemwartung:_Cachebereinigung_nutzen</id>
		<title>Systemwartung: Cachebereinigung nutzen</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Systemwartung:_Cachebereinigung_nutzen"/>
				<updated>2017-07-25T19:15:27Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: Samson1964 verschob die Seite Benutzer:Samson1964/Systemwartung: Cachebereinigung nutzen nach Systemwartung: Cachebereinigung nutzen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allgemeine Informationen ==&lt;br /&gt;
&lt;br /&gt;
Unter System -&amp;gt; Systemwartung bietet das Contao-Backend die Möglichkeit der Bereinigung von Tabellen und Verzeichnissen. Darüberhinaus gibt es noch eine benutzerdefinierte Möglichkeit der Bereinigung. Hier ein Screenshot aus einem Backend einer Contao-3.5.28-Installation:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Systemwartung_bild1.jpg]]&lt;br /&gt;
&lt;br /&gt;
Um die Bereinigung in eigenen Erweiterungen zu nutzen, muß die config/config.php bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
== Tabellen bereinigen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_PURGE']['tables']['meine_erweiterung'] = array&lt;br /&gt;
(&lt;br /&gt;
	'callback' =&amp;gt; array('Namensraum\Klasse','purgeCache'),&lt;br /&gt;
	'affected' =&amp;gt; array('tl_tabelle1','tl_tabelle2')&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Callback-Funktion wird nur ausgeführt, wenn das Häkchen gesetzt und die Bereinigung damit gestartet wurde. Bei der bloßen Anzeige der Systemwartung passiert noch nichts. Mit dem Bereinigen an sich hat die Callback-Funktion nichts zu tun, aber kann man z.B. in Logdateien schreiben oder irgendetwas anderes machen.&amp;lt;br&amp;gt;&lt;br /&gt;
Für die in affected angegebenen Tabellen ermittelt Contao die Anzahl der Einträge und den Speicherplatz und zeigt diese Informationen im Backend an, siehe Screenshot oben.&lt;br /&gt;
&lt;br /&gt;
== Verzeichnisse bereinigen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_PURGE']['folders']['meine_erweiterung'] = array&lt;br /&gt;
(&lt;br /&gt;
	'callback' =&amp;gt; array('Namensraum\Klasse','purgeCache'),&lt;br /&gt;
	'affected' =&amp;gt; array('assets/meincache','system/cache/auchmeincache')&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Callback-Funktion wird nur ausgeführt, wenn das Häkchen gesetzt und die Bereinigung damit gestartet wurde. Bei der bloßen Anzeige der Systemwartung passiert noch nichts. Mit dem Bereinigen an sich hat die Callback-Funktion nichts zu tun, aber kann man z.B. in Logdateien schreiben oder irgendetwas anderes machen.&amp;lt;br&amp;gt;&lt;br /&gt;
Für die in affected angegebenen Verzeichnisse ermittelt Contao die Anzahl der Dateien und zeigt diese Informationen im Backend an, siehe Screenshot oben.&lt;br /&gt;
&lt;br /&gt;
== Benutzerdefiniert bereinigen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_PURGE']['custom']['meine_erweiterung'] = array&lt;br /&gt;
(&lt;br /&gt;
	'callback' =&amp;gt; array('Namensraum\Klasse','purgeCache')&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Callback-Funktion wird nur ausgeführt, wenn das Häkchen gesetzt und die Bereinigung damit gestartet wurde. Bei der bloßen Anzeige der Systemwartung passiert noch nichts. In der Callback-Funktion müssen Sie im Gegensatz zu den beiden anderen Möglichkeiten alles selbst machen, also auch Ihre Bereinigungsaufgaben. Ein affected-Array wird bei custom nicht benötigt.&lt;br /&gt;
&lt;br /&gt;
Der zweite Screenshot zeigt zwei benutzerdefinierte Bereinigungsfunktionen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Systemwartung_bild2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Um in die Anzeige ein paar Detailinformationen zur bevorstehenden Bereinigung zu bekommen, muß man etwas tricksen:&lt;br /&gt;
&lt;br /&gt;
== Sprachvariablen ==&lt;br /&gt;
&lt;br /&gt;
In der Datei languages/de/tl_maintenance.php können die deutschen Übersetzungen für die Anzeige abgespeichert werden. Für das Beispiel im zweiten Screenshot sieht das so aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_maintenance_jobs']['dewis'] = array('DeWIS-Cache leeren','Löscht den Cache der DeWIS-Abfrage. Dieser Cache kann in den Backend-Einstellungen dauerhaft deaktiviert werden.');&lt;br /&gt;
// Ausgabe ergänzen&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_maintenance_jobs']['dewis'][0] .= \Samson\DeWIS\DeWIS::calcCache();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Funktion calcCache ist bei mir für die Detailinformationen zuständig. Die werden einfach an das Label rangehangen.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Systemwartung:_Cachebereinigung_nutzen</id>
		<title>Systemwartung: Cachebereinigung nutzen</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Systemwartung:_Cachebereinigung_nutzen"/>
				<updated>2017-07-25T19:15:01Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Allgemeine Informationen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allgemeine Informationen ==&lt;br /&gt;
&lt;br /&gt;
Unter System -&amp;gt; Systemwartung bietet das Contao-Backend die Möglichkeit der Bereinigung von Tabellen und Verzeichnissen. Darüberhinaus gibt es noch eine benutzerdefinierte Möglichkeit der Bereinigung. Hier ein Screenshot aus einem Backend einer Contao-3.5.28-Installation:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Systemwartung_bild1.jpg]]&lt;br /&gt;
&lt;br /&gt;
Um die Bereinigung in eigenen Erweiterungen zu nutzen, muß die config/config.php bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
== Tabellen bereinigen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_PURGE']['tables']['meine_erweiterung'] = array&lt;br /&gt;
(&lt;br /&gt;
	'callback' =&amp;gt; array('Namensraum\Klasse','purgeCache'),&lt;br /&gt;
	'affected' =&amp;gt; array('tl_tabelle1','tl_tabelle2')&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Callback-Funktion wird nur ausgeführt, wenn das Häkchen gesetzt und die Bereinigung damit gestartet wurde. Bei der bloßen Anzeige der Systemwartung passiert noch nichts. Mit dem Bereinigen an sich hat die Callback-Funktion nichts zu tun, aber kann man z.B. in Logdateien schreiben oder irgendetwas anderes machen.&amp;lt;br&amp;gt;&lt;br /&gt;
Für die in affected angegebenen Tabellen ermittelt Contao die Anzahl der Einträge und den Speicherplatz und zeigt diese Informationen im Backend an, siehe Screenshot oben.&lt;br /&gt;
&lt;br /&gt;
== Verzeichnisse bereinigen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_PURGE']['folders']['meine_erweiterung'] = array&lt;br /&gt;
(&lt;br /&gt;
	'callback' =&amp;gt; array('Namensraum\Klasse','purgeCache'),&lt;br /&gt;
	'affected' =&amp;gt; array('assets/meincache','system/cache/auchmeincache')&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Callback-Funktion wird nur ausgeführt, wenn das Häkchen gesetzt und die Bereinigung damit gestartet wurde. Bei der bloßen Anzeige der Systemwartung passiert noch nichts. Mit dem Bereinigen an sich hat die Callback-Funktion nichts zu tun, aber kann man z.B. in Logdateien schreiben oder irgendetwas anderes machen.&amp;lt;br&amp;gt;&lt;br /&gt;
Für die in affected angegebenen Verzeichnisse ermittelt Contao die Anzahl der Dateien und zeigt diese Informationen im Backend an, siehe Screenshot oben.&lt;br /&gt;
&lt;br /&gt;
== Benutzerdefiniert bereinigen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_PURGE']['custom']['meine_erweiterung'] = array&lt;br /&gt;
(&lt;br /&gt;
	'callback' =&amp;gt; array('Namensraum\Klasse','purgeCache')&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Callback-Funktion wird nur ausgeführt, wenn das Häkchen gesetzt und die Bereinigung damit gestartet wurde. Bei der bloßen Anzeige der Systemwartung passiert noch nichts. In der Callback-Funktion müssen Sie im Gegensatz zu den beiden anderen Möglichkeiten alles selbst machen, also auch Ihre Bereinigungsaufgaben. Ein affected-Array wird bei custom nicht benötigt.&lt;br /&gt;
&lt;br /&gt;
Der zweite Screenshot zeigt zwei benutzerdefinierte Bereinigungsfunktionen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Systemwartung_bild2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Um in die Anzeige ein paar Detailinformationen zur bevorstehenden Bereinigung zu bekommen, muß man etwas tricksen:&lt;br /&gt;
&lt;br /&gt;
== Sprachvariablen ==&lt;br /&gt;
&lt;br /&gt;
In der Datei languages/de/tl_maintenance.php können die deutschen Übersetzungen für die Anzeige abgespeichert werden. Für das Beispiel im zweiten Screenshot sieht das so aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_maintenance_jobs']['dewis'] = array('DeWIS-Cache leeren','Löscht den Cache der DeWIS-Abfrage. Dieser Cache kann in den Backend-Einstellungen dauerhaft deaktiviert werden.');&lt;br /&gt;
// Ausgabe ergänzen&lt;br /&gt;
$GLOBALS['TL_LANG']['tl_maintenance_jobs']['dewis'][0] .= \Samson\DeWIS\DeWIS::calcCache();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Funktion calcCache ist bei mir für die Detailinformationen zuständig. Die werden einfach an das Label rangehangen.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:Systemwartung_bild2.jpg</id>
		<title>Datei:Systemwartung bild2.jpg</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:Systemwartung_bild2.jpg"/>
				<updated>2017-07-25T18:44:51Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:Systemwartung_bild1.jpg</id>
		<title>Datei:Systemwartung bild1.jpg</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:Systemwartung_bild1.jpg"/>
				<updated>2017-07-25T18:44:30Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Systemwartung:_Cachebereinigung_nutzen</id>
		<title>Systemwartung: Cachebereinigung nutzen</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Systemwartung:_Cachebereinigung_nutzen"/>
				<updated>2017-07-25T18:42:15Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: Die Seite wurde neu angelegt: „==Allgemeine Informationen== Unter System -&amp;gt; Systemwartung bietet das Contao-Backend die Möglichkeit der Bereinigung von Tabellen und Verzeichnissen. Darüber…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Allgemeine Informationen==&lt;br /&gt;
Unter System -&amp;gt; Systemwartung bietet das Contao-Backend die Möglichkeit der Bereinigung von Tabellen und Verzeichnissen. Darüberhinaus gibt es noch eine benutzerdefinierte Möglichkeit der Bereinigung. Um&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Dateien_in_die_Datenbank_importieren</id>
		<title>Dateien in die Datenbank importieren</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Dateien_in_die_Datenbank_importieren"/>
				<updated>2016-08-11T07:58:57Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: Die Seite wurde neu angelegt: „Category:Admin HOWTOS Category:Dev HOWTOS Category:Dev Snippets {{AppliesTo |Version=ab 3.2 }}  == Anleitung ==  Beim Import von fremden Inhalten m…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin HOWTOS]]&lt;br /&gt;
[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Dev Snippets]]&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|Version=ab 3.2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Anleitung ==&lt;br /&gt;
&lt;br /&gt;
Beim Import von fremden Inhalten müssen auch oft Dateien importiert bzw. in das datenbankgestützte Dateisystem von Contao eingebunden werden. Das geht mit dem nachfolgendem PHP-Code recht einfach.&lt;br /&gt;
&lt;br /&gt;
Die Datei die eingebunden wird, muß vorhanden sein! &lt;br /&gt;
&lt;br /&gt;
Die Funktion ''addResource'' erstellt einen neuen Eintrag in der Tabelle tl_files. Anschließend kann mit dem Zugriff auf das erstellte Objekt, die UUID in den eigenen Import integriert werden.&lt;br /&gt;
&lt;br /&gt;
== Code für eigene Importklasse ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$objFile = \Dbafs::addResource('files/bild.jpg');&lt;br /&gt;
$uuid = $objFile-&amp;gt;uuid;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/DCA:_List-Array</id>
		<title>DCA: List-Array</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/DCA:_List-Array"/>
				<updated>2016-03-16T18:54:58Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: Die Seite wurde neu angelegt: „{{stub}} = DCA: List-Array $GLOBALS['list'] = Category:Dev HOWTOS Category:Dev Snippets {{AppliesTo|TLVersion=ab 3|Version=ab 3}} Ich sammle an dieser …“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
= DCA: List-Array $GLOBALS['list'] =&lt;br /&gt;
[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Dev Snippets]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 3|Version=ab 3}}&lt;br /&gt;
Ich sammle an dieser Stelle Codeschnipsel zum DCA, sowohl zu dokumentierten als auch undokumentierten Variablen.&lt;br /&gt;
&lt;br /&gt;
== ['label'] == &lt;br /&gt;
&lt;br /&gt;
=== ['label']['fields'] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'fields' =&amp;gt; array('benutzer:tl_member.CONCAT(firstname,&amp;quot; &amp;quot;,lastname,&amp;quot; (&amp;quot;,username,&amp;quot;)&amp;quot;)', 'status', 'vereine')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legt fest welche Felder in der Auflistung angezeigt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Beispiel wird zuerst ein Feld '''benutzer''' [[DCA_Field_Mapping|gemappt]]. Der darin stehende Wert entspricht der id der Tabelle tl_member. Zurück geliefert wird mittels CONCAT ein String aus mehreren Feldern von tl_member.&lt;br /&gt;
&lt;br /&gt;
Felder die aus Arrays bestehen (z.B. select) und mehr als einen Wert zurückliefern, lassen sich nicht mappen. &lt;br /&gt;
&lt;br /&gt;
=== ['label']['showColumns'] ===&lt;br /&gt;
&lt;br /&gt;
Undokumentiert. Auflistung der Datensätze mit gleichmäßig ausgerichteten Spalten und Spaltenüberschriften. Erwartet: false/true &lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Samson1964|Frank Hoppe]] ([[Benutzer Diskussion:Samson1964|Diskussion]]) 19:54, 16. Mär. 2016 (CET)&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/MultiColumnWizard</id>
		<title>MultiColumnWizard</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/MultiColumnWizard"/>
				<updated>2016-03-11T20:48:10Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Verfügbare MultiColumnWizard Eval-Optionen */ Beispielcode ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[en:MultiSelectWizard]]&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| DevSite=http://www.men-at-work.de&lt;br /&gt;
| ExtVersion=3.0.0&lt;br /&gt;
| Version=2.10+&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/MultiColumnWizard.html&lt;br /&gt;
| TrackerLink=https://github.com/menatwork/MultiColumnWizard/issues&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der MultiColumnWizard ist ein Widget zur Abbildung von mehreren Feldern ''gleichen'' und/oder ''unterschiedlichen'' Typs (''Inputtype'') in einem DCA-Element. Die einzelnen Felder des MCW werden im Backend spaltenweise geführt und sind als Gruppe zeilenweise erweiterbar. Die Anordnung entspricht einem multidimensionalen Array der Form ''array[Zeilen][Felder]'', das als serialisiertes Array in der Datenbank abgelegt wird. Das Widget ist quasi identisch zu [[MultiTextWizard]] oder [[MultiSelectWizard]]. Es erweitert die Funktionalitäten für beliebige Widgets.&lt;br /&gt;
&lt;br /&gt;
=Aussehen=&lt;br /&gt;
Die Extension kann für jede Art von Inputtype verwendet werden, eine Mischung der einzelnen Typen ist kein Problem.&lt;br /&gt;
[[Datei:MultiColumnWizard.jpg|MultiColumnWizard|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=Verwendung=&lt;br /&gt;
Es gibt zwei Verwendungsmöglichkeiten. Entweder direkt mit der Angabe von &amp;quot;columnFields&amp;quot; im &amp;quot;eval&amp;quot;-Array oder mit einem Callback.&lt;br /&gt;
&lt;br /&gt;
==Angabe mit columnFields==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_theme']['fields']['templateSelection'] = array&lt;br /&gt;
(&lt;br /&gt;
	'label'			=&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['templateSelection'],&lt;br /&gt;
	'exclude' 		=&amp;gt; true,&lt;br /&gt;
	'inputType' 		=&amp;gt; 'multiColumnWizard',&lt;br /&gt;
	'eval' 			=&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'columnFields' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'ts_client_os' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_client_os'],&lt;br /&gt;
				'exclude'               =&amp;gt; true,&lt;br /&gt;
				'inputType'             =&amp;gt; 'select',&lt;br /&gt;
				'options'            	=&amp;gt; array&lt;br /&gt;
				(&lt;br /&gt;
					'option1'       =&amp;gt; 'Option 1',&lt;br /&gt;
					'option2'     	=&amp;gt; 'Option 2',&lt;br /&gt;
				),&lt;br /&gt;
				'eval' 			=&amp;gt; array('style' =&amp;gt; 'width:250px', 'includeBlankOption'=&amp;gt;true, 'chosen'=&amp;gt;true)&lt;br /&gt;
			),&lt;br /&gt;
			'ts_client_browser' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_client_browser'],&lt;br /&gt;
				'exclude'               =&amp;gt; true,&lt;br /&gt;
				'inputType'             =&amp;gt; 'text',&lt;br /&gt;
				'eval' 			=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
			'ts_client_mobile' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_client_mobile'],&lt;br /&gt;
				'exclude'               =&amp;gt; true,&lt;br /&gt;
				'inputType'             =&amp;gt; 'checkbox',&lt;br /&gt;
				'eval'                  =&amp;gt; array('style'=&amp;gt;'width:40px')&lt;br /&gt;
&lt;br /&gt;
			),&lt;br /&gt;
			'ts_extension' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label' 		=&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_extension'],&lt;br /&gt;
				'inputType' 		=&amp;gt; 'text',&lt;br /&gt;
				'eval'                  =&amp;gt; array('mandatory'=&amp;gt;true, 'style'=&amp;gt;'width:115px')&lt;br /&gt;
			),&lt;br /&gt;
		)&lt;br /&gt;
	),&lt;br /&gt;
	'sql'                     =&amp;gt; &amp;quot;blob NULL&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Das ''''chosen'=&amp;gt;true''' im eval vom Select Feld (ts_client_os) ist für Contao 2.11 wichtig, da sonst die Anzeige nicht korrekt funktioniert.&amp;lt;br /&amp;gt;Für Contao 2.10 ist das nicht nötig, stört aber nicht und ist somit kompatibel für beide Versionen. Das SQL-Feld ist nur nötig, wenn es keine database.sql gibt.&lt;br /&gt;
&lt;br /&gt;
==Angabe mit Callback==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_table']['fields']['anything'] = array&lt;br /&gt;
(&lt;br /&gt;
	'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_table']['anything'],&lt;br /&gt;
	'exclude'		=&amp;gt; true,&lt;br /&gt;
	'inputType'		=&amp;gt; 'multiColumnWizard',&lt;br /&gt;
	'eval'			=&amp;gt; array('mandatory'=&amp;gt;true,'columnsCallback'=&amp;gt;array('Class', 'Method'))&lt;br /&gt;
										&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wobei natürlich der Return-Wert genau das selbe Array sein muss, wie bei der &amp;quot;columnFields&amp;quot;-Variante.&lt;br /&gt;
&lt;br /&gt;
==Verfügbare MultiColumnWizard Eval-Optionen==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Schlüssel''' || '''Wert''' || '''Beschreibung''' || '''Beispiel'''&lt;br /&gt;
|-&lt;br /&gt;
| columnPos || Gruppenname&amp;lt;br /&amp;gt;''string'' || Gruppiert Felder und zeigt Sie untereinander an. || &lt;br /&gt;
|-&lt;br /&gt;
| maxCount || Menge&amp;lt;br /&amp;gt;''integer'' || Legt die maximale Anzahl an Felder fest, die angelegt werden dürfen. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['maxCount'] = 4;&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| minCount || Menge&amp;lt;br /&amp;gt;''integer'' || Legt die minimale Anzahl an Felder fest, die angelegt werden dürfen. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['minCount '] = 2;&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign || Position&amp;lt;br /&amp;gt;''string'' || Legt die vertikale Position der Zelle in der Tabelle fest. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['valign'] = 'top';&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| buttonPos || Position&amp;lt;br /&amp;gt;''string'' || Legt die vertikale Position der Zelle, in der sich die Buttons befinden, fest. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['buttonPos'] = 'bottom';&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| buttons || Buttonnamen&amp;lt;br /&amp;gt;''associative array'' || Legt fest, mit welchem Icon die 4 Buttons &amp;quot;up&amp;quot;, &amp;quot;down&amp;quot;, &amp;quot;copy&amp;quot;, &amp;quot;delete&amp;quot; dargestellt werden. Dabei ist der Buttonname der Schlüssel und der Pfad zum Icon der Wert. Wird ein Wert für einen Button explizit auf ''false'' gesetzt, so wird dieser versteckt. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['buttons'] = array('copy' =&amp;gt; false, 'delete' =&amp;gt; false, 'up' =&amp;gt; 'myUpIcon.png');&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Unterstützte Contao Eval-Optionen==&lt;br /&gt;
Diese Eval-Optionen werden für die &amp;quot;Kindwidgets&amp;quot; - oder besser &amp;quot;komponierten Widgets&amp;quot; - unterstützt.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| '''Schlüssel''' || '''Status'''&lt;br /&gt;
|-&lt;br /&gt;
| nospace || ''Ungetestet''&lt;br /&gt;
|-&lt;br /&gt;
| multiple || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| size || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| rgxp || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| style || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| tl_class || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| preserveTags || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| allowHtml || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| trailingSlash || ''Ungetestet''&lt;br /&gt;
|-&lt;br /&gt;
| mandatory || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| spaceToUnderscore || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| includeBlankOption || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| maxlength || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| minlength || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| chosen || Unterstützt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
===options_callback===&lt;br /&gt;
Im Beispiel oben wird für das Select Feld ein Optionsliste direkt definiert über 'options'. Das geht auch über 'options_callback'. Im Gegensatz zum Core wird der Methode jedoch kein Datacontainer $dc übermittelt.&lt;br /&gt;
&lt;br /&gt;
Beispiel für eine Liste abhängig von der Contao Version:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
			'ts_client_os' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_client_os'],&lt;br /&gt;
				'exclude'               =&amp;gt; true,&lt;br /&gt;
				'inputType'             =&amp;gt; 'select',&lt;br /&gt;
				'options_callback'      =&amp;gt; array('tl_theme', 'getOptions'), &lt;br /&gt;
				'eval' 			=&amp;gt; array('style' =&amp;gt; 'width:250px', 'includeBlankOption'=&amp;gt;true, 'chosen'=&amp;gt;true)&lt;br /&gt;
			),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun wie üblich im DCA die Klasse mit der Methode:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class tl_theme extends Backend&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Return options&lt;br /&gt;
     * @return array&lt;br /&gt;
     */&lt;br /&gt;
    public function getOptions()&lt;br /&gt;
    {&lt;br /&gt;
        $arrOptions = array(&lt;br /&gt;
		'option1'       =&amp;gt; 'Option 1',&lt;br /&gt;
		'option2'     	=&amp;gt; 'Option 2',&lt;br /&gt;
		'option3'     	=&amp;gt; 'Option 3',&lt;br /&gt;
		);&lt;br /&gt;
        //option3 not in Contao 2.10&lt;br /&gt;
        if (version_compare(VERSION, '2.11', '&amp;lt;'))&lt;br /&gt;
        {&lt;br /&gt;
            $arrOptions = array(&lt;br /&gt;
		'option1'       =&amp;gt; 'Option 1',&lt;br /&gt;
		'option2'     	=&amp;gt; 'Option 2',&lt;br /&gt;
		);&lt;br /&gt;
        }&lt;br /&gt;
        return $arrOptions;&lt;br /&gt;
    }&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/MultiColumnWizard</id>
		<title>MultiColumnWizard</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/MultiColumnWizard"/>
				<updated>2016-03-11T19:55:43Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Angabe mit columnFields */ sql&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[en:MultiSelectWizard]]&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| DevSite=http://www.men-at-work.de&lt;br /&gt;
| ExtVersion=3.0.0&lt;br /&gt;
| Version=2.10+&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/MultiColumnWizard.html&lt;br /&gt;
| TrackerLink=https://github.com/menatwork/MultiColumnWizard/issues&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der MultiColumnWizard ist ein Widget zur Abbildung von mehreren Feldern ''gleichen'' und/oder ''unterschiedlichen'' Typs (''Inputtype'') in einem DCA-Element. Die einzelnen Felder des MCW werden im Backend spaltenweise geführt und sind als Gruppe zeilenweise erweiterbar. Die Anordnung entspricht einem multidimensionalen Array der Form ''array[Zeilen][Felder]'', das als serialisiertes Array in der Datenbank abgelegt wird. Das Widget ist quasi identisch zu [[MultiTextWizard]] oder [[MultiSelectWizard]]. Es erweitert die Funktionalitäten für beliebige Widgets.&lt;br /&gt;
&lt;br /&gt;
=Aussehen=&lt;br /&gt;
Die Extension kann für jede Art von Inputtype verwendet werden, eine Mischung der einzelnen Typen ist kein Problem.&lt;br /&gt;
[[Datei:MultiColumnWizard.jpg|MultiColumnWizard|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=Verwendung=&lt;br /&gt;
Es gibt zwei Verwendungsmöglichkeiten. Entweder direkt mit der Angabe von &amp;quot;columnFields&amp;quot; im &amp;quot;eval&amp;quot;-Array oder mit einem Callback.&lt;br /&gt;
&lt;br /&gt;
==Angabe mit columnFields==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_theme']['fields']['templateSelection'] = array&lt;br /&gt;
(&lt;br /&gt;
	'label'			=&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['templateSelection'],&lt;br /&gt;
	'exclude' 		=&amp;gt; true,&lt;br /&gt;
	'inputType' 		=&amp;gt; 'multiColumnWizard',&lt;br /&gt;
	'eval' 			=&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'columnFields' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'ts_client_os' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_client_os'],&lt;br /&gt;
				'exclude'               =&amp;gt; true,&lt;br /&gt;
				'inputType'             =&amp;gt; 'select',&lt;br /&gt;
				'options'            	=&amp;gt; array&lt;br /&gt;
				(&lt;br /&gt;
					'option1'       =&amp;gt; 'Option 1',&lt;br /&gt;
					'option2'     	=&amp;gt; 'Option 2',&lt;br /&gt;
				),&lt;br /&gt;
				'eval' 			=&amp;gt; array('style' =&amp;gt; 'width:250px', 'includeBlankOption'=&amp;gt;true, 'chosen'=&amp;gt;true)&lt;br /&gt;
			),&lt;br /&gt;
			'ts_client_browser' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_client_browser'],&lt;br /&gt;
				'exclude'               =&amp;gt; true,&lt;br /&gt;
				'inputType'             =&amp;gt; 'text',&lt;br /&gt;
				'eval' 			=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
			'ts_client_mobile' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_client_mobile'],&lt;br /&gt;
				'exclude'               =&amp;gt; true,&lt;br /&gt;
				'inputType'             =&amp;gt; 'checkbox',&lt;br /&gt;
				'eval'                  =&amp;gt; array('style'=&amp;gt;'width:40px')&lt;br /&gt;
&lt;br /&gt;
			),&lt;br /&gt;
			'ts_extension' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label' 		=&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_extension'],&lt;br /&gt;
				'inputType' 		=&amp;gt; 'text',&lt;br /&gt;
				'eval'                  =&amp;gt; array('mandatory'=&amp;gt;true, 'style'=&amp;gt;'width:115px')&lt;br /&gt;
			),&lt;br /&gt;
		)&lt;br /&gt;
	),&lt;br /&gt;
	'sql'                     =&amp;gt; &amp;quot;blob NULL&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Das ''''chosen'=&amp;gt;true''' im eval vom Select Feld (ts_client_os) ist für Contao 2.11 wichtig, da sonst die Anzeige nicht korrekt funktioniert.&amp;lt;br /&amp;gt;Für Contao 2.10 ist das nicht nötig, stört aber nicht und ist somit kompatibel für beide Versionen. Das SQL-Feld ist nur nötig, wenn es keine database.sql gibt.&lt;br /&gt;
&lt;br /&gt;
==Angabe mit Callback==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_table']['fields']['anything'] = array&lt;br /&gt;
(&lt;br /&gt;
	'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_table']['anything'],&lt;br /&gt;
	'exclude'		=&amp;gt; true,&lt;br /&gt;
	'inputType'		=&amp;gt; 'multiColumnWizard',&lt;br /&gt;
	'eval'			=&amp;gt; array('mandatory'=&amp;gt;true,'columnsCallback'=&amp;gt;array('Class', 'Method'))&lt;br /&gt;
										&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wobei natürlich der Return-Wert genau das selbe Array sein muss, wie bei der &amp;quot;columnFields&amp;quot;-Variante.&lt;br /&gt;
&lt;br /&gt;
==Verfügbare MultiColumnWizard Eval-Optionen==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Schlüssel''' || '''Wert''' || '''Beschreibung''' || '''Beispiel'''&lt;br /&gt;
|-&lt;br /&gt;
| columnPos || Gruppenname&amp;lt;br /&amp;gt;''string'' || Gruppiert Felder und zeigt Sie untereinander an. || &lt;br /&gt;
|-&lt;br /&gt;
| maxCount || Menge&amp;lt;br /&amp;gt;''integer'' || Legt die maximale Anzahl an Felder fest, die angelegt werden dürfen. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['maxCount'] = 4;&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| minCount || Menge&amp;lt;br /&amp;gt;''integer'' || Legt die minimale Anzahl an Felder fest, die angelegt werden dürfen. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['minCount '] = 2;&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign || Position&amp;lt;br /&amp;gt;''string'' || Legt die vertikale Position der Zelle in der Tabelle fest. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['valign'] = 'top';&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| buttonPos || Position&amp;lt;br /&amp;gt;''string'' || Legt die vertikale Position der Zelle, in der sich die Buttons befinden, fest. ||&lt;br /&gt;
|-&lt;br /&gt;
| buttons || Buttonnamen&amp;lt;br /&amp;gt;''associative array'' || Legt fest, mit welchem Icon die 4 Buttons &amp;quot;up&amp;quot;, &amp;quot;down&amp;quot;, &amp;quot;copy&amp;quot;, &amp;quot;delete&amp;quot; dargestellt werden. Dabei ist der Buttonname der Schlüssel und der Pfad zum Icon der Wert. Wird ein Wert für einen Button explizit auf ''false'' gesetzt, so wird dieser versteckt. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['buttons'] = array('copy' =&amp;gt; false, 'delete' =&amp;gt; false, 'up' =&amp;gt; 'myUpIcon.png');&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Unterstützte Contao Eval-Optionen==&lt;br /&gt;
Diese Eval-Optionen werden für die &amp;quot;Kindwidgets&amp;quot; - oder besser &amp;quot;komponierten Widgets&amp;quot; - unterstützt.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| '''Schlüssel''' || '''Status'''&lt;br /&gt;
|-&lt;br /&gt;
| nospace || ''Ungetestet''&lt;br /&gt;
|-&lt;br /&gt;
| multiple || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| size || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| rgxp || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| style || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| tl_class || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| preserveTags || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| allowHtml || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| trailingSlash || ''Ungetestet''&lt;br /&gt;
|-&lt;br /&gt;
| mandatory || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| spaceToUnderscore || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| includeBlankOption || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| maxlength || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| minlength || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| chosen || Unterstützt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
===options_callback===&lt;br /&gt;
Im Beispiel oben wird für das Select Feld ein Optionsliste direkt definiert über 'options'. Das geht auch über 'options_callback'. Im Gegensatz zum Core wird der Methode jedoch kein Datacontainer $dc übermittelt.&lt;br /&gt;
&lt;br /&gt;
Beispiel für eine Liste abhängig von der Contao Version:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
			'ts_client_os' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_client_os'],&lt;br /&gt;
				'exclude'               =&amp;gt; true,&lt;br /&gt;
				'inputType'             =&amp;gt; 'select',&lt;br /&gt;
				'options_callback'      =&amp;gt; array('tl_theme', 'getOptions'), &lt;br /&gt;
				'eval' 			=&amp;gt; array('style' =&amp;gt; 'width:250px', 'includeBlankOption'=&amp;gt;true, 'chosen'=&amp;gt;true)&lt;br /&gt;
			),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun wie üblich im DCA die Klasse mit der Methode:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class tl_theme extends Backend&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Return options&lt;br /&gt;
     * @return array&lt;br /&gt;
     */&lt;br /&gt;
    public function getOptions()&lt;br /&gt;
    {&lt;br /&gt;
        $arrOptions = array(&lt;br /&gt;
		'option1'       =&amp;gt; 'Option 1',&lt;br /&gt;
		'option2'     	=&amp;gt; 'Option 2',&lt;br /&gt;
		'option3'     	=&amp;gt; 'Option 3',&lt;br /&gt;
		);&lt;br /&gt;
        //option3 not in Contao 2.10&lt;br /&gt;
        if (version_compare(VERSION, '2.11', '&amp;lt;'))&lt;br /&gt;
        {&lt;br /&gt;
            $arrOptions = array(&lt;br /&gt;
		'option1'       =&amp;gt; 'Option 1',&lt;br /&gt;
		'option2'     	=&amp;gt; 'Option 2',&lt;br /&gt;
		);&lt;br /&gt;
        }&lt;br /&gt;
        return $arrOptions;&lt;br /&gt;
    }&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datenbank_Klasse_verwenden</id>
		<title>Datenbank Klasse verwenden</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datenbank_Klasse_verwenden"/>
				<updated>2016-03-08T10:40:39Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Datensätze schreiben */ + insertid&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Informationen zur Datenbank-Klasse =&lt;br /&gt;
&lt;br /&gt;
Contao bietet für Entwickler eine Klasse an, um mit der Datenbank zu kommunizieren. Diese sollte beim Entwickeln von Erweiterungen unbedingt verwendet werden!&lt;br /&gt;
&lt;br /&gt;
* [http://api.contao.org/Library/_libraries---Database.php.html Dokumentation der Klasse]&lt;br /&gt;
&lt;br /&gt;
Die Datenbank-Klasse bietet mehrere Vorteile:&lt;br /&gt;
* Die Daten werden &amp;quot;gesäubert&amp;quot; und störende Zeichen maskiert&lt;br /&gt;
* Ein Objekt der Klasse Database_Result wird zurückgegeben. Dieses enthält alle Informationen zum Query&lt;br /&gt;
* Ersparnis von Schreibarbeit&lt;br /&gt;
&lt;br /&gt;
= Operationen auf der Datenbank =&lt;br /&gt;
&lt;br /&gt;
Die Beispiele setzen voraus, dass zuvor das Datenbank-Modul geladen wurde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;import('Database');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Datensätze lesen ==&lt;br /&gt;
&lt;br /&gt;
'''Lesen von Datensätzen ohne Bedingung'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$result = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT * FROM tl_log&amp;quot;)-&amp;gt;execute();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ausgeben der Datensätze'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo $result-&amp;gt;numRows; // Anzahl der gefundenen Datensätze ausgeben&lt;br /&gt;
echo $result-&amp;gt;id; // ID des 1. Datensatzes ausgeben&lt;br /&gt;
// Und alle anderen ID's ausgeben&lt;br /&gt;
while($result-&amp;gt;next())&lt;br /&gt;
{&lt;br /&gt;
  echo $result-&amp;gt;id;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lesen von Datensätzen mit Bedingung'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$result = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT * FROM tl_log WHERE id=?&amp;quot;)-&amp;gt;execute(1);&lt;br /&gt;
$result = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT * FROM tl_log WHERE id=? OR id=?&amp;quot;)-&amp;gt;execute(1, 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Fragezeichen sind Wildcards. Sie werden der Reihenfolge nach von den Parametern der execute-Funktion ersetzt. Dabei werden die parameter escaped, also für die Datenbank aufbereitet.&lt;br /&gt;
Das schützt allerdings '''nicht''' vor boshaften Benutzereingaben. Diese sollten immer mit der Input-Klasse verarbeitet werden!&lt;br /&gt;
&lt;br /&gt;
== Datensätze schreiben ==&lt;br /&gt;
&lt;br /&gt;
Datensätze können auch über die Datenbank-Klasse geschrieben werden. Es gibt dafür zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
'''Einzelne Werte per Wildcard setzten'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lng=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_log SET source = ? WHERE id=?&amp;quot;)-&amp;gt;execute('BE', 12345);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mehrere Werte per set-Methode setzten'''&lt;br /&gt;
&amp;lt;source lng=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$set = array('tstamp' =&amp;gt; time(), 'source' =&amp;gt; 'BE', 'action' =&amp;gt; 'GENERAL');&lt;br /&gt;
$this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_log %s WHERE id=?&amp;quot;)-&amp;gt;set($set)-&amp;gt;execute(12345);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Methode funktioniert natürlich auch mit einem INSERT-Statement. Hier das Beispiel, wo Sie anschließend auch gleich die ID des neuen Datensatzes bekommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lng=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$set = array('tstamp' =&amp;gt; time(), 'source' =&amp;gt; 'BE', 'action' =&amp;gt; 'GENERAL');&lt;br /&gt;
$objInsert = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;INSERT INTO tl_log %s&amp;quot;)-&amp;gt;set($set)-&amp;gt;execute();&lt;br /&gt;
echo $objInsert-&amp;gt;insertId;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Das Ergebnis auswerten ==&lt;br /&gt;
&lt;br /&gt;
= Tipps &amp;amp; Tricks =&lt;br /&gt;
* [[SQL Like Abfrage in doppelten Prozentzeichen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datenbank_Klasse_verwenden</id>
		<title>Datenbank Klasse verwenden</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datenbank_Klasse_verwenden"/>
				<updated>2016-03-08T09:56:54Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Datensätze schreiben */ INSERT-Beispiel ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Informationen zur Datenbank-Klasse =&lt;br /&gt;
&lt;br /&gt;
Contao bietet für Entwickler eine Klasse an, um mit der Datenbank zu kommunizieren. Diese sollte beim Entwickeln von Erweiterungen unbedingt verwendet werden!&lt;br /&gt;
&lt;br /&gt;
* [http://api.contao.org/Library/_libraries---Database.php.html Dokumentation der Klasse]&lt;br /&gt;
&lt;br /&gt;
Die Datenbank-Klasse bietet mehrere Vorteile:&lt;br /&gt;
* Die Daten werden &amp;quot;gesäubert&amp;quot; und störende Zeichen maskiert&lt;br /&gt;
* Ein Objekt der Klasse Database_Result wird zurückgegeben. Dieses enthält alle Informationen zum Query&lt;br /&gt;
* Ersparnis von Schreibarbeit&lt;br /&gt;
&lt;br /&gt;
= Operationen auf der Datenbank =&lt;br /&gt;
&lt;br /&gt;
Die Beispiele setzen voraus, dass zuvor das Datenbank-Modul geladen wurde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;import('Database');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Datensätze lesen ==&lt;br /&gt;
&lt;br /&gt;
'''Lesen von Datensätzen ohne Bedingung'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$result = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT * FROM tl_log&amp;quot;)-&amp;gt;execute();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ausgeben der Datensätze'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo $result-&amp;gt;numRows; // Anzahl der gefundenen Datensätze ausgeben&lt;br /&gt;
echo $result-&amp;gt;id; // ID des 1. Datensatzes ausgeben&lt;br /&gt;
// Und alle anderen ID's ausgeben&lt;br /&gt;
while($result-&amp;gt;next())&lt;br /&gt;
{&lt;br /&gt;
  echo $result-&amp;gt;id;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lesen von Datensätzen mit Bedingung'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$result = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT * FROM tl_log WHERE id=?&amp;quot;)-&amp;gt;execute(1);&lt;br /&gt;
$result = $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;SELECT * FROM tl_log WHERE id=? OR id=?&amp;quot;)-&amp;gt;execute(1, 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Fragezeichen sind Wildcards. Sie werden der Reihenfolge nach von den Parametern der execute-Funktion ersetzt. Dabei werden die parameter escaped, also für die Datenbank aufbereitet.&lt;br /&gt;
Das schützt allerdings '''nicht''' vor boshaften Benutzereingaben. Diese sollten immer mit der Input-Klasse verarbeitet werden!&lt;br /&gt;
&lt;br /&gt;
== Datensätze schreiben ==&lt;br /&gt;
&lt;br /&gt;
Datensätze können auch über die Datenbank-Klasse geschrieben werden. Es gibt dafür zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
'''Einzelne Werte per Wildcard setzten'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lng=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_log SET source = ? WHERE id=?&amp;quot;)-&amp;gt;execute('BE', 12345);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mehrere Werte per set-Methode setzten'''&lt;br /&gt;
&amp;lt;source lng=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$set = array('tstamp' =&amp;gt; time(), 'source' =&amp;gt; 'BE', 'action' =&amp;gt; 'GENERAL');&lt;br /&gt;
$this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_log %s WHERE id=?&amp;quot;)-&amp;gt;set($set)-&amp;gt;execute(12345);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Methode funktioniert natürlich auch mit einem INSERT-Statement:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lng=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$set = array('tstamp' =&amp;gt; time(), 'source' =&amp;gt; 'BE', 'action' =&amp;gt; 'GENERAL');&lt;br /&gt;
$this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;INSERT INTO tl_log %s&amp;quot;)-&amp;gt;set($set)-&amp;gt;execute();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Das Ergebnis auswerten ==&lt;br /&gt;
&lt;br /&gt;
= Tipps &amp;amp; Tricks =&lt;br /&gt;
* [[SQL Like Abfrage in doppelten Prozentzeichen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Dev HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Klasse_Formular</id>
		<title>Klasse Formular</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Klasse_Formular"/>
				<updated>2016-03-08T08:02:19Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Setzen von Default Werten */ Erklärung hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Dev Snippets]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Github:''' https://github.com/psi-4ward/Formular&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Die Klasse ''Formular'' erstellt Formulare aus DCA-Arrays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Die DCA-Definition&lt;br /&gt;
$dca = array&lt;br /&gt;
(&lt;br /&gt;
        'Kontaktdaten' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Ihre Kontaktdaten',&lt;br /&gt;
                'inputType'     =&amp;gt; 'headline'&lt;br /&gt;
        ),&lt;br /&gt;
        'vorname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Vorname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'vorname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Vorname')&lt;br /&gt;
        ),&lt;br /&gt;
        'nachname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Nachname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'nachname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Nachname')       &lt;br /&gt;
        ),&lt;br /&gt;
        'datum' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Datum',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; date('d.m.Y'),&lt;br /&gt;
                'eval'          =&amp;gt; array('datepicker'=&amp;gt;$this-&amp;gt;getDatePickerString(),'cleardefault'=&amp;gt;false)      &lt;br /&gt;
        ),&lt;br /&gt;
&lt;br /&gt;
        'email' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'E-Mail',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'rgxp'=&amp;gt;'email')             &lt;br /&gt;
        ),&lt;br /&gt;
        'telefon' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Telefon',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true)             &lt;br /&gt;
        ),&lt;br /&gt;
        'kategorie' =&amp;gt; array&lt;br /&gt;
            (&lt;br /&gt;
                'label'         =&amp;gt; 'Kategorie',&lt;br /&gt;
                'inputType'     =&amp;gt; 'checkbox',&lt;br /&gt;
                'options'       =&amp;gt; array('Option1','Option2','Option3','Option4'),&lt;br /&gt;
                'eval'          =&amp;gt; array('multiple' =&amp;gt; true, 'mandatory' =&amp;gt; true),&lt;br /&gt;
        ),&lt;br /&gt;
        'land' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'land',&lt;br /&gt;
                'inputType'     =&amp;gt; 'select',&lt;br /&gt;
                'options'       =&amp;gt; array('1','2','3','4'),&lt;br /&gt;
                'reference'     =&amp;gt; array('1'=&amp;gt;'Peru','2'=&amp;gt;'Kenia','3'=&amp;gt;'Italien','4'='Kamerun'),&lt;br /&gt;
                'eval'          =&amp;gt; array('multiple' =&amp;gt; true, 'mandatory' =&amp;gt; true),&lt;br /&gt;
        ),&lt;br /&gt;
        'bemerkung' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Bemerkung',&lt;br /&gt;
                'inputType'     =&amp;gt; 'textarea',&lt;br /&gt;
                'eval'          =&amp;gt; array('rte'=&amp;gt;'tinyMCE')&lt;br /&gt;
        ),&lt;br /&gt;
        'submit' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'speichern',&lt;br /&gt;
                'inputType'     =&amp;gt; 'submit'&lt;br /&gt;
        )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
// Instantierung mit der FormularID meinKontaktformular&lt;br /&gt;
$frm = new Formular('meinKontaktformular');&lt;br /&gt;
&lt;br /&gt;
// Übergabe des DCA-Arrays&lt;br /&gt;
$frm-&amp;gt;setDCA($dca);     &lt;br /&gt;
&lt;br /&gt;
// Konfiguration&lt;br /&gt;
$frm-&amp;gt;setConfig('generateFormat','&amp;lt;div&amp;gt;%label %field %error &amp;lt;/div&amp;gt;');&lt;br /&gt;
$frm-&amp;gt;setConfig('attributes',array('tableless'=&amp;gt;true));&lt;br /&gt;
&lt;br /&gt;
// Formular wurde abgeschickt und ist korrekt&lt;br /&gt;
if($frm-&amp;gt;isSubmitted() &amp;amp;&amp;amp; $frm-&amp;gt;validate())&lt;br /&gt;
{&lt;br /&gt;
        var_dump($frm-&amp;gt;getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausgabe des Formulars&lt;br /&gt;
echo $frm-&amp;gt;parse();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Parameter um die Erstellung des Formulars zu beeinflussen.&lt;br /&gt;
Grundlegend muss zwischen '''parse()''' und '''generate()''' unterschieden werden, wobei parse() die Methode generate() impliziert.&lt;br /&gt;
Formular::parse() bettet den Output von generate() in das ''Template'' ein.&lt;br /&gt;
&lt;br /&gt;
==Parameter==&lt;br /&gt;
Die Konfiguration der Klasse Formular kann über '''Formular::setConfig($param,$value)''' geändert werden.&lt;br /&gt;
&lt;br /&gt;
* str '''formTemplate''': Wird das Formular über parse() gerendert wird dieses Template benutzt. Vorgabe: form&lt;br /&gt;
* str '''class''':  Zusätzliche Klassenangabe&lt;br /&gt;
* str '''action''': action-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: Environment-&amp;gt;request&lt;br /&gt;
* str '''method''': method-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: post&lt;br /&gt;
* str '''generateFormat''': String mit Platzhaltern welche für jedes Widget durch deren Elemente ersetzt werden. Vorgabe &amp;quot;%parse&amp;quot;&lt;br /&gt;
            %parse Widget::parse()&lt;br /&gt;
            %label Widget::generateLabel()&lt;br /&gt;
            %field Widget::generate()&lt;br /&gt;
            %error Widget::getErrorAsHTML()&lt;br /&gt;
            %errorPlain Widget::getErrorAsString()&lt;br /&gt;
* array '''attributes''': Array mit Attributen für die Widget::parse() Methode. Z.B. array('tableless'=&amp;gt;true)&lt;br /&gt;
&lt;br /&gt;
===Setzen von Default Werten===&lt;br /&gt;
&lt;br /&gt;
Um bei Select-, Radio-, Checkbox-Feldern die Standardwerte vorzubelegen kann man sich dem Magical-Setter bedienen: &lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$frm-&amp;gt;kategorie = array('Option1','Option2');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kategorie ist der Name des Feldes. Das übergebene Array sind die als Standard anzunehmenden Werte aus dem Array options dieses Feldes.&lt;br /&gt;
&lt;br /&gt;
===Anwendungsbeispiel Filter===&lt;br /&gt;
&lt;br /&gt;
Will man einen mehrseitigen Filter mit der Klasse Formular erstellen und die Kriterien beim Blättern (Pagination) erhalten, kann man diese über get paramater (hinzugefügt über addToUrl()) wieder setzen: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
        $frm-&amp;gt;kategorie = \Input::get('kategorie');&lt;br /&gt;
        $frm-&amp;gt;branche = \Input::get('branche');&lt;br /&gt;
        $frm-&amp;gt;bundesland = \Input::get('bundesland');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Systemweite Konfiguration==&lt;br /&gt;
Die Formular-Klasse versucht Konfigurationsoptionen aus $GLOBALS['TL_FORM'] zu lesen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_FORM'] = array&lt;br /&gt;
(&lt;br /&gt;
   'class'            =&amp;gt;'myFormular',&lt;br /&gt;
   'generateFormat'   =&amp;gt; '&amp;lt;div class=&amp;quot;formField&amp;quot;&amp;gt;%label %error %field&amp;lt;/div&amp;gt;',&lt;br /&gt;
   'formTemplate'     =&amp;gt; 'myFormularTemplate'&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit Erweiterungen=&lt;br /&gt;
&lt;br /&gt;
==cleardefault==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault] löscht den Standardwert sobald das Textfeld den Fokus bekommt.&lt;br /&gt;
Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein &lt;br /&gt;
einzelnes Feld angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('cleardefault'=&amp;gt;false)      &lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''' 'cleardefault'=&amp;gt;false''' deaktiviert das Löschen des Standardwertes für das Feld '''datum'''.&lt;br /&gt;
&lt;br /&gt;
==helpmessage==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/helpmessage.de.html Helpmessage] blendet per Javascript Hilfsnachrichten für das Feld ein.&lt;br /&gt;
Die Nachricht wird im '''eval''' Array hinterlegt. Falls über die Klasse '''FormularTL_DCA''' eine Tabelle gerendert wird, werden die Hilfstexte aus den Contao-Sprachdateien der Tabelle übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('helpmessage'=&amp;gt;'Das Datum muss im Format DD.MM.YYYY sein')&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==formcheck==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/formcheck.de.html Formcheck] validiert ein Formular per Javascript auf der Clientseite.&lt;br /&gt;
Falls die Erweiterung (ab Version 1.3!) installiert ist funktionierte diese ohne weitere Konfiguration.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Klasse_Formular</id>
		<title>Klasse Formular</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Klasse_Formular"/>
				<updated>2016-03-08T07:58:42Z</updated>
		
		<summary type="html">&lt;p&gt;Samson1964: /* Beispiel */ select-Beispiel eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Dev Snippets]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Github:''' https://github.com/psi-4ward/Formular&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Die Klasse ''Formular'' erstellt Formulare aus DCA-Arrays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Die DCA-Definition&lt;br /&gt;
$dca = array&lt;br /&gt;
(&lt;br /&gt;
        'Kontaktdaten' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Ihre Kontaktdaten',&lt;br /&gt;
                'inputType'     =&amp;gt; 'headline'&lt;br /&gt;
        ),&lt;br /&gt;
        'vorname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Vorname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'vorname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Vorname')&lt;br /&gt;
        ),&lt;br /&gt;
        'nachname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Nachname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'nachname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Nachname')       &lt;br /&gt;
        ),&lt;br /&gt;
        'datum' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Datum',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; date('d.m.Y'),&lt;br /&gt;
                'eval'          =&amp;gt; array('datepicker'=&amp;gt;$this-&amp;gt;getDatePickerString(),'cleardefault'=&amp;gt;false)      &lt;br /&gt;
        ),&lt;br /&gt;
&lt;br /&gt;
        'email' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'E-Mail',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'rgxp'=&amp;gt;'email')             &lt;br /&gt;
        ),&lt;br /&gt;
        'telefon' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Telefon',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true)             &lt;br /&gt;
        ),&lt;br /&gt;
        'kategorie' =&amp;gt; array&lt;br /&gt;
            (&lt;br /&gt;
                'label'         =&amp;gt; 'Kategorie',&lt;br /&gt;
                'inputType'     =&amp;gt; 'checkbox',&lt;br /&gt;
                'options'       =&amp;gt; array('Option1','Option2','Option3','Option4'),&lt;br /&gt;
                'eval'          =&amp;gt; array('multiple' =&amp;gt; true, 'mandatory' =&amp;gt; true),&lt;br /&gt;
        ),&lt;br /&gt;
        'land' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'land',&lt;br /&gt;
                'inputType'     =&amp;gt; 'select',&lt;br /&gt;
                'options'       =&amp;gt; array('1','2','3','4'),&lt;br /&gt;
                'reference'     =&amp;gt; array('1'=&amp;gt;'Peru','2'=&amp;gt;'Kenia','3'=&amp;gt;'Italien','4'='Kamerun'),&lt;br /&gt;
                'eval'          =&amp;gt; array('multiple' =&amp;gt; true, 'mandatory' =&amp;gt; true),&lt;br /&gt;
        ),&lt;br /&gt;
        'bemerkung' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Bemerkung',&lt;br /&gt;
                'inputType'     =&amp;gt; 'textarea',&lt;br /&gt;
                'eval'          =&amp;gt; array('rte'=&amp;gt;'tinyMCE')&lt;br /&gt;
        ),&lt;br /&gt;
        'submit' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'speichern',&lt;br /&gt;
                'inputType'     =&amp;gt; 'submit'&lt;br /&gt;
        )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
// Instantierung mit der FormularID meinKontaktformular&lt;br /&gt;
$frm = new Formular('meinKontaktformular');&lt;br /&gt;
&lt;br /&gt;
// Übergabe des DCA-Arrays&lt;br /&gt;
$frm-&amp;gt;setDCA($dca);     &lt;br /&gt;
&lt;br /&gt;
// Konfiguration&lt;br /&gt;
$frm-&amp;gt;setConfig('generateFormat','&amp;lt;div&amp;gt;%label %field %error &amp;lt;/div&amp;gt;');&lt;br /&gt;
$frm-&amp;gt;setConfig('attributes',array('tableless'=&amp;gt;true));&lt;br /&gt;
&lt;br /&gt;
// Formular wurde abgeschickt und ist korrekt&lt;br /&gt;
if($frm-&amp;gt;isSubmitted() &amp;amp;&amp;amp; $frm-&amp;gt;validate())&lt;br /&gt;
{&lt;br /&gt;
        var_dump($frm-&amp;gt;getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausgabe des Formulars&lt;br /&gt;
echo $frm-&amp;gt;parse();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Parameter um die Erstellung des Formulars zu beeinflussen.&lt;br /&gt;
Grundlegend muss zwischen '''parse()''' und '''generate()''' unterschieden werden, wobei parse() die Methode generate() impliziert.&lt;br /&gt;
Formular::parse() bettet den Output von generate() in das ''Template'' ein.&lt;br /&gt;
&lt;br /&gt;
==Parameter==&lt;br /&gt;
Die Konfiguration der Klasse Formular kann über '''Formular::setConfig($param,$value)''' geändert werden.&lt;br /&gt;
&lt;br /&gt;
* str '''formTemplate''': Wird das Formular über parse() gerendert wird dieses Template benutzt. Vorgabe: form&lt;br /&gt;
* str '''class''':  Zusätzliche Klassenangabe&lt;br /&gt;
* str '''action''': action-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: Environment-&amp;gt;request&lt;br /&gt;
* str '''method''': method-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: post&lt;br /&gt;
* str '''generateFormat''': String mit Platzhaltern welche für jedes Widget durch deren Elemente ersetzt werden. Vorgabe &amp;quot;%parse&amp;quot;&lt;br /&gt;
            %parse Widget::parse()&lt;br /&gt;
            %label Widget::generateLabel()&lt;br /&gt;
            %field Widget::generate()&lt;br /&gt;
            %error Widget::getErrorAsHTML()&lt;br /&gt;
            %errorPlain Widget::getErrorAsString()&lt;br /&gt;
* array '''attributes''': Array mit Attributen für die Widget::parse() Methode. Z.B. array('tableless'=&amp;gt;true)&lt;br /&gt;
&lt;br /&gt;
===Setzen von Default Werten===&lt;br /&gt;
&lt;br /&gt;
Um bei Select, Radio, Checkbox -Feldern die Standardwerte vorzubelegen kann man sich dem Magical-Setter bedienen: &lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$frm-&amp;gt;kategorie = array('Option1','Option2');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Anwendungsbeispiel Filter===&lt;br /&gt;
&lt;br /&gt;
Will man einen mehrseitigen Filter mit der Klasse Formular erstellen und die Kriterien beim Blättern (Pagination) erhalten, kann man diese über get paramater (hinzugefügt über addToUrl()) wieder setzen: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
        $frm-&amp;gt;kategorie = \Input::get('kategorie');&lt;br /&gt;
        $frm-&amp;gt;branche = \Input::get('branche');&lt;br /&gt;
        $frm-&amp;gt;bundesland = \Input::get('bundesland');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Systemweite Konfiguration==&lt;br /&gt;
Die Formular-Klasse versucht Konfigurationsoptionen aus $GLOBALS['TL_FORM'] zu lesen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_FORM'] = array&lt;br /&gt;
(&lt;br /&gt;
   'class'            =&amp;gt;'myFormular',&lt;br /&gt;
   'generateFormat'   =&amp;gt; '&amp;lt;div class=&amp;quot;formField&amp;quot;&amp;gt;%label %error %field&amp;lt;/div&amp;gt;',&lt;br /&gt;
   'formTemplate'     =&amp;gt; 'myFormularTemplate'&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit Erweiterungen=&lt;br /&gt;
&lt;br /&gt;
==cleardefault==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault] löscht den Standardwert sobald das Textfeld den Fokus bekommt.&lt;br /&gt;
Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein &lt;br /&gt;
einzelnes Feld angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('cleardefault'=&amp;gt;false)      &lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''' 'cleardefault'=&amp;gt;false''' deaktiviert das Löschen des Standardwertes für das Feld '''datum'''.&lt;br /&gt;
&lt;br /&gt;
==helpmessage==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/helpmessage.de.html Helpmessage] blendet per Javascript Hilfsnachrichten für das Feld ein.&lt;br /&gt;
Die Nachricht wird im '''eval''' Array hinterlegt. Falls über die Klasse '''FormularTL_DCA''' eine Tabelle gerendert wird, werden die Hilfstexte aus den Contao-Sprachdateien der Tabelle übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('helpmessage'=&amp;gt;'Das Datum muss im Format DD.MM.YYYY sein')&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==formcheck==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/formcheck.de.html Formcheck] validiert ein Formular per Javascript auf der Clientseite.&lt;br /&gt;
Falls die Erweiterung (ab Version 1.3!) installiert ist funktionierte diese ohne weitere Konfiguration.&lt;/div&gt;</summary>
		<author><name>Samson1964</name></author>	</entry>

	</feed>