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

	<entry>
		<id>https://de.contaowiki.org/MultiColumnWizard</id>
		<title>MultiColumnWizard</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/MultiColumnWizard"/>
				<updated>2011-12-09T23:43:16Z</updated>
		
		<summary type="html">&lt;p&gt;Backbone: buttons eval option hinzugefügt&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=2.0.0&lt;br /&gt;
| Version=2.9+&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/MultiColumnWizard.html&lt;br /&gt;
| TrackerLink=http://contao-forge.org/projects/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)&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;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;/div&gt;</summary>
		<author><name>Backbone</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Start_und_Stop_Datum_f%C3%BCr_Catalog_Eintr%C3%A4ge</id>
		<title>Start und Stop Datum für Catalog Einträge</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Start_und_Stop_Datum_f%C3%BCr_Catalog_Eintr%C3%A4ge"/>
				<updated>2011-11-21T14:08:03Z</updated>
		
		<summary type="html">&lt;p&gt;Backbone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Catalog]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.8|Version=ab 2.9|Ext1=[[Catalog|Catalog ab 2.0beta1]]}}&lt;br /&gt;
Wenn man die reguläre Contao-Funktion &amp;quot;Anzeigen ab&amp;quot; und &amp;quot;Anzeigen bis&amp;quot; auch im Catalog verwenden möchte, ist folgendes zu beachten. ''In unserem Beispiel handelt es sich um zeitlich begrenzte Stellenangebote''.&lt;br /&gt;
&lt;br /&gt;
=Start Feld=&lt;br /&gt;
# Man legt im betreffendem Catalog einen neuen Feldtypen &amp;quot;Datum&amp;quot; an &lt;br /&gt;
# Füllt die Felder &amp;quot;Bezeichnung&amp;quot; und &amp;quot;Beschreibung&amp;quot;&lt;br /&gt;
# Wichtig ist hierbei das der Spaltenname &amp;quot;start&amp;quot; lautet.&lt;br /&gt;
&lt;br /&gt;
Am Ende sollte es so aussehen wie auf dem Screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Start.jpg|Start-Feld|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=Stop Feld=&lt;br /&gt;
Als nächstes legt man ein weiteres Feld an und wiederholt die Schritte 1-3. &lt;br /&gt;
* Das Feld muss hier nur als Spaltenname &amp;quot;stop&amp;quot; heißen. &lt;br /&gt;
Auch hier sollte es so wie im Screenshot aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Stop.jpg|Stop-Feld|frame|center]]&lt;br /&gt;
&lt;br /&gt;
Geht man zurück zur Übersicht sollte es so aussehen wie auf dem folgendem Screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Start-stop.jpg|Übersicht Felder|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=Konfiguration des Frontend-Moduls=&lt;br /&gt;
Zum Schluss muss man nur noch in seinem Theme ein neues Modul, vom Typ Catalog Liste, anlegen. Nachdem man den betreffenden Catalog ausgewählt hat, schreibt man in das Feld &amp;quot;Bedingung&amp;quot; folgenden Eintrag:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
IF (start ='', '1 = 1', start &amp;lt; UNIX_TIMESTAMP()) AND IF (stop ='', ' 1 = 1', stop &amp;gt; UNIX_TIMESTAMP())&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
besser:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
(start = '' OR start &amp;lt; UNIX_TIMESTAMP()) AND (stop = '' OR stop &amp;gt; UNIX_TIMESTAMP())&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Nun werden nur noch Einträge angezeigt die folgende Bedingungen erfüllen:&lt;br /&gt;
* Das Startdatum liegt in der Vergangenheit&lt;br /&gt;
* Das Stopdatum liegt in der Zukunft&lt;br /&gt;
* Keiner der Werte wurde eingegeben - diese Einträge sind für immer sichtbar&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
--[[Benutzer:Andreasisaak|Andreasisaak]] 12:25, 12. Feb. 2011 (CEST)&lt;/div&gt;</summary>
		<author><name>Backbone</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Futuretable</id>
		<title>Futuretable</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Futuretable"/>
				<updated>2011-09-05T18:45:20Z</updated>
		
		<summary type="html">&lt;p&gt;Backbone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Wir haben und wollen behalten=&lt;br /&gt;
&lt;br /&gt;
* Übersichtliches einfaches Backend&lt;br /&gt;
* Strukturierte Inhalte&lt;br /&gt;
* Frontend Themes aus Modulen, Layouts usw.&lt;br /&gt;
&lt;br /&gt;
=Wir haben und können eventuell drauf verzichten (zu Gunsten von etwas besserem)=&lt;br /&gt;
&lt;br /&gt;
* Einfaches Caching&lt;br /&gt;
* Einfache Request Klasse&lt;br /&gt;
* Session Handling für Logins etc.&lt;br /&gt;
* Browser Detection&lt;br /&gt;
* Class Loader&lt;br /&gt;
* File-Handling&lt;br /&gt;
* Übersetzungen für statischen Text&lt;br /&gt;
* Validatoren pro Widget&lt;br /&gt;
&lt;br /&gt;
=Ein Muss für die Zukunft=&lt;br /&gt;
&lt;br /&gt;
==Technisch==&lt;br /&gt;
&lt;br /&gt;
* PHP 5.3 Namespaces&lt;br /&gt;
* Database Abstraction Layer (DBAL) - Mögliche Frameworks: Doctrine DBAL&lt;br /&gt;
* Objective-Relational-Mapping (ORM) - Mögliche Frameworks: Doctrine ORM&lt;br /&gt;
* Umfangreiches Caching [Was ist hiermit gemeint? Was den FECache angeht, wäre es super, wenn wir das über die htaccess ziehen könnten, ähnlich wie das bei WP das Supercache Modul mach (backbone)]&lt;br /&gt;
* HTTP Request Handler [Was ist hiermit gemeint? (backbone) Klassen die mit HTTP-Requests umgehen (Toflar); Immer noch net genau genug? Klassen die mit dem derzeitigen Request umgehen? Da hat Symfony die Request/Response Klassen die man auch separat ohne das ganze FW nutzen könnte. Oder klassen die einen HTTP-Request ausführen können? (backbone);]&lt;br /&gt;
* Virtual File System, VFS&lt;br /&gt;
* Access Control List (ACL) (via Permissions) + Role Based (+ multiple Identities, also Trennung von Anmelde- und Benutzerinformationen)&lt;br /&gt;
* Globale Validatoren (damit Widgets, die identisch validieren, den gleichen Validator nutzen)&lt;br /&gt;
* Inhalts-Übersetzungen auch auf DB-Ebene [Würde das nicht auf DB-Ebene zwingen, lieber einen Übersetzungsdatei-Editor (backbone) Das meinte ich nicht, ich meine Datensätze für verschiedene Sprachen editierbar zu machen. Sowas gehört garantiert nicht in ein File ;-) (Toflar); hab mal das konkretisiert in im Stichpunkt (backbone)]&lt;br /&gt;
* Versionierung von Inhalten nicht über separate Tabelle, sondern in die Inhaltstabellen integriert&lt;br /&gt;
* Verbesserte relationale Baumstrukturen&lt;br /&gt;
&lt;br /&gt;
==Funktional==&lt;br /&gt;
&lt;br /&gt;
* Template Engine (Twig, Smarty)&lt;br /&gt;
* Ein neues, richtig geiles Extension Repository&lt;br /&gt;
* Gut Dokumentiert&lt;br /&gt;
* Einfach zu handhaben&lt;br /&gt;
* Auslagern von Standardkomponenten (Nachrichten, Events, Newsletter usw.) in Erweiterungen (die eventuell bei einer Standardinstallation mitgeliefert werden).&lt;br /&gt;
&lt;br /&gt;
=Nice to have=&lt;br /&gt;
&lt;br /&gt;
* Updatefähig (Contao 2 -&amp;gt; Contao 3) [auch ein Muss, aber wenn die Erweiterungen nicht kompatibel sind, stelle ich mir das schwer vor (Glen) Naja, der Core muss sich ja updaten können und ich denke da geht es vor allem um Content, nicht um Settings oder Dinge von Erweiterungen (Toflar)]&lt;br /&gt;
* Ein neues Backend-Theme, mehr Javascript/Ajax für den User wie z.B. Drag n' Drop etc. Dinge die uns HTML5 bringt - Dinge die nicht dazu erfunden wurden, um links liegen gelassen zu werden! [würde ich als Muss, bezeichnen (backbone)]&lt;br /&gt;
* WebDAV Access auf die Dateiverwaltung&lt;br /&gt;
* Zuordnung von Inhalten/Seiten zu Publication-Sets, welche von einer Publication verwendet werden um für einen bestimmten Zeitraum den Zustand der Seite zu representieren. Also sozusagen, ein integriertes Dev -&amp;gt; Stage -&amp;gt; Live System.&lt;br /&gt;
* Jeder Inhalt, der eine eigene Seite erfordert (Newseinträge), bekommt auch einen Eintrag in der Seitenstruktur, damit die Seitenstruktur die komplette URL-Struktur representiert.&lt;br /&gt;
* INSERT-only Prinzip für Inhalts-/Seiten-Tabellen (und DELETE von alten/ungenutzen Datensätzen)&lt;br /&gt;
* Dualer Datenbank Zugriff, Möglichkeit für 2 verschiedene Datenbankaccounts: Einer der alles außer GRANT darf und einer der nur DML darf. Somit kann sichergestellt werden das DDL nur nach expliziter Erlaubnis des Users möglich ist. (Der Code der DDL ausführen möchte, muss eine Art &amp;quot;Systemcall&amp;quot; durchführen, der checkt, ob der BE-Benutzer überhaupt die Permission für DDL hat, wenn ja wird der Nutzer explizit gefragt. Bei Bestätigung wird die DDL-Query ausgeführt und anschließend mit einem Callback im &amp;quot;Usercode&amp;quot; weitergemacht)&lt;/div&gt;</summary>
		<author><name>Backbone</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Futuretable</id>
		<title>Futuretable</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Futuretable"/>
				<updated>2011-09-05T14:58:19Z</updated>
		
		<summary type="html">&lt;p&gt;Backbone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Wir haben und wollen behalten=&lt;br /&gt;
&lt;br /&gt;
* Übersichtliches einfaches Backend&lt;br /&gt;
* Strukturierte Inhalte&lt;br /&gt;
* Frontend Themes aus Modulen, Layouts usw.&lt;br /&gt;
&lt;br /&gt;
=Wir haben und können eventuell drauf verzichten (zu Gunsten von etwas besserem)=&lt;br /&gt;
&lt;br /&gt;
* Einfaches Caching&lt;br /&gt;
* Einfache Request Klasse&lt;br /&gt;
* Session Handling für Logins etc.&lt;br /&gt;
* Browser Detection&lt;br /&gt;
* Class Loader&lt;br /&gt;
* File-Handling&lt;br /&gt;
* Übersetzungen für statischen Text&lt;br /&gt;
* Validatoren pro Widget&lt;br /&gt;
&lt;br /&gt;
=Ein Muss für die Zukunft=&lt;br /&gt;
&lt;br /&gt;
==Technisch==&lt;br /&gt;
&lt;br /&gt;
* PHP 5.3 Namespaces&lt;br /&gt;
* Database Abstraction Layer (DBAL) - Mögliche Frameworks: Doctrine DBAL&lt;br /&gt;
* Objective-Relational-Mapping (ORM) - Mögliche Frameworks: Doctrine ORM&lt;br /&gt;
* Umfangreiches Caching [Was ist hiermit gemeint? Was den FECache angeht, wäre es super, wenn wir das über die htaccess ziehen könnten, ähnlich wie das bei WP das Supercache Modul mach (backbone)]&lt;br /&gt;
* HTTP Request Handler [Was ist hiermit gemeint? (backbone) Klassen die mit HTTP-Requests umgehen (Toflar); Immer noch net genau genug? Klassen die mit dem derzeitigen Request umgehen? Da hat Symfony die Request/Response Klassen die man auch separat ohne das ganze FW nutzen könnte. Oder klassen die einen HTTP-Request ausführen können? (backbone);]&lt;br /&gt;
* Virtual File System, VFS&lt;br /&gt;
* Access Control List (ACL) (via Permissions) + Role Based (+ multiple Identities, also Trennung von Anmelde- und Benutzerinformationen)&lt;br /&gt;
* Globale Validatoren (damit Widgets, die identisch validieren, den gleichen Validator nutzen)&lt;br /&gt;
* Inhalts-Übersetzungen auch auf DB-Ebene [Würde das nicht auf DB-Ebene zwingen, lieber einen Übersetzungsdatei-Editor (backbone) Das meinte ich nicht, ich meine Datensätze für verschiedene Sprachen editierbar zu machen. Sowas gehört garantiert nicht in ein File ;-) (Toflar); hab mal das konkretisiert in im Stichpunkt (backbone)]&lt;br /&gt;
* Versionierung von Inhalten nicht über separate Tabelle, sondern in die Inhaltstabellen integriert&lt;br /&gt;
* Verbesserte relationale Baumstrukturen&lt;br /&gt;
&lt;br /&gt;
==Funktional==&lt;br /&gt;
&lt;br /&gt;
* Template Engine (Twig, Smarty)&lt;br /&gt;
* Ein neues, richtig geiles Extension Repository&lt;br /&gt;
* Gut Dokumentiert&lt;br /&gt;
* Einfach zu handhaben&lt;br /&gt;
* Auslagern von Standardkomponenten (Nachrichten, Events, Newsletter usw.) in Erweiterungen (die eventuell bei einer Standardinstallation mitgeliefert werden).&lt;br /&gt;
&lt;br /&gt;
=Nice to have=&lt;br /&gt;
&lt;br /&gt;
* Updatefähig (Contao 2 -&amp;gt; Contao 3) [auch ein Muss, aber wenn die Erweiterungen nicht kompatibel sind, stelle ich mir das schwer vor (Glen) Naja, der Core muss sich ja updaten können und ich denke da geht es vor allem um Content, nicht um Settings oder Dinge von Erweiterungen (Toflar)]&lt;br /&gt;
* Ein neues Backend-Theme, mehr Javascript/Ajax für den User wie z.B. Drag n' Drop etc. Dinge die uns HTML5 bringt - Dinge die nicht dazu erfunden wurden, um links liegen gelassen zu werden! [würde ich als Muss, bezeichnen (backbone)]&lt;br /&gt;
* WebDAV Access auf die Dateiverwaltung&lt;br /&gt;
* Zuordnung von Inhalten/Seiten zu Publication-Sets, welche von einer Publication verwendet werden um für einen bestimmten Zeitraum den Zustand der Seite zu representieren. Also sozusagen, ein integriertes Dev -&amp;gt; Stage -&amp;gt; Live System.&lt;br /&gt;
* Jeder Inhalt, der eine eigene Seite erfordert (Newseinträge), bekommt auch einen Eintrag in der Seitenstruktur, damit die Seitenstruktur die komplette URL-Struktur representiert.&lt;br /&gt;
* INSERT-only Prinzip für Inhalts-/Seiten-Tabellen (und DELETE von alten/ungenutzen Datensätzen)&lt;/div&gt;</summary>
		<author><name>Backbone</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Futuretable</id>
		<title>Futuretable</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Futuretable"/>
				<updated>2011-09-05T10:10:19Z</updated>
		
		<summary type="html">&lt;p&gt;Backbone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Wir haben und wollen behalten=&lt;br /&gt;
&lt;br /&gt;
* Übersichtliches einfaches Backend&lt;br /&gt;
* Strukturierte Inhalte&lt;br /&gt;
* Frontend Themes aus Modulen, Layouts usw.&lt;br /&gt;
&lt;br /&gt;
=Wir haben und können eventuell drauf verzichten (zu Gunsten von etwas besserem)=&lt;br /&gt;
&lt;br /&gt;
* Einfaches Caching&lt;br /&gt;
* Session Handling für Logins etc.&lt;br /&gt;
* Browser Detection&lt;br /&gt;
* Class Loader&lt;br /&gt;
* File-Handling&lt;br /&gt;
* Übersetzungen für statischen Text&lt;br /&gt;
* Validatoren pro Widget&lt;br /&gt;
&lt;br /&gt;
=Ein Muss für die Zukunft=&lt;br /&gt;
&lt;br /&gt;
==Technisch==&lt;br /&gt;
&lt;br /&gt;
* PHP 5.3 Namespaces&lt;br /&gt;
* Database Abstraction Layer (DBAL) - Mögliche Frameworks: Doctrine DBAL&lt;br /&gt;
* Objective-Relational-Mapping (ORM) - Mögliche Frameworks: Doctrine ORM&lt;br /&gt;
* Umfangreiches Caching [Was ist hiermit gemeint? Was den FECache angeht, wäre es super, wenn wir das über die htaccess ziehen könnten, ähnlich wie das bei WP das Supercache Modul mach (backbone)]&lt;br /&gt;
* HTTP Request Handler [Was ist hiermit gemeint? (backbone)]&lt;br /&gt;
* Virtual File System, VFS&lt;br /&gt;
* Access Control List (ACL) (via Permissions) + Role Based (+ multiple Identities, also Trennung von Anmelde- und Benutzerinformationen)&lt;br /&gt;
* Globale Validatoren (damit Widgets, die identisch validieren, den gleichen Validator nutzen)&lt;br /&gt;
* Übersetzungen auch auf DB-Ebene [Würde das nicht auf DB-Ebene zwingen, lieber einen Übersetzungsdatei-Editor (backbone)]&lt;br /&gt;
* Versionierung von Inhalten nicht über separate Tabelle, sondern in die Inhaltstabellen integriert&lt;br /&gt;
* Verbesserte relationale Baumstrukturen&lt;br /&gt;
&lt;br /&gt;
==Funktional==&lt;br /&gt;
&lt;br /&gt;
* Template Engine (Twig, Smarty)&lt;br /&gt;
* Ein neues, richtig geiles Extension Repository&lt;br /&gt;
* Gut Dokumentiert&lt;br /&gt;
* Einfach zu handhaben&lt;br /&gt;
&lt;br /&gt;
=Nice to have=&lt;br /&gt;
&lt;br /&gt;
* Updatefähig (Contao 2 -&amp;gt; Contao 3) [auch ein Muss, aber wenn die Erweiterungen nicht kompatibel sind, stelle ich mir das schwer vor (Glen)]&lt;br /&gt;
* Ein neues Backend-Theme, mehr Javascript/Ajax für den User wie z.B. Drag n' Drop etc. Dinge die uns HTML5 bringt - Dinge die nicht dazu erfunden wurden, um links liegen gelassen zu werden! [würde ich als Muss, bezeichnen (backbone)]&lt;br /&gt;
* WebDAV Access auf die Dateiverwaltung&lt;br /&gt;
* Zuordnung von Inhalten/Seiten zu Publication-Sets, welche von einer Publication verwendet werden um für einen bestimmten Zeitraum den Zustand der Seite zu representieren. Also sozusagen, ein integriertes Dev -&amp;gt; Stage -&amp;gt; Live System.&lt;br /&gt;
* Jeder Inhalt, der eine eigene Seite erfordert (Newseinträge), bekommt auch einen Eintrag in der Seitenstruktur, damit die Seitenstruktur die komplette URL-Struktur representiert.&lt;br /&gt;
* INSERT-only Prinzip für Inhalts-/Seiten-Tabellen (und DELETE von alten/ungenutzen Datensätzen)&lt;/div&gt;</summary>
		<author><name>Backbone</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Backboneit_navigation</id>
		<title>Backboneit navigation</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Backboneit_navigation"/>
				<updated>2011-08-09T14:54:24Z</updated>
		
		<summary type="html">&lt;p&gt;Backbone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| Dev=Oliver Hoff&lt;br /&gt;
| DevSite=http://www.hofff.com/&lt;br /&gt;
| ExtVersion=1.0.0&lt;br /&gt;
| Version=ab 2.9&lt;br /&gt;
| TLVersion=2.7.0 - 2.8.4&lt;br /&gt;
| TrackerLink=http://www.contao-forge.org/projects/backboneitnavigation/issues&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/backboneit_navigation.10000009.de.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= backboneit_navigation =&lt;br /&gt;
&lt;br /&gt;
Erweiterung bestehend aus einer Sammlung von Navigationselementen (vorerst nur ein erweitertes Navigationsmodul).&lt;br /&gt;
&lt;br /&gt;
Anmerkungen zum Bestimmen der Sichtbarkeit einer Seite:&lt;br /&gt;
* Der Veröffentlichungsstatus gilt ausschließlich für eine Seite selbst. Das heißt zum Beispiel, dass eine Navigation durchaus dargestellt wird, selbst wenn die Referenzseite nicht veröffentlicht ist.&lt;br /&gt;
* Der Seitenschutz für bestimmte Mitgliedergruppen vererbt sich auf alle Unterseiten, außer denjenigen die selbst explizit einen Seitenschutz für Mitgliedergruppen definieren und deren Unterseiten.&lt;br /&gt;
* Die Einstellung &amp;quot;Nur Gästen anzeigen&amp;quot; gilt nur für die Seite selbst. Tatsächlich ist die Seite für angemeldete Benutzer auch noch verfügbar, soll nur in keiner Navigation angezeigt werden. (Anders als zum Beispiel Artikel, die nur Gästen angezeigt werden. Diese werden gar nicht mehr gerendert.)&lt;br /&gt;
* &amp;quot;Im Menü verstecken&amp;quot; gilt nur für die Seite selbst.&lt;br /&gt;
&lt;br /&gt;
== Navigationsmenü ==&lt;br /&gt;
&lt;br /&gt;
Ein Multitalent: Es ist alles möglich was mit einem Navigationsmenü oder einer Individuellen Navigation möglich ist, Kombinationen aus beiden und noch einiges mehr. Einfach ausprobieren.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* Kompatibel zu den Templates für das Standard-Navigationsmenü (einziger Unterschied ist, das Seiten die CSS-Klasse &amp;quot;submenu&amp;quot; tatsächlich auch nur dann bekommen, wenn dieses Untermenü gerendert wird)&lt;br /&gt;
* Mehrere Referenzseiten (Wurzeln der Navigation)&lt;br /&gt;
* Aktuelle Seite als Referenzseite&lt;br /&gt;
* Startebene wird relativ zu den Referenzseiten berechnet (negative Startebene möglich)&lt;br /&gt;
* Hardlimit flexibel (Anmerkung: Stopebene und Hardlimit beziehen sich relativ zur Startebene &amp;amp;endash; diessollte auch durch die geänderten Labels der Moduleinstellungen hervorgehen.&lt;br /&gt;
* Versteckte und geschützte Seiten anzeigen&lt;br /&gt;
* Als Sitemap verwendbar&lt;br /&gt;
* Optimierte Algorithmen: Zum Beispiel wird pro Navigationsebene nur noch eine Datenbankabfrage durchgeführt, was vorallem bei einer sehr verzweigten Navigation Vorteile bringen sollte.&lt;br /&gt;
* Erweiterbar per Hook&lt;br /&gt;
&lt;br /&gt;
=== Navigation per Hook erweitern ===&lt;br /&gt;
config.php&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['backboneit_navigation_menu'][] = array('MyNavigationHook', 'hook');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MyNavigationHook.php&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
class MyNavigationHook {&lt;br /&gt;
&lt;br /&gt;
  // ... singleton dummy code ...&lt;br /&gt;
&lt;br /&gt;
  public function hook($objThis, $arrRoots) {&lt;br /&gt;
    $intParentID = 1; // the ID of the parent node, were your new node should be appended/inserted to.&lt;br /&gt;
&lt;br /&gt;
    if(!isset($objThis-&amp;gt;arrItems[$intParentID])) // test if the parent should be rendered (to avoid my hook, if it is not needed)&lt;br /&gt;
      return;&lt;br /&gt;
&lt;br /&gt;
    $strMyNewNodeID = 'MyNavigationHook' . 1; // to avoid collision do not use plain numbers (reservered for tl_page dataset IDs)&lt;br /&gt;
    // and prefix the ID with something specific to your hook&lt;br /&gt;
&lt;br /&gt;
    $objThis-&amp;gt;varActiveID = $strMyNewNodeID; // set my new node as active navigation item&lt;br /&gt;
&lt;br /&gt;
    $objThis-&amp;gt;arrSubpages[$intParentID][] = $strMyNewNodeID; // append the my new node to the end of $intParentIDs childs&lt;br /&gt;
    $arrRoots[] = $strMyNewNodeID; // additionally add my new node to the end of the first level&lt;br /&gt;
&lt;br /&gt;
    $objThis-&amp;gt;arrItems[$strMyNewNodeID] = array(&lt;br /&gt;
      'class' =&amp;gt; 'myclass',&lt;br /&gt;
      'isTrail' =&amp;gt; true, // whether this node is in the trail path of the active page&lt;br /&gt;
      // ... more rendering information for the navigation template (see class AbstractNavigationMenu for all fields) ...&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    return $arrRoots; // return the modified first navigation level (not needed if unmodified)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
''Danke an Christoph Wiechert a.k.a. psi''&lt;br /&gt;
&lt;br /&gt;
Folgendes Beispiel fügt einen Level_1 Eintrag und dazu mehrere Level_2 Einträge zum aktuellen Level_0 Eintrag hinzu:&lt;br /&gt;
&lt;br /&gt;
- Level_0&amp;lt;br&amp;gt;&lt;br /&gt;
-- Level_1 (wird eingefügt)&amp;lt;br&amp;gt;&lt;br /&gt;
--- Level_2.0 (wird eingefügt)&amp;lt;br&amp;gt;&lt;br /&gt;
--- Level_2.1 (wird eingefügt)&amp;lt;br&amp;gt;&lt;br /&gt;
--- Level_2.2 (wird eingefügt)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Helperclass to insert navigation-items&lt;br /&gt;
 * @author psi&lt;br /&gt;
 */&lt;br /&gt;
class Brands_BackboneNavi extends Controller&lt;br /&gt;
{&lt;br /&gt;
	&lt;br /&gt;
	public function hook($objNav, $arrRoots)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;import('Database');&lt;br /&gt;
		&lt;br /&gt;
		// Eine contao-seite enthält ein modul mit &amp;quot;virtuellen&amp;quot; unterseiten&lt;br /&gt;
		// Bsp: http://example.com/module-page/item1.html&lt;br /&gt;
		// Bsp2: http://example.com/module-page/item1/subitem1.html&lt;br /&gt;
		// herrausschneiden von &amp;quot;item1&amp;quot;&lt;br /&gt;
		if(!preg_match(&amp;quot;~^&amp;quot;.preg_quote($GLOBALS['objPage']-&amp;gt;alias,'~').&amp;quot;/([a-z0-9_-]+).*\.html$~i&amp;quot;,$this-&amp;gt;Environment-&amp;gt;request,$erg)) return;&lt;br /&gt;
		&lt;br /&gt;
		// level_1 Eintrag anhand von &amp;quot;item1&amp;quot; einfügen&lt;br /&gt;
		$objDesigner = $this-&amp;gt;Database-&amp;gt;prepare('SELECT id,title,alias FROM tl_brand WHERE alias=? AND published=?')-&amp;gt;execute($erg[1],'1');&lt;br /&gt;
		if(!$objDesigner-&amp;gt;numRows) return;&lt;br /&gt;
		&lt;br /&gt;
		// Seite in den Navigations-Pool hinzufügen&lt;br /&gt;
		$objNav-&amp;gt;arrItems[$objDesigner-&amp;gt;alias.'-'.$objDesigner-&amp;gt;id] = array&lt;br /&gt;
		(&lt;br /&gt;
			'link'	=&amp;gt; $objDesigner-&amp;gt;title,&lt;br /&gt;
			'href'  =&amp;gt; $this-&amp;gt;generateFrontendUrl($GLOBALS['objPage']-&amp;gt;row(),'/'.$objDesigner-&amp;gt;alias),&lt;br /&gt;
			// 'isTrail' =&amp;gt; (preg_match(&amp;quot;~&amp;quot;.preg_quote($objDesigner-&amp;gt;alias,'~').&amp;quot;\.html$~i&amp;quot;,$this-&amp;gt;Environment-&amp;gt;request))&lt;br /&gt;
			'isTrail' =&amp;gt; true // wir zeigen ohnehin immer nur einen Eintrag des level_1 an, deshalb immer true&lt;br /&gt;
		);	&lt;br /&gt;
		&lt;br /&gt;
		// als Unterseite von level_0 zuweisen &lt;br /&gt;
		$objNav-&amp;gt;arrSubpages[$GLOBALS['objPage']-&amp;gt;id][] = $objDesigner-&amp;gt;alias.'-'.$objDesigner-&amp;gt;id;&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		// level_2 Einträge einfügen&lt;br /&gt;
		$objCats = $this-&amp;gt;Database-&amp;gt;prepare('SELECT category,categoryAlias FROM tl_brand_product WHERE pid=? AND published=? GROUP BY category')-&amp;gt;execute($objDesigner-&amp;gt;id,'1');&lt;br /&gt;
		while($objCats-&amp;gt;next())&lt;br /&gt;
		{&lt;br /&gt;
			// Seite in den Navigations-Pool hinzufügen&lt;br /&gt;
			$objNav-&amp;gt;arrItems[$objDesigner-&amp;gt;id.'-'.$objCats-&amp;gt;categoryAlias] = array&lt;br /&gt;
			(&lt;br /&gt;
				'link'	=&amp;gt; $objCats-&amp;gt;category,&lt;br /&gt;
				'href'  =&amp;gt; $this-&amp;gt;generateFrontendUrl($GLOBALS['objPage']-&amp;gt;row(),'/'.$objDesigner-&amp;gt;alias.'/'.$objCats-&amp;gt;categoryAlias),&lt;br /&gt;
				'isTrail' =&amp;gt; (preg_match(&amp;quot;~&amp;quot;.preg_quote($objCats-&amp;gt;categoryAlias,'~').&amp;quot;(/.+|.html)$~i&amp;quot;,$this-&amp;gt;Environment-&amp;gt;request)) &lt;br /&gt;
			);	&lt;br /&gt;
			// Seite als Unterseite des level_1 Eitnrags zuweisen&lt;br /&gt;
			$objNav-&amp;gt;arrSubpages[$objDesigner-&amp;gt;alias.'-'.$objDesigner-&amp;gt;id][] = $objDesigner-&amp;gt;id.'-'.$objCats-&amp;gt;categoryAlias;&lt;br /&gt;
		} &lt;br /&gt;
		&lt;br /&gt;
		return $arrRoots;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Backbone</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Backboneit_navigation</id>
		<title>Backboneit navigation</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Backboneit_navigation"/>
				<updated>2011-07-11T14:40:26Z</updated>
		
		<summary type="html">&lt;p&gt;Backbone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Module]]&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|Version=Alle Versionen&lt;br /&gt;
|Ext1=backboneit_navigation}}&lt;br /&gt;
&lt;br /&gt;
= backboneit_navigation =&lt;br /&gt;
&lt;br /&gt;
Erweiterung bestehend aus einer Sammlung von Navigationselementen (vorerst nur ein erweitertes Navigationsmodul).&lt;br /&gt;
&lt;br /&gt;
ER: http://www.contao.org/erweiterungsliste/view/backboneit_navigation.10000009.de.html&lt;br /&gt;
&lt;br /&gt;
Anmerkungen zum Bestimmen der Sichtbarkeit einer Seite:&lt;br /&gt;
* Der Veröffentlichungsstatus gilt ausschließlich für eine Seite selbst. Das heißt zum Beispiel, dass eine Navigation durchaus dargestellt wird, selbst wenn die Referenzseite nicht veröffentlicht ist.&lt;br /&gt;
* Der Seitenschutz für bestimmte Mitgliedergruppen vererbt sich auf alle Unterseiten, außer denjenigen die selbst explizit einen Seitenschutz für Mitgliedergruppen definieren und derren Unterseiten.&lt;br /&gt;
* Die Einstellung &amp;quot;Nur Gästen anzeigen&amp;quot; gilt nur für die Seite selbst. Tatsächlich ist die Seite für angemeldete Benutzer auch noch verfügbar, soll nur in keiner Navigation angezeigt werden. (Anders als zum Beispiel Artikel, die nur Gästen angezeigt werden. Diese werden gar nicht mehr gerendert.)&lt;br /&gt;
* &amp;quot;Im Menü verstecken&amp;quot; gilt nur für die Seite selbst.&lt;br /&gt;
&lt;br /&gt;
== Navigationsmenü ==&lt;br /&gt;
&lt;br /&gt;
Ein Multitalent: Es ist alles möglich was mit einem Navigationsmenü oder einer Individuellen Navigation möglich ist, Kombinationen aus beiden und noch einiges mehr. Einfach ausprobieren.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* Kompatibel zu den Templates für das Standard-Navigationsmenü (einziger Unterschied ist, das Seiten die CSS-Klasse &amp;quot;submenu&amp;quot; tatsächlich auch nur dann bekommen, wenn dieses Untermenü gerendert wird)&lt;br /&gt;
* Mehrere Referenzseiten (Wurzeln der Navigation)&lt;br /&gt;
* Aktuelle Seite als Referenzseite&lt;br /&gt;
* Startebene wird relativ zu den Referenzseiten berechnet (negative Startebene möglich)&lt;br /&gt;
* Hardlimit flexibel (Anmerkung: Stopebene und Hardlimit beziehen sich relativ zur Startebene &amp;amp;endash; diessollte auch durch die geänderten Labels der Moduleinstellungen hervorgehen.&lt;br /&gt;
* Versteckte und geschützte Seiten anzeigen&lt;br /&gt;
* Als Sitemap verwendbar&lt;br /&gt;
* Optimierte Algorithmen: Zum Beispiel wird pro Navigationsebene nur noch eine Datenbankabfrage durchgeführt, was vorallem bei einer sehr verzweigten Navigation Vorteile bringen sollte.&lt;br /&gt;
* Erweiterbar per Hook&lt;br /&gt;
&lt;br /&gt;
=== Navigation per Hook erweitern ===&lt;br /&gt;
config.php&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['backboneit_navigation_menu'][] = array('MyNavigationHook', 'hook');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MyNavigationHook.php&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
class MyNavigationHook {&lt;br /&gt;
&lt;br /&gt;
  // ... singleton dummy code ...&lt;br /&gt;
&lt;br /&gt;
  public function hook($objThis, $arrRoots) {&lt;br /&gt;
    $intParentID = 1; // the ID of the parent node, were your new node should be appended/inserted to.&lt;br /&gt;
&lt;br /&gt;
    if(!isset($objThis-&amp;gt;arrItems[$intParentID])) // test if the parent should be rendered (to avoid my hook, if it is not needed)&lt;br /&gt;
      return;&lt;br /&gt;
&lt;br /&gt;
    $strMyNewNodeID = 'MyNavigationHook' . 1; // to avoid collision do not use plain numbers (reservered for tl_page dataset IDs)&lt;br /&gt;
    // and prefix the ID with something specific to your hook&lt;br /&gt;
&lt;br /&gt;
    $objThis-&amp;gt;varActiveID = $strMyNewNodeID; // set my new node as active navigation item&lt;br /&gt;
&lt;br /&gt;
    $objThis-&amp;gt;arrSubpages[$intParentID][] = $strMyNewNodeID; // append the my new node to the end of $intParentIDs childs&lt;br /&gt;
    $arrRoots[] = $strMyNewNodeID; // additionally add my new node to the end of the first level&lt;br /&gt;
&lt;br /&gt;
    $objThis-&amp;gt;arrItems[$strMyNewNodeID] = array(&lt;br /&gt;
      'class' =&amp;gt; 'myclass',&lt;br /&gt;
      'isTrail' =&amp;gt; true, // whether this node is in the trail path of the active page&lt;br /&gt;
      // ... more rendering information for the navigation template (see class AbstractNavigationMenu for all fields) ...&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    return $arrRoots; // return the modified first navigation level (not needed if unmodified)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Backbone</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Backboneit_navigation</id>
		<title>Backboneit navigation</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Backboneit_navigation"/>
				<updated>2011-07-06T13:03:58Z</updated>
		
		<summary type="html">&lt;p&gt;Backbone: Erste Version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Module]]&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|Version=Alle Versionen&lt;br /&gt;
|Ext1=backboneit_navigation}}&lt;br /&gt;
&lt;br /&gt;
= backboneit_navigation =&lt;br /&gt;
&lt;br /&gt;
Erweiterung bestehend aus einer Sammlung von Navigationselementen (vorerst nur ein erweitertes Navigationsmodul).&lt;br /&gt;
&lt;br /&gt;
ER: http://www.contao.org/erweiterungsliste/view/backboneit_navigation.10000009.de.html&lt;br /&gt;
&lt;br /&gt;
Anmerkungen zum Bestimmen der Sichtbarkeit einer Seite:&lt;br /&gt;
* Der Veröffentlichungsstatus gilt ausschließlich für eine Seite selbst. Das heißt zum Beispiel, dass eine Navigation durchaus dargestellt wird, selbst wenn die Referenzseite nicht veröffentlicht ist.&lt;br /&gt;
* Der Seitenschutz für bestimmte Mitgliedergruppen vererbt sich auf alle Unterseiten, außer denjenigen die selbst explizit einen Seitenschutz für Mitgliedergruppen definieren und derren Unterseiten.&lt;br /&gt;
* Die Einstellung &amp;quot;Nur Gästen anzeigen&amp;quot; gilt nur für die Seite selbst. Tatsächlich ist die Seite für angemeldete Benutzer auch noch verfügbar, soll nur in keiner Navigation angezeigt werden. (Anders als zum Beispiel Artikel, die nur Gästen angezeigt werden. Diese werden gar nicht mehr gerendert.)&lt;br /&gt;
* &amp;quot;Im Menü verstecken&amp;quot; gilt nur für die Seite selbst.&lt;br /&gt;
&lt;br /&gt;
== Navigationsmenü ==&lt;br /&gt;
&lt;br /&gt;
Ein Multitalent: Es ist alles möglich was mit einem Navigationsmenü oder einer Individuellen Navigation möglich ist, Kombinationen aus beiden und noch einiges mehr. Einfach ausprobieren.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* Kompatibel zu den Templates für das Standard-Navigationsmenü (einziger Unterschied ist, das Seiten die CSS-Klasse &amp;quot;submenu&amp;quot; tatsächlich auch nur dann bekommen, wenn dieses Untermenü gerendert wird)&lt;br /&gt;
* Mehrere Referenzseiten (Wurzeln der Navigation)&lt;br /&gt;
* Aktuelle Seite als Referenzseite&lt;br /&gt;
* Startebene wird relativ zu den Referenzseiten berechnet (negative Startebene möglich)&lt;br /&gt;
* Hardlimit flexibel (Anmerkung: Stopebene und Hardlimit beziehen sich relativ zur Startebene &amp;amp;endash; diessollte auch durch die geänderten Labels der Moduleinstellungen hervorgehen.&lt;br /&gt;
* Versteckte und geschützte Seiten anzeigen&lt;br /&gt;
* Als Sitemap verwendbar&lt;br /&gt;
* Optimierte Algorithmen: Zum Beispiel wird pro Navigationsebene nur noch eine Datenbankabfrage durchgeführt, was vorallem bei einer sehr verzweigten Navigation Vorteile bringen sollte.&lt;br /&gt;
* Erweiterbar per Hook&lt;br /&gt;
&lt;br /&gt;
=== Navigation per Hook erweitern ===&lt;br /&gt;
config.php&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['backboneit_navigation_menu'] = array('MyNavigationHook', 'hook');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MyNavigationHook.php&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
class MyNavigationHook {&lt;br /&gt;
&lt;br /&gt;
  // ... singleton dummy code ...&lt;br /&gt;
&lt;br /&gt;
  public function hook($objThis, $arrRoots) {&lt;br /&gt;
    $intParentID = 1; // the ID of the parent node, were your new node should be appended/inserted to.&lt;br /&gt;
&lt;br /&gt;
    if(!isset($objThis-&amp;gt;arrItems[$intParentID])) // test if the parent should be rendered (to avoid my hook, if it is not needed)&lt;br /&gt;
      return;&lt;br /&gt;
&lt;br /&gt;
    $strMyNewNodeID = 'MyNavigationHook' . 1; // to avoid collision do not use plain numbers (reservered for tl_page dataset IDs)&lt;br /&gt;
    // and prefix the ID with something specific to your hook&lt;br /&gt;
&lt;br /&gt;
    $objThis-&amp;gt;arrSubpages[$intParentID][] = $strMyNewNodeID; // append the my new node to the end of $intParentIDs childs&lt;br /&gt;
    $arrRoots[] = $strMyNewNodeID; // additionally add my new node to the end of the first level&lt;br /&gt;
&lt;br /&gt;
    $objThis-&amp;gt;arrItems[$strMyNewNodeID] = array(&lt;br /&gt;
      'class' =&amp;gt; 'myclass',&lt;br /&gt;
      'active' =&amp;gt; true,&lt;br /&gt;
      // ... more rendering information for the navigation template ...&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    global $objPage;&lt;br /&gt;
    $objThis-&amp;gt;arrItems[$objPage-&amp;gt;id]['active'] = false; // unset active state of current page&lt;br /&gt;
&lt;br /&gt;
    return $arrRoots; // return the modified first navigation level (not needed if unmodified)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Backbone</name></author>	</entry>

	</feed>