https://de.contaowiki.org/api.php?action=feedcontributions&user=Tril&feedformat=atomContao Community Documentation - Benutzerbeiträge [de]2024-03-28T19:47:52ZBenutzerbeiträgeMediaWiki 1.22.6https://de.contaowiki.org/TwigTwig2014-11-06T19:31:07Z<p>Tril: </p>
<hr />
<div>[[Kategorie:Extensions]]<br />
{{ExtInfo<br />
| Dev=Tristan Lins<br />
| Version=2.11 bis 3.1 (potentiell kompatibel mit 2.9+ und 2.10+ aber ungetestet)<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/twig.de.html<br />
}}<br />
<br />
[http://twig.sensiolabs.org/ Twig] ist eine Moderne und beliebte Template Engine.<br />
Sie wird unter anderem in Symfony2 und vielen weiteren Systemen eingesetzt.<br />
Twig ist recht jung, die bekannteste kompilierende Template Engine für PHP düfte wohl [http://www.smarty.net/ Smarty] sein.<br />
<br />
Die Contao Erweiterung [https://github.com/bit3/contao-twig twig] bringt Twig nun auch nach Contao.<br />
<br />
=Tipps und Tricks=<br />
<br />
==Twig und Insert-Tags==<br />
<br />
Twig verwendet für Variablen die gleiche Syntax wie Contao für die Insert-Tags: <code><nowiki>{{...}}</nowiki></code>.<br />
Will man Insert-Tags in einem Twig Template verwenden, muss man ein bisschen kreativ werden und den Insert-Tag als String in einer Twig Variable ausgeben <code><nowiki>{{ '{{...}}' }}</nowiki></code>, z.B. <code><nowiki>{{ '{{link::123}}' }}</nowiki></code>.<br />
<br />
=Twig Elemente=<br />
<br />
Twig stellt ein Inhaltselement und ein Frontend Modul bereit, dieses bietet ähnlich dem HTML Element die Möglichkeit einfach Twig Code im Backend anzugeben, der im Frontend ausgegeben wird.<br />
<br />
{{Achtung|Die Twig Element stehen erst ab Version 1.4 zur Verfügung.}}<br />
<br />
=Twig Templates=<br />
<br />
Twig Templates werden wie Contao Templates in den '''templates''' Verzeichnissen abgelegt.<br />
Sie erhalten zusätzlich die Endung '''*.twig''', z.B. '''ce_mycontent.html5.twig''' oder '''ce_mycontent.xhtml.twig'''.<br />
{{Achtung|Ab Version 1.2 ist Autoescape deaktiviert! (Der Filter <code>raw</code> ist daher nicht mehr notwendig.)}}<br />
<br />
=Globale Variablen=<br />
<br />
Die twig Erweiterung liefert einige globale Variablen mit, auf die man in den Templates Zugriff hat.<br />
<br />
* '''REQUEST_TOKEN''' Der aktuell gültige request token.<br />
* '''REFERER_ID''' Die aktuell gültige referer ID.<br />
* '''_lang''' bietet Zugriff auf <code>$GLOBALS['TL_LANG']</code>, z.B. <code><nowiki>{{ _lang.MSC.confirm.0 }}</nowiki></code><br />
* '''_dca''' bietet Zugriff auf <code>$GLOBALS['TL_DCA']</code>, z.B. <code><nowiki>{{ _dca.tl_content.fields.headline.label.0 }}</nowiki></code><br />
* '''_config''' bietet Zugriff auf <code>$GLOBALS['TL_CONFIG']</code>, z.B. <code><nowiki>{{ _config.dateFormat }}</nowiki></code><br />
* '''_env''' bietet Zugriff auf <code>Environment</code>, z.B.<code><nowiki>{{ _env.request }}</nowiki></code><br />
* '''_db''' bietet Zugriff auf das Datenbankobjekt, z.B. <code><nowiki>{{ _db.query('SELECT * FROM tl_user').fetchAllAssoc() }}</nowiki></code> (siehe auch die speziellen Database-Filter Funktionen)<br />
* '''_page''' bietet Zugriff auf die aktuelle Page <code>$GLOBALS['objPage']</code>, z.B.<code><nowiki>{{ _page.title }}</nowiki></code><br />
* '''_member''' bietet Zugriff auf das aktuellen Frontend Mitglied, ist <code>false</code> falls kein Mitglied angemeldet ist<br />
* '''_user''' bietet Zugriff auf den aktuellen Backend User, ist <code>false</code> falls kein User angemeldet ist<br />
* '''_session''' bietet Zugriff auf <code>$_SESSION</code> <br />
* '''_referer''' liefert den aktuellen Referer<br />
* '''_theme''' liefert das aktuelle Backend Theme <code><nowiki>system/themes/{{ _theme }}/images/reload.gif</nowiki></code><br />
<br />
{{Achtung|'''_env''', '''_page''', '''_member''' und '''_user''' stehen erst ab Version 1.4.0 zur Verfügung.}}<br />
{{Achtung|'''REFERER_ID''' stehen erst ab Version 1.4.2 zur Verfügung.}}<br />
{{Achtung|'''_referer''' und '''_session''' stehen erst ab Version 1.6.0 zur Verfügung.}}<br />
{{Achtung|'''_theme''' stehen erst ab Version 1.11.0 zur Verfügung.}}<br />
<br />
=Allgemeine Filter Funktionen=<br />
<br />
Die twig Erweiterung liefert einige allgemeine Filter Funktionen.<br />
<br />
* '''deserialize''', z.B. <code><nowiki>{{ row.groups|deserialize }}</nowiki></code> oder <code><nowiki>{{ row.groups|deserialize(true) }}</nowiki></code><br />
* '''standardize''', z.B. <code><nowiki>{{ row.title|standardize }}</nowiki></code><br />
* '''dateFormat''' format einen Zeitstempel nach dem globalen Datumsformat, z.B. <code><nowiki>{{ row.tstamp|dateFormat }}</nowiki></code><br />
* '''datimFormat''' format einen Zeitstempel nach dem globalen Datum+Zeitformat, z.B. <code><nowiki>{{ row.tstamp|datimFormat }}</nowiki></code><br />
* '''format''' formatiert mittels <code>sprintf</code> die Zeichenkette, z.B. <code><nowiki>{{ '%s %s'|format('foo', 'bar') }}</nowiki></code><br />
* '''vformat''' wie '''format''' akzeptiert aber ein Array als Formatargumente (Analogie zu <code>sprintf</code> und <code>vsprintf</code>), z.B. <code><nowiki>{{ '%s %s'|vformat({'foo', 'bar'}) }}</nowiki></code><br />
* '''url''' erzeugt eine Frontend URL, z.B. <code><nowiki>{{ _page|url }}</nowiki></code>, akzeptiert ein DB Objekt, eine Collection, eine Page ID oder ein Row-Array.<br />
* '''addToUrl''' fügt Parameters zur aktuellen URL hinzu (siehe <code>Controller::addToUrl</code>), z.B. <code><nowiki>{{ addToUrl('foo=bar') }}</nowiki></code> oder <code><nowiki>{{ addToUrl({ 'foo': 'bar' }) }}</nowiki></code><br />
<br />
{{Achtung|'''vformat''' steht erst ab Version 1.2.1 zur Verfügung.}}<br />
{{Achtung|'''url''' steht erst ab Version 1.4 zur Verfügung.}}<br />
{{Achtung|'''addToUrl''' steht erst ab Version 1.11 zur Verfügung.}}<br />
<br />
=Datenbank Filter Funktionen=<br />
<br />
Neben dem '''_db''' Objekt werden auch Filterfunktionen bereitgestellt, um auf die Datenbank zuzugreifen.<br />
<br />
* '''prepare''' bereitet ein Statement vors (vgl. Database::prepare), z.B. <code>{% set stmt = 'SELECT * FROM tl_user WHERE admin=?'|prepare %}</code><br />
* '''set''' fügt SET oder UPDATE einem Statement hinzu (vgl. Database_Statement::set), z.B. <code>{% set stmt = stmt|set({ 'foo': 'foo', 'bar': 'bar' }) %}</code><br />
* '''execute''' führt ein Statement aus (vgl. Database::execute und Database_Statement::execute), z.B. <code>{% set result = stmt|execute(1) %}</code> oder <code>{% set result = 'SELECT * FROM tl_user WHERE admin=?'|execute(1) %}</code><br />
* '''query''' führt ein Statement direkt aus (vgl. Database::query), z.B. <code>{% set result = 'SELECT * FROM tl_user'|query %}</code><br />
<br />
==Kombinierte Beispiele==<br />
<br />
<source>{% set result = 'SELECT * FROM tl_user WHERE admin=?'|prepare|execute(1) %}</source><br />
<br />
<source>{% set result = 'UPDATE tl_user %s WHERE id=?'|prepare|set({ 'admin': 1 })|execute(id) %}</source><br />
<br />
<source><br />
{% for row in 'SELECT * FROM tl_user'|query %}<br />
{# do somethink with row #}<br />
{% endfor %}<br />
</source><br />
<br />
=Komplexe Funktionen=<br />
<br />
==image Funktion/Filter==<br />
(Ab Version 1.2)<br />
<br />
Mit der/dem <code>image</code> Funktion/Filter lassen sich Bilder einfach ausgeben und in der Größe ändern. <code>image</code> ist ein Shortcut auf <code>generateImage</code> und ggf. <code>getImage</code>.<br />
<br />
===Beispiel - Bild ausgeben===<br />
<br />
<source lang="html4strict"><br />
{{ image('path/to/image.png') }}<br />
</source><br />
<br />
<source lang="html4strict"><br />
{{ 'path/to/image.png'|image }}<br />
</source><br />
<br />
===Beispiel - Bild ausgeben mit Größenänderung und Attributen (einfach)===<br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, width, height, mode, alt, attributes) }} #}<br />
{{ image('path/to/image.png', '800', '600', 'center_left', 'Ich bin ein Alt Text', 'title="Ich bin der Titel"') }}<br />
</source><br />
<br />
===Beispiel - Bild ausgeben mit Größenänderung und Attributen (erweitert)===<br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, settings) }} #}<br />
{{ image('path/to/image.png', {'alt':'Ich bin ein Alt Text'}) }}<br />
</source><br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, settings) }} #}<br />
{{ image('path/to/image.png', {'alt':'Ich bin ein Alt Text', 'attributes':'title="Ich bin der Titel"'}) }}<br />
</source><br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, settings) }} #}<br />
{{ image('path/to/image.png', {'width':'800', 'height':'600', 'mode':'center_right', 'alt':'Ich bin ein Alt Text', 'attributes':'title="Ich bin der Titel"'}) }}<br />
</source><br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, settings) }} #}<br />
{{ image('path/to/image.png', {'width':'800', 'height':'600'}) }}<br />
</source><br />
<br />
==messages Funktion==<br />
(Ab Version 1.2)<br />
<br />
Die <code>messages</code> Funktion ist ein Shortcut für <code>getMessages()</code>.<br />
<br />
<source lang="html4strict"><br />
{{ messages() }}<br />
</source><br />
<br />
=TwigFrontendTemplate und TwigBackendTemplate=<br />
<br />
Um Twig zu verwenden, werden anstelle der bekannten '''FrontendTemplate''' und '''BackendTemplate''' Klassen, die Twig Klassen '''TwigFrontendTemplate''' und '''TwigBackendTemplate''' verwendet.<br />
Diese Klassen verhalten sich genau so, wie ihre Contao Pendanten, das gilt auch für die Hooks '''parseTemplate''', '''parseFrontendTemplate''' und '''parseBackendTemplate''' die ebenfalls verfügbar sind.<br />
<br />
<source lang="php"><br />
$objTemplate = TwigFrontendTemplate('ce_mycontent');<br />
$objTemplate->setData($arrData);<br />
$objTemplate->foo = 'bar';<br />
$strBuffer = $objTemplate->parse();<br />
</source><br />
<br />
=TwigTemplate=<br />
<br />
Im Gegensatz zu '''TwigFrontendTemplate''' und '''TwigBackendTemplate''' ist '''TwigTemplate''' nicht für Frontend oder Backend konzipiert und führt entsprechend auch keinerlei Frontend oder Backend spezifischen Manipulationen am Template durch. Außerdem ist eint '''TwigTemplate''' stateless, d.h. man kann dem Template keine Variablen zuweisen, sondern übergibt diese der <code>TwigTemplate::parse()</code> Methode.<br />
<br />
Man kann '''TwigTemplate''' auch als generisches Template bezeichnen, das für jede Art von Templates eingesetzt werden kann.<br />
<br />
<source lang="php"><br />
# use the template my_template.twig<br />
$template = TwigTemplate('my_template');<br />
$buffer = $template->parse();<br />
<br />
# alternative<br />
$template = TwigTemplate();<br />
$template->setTemplateName('my_template');<br />
$buffer = $template->parse();<br />
</source><br />
<br />
<source lang="php"><br />
# use the template my_template.html5.twig<br />
$template = TwigTemplate('my_template', 'html5');<br />
$buffer = $template->parse();<br />
<br />
# alternative<br />
$template = TwigTemplate('my_template');<br />
$template->setFormat('html5');<br />
$buffer = $template->parse();<br />
</source><br />
<br />
<source lang="php"><br />
# use the template my_template.html5 (inadvisable)<br />
$template = TwigTemplate('my_template', null, 'html5');<br />
$buffer = $template->parse();<br />
<br />
# alternative<br />
$template = TwigTemplate('my_template');<br />
$template->setFileExtension('html5');<br />
$buffer = $template->parse();<br />
</source><br />
<br />
<source lang="php"><br />
# pass parameters to my_template.html5.twig<br />
$params = array(<br />
'foo' => 'bar'<br />
);<br />
$template = TwigTemplate('my_template', 'html5', 'twig');<br />
$buffer = $template->parse($params);<br />
</source><br />
<br />
=Twig Module und Inhaltselemente=<br />
<br />
Um Twig in einem Frontend Modul, Backend Modul oder Inhaltselement zu nutzen, gibt es 3 spezielle Klassen.<br />
<br />
* '''TwigModule''' ist eine spezielle Form von '''Module''' die '''TwigFrontendTemplate''' anstelle von '''FrontendTemplate''' verwendet.<br />
* '''TwigBackendModule''' ist eine spezielle Form von '''BackendModule''' die '''TwigBackendTemplate''' anstelle von '''BackendTemplate''' verwendet.<br />
* '''TwigContentElement''' ist eine spezielle Form von '''ContentElement''' die '''TwigFrontendTemplate''' anstelle von '''FrontendTemplate''' verwendet.<br />
<br />
<br />
<source lang="php"><br />
class MyContent extends TwigContentElement<br />
{<br />
protected $strTemplate = 'ce_mycontent';<br />
<br />
public function compile()<br />
{<br />
// ...<br />
}<br />
}<br />
</source><br />
<br />
=Basis-Templates=<br />
<br />
Es werden 8 Basis-Templates zur Verfügung gestellt.<br />
<br />
* ce_container.html5.twig<br />
* ce_container.xhtml.twig<br />
* mod_container.html5.twig<br />
* mod_container.xhtml.twig<br />
<br />
Diese sind nicht groß, bieten aber die grundlegenden Elemente die jedes Inhaltselement oder Modul mit sich bringt.<br />
<br />
<source lang="html4strict"><br />
<div class="{{ class }} block"{{ cssID }}{% if style %} style="{{ style }}}"{% endif %}{% block attributes %}{% endblock %}><br />
{% block headline %}<br />
{% if headline %}<br />
<br />
<{{ hl }}>{{ headline }}</{{ hl }}><br />
{% endif %}<br />
{% endblock %}<br />
<br />
{% block content %}{% endblock %}<br />
</div><br />
</source><br />
<br />
{{Achtung|Die <code>*_noindex.*.twig</code> Templates steht erst ab Version 1.10 zur Verfügung.}}<br />
<br />
Für Module/Inhaltselemente die nicht für die Suche indiziert werden sollen, gibt es zusätzlich noch:<br />
<br />
* ce_container_noindex.html5.twig<br />
* ce_container_noindex.xhtml.twig<br />
* mod_container_noindex.html5.twig<br />
* mod_container_noindex.xhtml.twig<br />
<br />
Diese sind lediglich noch mit einem <code><!-- indexer::stop --></code> und <code><!-- indexer::continue --></code> umgeben.<br />
<br />
<source lang="html4strict"><br />
<!-- indexer::stop --><br />
<div class="{{ class }} block"{{ cssID }}{% if style %} style="{{ style }}}"{% endif %}{% block attributes %}{% endblock %}><br />
{% block headline %}<br />
{% if headline %}<br />
<br />
<{{ hl }}>{{ headline }}</{{ hl }}><br />
{% endif %}<br />
{% endblock %}<br />
<br />
{% block content %}{% endblock %}<br />
</div><br />
<!-- indexer::continue --><br />
</source><br />
<br />
Im eigenen Template lässt sich das Basis-Template sehr einfach verwenden:<br />
<br />
<source lang="html4strict"><br />
{% extends 'mod_container.html5.twig' %}<br />
<br />
{% block content %}<br />
Put your content here<br />
{% endblock %}<br />
</source><br />
<br />
=TwigPagination=<br />
<br />
Die Klasse '''TwigPagination''' ist eine "Templatebasierende" Pagination die auf Twig aufsetzt.<br />
Sie wird genau so eingesetzt wie die '''Pagination''' Klasse, kann aber über das Template <code>pagination.html5.twig</code> und <code>pagination.xhtml.twig</code> angepasst werden.<br />
<br />
==TwigCustomPagination==<br />
<br />
Die Klasse '''TwigCustomPagination''' ist ebenfalls eine Pagination die auf Twig aufsetzt.<br />
Allerdings können bei dieser Pagination die URLs aus der die Pagination erzeugt wird selbst festgelegt werden.<br />
Das ist praktisch, wenn man bspw. über mehrere Items eine Pagination erstellen will.<br />
<br />
<source lang="php"><br />
$links = array(<br />
'news/items/record_1.html',<br />
'news/items/record_2.html',<br />
'news/items/record_3.html',<br />
'news/items/record_4.html',<br />
'news/items/record_5.html',<br />
'news/items/record_6.html',<br />
'news/items/record_7.html',<br />
'news/items/record_8.html',<br />
'news/items/record_9.html',<br />
'news/items/record_10.html',<br />
'news/items/record_11.html',<br />
'news/items/record_12.html',<br />
'news/items/record_13.html',<br />
'news/items/record_14.html',<br />
'news/items/record_15.html',<br />
'news/items/record_16.html',<br />
'news/items/record_17.html',<br />
'news/items/record_18.html',<br />
'news/items/record_19.html',<br />
'news/items/record_20.html',<br />
);<br />
$pagination = new TwigCustomPagination($links);<br />
echo $pagination->generate();<br />
</source><br />
<br />
Man muss darauf achten, dass die URL auch so aufgerufen wird, ansonsten findet die Pagination nicht das aktuelle Item.<br />
Außerdem hat diese Pagination den Nachteil, dass man '''alle''' URLs zur Verfügung stellen muss.<br />
Wenn die Berechnung der Links sehr kostenintensiv ist, muss der Entwickler entsprechende Optimierung betreiben, in dem er z.B. nur die Links zur Verfügung stellt, die auch angezeigt werden.<br />
<br />
<source lang="php"><br />
$links = array(<br />
'news/items/record_1.html', // "go to first" link<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'news/items/record_9.html', // visible link<br />
'news/items/record_10.html', // visible link<br />
'news/items/record_11.html', // visible link<br />
'news/items/record_12.html', // active link<br />
'news/items/record_13.html', // visible link<br />
'news/items/record_14.html', // visible link<br />
'news/items/record_15.html', // visible link<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'news/items/record_20.html', // "go to last" link<br />
);<br />
$pagination = new TwigCustomPagination($links);<br />
echo $pagination->generate();<br />
</source><br />
<br />
Abhängig von der Anzahl der angezeigten Links (Standardmäßig sind das 7), muss der Entwickler die notwendigen Links zur Verfügung stellen.<br />
<br />
=TwigHybrid=<br />
<br />
Die Klasse '''TwigHybrid''' ist eine '''Hybrid''' Implementierung die auf Twig aufsetzt.<br />
Sie wird genau so eingesetzt, wie die originale '''Hybrid''' Klasse von Contao.<br />
<br />
==TwigSimpleHybrid==<br />
<br />
Die Klasse '''TwigSimpleHybrid''' ist eine vereinfachte Form von '''TwigHybrid''' die ohne zweite Tabelle aus kommt.<br />
Anstelle die Daten aus einer zweiten Tabelle zu laden, verwendet '''TwigSimpleHybrid''' einfach den aktuellen Record (tl_content oder tl_module) als Datenquelle.<br />
Das hat natürlich den Nachteil, dass man die Datenfelder sowohl in der Tabelle <code>tl_content</code>, als auch in der Tabelle <code>tl_module</code> anlegen muss, dafür hat man eine Klasse, die sowohl als Inhaltselement, als auch als Modul verwendet werden kann.<br />
Von der Klassenbenennung verhält sich der Hybrid wie ein Modul, d.h. auch bei Inhaltselementen wird der Prefix <code>mod_</code> anstelle von <code>ce_</code> verwendet.<br />
<br />
'''config.php'''<br />
<source lang="php"><br />
// register content element<br />
$GLOBALS['TL_CTE']['my_ext']['my_element'] = 'HybridMyElement';<br />
<br />
// register frontend module<br />
$GLOBALS['FE_MOD']['my_ext']['my_element'] = 'HybridMyElement';<br />
</source><br />
<br />
'''HybridMyElement.php'''<br />
<source lang="php"><br />
class HybridMyElement<br />
extends TwigSimpleHybrid<br />
{<br />
/**<br />
* @var string<br />
*/<br />
protected $strTemplate = 'mod_my_element';<br />
<br />
public function compile()<br />
{<br />
$this->Template->foo = $this->bar;<br />
}<br />
}<br />
</source><br />
<br />
=Twig Erweitern=<br />
<br />
Gesteuert wird Twig über die '''ContaoTwig''' Klasse. Bei dieser handelt es sich um eine Singleton Klasse, die die Loader und das Twig Environment bereitstellt.<br />
Wenn Twig erstmals initialisiert wird (also bei der 1. Verwendung) wird der '''initializeTwig''' Hook getriggert, mit dem man Twig Erweitern kann.<br />
<br />
<source lang="php"><br />
$GLOBALS['TL_HOOKS']['initializeTwig'][] = array('MyClass', 'hookInitializeTwig');<br />
<br />
class MyClass<br />
{<br />
public function hookInitializeTwig(ContaoTwig $contaoTwig)<br />
{<br />
// Twig Environment anpassen<br />
/** @var Twig_Environment $twig */<br />
$twig = $contaoTwig->getEnvironment();<br />
// do somethink with $twig<br />
<br />
// Den Standard Filesystem Loader anpassen<br />
/** @var Twig_Loader_Filesystem $filesystemLoader */<br />
$filesystemLoader = $contaoTwig->getLoaderFilesystem();<br />
$filesystemLoader->addPath('custom/path/to/my/templates');<br />
<br />
// Eigenen Template Loader hinzufügen<br />
/** @var Twig_Loader_Chain $loader */<br />
$loader = $contaoTwig->getLoader();<br />
$loader->addLoader(new MyTwigLoader());<br />
}<br />
}<br />
</source></div>Trilhttps://de.contaowiki.org/TwigTwig2014-09-19T09:04:21Z<p>Tril: /* Allgemeine Filter Funktionen */</p>
<hr />
<div>[[Kategorie:Extensions]]<br />
{{ExtInfo<br />
| Dev=Tristan Lins<br />
| Version=2.11 bis 3.1 (potentiell kompatibel mit 2.9+ und 2.10+ aber ungetestet)<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/twig.de.html<br />
}}<br />
<br />
[http://twig.sensiolabs.org/ Twig] ist eine Moderne und beliebte Template Engine.<br />
Sie wird unter anderem in Symfony2 und vielen weiteren Systemen eingesetzt.<br />
Twig ist recht jung, die bekannteste kompilierende Template Engine für PHP düfte wohl [http://www.smarty.net/ Smarty] sein.<br />
<br />
Die Contao Erweiterung [https://github.com/InfinitySoft/contao-twig twig] bringt Twig nun auch nach Contao.<br />
<br />
=Tipps und Tricks=<br />
<br />
==Twig und Insert-Tags==<br />
<br />
Twig verwendet für Variablen die gleiche Syntax wie Contao für die Insert-Tags: <code><nowiki>{{...}}</nowiki></code>.<br />
Will man Insert-Tags in einem Twig Template verwenden, muss man ein bisschen kreativ werden und den Insert-Tag als String in einer Twig Variable ausgeben <code><nowiki>{{ '{{...}}' }}</nowiki></code>, z.B. <code><nowiki>{{ '{{link::123}}' }}</nowiki></code>.<br />
<br />
=Twig Elemente=<br />
<br />
Twig stellt ein Inhaltselement und ein Frontend Modul bereit, dieses bietet ähnlich dem HTML Element die Möglichkeit einfach Twig Code im Backend anzugeben, der im Frontend ausgegeben wird.<br />
<br />
{{Achtung|Die Twig Element stehen erst ab Version 1.4 zur Verfügung.}}<br />
<br />
=Twig Templates=<br />
<br />
Twig Templates werden wie Contao Templates in den '''templates''' Verzeichnissen abgelegt.<br />
Sie erhalten zusätzlich die Endung '''*.twig''', z.B. '''ce_mycontent.html5.twig''' oder '''ce_mycontent.xhtml.twig'''.<br />
{{Achtung|Ab Version 1.2 ist Autoescape deaktiviert! (Der Filter <code>raw</code> ist daher nicht mehr notwendig.)}}<br />
<br />
=Globale Variablen=<br />
<br />
Die twig Erweiterung liefert einige globale Variablen mit, auf die man in den Templates Zugriff hat.<br />
<br />
* '''REQUEST_TOKEN''' Der aktuell gültige request token.<br />
* '''REFERER_ID''' Die aktuell gültige referer ID.<br />
* '''_lang''' bietet Zugriff auf <code>$GLOBALS['TL_LANG']</code>, z.B. <code><nowiki>{{ _lang.MSC.confirm.0 }}</nowiki></code><br />
* '''_dca''' bietet Zugriff auf <code>$GLOBALS['TL_DCA']</code>, z.B. <code><nowiki>{{ _dca.tl_content.fields.headline.label.0 }}</nowiki></code><br />
* '''_config''' bietet Zugriff auf <code>$GLOBALS['TL_CONFIG']</code>, z.B. <code><nowiki>{{ _config.dateFormat }}</nowiki></code><br />
* '''_env''' bietet Zugriff auf <code>Environment</code>, z.B.<code><nowiki>{{ _env.request }}</nowiki></code><br />
* '''_db''' bietet Zugriff auf das Datenbankobjekt, z.B. <code><nowiki>{{ _db.query('SELECT * FROM tl_user').fetchAllAssoc() }}</nowiki></code> (siehe auch die speziellen Database-Filter Funktionen)<br />
* '''_page''' bietet Zugriff auf die aktuelle Page <code>$GLOBALS['objPage']</code>, z.B.<code><nowiki>{{ _page.title }}</nowiki></code><br />
* '''_member''' bietet Zugriff auf das aktuellen Frontend Mitglied, ist <code>false</code> falls kein Mitglied angemeldet ist<br />
* '''_user''' bietet Zugriff auf den aktuellen Backend User, ist <code>false</code> falls kein User angemeldet ist<br />
* '''_session''' bietet Zugriff auf <code>$_SESSION</code> <br />
* '''_referer''' liefert den aktuellen Referer<br />
* '''_theme''' liefert das aktuelle Backend Theme <code><nowiki>system/themes/{{ _theme }}/images/reload.gif</nowiki></code><br />
<br />
{{Achtung|'''_env''', '''_page''', '''_member''' und '''_user''' stehen erst ab Version 1.4.0 zur Verfügung.}}<br />
{{Achtung|'''REFERER_ID''' stehen erst ab Version 1.4.2 zur Verfügung.}}<br />
{{Achtung|'''_referer''' und '''_session''' stehen erst ab Version 1.6.0 zur Verfügung.}}<br />
{{Achtung|'''_theme''' stehen erst ab Version 1.11.0 zur Verfügung.}}<br />
<br />
=Allgemeine Filter Funktionen=<br />
<br />
Die twig Erweiterung liefert einige allgemeine Filter Funktionen.<br />
<br />
* '''deserialize''', z.B. <code><nowiki>{{ row.groups|deserialize }}</nowiki></code> oder <code><nowiki>{{ row.groups|deserialize(true) }}</nowiki></code><br />
* '''standardize''', z.B. <code><nowiki>{{ row.title|standardize }}</nowiki></code><br />
* '''dateFormat''' format einen Zeitstempel nach dem globalen Datumsformat, z.B. <code><nowiki>{{ row.tstamp|dateFormat }}</nowiki></code><br />
* '''datimFormat''' format einen Zeitstempel nach dem globalen Datum+Zeitformat, z.B. <code><nowiki>{{ row.tstamp|datimFormat }}</nowiki></code><br />
* '''format''' formatiert mittels <code>sprintf</code> die Zeichenkette, z.B. <code><nowiki>{{ '%s %s'|format('foo', 'bar') }}</nowiki></code><br />
* '''vformat''' wie '''format''' akzeptiert aber ein Array als Formatargumente (Analogie zu <code>sprintf</code> und <code>vsprintf</code>), z.B. <code><nowiki>{{ '%s %s'|vformat({'foo', 'bar'}) }}</nowiki></code><br />
* '''url''' erzeugt eine Frontend URL, z.B. <code><nowiki>{{ _page|url }}</nowiki></code>, akzeptiert ein DB Objekt, eine Collection, eine Page ID oder ein Row-Array.<br />
* '''addToUrl''' fügt Parameters zur aktuellen URL hinzu (siehe <code>Controller::addToUrl</code>), z.B. <code><nowiki>{{ addToUrl('foo=bar') }}</nowiki></code> oder <code><nowiki>{{ addToUrl({ 'foo': 'bar' }) }}</nowiki></code><br />
<br />
{{Achtung|'''vformat''' steht erst ab Version 1.2.1 zur Verfügung.}}<br />
{{Achtung|'''url''' steht erst ab Version 1.4 zur Verfügung.}}<br />
{{Achtung|'''addToUrl''' steht erst ab Version 1.11 zur Verfügung.}}<br />
<br />
=Datenbank Filter Funktionen=<br />
<br />
Neben dem '''_db''' Objekt werden auch Filterfunktionen bereitgestellt, um auf die Datenbank zuzugreifen.<br />
<br />
* '''prepare''' bereitet ein Statement vors (vgl. Database::prepare), z.B. <code>{% set stmt = 'SELECT * FROM tl_user WHERE admin=?'|prepare %}</code><br />
* '''set''' fügt SET oder UPDATE einem Statement hinzu (vgl. Database_Statement::set), z.B. <code>{% set stmt = stmt|set({ 'foo': 'foo', 'bar': 'bar' }) %}</code><br />
* '''execute''' führt ein Statement aus (vgl. Database::execute und Database_Statement::execute), z.B. <code>{% set result = stmt|execute(1) %}</code> oder <code>{% set result = 'SELECT * FROM tl_user WHERE admin=?'|execute(1) %}</code><br />
* '''query''' führt ein Statement direkt aus (vgl. Database::query), z.B. <code>{% set result = 'SELECT * FROM tl_user'|query %}</code><br />
<br />
==Kombinierte Beispiele==<br />
<br />
<source>{% set result = 'SELECT * FROM tl_user WHERE admin=?'|prepare|execute(1) %}</source><br />
<br />
<source>{% set result = 'UPDATE tl_user %s WHERE id=?'|prepare|set({ 'admin': 1 })|execute(id) %}</source><br />
<br />
<source><br />
{% for row in 'SELECT * FROM tl_user'|query %}<br />
{# do somethink with row #}<br />
{% endfor %}<br />
</source><br />
<br />
=Komplexe Funktionen=<br />
<br />
==image Funktion/Filter==<br />
(Ab Version 1.2)<br />
<br />
Mit der/dem <code>image</code> Funktion/Filter lassen sich Bilder einfach ausgeben und in der Größe ändern. <code>image</code> ist ein Shortcut auf <code>generateImage</code> und ggf. <code>getImage</code>.<br />
<br />
===Beispiel - Bild ausgeben===<br />
<br />
<source lang="html4strict"><br />
{{ image('path/to/image.png') }}<br />
</source><br />
<br />
<source lang="html4strict"><br />
{{ 'path/to/image.png'|image }}<br />
</source><br />
<br />
===Beispiel - Bild ausgeben mit Größenänderung und Attributen (einfach)===<br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, width, height, mode, alt, attributes) }} #}<br />
{{ image('path/to/image.png', '800', '600', 'center_left', 'Ich bin ein Alt Text', 'title="Ich bin der Titel"') }}<br />
</source><br />
<br />
===Beispiel - Bild ausgeben mit Größenänderung und Attributen (erweitert)===<br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, settings) }} #}<br />
{{ image('path/to/image.png', {'alt':'Ich bin ein Alt Text'}) }}<br />
</source><br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, settings) }} #}<br />
{{ image('path/to/image.png', {'alt':'Ich bin ein Alt Text', 'attributes':'title="Ich bin der Titel"'}) }}<br />
</source><br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, settings) }} #}<br />
{{ image('path/to/image.png', {'width':'800', 'height':'600', 'mode':'center_right', 'alt':'Ich bin ein Alt Text', 'attributes':'title="Ich bin der Titel"'}) }}<br />
</source><br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, settings) }} #}<br />
{{ image('path/to/image.png', {'width':'800', 'height':'600'}) }}<br />
</source><br />
<br />
==messages Funktion==<br />
(Ab Version 1.2)<br />
<br />
Die <code>messages</code> Funktion ist ein Shortcut für <code>getMessages()</code>.<br />
<br />
<source lang="html4strict"><br />
{{ messages() }}<br />
</source><br />
<br />
=TwigFrontendTemplate und TwigBackendTemplate=<br />
<br />
Um Twig zu verwenden, werden anstelle der bekannten '''FrontendTemplate''' und '''BackendTemplate''' Klassen, die Twig Klassen '''TwigFrontendTemplate''' und '''TwigBackendTemplate''' verwendet.<br />
Diese Klassen verhalten sich genau so, wie ihre Contao Pendanten, das gilt auch für die Hooks '''parseTemplate''', '''parseFrontendTemplate''' und '''parseBackendTemplate''' die ebenfalls verfügbar sind.<br />
<br />
<source lang="php"><br />
$objTemplate = TwigFrontendTemplate('ce_mycontent');<br />
$objTemplate->setData($arrData);<br />
$objTemplate->foo = 'bar';<br />
$strBuffer = $objTemplate->parse();<br />
</source><br />
<br />
=TwigTemplate=<br />
<br />
Im Gegensatz zu '''TwigFrontendTemplate''' und '''TwigBackendTemplate''' ist '''TwigTemplate''' nicht für Frontend oder Backend konzipiert und führt entsprechend auch keinerlei Frontend oder Backend spezifischen Manipulationen am Template durch. Außerdem ist eint '''TwigTemplate''' stateless, d.h. man kann dem Template keine Variablen zuweisen, sondern übergibt diese der <code>TwigTemplate::parse()</code> Methode.<br />
<br />
Man kann '''TwigTemplate''' auch als generisches Template bezeichnen, das für jede Art von Templates eingesetzt werden kann.<br />
<br />
<source lang="php"><br />
# use the template my_template.twig<br />
$template = TwigTemplate('my_template');<br />
$buffer = $template->parse();<br />
<br />
# alternative<br />
$template = TwigTemplate();<br />
$template->setTemplateName('my_template');<br />
$buffer = $template->parse();<br />
</source><br />
<br />
<source lang="php"><br />
# use the template my_template.html5.twig<br />
$template = TwigTemplate('my_template', 'html5');<br />
$buffer = $template->parse();<br />
<br />
# alternative<br />
$template = TwigTemplate('my_template');<br />
$template->setFormat('html5');<br />
$buffer = $template->parse();<br />
</source><br />
<br />
<source lang="php"><br />
# use the template my_template.html5 (inadvisable)<br />
$template = TwigTemplate('my_template', null, 'html5');<br />
$buffer = $template->parse();<br />
<br />
# alternative<br />
$template = TwigTemplate('my_template');<br />
$template->setFileExtension('html5');<br />
$buffer = $template->parse();<br />
</source><br />
<br />
<source lang="php"><br />
# pass parameters to my_template.html5.twig<br />
$params = array(<br />
'foo' => 'bar'<br />
);<br />
$template = TwigTemplate('my_template', 'html5', 'twig');<br />
$buffer = $template->parse($params);<br />
</source><br />
<br />
=Twig Module und Inhaltselemente=<br />
<br />
Um Twig in einem Frontend Modul, Backend Modul oder Inhaltselement zu nutzen, gibt es 3 spezielle Klassen.<br />
<br />
* '''TwigModule''' ist eine spezielle Form von '''Module''' die '''TwigFrontendTemplate''' anstelle von '''FrontendTemplate''' verwendet.<br />
* '''TwigBackendModule''' ist eine spezielle Form von '''BackendModule''' die '''TwigBackendTemplate''' anstelle von '''BackendTemplate''' verwendet.<br />
* '''TwigContentElement''' ist eine spezielle Form von '''ContentElement''' die '''TwigFrontendTemplate''' anstelle von '''FrontendTemplate''' verwendet.<br />
<br />
<br />
<source lang="php"><br />
class MyContent extends TwigContentElement<br />
{<br />
protected $strTemplate = 'ce_mycontent';<br />
<br />
public function compile()<br />
{<br />
// ...<br />
}<br />
}<br />
</source><br />
<br />
=Basis-Templates=<br />
<br />
Es werden 8 Basis-Templates zur Verfügung gestellt.<br />
<br />
* ce_container.html5.twig<br />
* ce_container.xhtml.twig<br />
* mod_container.html5.twig<br />
* mod_container.xhtml.twig<br />
<br />
Diese sind nicht groß, bieten aber die grundlegenden Elemente die jedes Inhaltselement oder Modul mit sich bringt.<br />
<br />
<source lang="html4strict"><br />
<div class="{{ class }} block"{{ cssID }}{% if style %} style="{{ style }}}"{% endif %}{% block attributes %}{% endblock %}><br />
{% block headline %}<br />
{% if headline %}<br />
<br />
<{{ hl }}>{{ headline }}</{{ hl }}><br />
{% endif %}<br />
{% endblock %}<br />
<br />
{% block content %}{% endblock %}<br />
</div><br />
</source><br />
<br />
{{Achtung|Die <code>*_noindex.*.twig</code> Templates steht erst ab Version 1.10 zur Verfügung.}}<br />
<br />
Für Module/Inhaltselemente die nicht für die Suche indiziert werden sollen, gibt es zusätzlich noch:<br />
<br />
* ce_container_noindex.html5.twig<br />
* ce_container_noindex.xhtml.twig<br />
* mod_container_noindex.html5.twig<br />
* mod_container_noindex.xhtml.twig<br />
<br />
Diese sind lediglich noch mit einem <code><!-- indexer::stop --></code> und <code><!-- indexer::continue --></code> umgeben.<br />
<br />
<source lang="html4strict"><br />
<!-- indexer::stop --><br />
<div class="{{ class }} block"{{ cssID }}{% if style %} style="{{ style }}}"{% endif %}{% block attributes %}{% endblock %}><br />
{% block headline %}<br />
{% if headline %}<br />
<br />
<{{ hl }}>{{ headline }}</{{ hl }}><br />
{% endif %}<br />
{% endblock %}<br />
<br />
{% block content %}{% endblock %}<br />
</div><br />
<!-- indexer::continue --><br />
</source><br />
<br />
Im eigenen Template lässt sich das Basis-Template sehr einfach verwenden:<br />
<br />
<source lang="html4strict"><br />
{% extends 'mod_container.html5.twig' %}<br />
<br />
{% block content %}<br />
Put your content here<br />
{% endblock %}<br />
</source><br />
<br />
=TwigPagination=<br />
<br />
Die Klasse '''TwigPagination''' ist eine "Templatebasierende" Pagination die auf Twig aufsetzt.<br />
Sie wird genau so eingesetzt wie die '''Pagination''' Klasse, kann aber über das Template <code>pagination.html5.twig</code> und <code>pagination.xhtml.twig</code> angepasst werden.<br />
<br />
==TwigCustomPagination==<br />
<br />
Die Klasse '''TwigCustomPagination''' ist ebenfalls eine Pagination die auf Twig aufsetzt.<br />
Allerdings können bei dieser Pagination die URLs aus der die Pagination erzeugt wird selbst festgelegt werden.<br />
Das ist praktisch, wenn man bspw. über mehrere Items eine Pagination erstellen will.<br />
<br />
<source lang="php"><br />
$links = array(<br />
'news/items/record_1.html',<br />
'news/items/record_2.html',<br />
'news/items/record_3.html',<br />
'news/items/record_4.html',<br />
'news/items/record_5.html',<br />
'news/items/record_6.html',<br />
'news/items/record_7.html',<br />
'news/items/record_8.html',<br />
'news/items/record_9.html',<br />
'news/items/record_10.html',<br />
'news/items/record_11.html',<br />
'news/items/record_12.html',<br />
'news/items/record_13.html',<br />
'news/items/record_14.html',<br />
'news/items/record_15.html',<br />
'news/items/record_16.html',<br />
'news/items/record_17.html',<br />
'news/items/record_18.html',<br />
'news/items/record_19.html',<br />
'news/items/record_20.html',<br />
);<br />
$pagination = new TwigCustomPagination($links);<br />
echo $pagination->generate();<br />
</source><br />
<br />
Man muss darauf achten, dass die URL auch so aufgerufen wird, ansonsten findet die Pagination nicht das aktuelle Item.<br />
Außerdem hat diese Pagination den Nachteil, dass man '''alle''' URLs zur Verfügung stellen muss.<br />
Wenn die Berechnung der Links sehr kostenintensiv ist, muss der Entwickler entsprechende Optimierung betreiben, in dem er z.B. nur die Links zur Verfügung stellt, die auch angezeigt werden.<br />
<br />
<source lang="php"><br />
$links = array(<br />
'news/items/record_1.html', // "go to first" link<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'news/items/record_9.html', // visible link<br />
'news/items/record_10.html', // visible link<br />
'news/items/record_11.html', // visible link<br />
'news/items/record_12.html', // active link<br />
'news/items/record_13.html', // visible link<br />
'news/items/record_14.html', // visible link<br />
'news/items/record_15.html', // visible link<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'news/items/record_20.html', // "go to last" link<br />
);<br />
$pagination = new TwigCustomPagination($links);<br />
echo $pagination->generate();<br />
</source><br />
<br />
Abhängig von der Anzahl der angezeigten Links (Standardmäßig sind das 7), muss der Entwickler die notwendigen Links zur Verfügung stellen.<br />
<br />
=TwigHybrid=<br />
<br />
Die Klasse '''TwigHybrid''' ist eine '''Hybrid''' Implementierung die auf Twig aufsetzt.<br />
Sie wird genau so eingesetzt, wie die originale '''Hybrid''' Klasse von Contao.<br />
<br />
==TwigSimpleHybrid==<br />
<br />
Die Klasse '''TwigSimpleHybrid''' ist eine vereinfachte Form von '''TwigHybrid''' die ohne zweite Tabelle aus kommt.<br />
Anstelle die Daten aus einer zweiten Tabelle zu laden, verwendet '''TwigSimpleHybrid''' einfach den aktuellen Record (tl_content oder tl_module) als Datenquelle.<br />
Das hat natürlich den Nachteil, dass man die Datenfelder sowohl in der Tabelle <code>tl_content</code>, als auch in der Tabelle <code>tl_module</code> anlegen muss, dafür hat man eine Klasse, die sowohl als Inhaltselement, als auch als Modul verwendet werden kann.<br />
Von der Klassenbenennung verhält sich der Hybrid wie ein Modul, d.h. auch bei Inhaltselementen wird der Prefix <code>mod_</code> anstelle von <code>ce_</code> verwendet.<br />
<br />
'''config.php'''<br />
<source lang="php"><br />
// register content element<br />
$GLOBALS['TL_CTE']['my_ext']['my_element'] = 'HybridMyElement';<br />
<br />
// register frontend module<br />
$GLOBALS['FE_MOD']['my_ext']['my_element'] = 'HybridMyElement';<br />
</source><br />
<br />
'''HybridMyElement.php'''<br />
<source lang="php"><br />
class HybridMyElement<br />
extends TwigSimpleHybrid<br />
{<br />
/**<br />
* @var string<br />
*/<br />
protected $strTemplate = 'mod_my_element';<br />
<br />
public function compile()<br />
{<br />
$this->Template->foo = $this->bar;<br />
}<br />
}<br />
</source><br />
<br />
=Twig Erweitern=<br />
<br />
Gesteuert wird Twig über die '''ContaoTwig''' Klasse. Bei dieser handelt es sich um eine Singleton Klasse, die die Loader und das Twig Environment bereitstellt.<br />
Wenn Twig erstmals initialisiert wird (also bei der 1. Verwendung) wird der '''initializeTwig''' Hook getriggert, mit dem man Twig Erweitern kann.<br />
<br />
<source lang="php"><br />
$GLOBALS['TL_HOOKS']['initializeTwig'][] = array('MyClass', 'hookInitializeTwig');<br />
<br />
class MyClass<br />
{<br />
public function hookInitializeTwig(ContaoTwig $contaoTwig)<br />
{<br />
// Twig Environment anpassen<br />
/** @var Twig_Environment $twig */<br />
$twig = $contaoTwig->getEnvironment();<br />
// do somethink with $twig<br />
<br />
// Den Standard Filesystem Loader anpassen<br />
/** @var Twig_Loader_Filesystem $filesystemLoader */<br />
$filesystemLoader = $contaoTwig->getLoaderFilesystem();<br />
$filesystemLoader->addPath('custom/path/to/my/templates');<br />
<br />
// Eigenen Template Loader hinzufügen<br />
/** @var Twig_Loader_Chain $loader */<br />
$loader = $contaoTwig->getLoader();<br />
$loader->addLoader(new MyTwigLoader());<br />
}<br />
}<br />
</source></div>Trilhttps://de.contaowiki.org/TwigTwig2014-09-19T09:01:52Z<p>Tril: /* Globale Variablen */</p>
<hr />
<div>[[Kategorie:Extensions]]<br />
{{ExtInfo<br />
| Dev=Tristan Lins<br />
| Version=2.11 bis 3.1 (potentiell kompatibel mit 2.9+ und 2.10+ aber ungetestet)<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/twig.de.html<br />
}}<br />
<br />
[http://twig.sensiolabs.org/ Twig] ist eine Moderne und beliebte Template Engine.<br />
Sie wird unter anderem in Symfony2 und vielen weiteren Systemen eingesetzt.<br />
Twig ist recht jung, die bekannteste kompilierende Template Engine für PHP düfte wohl [http://www.smarty.net/ Smarty] sein.<br />
<br />
Die Contao Erweiterung [https://github.com/InfinitySoft/contao-twig twig] bringt Twig nun auch nach Contao.<br />
<br />
=Tipps und Tricks=<br />
<br />
==Twig und Insert-Tags==<br />
<br />
Twig verwendet für Variablen die gleiche Syntax wie Contao für die Insert-Tags: <code><nowiki>{{...}}</nowiki></code>.<br />
Will man Insert-Tags in einem Twig Template verwenden, muss man ein bisschen kreativ werden und den Insert-Tag als String in einer Twig Variable ausgeben <code><nowiki>{{ '{{...}}' }}</nowiki></code>, z.B. <code><nowiki>{{ '{{link::123}}' }}</nowiki></code>.<br />
<br />
=Twig Elemente=<br />
<br />
Twig stellt ein Inhaltselement und ein Frontend Modul bereit, dieses bietet ähnlich dem HTML Element die Möglichkeit einfach Twig Code im Backend anzugeben, der im Frontend ausgegeben wird.<br />
<br />
{{Achtung|Die Twig Element stehen erst ab Version 1.4 zur Verfügung.}}<br />
<br />
=Twig Templates=<br />
<br />
Twig Templates werden wie Contao Templates in den '''templates''' Verzeichnissen abgelegt.<br />
Sie erhalten zusätzlich die Endung '''*.twig''', z.B. '''ce_mycontent.html5.twig''' oder '''ce_mycontent.xhtml.twig'''.<br />
{{Achtung|Ab Version 1.2 ist Autoescape deaktiviert! (Der Filter <code>raw</code> ist daher nicht mehr notwendig.)}}<br />
<br />
=Globale Variablen=<br />
<br />
Die twig Erweiterung liefert einige globale Variablen mit, auf die man in den Templates Zugriff hat.<br />
<br />
* '''REQUEST_TOKEN''' Der aktuell gültige request token.<br />
* '''REFERER_ID''' Die aktuell gültige referer ID.<br />
* '''_lang''' bietet Zugriff auf <code>$GLOBALS['TL_LANG']</code>, z.B. <code><nowiki>{{ _lang.MSC.confirm.0 }}</nowiki></code><br />
* '''_dca''' bietet Zugriff auf <code>$GLOBALS['TL_DCA']</code>, z.B. <code><nowiki>{{ _dca.tl_content.fields.headline.label.0 }}</nowiki></code><br />
* '''_config''' bietet Zugriff auf <code>$GLOBALS['TL_CONFIG']</code>, z.B. <code><nowiki>{{ _config.dateFormat }}</nowiki></code><br />
* '''_env''' bietet Zugriff auf <code>Environment</code>, z.B.<code><nowiki>{{ _env.request }}</nowiki></code><br />
* '''_db''' bietet Zugriff auf das Datenbankobjekt, z.B. <code><nowiki>{{ _db.query('SELECT * FROM tl_user').fetchAllAssoc() }}</nowiki></code> (siehe auch die speziellen Database-Filter Funktionen)<br />
* '''_page''' bietet Zugriff auf die aktuelle Page <code>$GLOBALS['objPage']</code>, z.B.<code><nowiki>{{ _page.title }}</nowiki></code><br />
* '''_member''' bietet Zugriff auf das aktuellen Frontend Mitglied, ist <code>false</code> falls kein Mitglied angemeldet ist<br />
* '''_user''' bietet Zugriff auf den aktuellen Backend User, ist <code>false</code> falls kein User angemeldet ist<br />
* '''_session''' bietet Zugriff auf <code>$_SESSION</code> <br />
* '''_referer''' liefert den aktuellen Referer<br />
* '''_theme''' liefert das aktuelle Backend Theme <code><nowiki>system/themes/{{ _theme }}/images/reload.gif</nowiki></code><br />
<br />
{{Achtung|'''_env''', '''_page''', '''_member''' und '''_user''' stehen erst ab Version 1.4.0 zur Verfügung.}}<br />
{{Achtung|'''REFERER_ID''' stehen erst ab Version 1.4.2 zur Verfügung.}}<br />
{{Achtung|'''_referer''' und '''_session''' stehen erst ab Version 1.6.0 zur Verfügung.}}<br />
{{Achtung|'''_theme''' stehen erst ab Version 1.11.0 zur Verfügung.}}<br />
<br />
=Allgemeine Filter Funktionen=<br />
<br />
Die twig Erweiterung liefert einige allgemeine Filter Funktionen.<br />
<br />
* '''deserialize''', z.B. <code><nowiki>{{ row.groups|deserialize }}</nowiki></code> oder <code><nowiki>{{ row.groups|deserialize(true) }}</nowiki></code><br />
* '''standardize''', z.B. <code><nowiki>{{ row.title|standardize }}</nowiki></code><br />
* '''dateFormat''' format einen Zeitstempel nach dem globalen Datumsformat, z.B. <code><nowiki>{{ row.tstamp|dateFormat }}</nowiki></code><br />
* '''datimFormat''' format einen Zeitstempel nach dem globalen Datum+Zeitformat, z.B. <code><nowiki>{{ row.tstamp|datimFormat }}</nowiki></code><br />
* '''vformat''' wie '''format''' akzeptiert aber ein Array als Formatargumente (Analogie zu <code>sprintf</code> und <code>vsprintf</code>), z.B. <code><nowiki>{{ '%s %s'|vformat({'foo', 'bar'}) }}</nowiki></code><br />
* '''url''' erzeugt eine Frontend URL, z.B. <code><nowiki>{{ _page|url }}</nowiki></code>, akzeptiert ein DB Objekt, eine Collection, eine Page ID oder ein Row-Array.<br />
<br />
{{Achtung|'''vformat''' steht erst ab Version 1.2.1 zur Verfügung.}}<br />
{{Achtung|'''url''' steht erst ab Version 1.4 zur Verfügung.}}<br />
<br />
=Datenbank Filter Funktionen=<br />
<br />
Neben dem '''_db''' Objekt werden auch Filterfunktionen bereitgestellt, um auf die Datenbank zuzugreifen.<br />
<br />
* '''prepare''' bereitet ein Statement vors (vgl. Database::prepare), z.B. <code>{% set stmt = 'SELECT * FROM tl_user WHERE admin=?'|prepare %}</code><br />
* '''set''' fügt SET oder UPDATE einem Statement hinzu (vgl. Database_Statement::set), z.B. <code>{% set stmt = stmt|set({ 'foo': 'foo', 'bar': 'bar' }) %}</code><br />
* '''execute''' führt ein Statement aus (vgl. Database::execute und Database_Statement::execute), z.B. <code>{% set result = stmt|execute(1) %}</code> oder <code>{% set result = 'SELECT * FROM tl_user WHERE admin=?'|execute(1) %}</code><br />
* '''query''' führt ein Statement direkt aus (vgl. Database::query), z.B. <code>{% set result = 'SELECT * FROM tl_user'|query %}</code><br />
<br />
==Kombinierte Beispiele==<br />
<br />
<source>{% set result = 'SELECT * FROM tl_user WHERE admin=?'|prepare|execute(1) %}</source><br />
<br />
<source>{% set result = 'UPDATE tl_user %s WHERE id=?'|prepare|set({ 'admin': 1 })|execute(id) %}</source><br />
<br />
<source><br />
{% for row in 'SELECT * FROM tl_user'|query %}<br />
{# do somethink with row #}<br />
{% endfor %}<br />
</source><br />
<br />
=Komplexe Funktionen=<br />
<br />
==image Funktion/Filter==<br />
(Ab Version 1.2)<br />
<br />
Mit der/dem <code>image</code> Funktion/Filter lassen sich Bilder einfach ausgeben und in der Größe ändern. <code>image</code> ist ein Shortcut auf <code>generateImage</code> und ggf. <code>getImage</code>.<br />
<br />
===Beispiel - Bild ausgeben===<br />
<br />
<source lang="html4strict"><br />
{{ image('path/to/image.png') }}<br />
</source><br />
<br />
<source lang="html4strict"><br />
{{ 'path/to/image.png'|image }}<br />
</source><br />
<br />
===Beispiel - Bild ausgeben mit Größenänderung und Attributen (einfach)===<br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, width, height, mode, alt, attributes) }} #}<br />
{{ image('path/to/image.png', '800', '600', 'center_left', 'Ich bin ein Alt Text', 'title="Ich bin der Titel"') }}<br />
</source><br />
<br />
===Beispiel - Bild ausgeben mit Größenänderung und Attributen (erweitert)===<br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, settings) }} #}<br />
{{ image('path/to/image.png', {'alt':'Ich bin ein Alt Text'}) }}<br />
</source><br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, settings) }} #}<br />
{{ image('path/to/image.png', {'alt':'Ich bin ein Alt Text', 'attributes':'title="Ich bin der Titel"'}) }}<br />
</source><br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, settings) }} #}<br />
{{ image('path/to/image.png', {'width':'800', 'height':'600', 'mode':'center_right', 'alt':'Ich bin ein Alt Text', 'attributes':'title="Ich bin der Titel"'}) }}<br />
</source><br />
<br />
<source lang="html4strict"><br />
{# {{ image(src, settings) }} #}<br />
{{ image('path/to/image.png', {'width':'800', 'height':'600'}) }}<br />
</source><br />
<br />
==messages Funktion==<br />
(Ab Version 1.2)<br />
<br />
Die <code>messages</code> Funktion ist ein Shortcut für <code>getMessages()</code>.<br />
<br />
<source lang="html4strict"><br />
{{ messages() }}<br />
</source><br />
<br />
=TwigFrontendTemplate und TwigBackendTemplate=<br />
<br />
Um Twig zu verwenden, werden anstelle der bekannten '''FrontendTemplate''' und '''BackendTemplate''' Klassen, die Twig Klassen '''TwigFrontendTemplate''' und '''TwigBackendTemplate''' verwendet.<br />
Diese Klassen verhalten sich genau so, wie ihre Contao Pendanten, das gilt auch für die Hooks '''parseTemplate''', '''parseFrontendTemplate''' und '''parseBackendTemplate''' die ebenfalls verfügbar sind.<br />
<br />
<source lang="php"><br />
$objTemplate = TwigFrontendTemplate('ce_mycontent');<br />
$objTemplate->setData($arrData);<br />
$objTemplate->foo = 'bar';<br />
$strBuffer = $objTemplate->parse();<br />
</source><br />
<br />
=TwigTemplate=<br />
<br />
Im Gegensatz zu '''TwigFrontendTemplate''' und '''TwigBackendTemplate''' ist '''TwigTemplate''' nicht für Frontend oder Backend konzipiert und führt entsprechend auch keinerlei Frontend oder Backend spezifischen Manipulationen am Template durch. Außerdem ist eint '''TwigTemplate''' stateless, d.h. man kann dem Template keine Variablen zuweisen, sondern übergibt diese der <code>TwigTemplate::parse()</code> Methode.<br />
<br />
Man kann '''TwigTemplate''' auch als generisches Template bezeichnen, das für jede Art von Templates eingesetzt werden kann.<br />
<br />
<source lang="php"><br />
# use the template my_template.twig<br />
$template = TwigTemplate('my_template');<br />
$buffer = $template->parse();<br />
<br />
# alternative<br />
$template = TwigTemplate();<br />
$template->setTemplateName('my_template');<br />
$buffer = $template->parse();<br />
</source><br />
<br />
<source lang="php"><br />
# use the template my_template.html5.twig<br />
$template = TwigTemplate('my_template', 'html5');<br />
$buffer = $template->parse();<br />
<br />
# alternative<br />
$template = TwigTemplate('my_template');<br />
$template->setFormat('html5');<br />
$buffer = $template->parse();<br />
</source><br />
<br />
<source lang="php"><br />
# use the template my_template.html5 (inadvisable)<br />
$template = TwigTemplate('my_template', null, 'html5');<br />
$buffer = $template->parse();<br />
<br />
# alternative<br />
$template = TwigTemplate('my_template');<br />
$template->setFileExtension('html5');<br />
$buffer = $template->parse();<br />
</source><br />
<br />
<source lang="php"><br />
# pass parameters to my_template.html5.twig<br />
$params = array(<br />
'foo' => 'bar'<br />
);<br />
$template = TwigTemplate('my_template', 'html5', 'twig');<br />
$buffer = $template->parse($params);<br />
</source><br />
<br />
=Twig Module und Inhaltselemente=<br />
<br />
Um Twig in einem Frontend Modul, Backend Modul oder Inhaltselement zu nutzen, gibt es 3 spezielle Klassen.<br />
<br />
* '''TwigModule''' ist eine spezielle Form von '''Module''' die '''TwigFrontendTemplate''' anstelle von '''FrontendTemplate''' verwendet.<br />
* '''TwigBackendModule''' ist eine spezielle Form von '''BackendModule''' die '''TwigBackendTemplate''' anstelle von '''BackendTemplate''' verwendet.<br />
* '''TwigContentElement''' ist eine spezielle Form von '''ContentElement''' die '''TwigFrontendTemplate''' anstelle von '''FrontendTemplate''' verwendet.<br />
<br />
<br />
<source lang="php"><br />
class MyContent extends TwigContentElement<br />
{<br />
protected $strTemplate = 'ce_mycontent';<br />
<br />
public function compile()<br />
{<br />
// ...<br />
}<br />
}<br />
</source><br />
<br />
=Basis-Templates=<br />
<br />
Es werden 8 Basis-Templates zur Verfügung gestellt.<br />
<br />
* ce_container.html5.twig<br />
* ce_container.xhtml.twig<br />
* mod_container.html5.twig<br />
* mod_container.xhtml.twig<br />
<br />
Diese sind nicht groß, bieten aber die grundlegenden Elemente die jedes Inhaltselement oder Modul mit sich bringt.<br />
<br />
<source lang="html4strict"><br />
<div class="{{ class }} block"{{ cssID }}{% if style %} style="{{ style }}}"{% endif %}{% block attributes %}{% endblock %}><br />
{% block headline %}<br />
{% if headline %}<br />
<br />
<{{ hl }}>{{ headline }}</{{ hl }}><br />
{% endif %}<br />
{% endblock %}<br />
<br />
{% block content %}{% endblock %}<br />
</div><br />
</source><br />
<br />
{{Achtung|Die <code>*_noindex.*.twig</code> Templates steht erst ab Version 1.10 zur Verfügung.}}<br />
<br />
Für Module/Inhaltselemente die nicht für die Suche indiziert werden sollen, gibt es zusätzlich noch:<br />
<br />
* ce_container_noindex.html5.twig<br />
* ce_container_noindex.xhtml.twig<br />
* mod_container_noindex.html5.twig<br />
* mod_container_noindex.xhtml.twig<br />
<br />
Diese sind lediglich noch mit einem <code><!-- indexer::stop --></code> und <code><!-- indexer::continue --></code> umgeben.<br />
<br />
<source lang="html4strict"><br />
<!-- indexer::stop --><br />
<div class="{{ class }} block"{{ cssID }}{% if style %} style="{{ style }}}"{% endif %}{% block attributes %}{% endblock %}><br />
{% block headline %}<br />
{% if headline %}<br />
<br />
<{{ hl }}>{{ headline }}</{{ hl }}><br />
{% endif %}<br />
{% endblock %}<br />
<br />
{% block content %}{% endblock %}<br />
</div><br />
<!-- indexer::continue --><br />
</source><br />
<br />
Im eigenen Template lässt sich das Basis-Template sehr einfach verwenden:<br />
<br />
<source lang="html4strict"><br />
{% extends 'mod_container.html5.twig' %}<br />
<br />
{% block content %}<br />
Put your content here<br />
{% endblock %}<br />
</source><br />
<br />
=TwigPagination=<br />
<br />
Die Klasse '''TwigPagination''' ist eine "Templatebasierende" Pagination die auf Twig aufsetzt.<br />
Sie wird genau so eingesetzt wie die '''Pagination''' Klasse, kann aber über das Template <code>pagination.html5.twig</code> und <code>pagination.xhtml.twig</code> angepasst werden.<br />
<br />
==TwigCustomPagination==<br />
<br />
Die Klasse '''TwigCustomPagination''' ist ebenfalls eine Pagination die auf Twig aufsetzt.<br />
Allerdings können bei dieser Pagination die URLs aus der die Pagination erzeugt wird selbst festgelegt werden.<br />
Das ist praktisch, wenn man bspw. über mehrere Items eine Pagination erstellen will.<br />
<br />
<source lang="php"><br />
$links = array(<br />
'news/items/record_1.html',<br />
'news/items/record_2.html',<br />
'news/items/record_3.html',<br />
'news/items/record_4.html',<br />
'news/items/record_5.html',<br />
'news/items/record_6.html',<br />
'news/items/record_7.html',<br />
'news/items/record_8.html',<br />
'news/items/record_9.html',<br />
'news/items/record_10.html',<br />
'news/items/record_11.html',<br />
'news/items/record_12.html',<br />
'news/items/record_13.html',<br />
'news/items/record_14.html',<br />
'news/items/record_15.html',<br />
'news/items/record_16.html',<br />
'news/items/record_17.html',<br />
'news/items/record_18.html',<br />
'news/items/record_19.html',<br />
'news/items/record_20.html',<br />
);<br />
$pagination = new TwigCustomPagination($links);<br />
echo $pagination->generate();<br />
</source><br />
<br />
Man muss darauf achten, dass die URL auch so aufgerufen wird, ansonsten findet die Pagination nicht das aktuelle Item.<br />
Außerdem hat diese Pagination den Nachteil, dass man '''alle''' URLs zur Verfügung stellen muss.<br />
Wenn die Berechnung der Links sehr kostenintensiv ist, muss der Entwickler entsprechende Optimierung betreiben, in dem er z.B. nur die Links zur Verfügung stellt, die auch angezeigt werden.<br />
<br />
<source lang="php"><br />
$links = array(<br />
'news/items/record_1.html', // "go to first" link<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'news/items/record_9.html', // visible link<br />
'news/items/record_10.html', // visible link<br />
'news/items/record_11.html', // visible link<br />
'news/items/record_12.html', // active link<br />
'news/items/record_13.html', // visible link<br />
'news/items/record_14.html', // visible link<br />
'news/items/record_15.html', // visible link<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'', // empty dummy<br />
'news/items/record_20.html', // "go to last" link<br />
);<br />
$pagination = new TwigCustomPagination($links);<br />
echo $pagination->generate();<br />
</source><br />
<br />
Abhängig von der Anzahl der angezeigten Links (Standardmäßig sind das 7), muss der Entwickler die notwendigen Links zur Verfügung stellen.<br />
<br />
=TwigHybrid=<br />
<br />
Die Klasse '''TwigHybrid''' ist eine '''Hybrid''' Implementierung die auf Twig aufsetzt.<br />
Sie wird genau so eingesetzt, wie die originale '''Hybrid''' Klasse von Contao.<br />
<br />
==TwigSimpleHybrid==<br />
<br />
Die Klasse '''TwigSimpleHybrid''' ist eine vereinfachte Form von '''TwigHybrid''' die ohne zweite Tabelle aus kommt.<br />
Anstelle die Daten aus einer zweiten Tabelle zu laden, verwendet '''TwigSimpleHybrid''' einfach den aktuellen Record (tl_content oder tl_module) als Datenquelle.<br />
Das hat natürlich den Nachteil, dass man die Datenfelder sowohl in der Tabelle <code>tl_content</code>, als auch in der Tabelle <code>tl_module</code> anlegen muss, dafür hat man eine Klasse, die sowohl als Inhaltselement, als auch als Modul verwendet werden kann.<br />
Von der Klassenbenennung verhält sich der Hybrid wie ein Modul, d.h. auch bei Inhaltselementen wird der Prefix <code>mod_</code> anstelle von <code>ce_</code> verwendet.<br />
<br />
'''config.php'''<br />
<source lang="php"><br />
// register content element<br />
$GLOBALS['TL_CTE']['my_ext']['my_element'] = 'HybridMyElement';<br />
<br />
// register frontend module<br />
$GLOBALS['FE_MOD']['my_ext']['my_element'] = 'HybridMyElement';<br />
</source><br />
<br />
'''HybridMyElement.php'''<br />
<source lang="php"><br />
class HybridMyElement<br />
extends TwigSimpleHybrid<br />
{<br />
/**<br />
* @var string<br />
*/<br />
protected $strTemplate = 'mod_my_element';<br />
<br />
public function compile()<br />
{<br />
$this->Template->foo = $this->bar;<br />
}<br />
}<br />
</source><br />
<br />
=Twig Erweitern=<br />
<br />
Gesteuert wird Twig über die '''ContaoTwig''' Klasse. Bei dieser handelt es sich um eine Singleton Klasse, die die Loader und das Twig Environment bereitstellt.<br />
Wenn Twig erstmals initialisiert wird (also bei der 1. Verwendung) wird der '''initializeTwig''' Hook getriggert, mit dem man Twig Erweitern kann.<br />
<br />
<source lang="php"><br />
$GLOBALS['TL_HOOKS']['initializeTwig'][] = array('MyClass', 'hookInitializeTwig');<br />
<br />
class MyClass<br />
{<br />
public function hookInitializeTwig(ContaoTwig $contaoTwig)<br />
{<br />
// Twig Environment anpassen<br />
/** @var Twig_Environment $twig */<br />
$twig = $contaoTwig->getEnvironment();<br />
// do somethink with $twig<br />
<br />
// Den Standard Filesystem Loader anpassen<br />
/** @var Twig_Loader_Filesystem $filesystemLoader */<br />
$filesystemLoader = $contaoTwig->getLoaderFilesystem();<br />
$filesystemLoader->addPath('custom/path/to/my/templates');<br />
<br />
// Eigenen Template Loader hinzufügen<br />
/** @var Twig_Loader_Chain $loader */<br />
$loader = $contaoTwig->getLoader();<br />
$loader->addLoader(new MyTwigLoader());<br />
}<br />
}<br />
</source></div>Trilhttps://de.contaowiki.org/XNavigationXNavigation2014-07-09T08:45:39Z<p>Tril: /* Anpassen */</p>
<hr />
<div>[[en:xNavigation]]<br />
[[Kategorie:Extensions]]<br />
[[Kategorie:Extensions/Inhaltselemente]]<br />
[[Kategorie:Extensions/Module]]<br />
<br />
xNavigation steht für ''e<strong>x</strong>treme e<strong>x</strong>tendable and fle<strong>x</strong>ible navigation'' und stellt eine leicht erweiterbare Navigation zur Verfügung, die nicht nur die Seitenstruktur, sondern auch Artikel, Inhaltselemente, News, Events und mehr abbilden kann.<br />
<br />
== Pakete ==<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation<br />
}}<br />
<br />
Das Hauptpaket stellt das Framework, die Verwaltung von Bedingungen, Providern und Menüs, sowie die Module/Inhaltselemente zur Verfügung.<br />
<br />
{{Achtung|Das Hauptpaket alleine liefert '''keine Provider''' mit. Verwenden Sie einen der folgenden Provider um Menüpunkte erzeugen zu können!}}<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-page<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-page<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-page<br />
}}<br />
<br />
Das ''Page'' Paket stellt Provider für die Seitenstruktur zur Verfügung.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-article<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-article<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-article<br />
}}<br />
<br />
Das ''Article'' Paket stellt Provider für Artikel zur Verfügung. Damit lassen sich die Artikel von Seiten in der Navigation anzeigen.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-content<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-content<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-content<br />
}}<br />
<br />
Das ''Content'' Paket stellt Provider für Inhaltselemente zur Verfügung. Damit lassen sich die Inhaltselemente von Artikeln in der Navigation anzeigen.<br />
<br />
== Beschreibung ==<br />
<br />
{{stub}}<br />
<br />
Mit xNavigation lassen sich Navigationen und Sitemaps erzeugen. Eigentlich liefert Contao dafür bereits ein Modul, dieses lässt sich aber nicht beliebig erweitern.<br />
xNavigation ist nicht die einzige Erweiterung, die sich mit dem Problem beschäftigt. Alternativ gibt es bspw. die [[Backboneit navigation]], die jedoch etwas weniger abstrakt aufgebaut ist.<br />
<br />
xNavigation zeichnet sich durch folgende Funktionalitäten aus:<br />
<br />
* Aufbau der Navigation in einem Item-Tree<br />
** Intern wird mit einem Item-Tree gearbeitet. Dieser basiert auf der [https://github.com/bit3/php-flexi-tree bit3/php-flexi-tree] Bibliothek.<br />
* Unterstützung von Events<br />
** Intern werden zur Kommunikation und zum Aufbau Events verwendet.<br />
* Lazy-Loading des Item-Tree's<br />
** Anstatt alle Items in einem Zug zu laden, werden die Items sukzessiv bei Bedarf geladen. Die dadurch entstehende "Entzerrung" sorgt für eine höhere Performance durch bessere Verteilung der IO/Datenbank Last und sie verhindert das erzeugen unnötiger Items.<br />
* Individualisierbare Bedingungen<br />
** Für gewöhnlich definiert die Navigationserweiterung selbst wann Einträge angezeigt werden sollen und wann nicht. Bei xNavigation geschieht dies durch ein Set von Bedingungen, das man selbst aufbauen '''muss'''. Dadurch erreicht man eine nie dagewesene Flexibilität. Einfach mal einen Teilbaum ausblenden? Kein Problem, mit einer eigenen Bedingung die sich bequem über das Backend konfigurieren lässt überhaupt kein Problem.<br />
* Flexible Provider<br />
** Die Einträge und deren Detailinformationen werden von sogenannten Providern geliefert. Welche Provider in welchem Menü verwendet werden kann frei bestimmt werden, damit ist es sehr einfach festzulegen, welche Einträge in welchem Menü überhaupt angezeigt werden.<br />
<br />
== Internas ==<br />
<br />
Intern arbeitet xNavigation mit der [https://github.com/bit3/php-flexi-tree bit3/php-flexi-tree] Bibliothek. Genau genommen primär mit der ''event driven'' Implementierungen.<br />
Durch die Verwendung der ''event driven'' Implementierung entsteht das ''lazy loading''. Die ''event driven'' und die statischen (normalen) Items können aber auch beliebig kombiniert werden.<br />
Der Nachteil dieser Technik ist allerdings, dass der ganze Item-Tree nicht mehr stateless ist, was aber für den Einsatz in Contao vertretbar ist.<br />
<br />
Beim erzeugen des Item-Tree's wird ein eigener EventDispatcher verwendet. Das ist notwendig, weil es sonst unmöglich ist, Provider einem Menü zuzuordnen. D.h. es ist nicht möglich, über globale Events auf die Generierung des Item-Tree's einzugreifen. <br />
<br />
== Anpassen ==<br />
<br />
{{stub}}<br />
<br />
== Alte Versionen ==<br />
<br />
=== xNavigation 1.5 ===<br />
<br />
{{Hinweis|Die Erweiterung wurde für Version 2 vollständig überarbeitet und neu geschrieben.}}<br />
<br />
Seit Version 1.5.0 ist das Modul xNavigation modular aufgebaut. Die Integration der Inhaltsnavigation und Newsarchiv-Navigation wurde extrahiert und wird über externe Module bereit gestellt.<br />
{{Achtung|Benutzer der xNavigation müssen beim Update beachten, dass die Integration der Inhaltsnavigation und Newsarchiv-Navigation entfernt wurde. Wer diese Funktion benutzt, sollte mit dem Update warten, bis die dafür erforderlichen Module bereitgestellt werden.}}<br />
<br />
Das modulare Konzept, erlaubt nun eigene Menüpunkte auf einfache Art und Weise zur Verfügung zu stellen. Details hierzu sind dem [http://dev.infinitysoft.de/projects/xnavigation/wiki/Wiki Handbuch] zu entnehmen.<br />
<br />
=== xNavigation 1.0 ===<br />
<br />
Eine Detaillierte Beschreibung findet sich hier [http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation Modulvorstellung in der Contao Community].<br />
<br />
=== Modulkonfiguration ===<br />
<br />
[[Datei:Xnavigation_be_modul.png|Modulkonfiguration]]<br />
<br />
=== Seitenkonfiguration - Artikel ===<br />
<br />
[[Datei:Xnavigation_be_page_article.png|Seitenkonfiguration - Artikel]]<br />
<br />
=== Seitenkonfiguration - News ===<br />
<br />
[[Datei:Xnavigation_be_page_news.png|Seitenkonfiguration - News]]<br />
<br />
=== Seitenkonfiguration - Sichtbarkeit ===<br />
<br />
[[Datei:Xnavigation_be_page_visibility.png|Seitenkonfiguration - Sichtbarkeit]]<br />
<br />
=== FE Beispiel ===<br />
<br />
[[Datei:Xnavigation_fe_example.png|FE Beispiel]]</div>Trilhttps://de.contaowiki.org/CCACCA2014-07-02T19:45:49Z<p>Tril: Weiterleitung nach Contao Community Alliance erstellt</p>
<hr />
<div>#REDIRECT [[Contao_Community_Alliance]]</div>Trilhttps://de.contaowiki.org/ComposerComposer2014-06-22T08:18:30Z<p>Tril: </p>
<hr />
<div>#REDIRECT [[:Category:Composer]]</div>Trilhttps://de.contaowiki.org/Composer/ClientComposer/Client2014-06-22T08:11:17Z<p>Tril: </p>
<hr />
<div>{{stub}}<br />
[[Category:Composer]]<br />
[[Category:Extensions]]<br />
[[Category:Admin HOWTOS]]<br />
[[Category:Installation und Updates]]<br />
<br />
=Composer=<br />
Auf gut deutsch = Komponist.<br />
Er gibt den Ton an in einer Contao Installation und ist als Ersatz für die Erweiterungs-Verwaltung gedacht. Der Composer wird von der CCA (Contao-Community-Alliance) betreut. <br />
<br />
Hier findest Du mehr Infos: http://c-c-a.org/projekte<br />
<br />
==Installation==<br />
Um ein reibungsloses Funktionieren zu gewährleisten, sollten Anwender die Stable-Version verwenden. Dazu die Erweiterungsverwaltung aufrufen und nach Composer suchen. Vor der Installation dann die aktuelle Stable-Version auswählen und mit der Installation fortfahren.<br />
<br />
Beim ersten Aufruf des Composers (der sich unter dem Menüpunkt "Paketverwaltung" findet) wird man aufgefordert, den Migrationsprozess zu starten. Nach der Installation sieht es erstmal so aus (Contao 3.2.5).<br />
<br />
===Übersicht===<br />
Im linken Backendmenü ersetzt die Paketverwaltung die Erweiterungsverwaltung und den Erweiterungskatalog. Das Sicherheitsschloss dient dazu Erweiterungen festzupinnen und damit vor der Aktualisierung zu schützen. Dieses Schloss sollte aber nicht für Composer selbst genutzt werden, da dadurch wichtige Aktualisierungen nicht mehr durchgeführt werden können.<br />
[[File:Composer_uebersicht.png|center]]<br><br><br />
<br />
===Einstellungen===<br />
# Rückkehr zur normalen Erweiterungsverwaltung.<br />
# Composer-Cache leeren<br />
# Einschalten des Expertenmodus<br />
[[File:Composer_einstellungen.png|center]]<br><br><br />
<br />
===Expertenmodus===<br />
Detailansicht im Expertenmodus. Zeigt das Installationsscript an.<br />
[[File:composer_expertenmodus.png|center]]<br><br><br />
<br />
===Abhängigkeiten===<br />
Bei angecklickter Checkbox werden die Abhängigkeiten zu den entsprechenden Erweiterungen angezeigt.<br />
[[File:composer_abhaengigkeiten.png|center]]<br><br><br />
<br />
===Erweiterungs Suche===<br />
Umfangreiche Suche von Erweiterungen.<br />
<br />
=Erweiterungs Katalog (Übersicht)=<br />
Eine mögliche Übersicht von Erweiterungen (Packages from contao-community-alliance)<br />
https://packagist.org/packages/contao-community-alliance/<br />
<br />
=Troubleshooting=<br />
<br />
== XAMPP == <br />
<br />
=== Unable to find the socket transport "ssl" ===<br />
<br />
In einem Standard XAMPP kann es zu folgender Fehlermeldung kommen:<br />
<br />
<source>Fatal error: Uncaught exception Composer\Downloader\TransportException with message The "http://packagist.org/search.json?q=calendar" file could not be downloaded: failed to open stream: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? thrown in phar://htdocs/contao/composer/composer.phar/src/Composer/Util/RemoteFilesystem.php on line 216 </source><br />
<br />
In XAMPP ist das OpenSSL Modul standardmäßig deaktiviert, man kann es durch entfernen des Semikolon in der php.ini einfach aktivieren:<br />
<br />
<source lang="ini">extension=php_openssl.dll</source></div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-22T08:08:39Z<p>Tril: /* Contao Konfiguration */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil es sich dabei um ein generelles '''PHP Paket''' handelt.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
==Name, Beschreibung, Schlagwörter, Typ, Website, Lizenz==<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten Ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br><br />
'''<code>&lt;vendor&gt;</code>''' ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.<br><br />
'''<code>&lt;name&gt;</code>''' ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.<br />
<br />
{{Hinweis|Der Paketname wird normalisiert. Es sind ausschließlich '''kleine Buchstaben''', '''Zahlen''', '''Unterstriche''' und '''Bindestriche''' erlaubt!<br><br />
'''Richtig''': my-name/my-extension-name oder my_name/my_extension_name<br><br />
'''Falsch''': MyName/MyExtensionName}}<br />
<br />
Mit <code>description</code> kann man eine Kurzbeschreibung zu seinem Paket hinzufügen. Diese wird für gewöhnlich in Englisch verfasst.<br />
<br />
{{Hinweis|Es gibt aktuell noch keine Möglichkeit, die Beschreibung Mehrsprachig zu erfassen. Dies ist aber geplant, bspw. in Ticket [https://github.com/composer/composer/issues/1954 #1954] des Composer Projekts.}}<br />
<br />
Mit <code>keywords</code> kann man ein oder mehrere Schlagwörter erfassen. Diese werden für gewöhnlich in Englisch verfasst.<br />
<br />
Mit <code>type</code> definiert man, um was für einen Pakettyp es sich handelt. Hier ist wichtig, dass der Typ auf <code>contao-module</code> gesetzt wird, weil sonst der Contao-Installer (Teil des [[Composer/Plugin|Composer Plugin]]) nicht verwendet wird und das Paket damit nicht richtig installiert wird.<br />
<br />
Mit <code>homepage</code> kann man eine URL zur Projekt- oder Entwickler-Website erfassen.<br />
<br />
Mit <code>license</code> kann man die Lizenz(en) festlegen. Dies sollte ein oder mehrere gültige Identifier aus der [http://spdx.org/licenses/ SPDX License List] sein. Wenn man ein privates / closed-source Paket erstellen möchte, setzt man hier <code>proprietary</code> ein.<br />
<br />
==Abhängigkeiten==<br />
<br />
<source lang="javascript"><br />
{<br />
"require": {<br />
/* PHP Version */<br />
"php": ">=5.3",<br />
<br />
/* Contao Version */<br />
"contao/core": ">=3.1,<=3.4-dev",<br />
<br />
/* Das Plugin / Der Installer */<br />
"contao-community-alliance/composer-plugin": "~2.0",<br />
<br />
/* Andere Abhängigkeiten */<br />
"another-developer/another-extension": "~1.0"<br />
}<br />
}<br />
</source><br />
<br />
==Ersetzen von Legacy Paketen==<br />
<br />
<source lang="javascript"><br />
{<br />
"replace": {<br />
"contao-legacy/my_extension": "self.version"<br />
}<br />
}<br />
</source><br />
<br />
==Autoload==<br />
<br />
<source lang="javascript"><br />
{<br />
"autoload": {<br />
// Classmap<br />
"classmap": [<br />
"classes"<br />
],<br />
<br />
// PSR-0<br />
"psr-0": {<br />
"Me\\MyExtension": "classes/"<br />
},<br />
<br />
// PSR-4<br />
"psr-4": {<br />
"Me\\MyExtension\\": "classes/"<br />
}<br />
}<br />
}<br />
</source><br />
<br />
==Contao Konfiguration==<br />
<br />
<source lang="javascript"><br />
{<br />
"extra": {<br />
"contao": {<br />
"sources": {<br />
"<pfad innerhalb des Repository>": "<pfad innerhalb von Contao>",<br />
<br />
/* Beispiel */<br />
"TL_ROOT/system/modules/my_extension": "system/modules/my_extension"<br />
}<br />
}<br />
}<br />
}<br />
</source><br />
<br />
==Branch Alias==<br />
<br />
<source lang="javascript"><br />
{<br />
"extra": {<br />
"branch-alias": {<br />
/* Alias für Branch "master" */<br />
"dev-master": "2.0.x-dev",<br />
<br />
/* Alias für Branch "support/lts" */<br />
"dev-support/lts": "1.0.x-dev",<br />
<br />
/* Alias für Branch "develop" */<br />
"dev-develop": "3.0.x-dev"<br />
}<br />
}<br />
}<br />
</source><br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-22T08:08:25Z<p>Tril: /* Branch Alias */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil es sich dabei um ein generelles '''PHP Paket''' handelt.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
==Name, Beschreibung, Schlagwörter, Typ, Website, Lizenz==<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten Ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br><br />
'''<code>&lt;vendor&gt;</code>''' ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.<br><br />
'''<code>&lt;name&gt;</code>''' ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.<br />
<br />
{{Hinweis|Der Paketname wird normalisiert. Es sind ausschließlich '''kleine Buchstaben''', '''Zahlen''', '''Unterstriche''' und '''Bindestriche''' erlaubt!<br><br />
'''Richtig''': my-name/my-extension-name oder my_name/my_extension_name<br><br />
'''Falsch''': MyName/MyExtensionName}}<br />
<br />
Mit <code>description</code> kann man eine Kurzbeschreibung zu seinem Paket hinzufügen. Diese wird für gewöhnlich in Englisch verfasst.<br />
<br />
{{Hinweis|Es gibt aktuell noch keine Möglichkeit, die Beschreibung Mehrsprachig zu erfassen. Dies ist aber geplant, bspw. in Ticket [https://github.com/composer/composer/issues/1954 #1954] des Composer Projekts.}}<br />
<br />
Mit <code>keywords</code> kann man ein oder mehrere Schlagwörter erfassen. Diese werden für gewöhnlich in Englisch verfasst.<br />
<br />
Mit <code>type</code> definiert man, um was für einen Pakettyp es sich handelt. Hier ist wichtig, dass der Typ auf <code>contao-module</code> gesetzt wird, weil sonst der Contao-Installer (Teil des [[Composer/Plugin|Composer Plugin]]) nicht verwendet wird und das Paket damit nicht richtig installiert wird.<br />
<br />
Mit <code>homepage</code> kann man eine URL zur Projekt- oder Entwickler-Website erfassen.<br />
<br />
Mit <code>license</code> kann man die Lizenz(en) festlegen. Dies sollte ein oder mehrere gültige Identifier aus der [http://spdx.org/licenses/ SPDX License List] sein. Wenn man ein privates / closed-source Paket erstellen möchte, setzt man hier <code>proprietary</code> ein.<br />
<br />
==Abhängigkeiten==<br />
<br />
<source lang="javascript"><br />
{<br />
"require": {<br />
/* PHP Version */<br />
"php": ">=5.3",<br />
<br />
/* Contao Version */<br />
"contao/core": ">=3.1,<=3.4-dev",<br />
<br />
/* Das Plugin / Der Installer */<br />
"contao-community-alliance/composer-plugin": "~2.0",<br />
<br />
/* Andere Abhängigkeiten */<br />
"another-developer/another-extension": "~1.0"<br />
}<br />
}<br />
</source><br />
<br />
==Ersetzen von Legacy Paketen==<br />
<br />
<source lang="javascript"><br />
{<br />
"replace": {<br />
"contao-legacy/my_extension": "self.version"<br />
}<br />
}<br />
</source><br />
<br />
==Autoload==<br />
<br />
<source lang="javascript"><br />
{<br />
"autoload": {<br />
// Classmap<br />
"classmap": [<br />
"classes"<br />
],<br />
<br />
// PSR-0<br />
"psr-0": {<br />
"Me\\MyExtension": "classes/"<br />
},<br />
<br />
// PSR-4<br />
"psr-4": {<br />
"Me\\MyExtension\\": "classes/"<br />
}<br />
}<br />
}<br />
</source><br />
<br />
==Contao Konfiguration==<br />
<br />
<source lang="javascript"><br />
{<br />
"extra": {<br />
"contao": {<br />
"sources": {<br />
"<pfad innerhalb des Repository>": "<pfad innerhalb von Contao>",<br />
<br />
// Beispiel<br />
"TL_ROOT/system/modules/my_extension": "system/modules/my_extension"<br />
}<br />
}<br />
}<br />
}<br />
</source><br />
<br />
==Branch Alias==<br />
<br />
<source lang="javascript"><br />
{<br />
"extra": {<br />
"branch-alias": {<br />
/* Alias für Branch "master" */<br />
"dev-master": "2.0.x-dev",<br />
<br />
/* Alias für Branch "support/lts" */<br />
"dev-support/lts": "1.0.x-dev",<br />
<br />
/* Alias für Branch "develop" */<br />
"dev-develop": "3.0.x-dev"<br />
}<br />
}<br />
}<br />
</source><br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-22T08:07:40Z<p>Tril: /* Contao Konfiguration */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil es sich dabei um ein generelles '''PHP Paket''' handelt.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
==Name, Beschreibung, Schlagwörter, Typ, Website, Lizenz==<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten Ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br><br />
'''<code>&lt;vendor&gt;</code>''' ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.<br><br />
'''<code>&lt;name&gt;</code>''' ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.<br />
<br />
{{Hinweis|Der Paketname wird normalisiert. Es sind ausschließlich '''kleine Buchstaben''', '''Zahlen''', '''Unterstriche''' und '''Bindestriche''' erlaubt!<br><br />
'''Richtig''': my-name/my-extension-name oder my_name/my_extension_name<br><br />
'''Falsch''': MyName/MyExtensionName}}<br />
<br />
Mit <code>description</code> kann man eine Kurzbeschreibung zu seinem Paket hinzufügen. Diese wird für gewöhnlich in Englisch verfasst.<br />
<br />
{{Hinweis|Es gibt aktuell noch keine Möglichkeit, die Beschreibung Mehrsprachig zu erfassen. Dies ist aber geplant, bspw. in Ticket [https://github.com/composer/composer/issues/1954 #1954] des Composer Projekts.}}<br />
<br />
Mit <code>keywords</code> kann man ein oder mehrere Schlagwörter erfassen. Diese werden für gewöhnlich in Englisch verfasst.<br />
<br />
Mit <code>type</code> definiert man, um was für einen Pakettyp es sich handelt. Hier ist wichtig, dass der Typ auf <code>contao-module</code> gesetzt wird, weil sonst der Contao-Installer (Teil des [[Composer/Plugin|Composer Plugin]]) nicht verwendet wird und das Paket damit nicht richtig installiert wird.<br />
<br />
Mit <code>homepage</code> kann man eine URL zur Projekt- oder Entwickler-Website erfassen.<br />
<br />
Mit <code>license</code> kann man die Lizenz(en) festlegen. Dies sollte ein oder mehrere gültige Identifier aus der [http://spdx.org/licenses/ SPDX License List] sein. Wenn man ein privates / closed-source Paket erstellen möchte, setzt man hier <code>proprietary</code> ein.<br />
<br />
==Abhängigkeiten==<br />
<br />
<source lang="javascript"><br />
{<br />
"require": {<br />
/* PHP Version */<br />
"php": ">=5.3",<br />
<br />
/* Contao Version */<br />
"contao/core": ">=3.1,<=3.4-dev",<br />
<br />
/* Das Plugin / Der Installer */<br />
"contao-community-alliance/composer-plugin": "~2.0",<br />
<br />
/* Andere Abhängigkeiten */<br />
"another-developer/another-extension": "~1.0"<br />
}<br />
}<br />
</source><br />
<br />
==Ersetzen von Legacy Paketen==<br />
<br />
<source lang="javascript"><br />
{<br />
"replace": {<br />
"contao-legacy/my_extension": "self.version"<br />
}<br />
}<br />
</source><br />
<br />
==Autoload==<br />
<br />
<source lang="javascript"><br />
{<br />
"autoload": {<br />
// Classmap<br />
"classmap": [<br />
"classes"<br />
],<br />
<br />
// PSR-0<br />
"psr-0": {<br />
"Me\\MyExtension": "classes/"<br />
},<br />
<br />
// PSR-4<br />
"psr-4": {<br />
"Me\\MyExtension\\": "classes/"<br />
}<br />
}<br />
}<br />
</source><br />
<br />
==Contao Konfiguration==<br />
<br />
<source lang="javascript"><br />
{<br />
"extra": {<br />
"contao": {<br />
"sources": {<br />
"<pfad innerhalb des Repository>": "<pfad innerhalb von Contao>",<br />
<br />
// Beispiel<br />
"TL_ROOT/system/modules/my_extension": "system/modules/my_extension"<br />
}<br />
}<br />
}<br />
}<br />
</source><br />
<br />
==Branch Alias==<br />
<br />
<source lang="javascript"><br />
{<br />
"extra": {<br />
"branch-alias": {<br />
"dev-master": "2.0.x-dev",<br />
"dev-support/lts": "1.0.x-dev",<br />
"dev-develop": "3.0.x-dev"<br />
}<br />
}<br />
}<br />
</source><br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-22T08:04:05Z<p>Tril: /* Autoload */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil es sich dabei um ein generelles '''PHP Paket''' handelt.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
==Name, Beschreibung, Schlagwörter, Typ, Website, Lizenz==<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten Ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br><br />
'''<code>&lt;vendor&gt;</code>''' ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.<br><br />
'''<code>&lt;name&gt;</code>''' ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.<br />
<br />
{{Hinweis|Der Paketname wird normalisiert. Es sind ausschließlich '''kleine Buchstaben''', '''Zahlen''', '''Unterstriche''' und '''Bindestriche''' erlaubt!<br><br />
'''Richtig''': my-name/my-extension-name oder my_name/my_extension_name<br><br />
'''Falsch''': MyName/MyExtensionName}}<br />
<br />
Mit <code>description</code> kann man eine Kurzbeschreibung zu seinem Paket hinzufügen. Diese wird für gewöhnlich in Englisch verfasst.<br />
<br />
{{Hinweis|Es gibt aktuell noch keine Möglichkeit, die Beschreibung Mehrsprachig zu erfassen. Dies ist aber geplant, bspw. in Ticket [https://github.com/composer/composer/issues/1954 #1954] des Composer Projekts.}}<br />
<br />
Mit <code>keywords</code> kann man ein oder mehrere Schlagwörter erfassen. Diese werden für gewöhnlich in Englisch verfasst.<br />
<br />
Mit <code>type</code> definiert man, um was für einen Pakettyp es sich handelt. Hier ist wichtig, dass der Typ auf <code>contao-module</code> gesetzt wird, weil sonst der Contao-Installer (Teil des [[Composer/Plugin|Composer Plugin]]) nicht verwendet wird und das Paket damit nicht richtig installiert wird.<br />
<br />
Mit <code>homepage</code> kann man eine URL zur Projekt- oder Entwickler-Website erfassen.<br />
<br />
Mit <code>license</code> kann man die Lizenz(en) festlegen. Dies sollte ein oder mehrere gültige Identifier aus der [http://spdx.org/licenses/ SPDX License List] sein. Wenn man ein privates / closed-source Paket erstellen möchte, setzt man hier <code>proprietary</code> ein.<br />
<br />
==Abhängigkeiten==<br />
<br />
<source lang="javascript"><br />
{<br />
"require": {<br />
/* PHP Version */<br />
"php": ">=5.3",<br />
<br />
/* Contao Version */<br />
"contao/core": ">=3.1,<=3.4-dev",<br />
<br />
/* Das Plugin / Der Installer */<br />
"contao-community-alliance/composer-plugin": "~2.0",<br />
<br />
/* Andere Abhängigkeiten */<br />
"another-developer/another-extension": "~1.0"<br />
}<br />
}<br />
</source><br />
<br />
==Ersetzen von Legacy Paketen==<br />
<br />
<source lang="javascript"><br />
{<br />
"replace": {<br />
"contao-legacy/my_extension": "self.version"<br />
}<br />
}<br />
</source><br />
<br />
==Autoload==<br />
<br />
<source lang="javascript"><br />
{<br />
"autoload": {<br />
// Classmap<br />
"classmap": [<br />
"classes"<br />
],<br />
<br />
// PSR-0<br />
"psr-0": {<br />
"Me\\MyExtension": "classes/"<br />
},<br />
<br />
// PSR-4<br />
"psr-4": {<br />
"Me\\MyExtension\\": "classes/"<br />
}<br />
}<br />
}<br />
</source><br />
<br />
==Contao Konfiguration==<br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-22T08:02:13Z<p>Tril: /* Ersetzen von Legacy Paketen */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil es sich dabei um ein generelles '''PHP Paket''' handelt.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
==Name, Beschreibung, Schlagwörter, Typ, Website, Lizenz==<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten Ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br><br />
'''<code>&lt;vendor&gt;</code>''' ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.<br><br />
'''<code>&lt;name&gt;</code>''' ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.<br />
<br />
{{Hinweis|Der Paketname wird normalisiert. Es sind ausschließlich '''kleine Buchstaben''', '''Zahlen''', '''Unterstriche''' und '''Bindestriche''' erlaubt!<br><br />
'''Richtig''': my-name/my-extension-name oder my_name/my_extension_name<br><br />
'''Falsch''': MyName/MyExtensionName}}<br />
<br />
Mit <code>description</code> kann man eine Kurzbeschreibung zu seinem Paket hinzufügen. Diese wird für gewöhnlich in Englisch verfasst.<br />
<br />
{{Hinweis|Es gibt aktuell noch keine Möglichkeit, die Beschreibung Mehrsprachig zu erfassen. Dies ist aber geplant, bspw. in Ticket [https://github.com/composer/composer/issues/1954 #1954] des Composer Projekts.}}<br />
<br />
Mit <code>keywords</code> kann man ein oder mehrere Schlagwörter erfassen. Diese werden für gewöhnlich in Englisch verfasst.<br />
<br />
Mit <code>type</code> definiert man, um was für einen Pakettyp es sich handelt. Hier ist wichtig, dass der Typ auf <code>contao-module</code> gesetzt wird, weil sonst der Contao-Installer (Teil des [[Composer/Plugin|Composer Plugin]]) nicht verwendet wird und das Paket damit nicht richtig installiert wird.<br />
<br />
Mit <code>homepage</code> kann man eine URL zur Projekt- oder Entwickler-Website erfassen.<br />
<br />
Mit <code>license</code> kann man die Lizenz(en) festlegen. Dies sollte ein oder mehrere gültige Identifier aus der [http://spdx.org/licenses/ SPDX License List] sein. Wenn man ein privates / closed-source Paket erstellen möchte, setzt man hier <code>proprietary</code> ein.<br />
<br />
==Abhängigkeiten==<br />
<br />
<source lang="javascript"><br />
{<br />
"require": {<br />
/* PHP Version */<br />
"php": ">=5.3",<br />
<br />
/* Contao Version */<br />
"contao/core": ">=3.1,<=3.4-dev",<br />
<br />
/* Das Plugin / Der Installer */<br />
"contao-community-alliance/composer-plugin": "~2.0",<br />
<br />
/* Andere Abhängigkeiten */<br />
"another-developer/another-extension": "~1.0"<br />
}<br />
}<br />
</source><br />
<br />
==Ersetzen von Legacy Paketen==<br />
<br />
<source lang="javascript"><br />
{<br />
"replace": {<br />
"contao-legacy/my_extension": "self.version"<br />
}<br />
}<br />
</source><br />
<br />
==Autoload==<br />
<br />
==Contao Konfiguration==<br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-22T08:01:28Z<p>Tril: /* Abhängigkeiten */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil es sich dabei um ein generelles '''PHP Paket''' handelt.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
==Name, Beschreibung, Schlagwörter, Typ, Website, Lizenz==<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten Ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br><br />
'''<code>&lt;vendor&gt;</code>''' ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.<br><br />
'''<code>&lt;name&gt;</code>''' ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.<br />
<br />
{{Hinweis|Der Paketname wird normalisiert. Es sind ausschließlich '''kleine Buchstaben''', '''Zahlen''', '''Unterstriche''' und '''Bindestriche''' erlaubt!<br><br />
'''Richtig''': my-name/my-extension-name oder my_name/my_extension_name<br><br />
'''Falsch''': MyName/MyExtensionName}}<br />
<br />
Mit <code>description</code> kann man eine Kurzbeschreibung zu seinem Paket hinzufügen. Diese wird für gewöhnlich in Englisch verfasst.<br />
<br />
{{Hinweis|Es gibt aktuell noch keine Möglichkeit, die Beschreibung Mehrsprachig zu erfassen. Dies ist aber geplant, bspw. in Ticket [https://github.com/composer/composer/issues/1954 #1954] des Composer Projekts.}}<br />
<br />
Mit <code>keywords</code> kann man ein oder mehrere Schlagwörter erfassen. Diese werden für gewöhnlich in Englisch verfasst.<br />
<br />
Mit <code>type</code> definiert man, um was für einen Pakettyp es sich handelt. Hier ist wichtig, dass der Typ auf <code>contao-module</code> gesetzt wird, weil sonst der Contao-Installer (Teil des [[Composer/Plugin|Composer Plugin]]) nicht verwendet wird und das Paket damit nicht richtig installiert wird.<br />
<br />
Mit <code>homepage</code> kann man eine URL zur Projekt- oder Entwickler-Website erfassen.<br />
<br />
Mit <code>license</code> kann man die Lizenz(en) festlegen. Dies sollte ein oder mehrere gültige Identifier aus der [http://spdx.org/licenses/ SPDX License List] sein. Wenn man ein privates / closed-source Paket erstellen möchte, setzt man hier <code>proprietary</code> ein.<br />
<br />
==Abhängigkeiten==<br />
<br />
<source lang="javascript"><br />
{<br />
"require": {<br />
/* PHP Version */<br />
"php": ">=5.3",<br />
<br />
/* Contao Version */<br />
"contao/core": ">=3.1,<=3.4-dev",<br />
<br />
/* Das Plugin / Der Installer */<br />
"contao-community-alliance/composer-plugin": "~2.0",<br />
<br />
/* Andere Abhängigkeiten */<br />
"another-developer/another-extension": "~1.0"<br />
}<br />
}<br />
</source><br />
<br />
==Ersetzen von Legacy Paketen==<br />
<br />
==Autoload==<br />
<br />
==Contao Konfiguration==<br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-22T07:59:06Z<p>Tril: /* Die composer.json */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil es sich dabei um ein generelles '''PHP Paket''' handelt.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
==Name, Beschreibung, Schlagwörter, Typ, Website, Lizenz==<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten Ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br><br />
'''<code>&lt;vendor&gt;</code>''' ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.<br><br />
'''<code>&lt;name&gt;</code>''' ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.<br />
<br />
{{Hinweis|Der Paketname wird normalisiert. Es sind ausschließlich '''kleine Buchstaben''', '''Zahlen''', '''Unterstriche''' und '''Bindestriche''' erlaubt!<br><br />
'''Richtig''': my-name/my-extension-name oder my_name/my_extension_name<br><br />
'''Falsch''': MyName/MyExtensionName}}<br />
<br />
Mit <code>description</code> kann man eine Kurzbeschreibung zu seinem Paket hinzufügen. Diese wird für gewöhnlich in Englisch verfasst.<br />
<br />
{{Hinweis|Es gibt aktuell noch keine Möglichkeit, die Beschreibung Mehrsprachig zu erfassen. Dies ist aber geplant, bspw. in Ticket [https://github.com/composer/composer/issues/1954 #1954] des Composer Projekts.}}<br />
<br />
Mit <code>keywords</code> kann man ein oder mehrere Schlagwörter erfassen. Diese werden für gewöhnlich in Englisch verfasst.<br />
<br />
Mit <code>type</code> definiert man, um was für einen Pakettyp es sich handelt. Hier ist wichtig, dass der Typ auf <code>contao-module</code> gesetzt wird, weil sonst der Contao-Installer (Teil des [[Composer/Plugin|Composer Plugin]]) nicht verwendet wird und das Paket damit nicht richtig installiert wird.<br />
<br />
Mit <code>homepage</code> kann man eine URL zur Projekt- oder Entwickler-Website erfassen.<br />
<br />
Mit <code>license</code> kann man die Lizenz(en) festlegen. Dies sollte ein oder mehrere gültige Identifier aus der [http://spdx.org/licenses/ SPDX License List] sein. Wenn man ein privates / closed-source Paket erstellen möchte, setzt man hier <code>proprietary</code> ein.<br />
<br />
==Abhängigkeiten==<br />
<br />
==Ersetzen von Legacy Paketen==<br />
<br />
==Autoload==<br />
<br />
==Contao Konfiguration==<br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-22T03:23:19Z<p>Tril: /* Die composer.json */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil es sich dabei um ein generelles '''PHP Paket''' handelt.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten Ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br><br />
'''<code>&lt;vendor&gt;</code>''' ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.<br><br />
'''<code>&lt;name&gt;</code>''' ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.<br />
<br />
{{Hinweis|Der Paketname wird normalisiert. Es sind ausschließlich '''kleine Buchstaben''', '''Zahlen''', '''Unterstriche''' und '''Bindestriche''' erlaubt!<br><br />
'''Richtig''': my-name/my-extension-name oder my_name/my_extension_name<br><br />
'''Falsch''': MyName/MyExtensionName}}<br />
<br />
Mit <code>description</code> kann man eine Kurzbeschreibung zu seinem Paket hinzufügen. Diese wird für gewöhnlich in Englisch verfasst.<br />
<br />
{{Hinweis|Es gibt aktuell noch keine Möglichkeit, die Beschreibung Mehrsprachig zu erfassen. Dies ist aber geplant, bspw. in Ticket [https://github.com/composer/composer/issues/1954 #1954] des Composer Projekts.}}<br />
<br />
Mit <code>keywords</code> kann man ein oder mehrere Schlagwörter erfassen. Diese werden für gewöhnlich in Englisch verfasst.<br />
<br />
Mit <code>type</code> definiert man, um was für einen Pakettyp es sich handelt. Hier ist wichtig, dass der Typ auf <code>contao-module</code> gesetzt wird, weil sonst der Contao-Installer (Teil des [[Composer/Plugin|Composer Plugin]]) nicht verwendet wird und das Paket damit nicht richtig installiert wird.<br />
<br />
Mit <code>homepage</code> kann man eine URL zur Projekt- oder Entwickler-Website erfassen.<br />
<br />
Mit <code>license</code> kann man die Lizenz(en) festlegen. Dies sollte ein oder mehrere gültige Identifier aus der [http://spdx.org/licenses/ SPDX License List] sein. Wenn man ein privates / closed-source Paket erstellen möchte, setzt man hier <code>proprietary</code> ein.<br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-22T03:17:43Z<p>Tril: /* Die composer.json */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil es sich dabei um ein generelles '''PHP Paket''' handelt.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br><br />
'''<code>&lt;vendor&gt;</code>''' ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.<br><br />
'''<code>&lt;name&gt;</code>''' ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.<br />
<br />
{{Hinweis|Der Paketname wird normalisiert. Es sind ausschließlich '''kleine Buchstaben''', '''Zahlen''', '''Unterstriche''' und '''Bindestriche''' erlaubt!<br><br />
'''Richtig''': my-name/my-extension-name oder my_name/my_extension_name<br><br />
'''Falsch''': MyName/MyExtensionName}}<br />
<br />
Mit <code>description</code> kann man eine Kurzbeschreibung zu seinem Paket hinzufügen. Diese wird für gewöhnlich in Englisch verfasst.<br />
<br />
{{Hinweis|Es gibt aktuell noch keine Möglichkeit, die Beschreibung Mehrsprachig zu erfassen. Dies ist aber geplant, bspw. in Ticket [https://github.com/composer/composer/issues/1954 #1954] des Composer Projekts.}}<br />
<br />
Mit <code>keywords</code> kann man ein oder mehrere Schlagwörter erfassen. Diese werden für gewöhnlich in Englisch verfasst.<br />
<br />
Mit <code>type</code> definiert man, um was für einen Pakettyp es sich handelt. Hier ist wichtig, dass der Typ auf <code>contao-module</code> gesetzt wird, weil sonst der Contao-Installer (Teil des [[Composer/Plugin|Composer Plugin]]) nicht verwendet wird und das Paket damit nicht richtig installiert wird.<br />
<br />
Mit <code>homepage</code> kann man eine URL zur Projekt- oder Entwickler-Website erfassen.<br />
<br />
Mit <code>license</code> kann man die Lizenz(en) festlegen. Dies sollte ein oder mehrere gültige Identifier aus der [http://spdx.org/licenses/ SPDX License List] sein. Wenn man ein privates / closed-source Paket erstellen möchte, setzt man hier <code>proprietary</code> ein.<br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-21T20:52:49Z<p>Tril: /* Die composer.json */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil es sich dabei um ein generelles '''PHP Paket''' handelt.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br />
'''<code>&lt;vendor&gt;</code>''' ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.<br />
'''<code>&lt;name&gt;</code>''' ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.<br />
<br />
{{Hinweis|Der Paketname wird normalisiert. Es sind ausschließlich '''kleine Buchstaben''', '''Zahlen''', '''Unterstriche''' und '''Bindestriche''' erlaubt!<br><br />
'''Richtig''': my-name/my-extension-name oder my_name/my_extension_name<br><br />
'''Falsch''': MyName/MyExtensionName}}<br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-21T20:51:47Z<p>Tril: /* Grundlagen */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil es sich dabei um ein generelles '''PHP Paket''' handelt.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br />
'''<code>&lt;vendor&gt;</code>''' ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.<br />
'''<code>&lt;name&gt;</code>''' ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.<br />
<br />
{{Hinweis|Der Paketname wird normalisiert. Es sind ausschließlich '''kleine Buchstaben''', '''Zahlen''', '''Unterstriche''' und '''Bindestriche''' erlaubt!<br><br />
'''Gut''': my-name/my-extension-name<br><br />
'''Schlecht''': my_name/my_extension_name<br><br />
'''Ungültig''': MyName/MyExtensionName}}<br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-21T20:06:57Z<p>Tril: /* Die composer.json */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil ein '''Composer Paket''' nicht an ein CMS / System gebunden ist. Aber ein '''Composer Paket''' kann auch eine ''Contao Erweiterung'' sein.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br />
'''<code>&lt;vendor&gt;</code>''' ist der Name des Entwicklers, es empfiehlt sich den Personen/Organisations-Namen den man auf github verwendet zu benutzen.<br />
'''<code>&lt;name&gt;</code>''' ist der Name des Pakets, es empfiehlt sich den Namen des Repositories auf github zu verwenden.<br />
<br />
{{Hinweis|Der Paketname wird normalisiert. Es sind ausschließlich '''kleine Buchstaben''', '''Zahlen''', '''Unterstriche''' und '''Bindestriche''' erlaubt!<br><br />
'''Gut''': my-name/my-extension-name<br><br />
'''Schlecht''': my_name/my_extension_name<br><br />
'''Ungültig''': MyName/MyExtensionName}}<br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-21T19:29:02Z<p>Tril: /* Grundlagen */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil ein '''Composer Paket''' nicht an ein CMS / System gebunden ist. Aber ein '''Composer Paket''' kann auch eine ''Contao Erweiterung'' sein.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-21T19:28:42Z<p>Tril: /* Grundlagen */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von ''Paketen'', nicht von ''Erweiterungen'' - weil ein ''Composer Paket'' nicht an ein CMS / System gebunden ist. Aber ein ''Composer Paket'' kann auch eine ''Contao Erweiterung'' sein.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-21T19:05:34Z<p>Tril: /* Die composer.json */</p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
{{Hinweis|In Composer redet man von '''Paketen''', nicht von '''Erweiterungen''' - weil ein '''Composer Paket''' nicht an ein CMS / System gebunden ist. Aber ein '''Composer Paket''' kann auch eine '''Contao Erweiterung''' sein.}}<br />
<br />
=Die <code>composer.json</code>=<br />
<br />
Die <code>composer.json</code> ist die zentrale Konfigurationsdatei für Composer.<br />
In dieser werden Name, Beschreibung, Typ, Lizenz, Author, und viel mehr hinterlegt.<br />
Eine vollständige Schema-Beschreibung kann man auf der [https://getcomposer.org/doc/04-schema.md Composer Website] finden.<br />
An dieser Stelle werden erst ein mal nur auf die wichtigsten Einträge erörtert.<br />
<br />
{{Hinweis|Mit '''Repository''' ist das git/svn/hg Repository gemeint.}}<br />
<br />
Die <code>composer.json</code> muss auf der obersten ebene im Repository hinterlegt werden.<br />
Die die Dateiendung bereits verrät, handelt es sich dabei um eine [http://json.org/ JSON] Datei.<br />
<br />
Fangen wir mal mit den Basics an:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "me/my-extension",<br />
"description": "A very usefull extension.",<br />
"keywords": ["contao", "extension", "usability"],<br />
"type": "contao-module",<br />
"homepage": "http://my-homepage.me/my-extension",<br />
"license": "LGPL-3.0+"<br />
}<br />
</source><br />
<br />
Mit <code>name</code> wird der Name des Pakets festgelegt. Hierbei ist zu beachten, dass sich der Name aus 2 Teilen zusammen setzt: <code>&lt;vendor&gt;/&lt;name&gt;</code>.<br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-21T18:31:27Z<p>Tril: </p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__<br />
<br />
=Grundlagen=<br />
<br />
=Die composer.json=<br />
<br />
=Beispiele=<br />
<br />
==Repository mit TL_ROOT==<br />
<br />
==Repository mit system/modules/my_extension==<br />
<br />
==Repository das bei system/modules/my_extension startet==<br />
<br />
==Neue Struktur==</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-21T17:58:41Z<p>Tril: </p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial - Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-21T17:58:32Z<p>Tril: </p>
<hr />
<div>[[Category:Composer]]<br />
{{DISPLAYTITLE:Tutorial: Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-21T17:58:15Z<p>Tril: </p>
<hr />
<div>[[Category:Composer]]<br />
{{SEITENTITEL:Tutorial: Extension für Composer fit machen}}<br />
<br />
{{stub}}<br />
<br />
__TOC__</div>Trilhttps://de.contaowiki.org/Composer/Tutorial:_Extension_f%C3%BCr_Composer_fit_machenComposer/Tutorial: Extension für Composer fit machen2014-06-21T17:56:41Z<p>Tril: Die Seite wurde neu angelegt: „Category:Composer {{stub}} =Tutorial: Extension für Composer fit machen= __TOC__“</p>
<hr />
<div>[[Category:Composer]]<br />
<br />
{{stub}}<br />
<br />
=Tutorial: Extension für Composer fit machen=<br />
<br />
__TOC__</div>Trilhttps://de.contaowiki.org/Kategorie:ComposerKategorie:Composer2014-06-21T17:52:03Z<p>Tril: Die Seite wurde neu angelegt: „Bei [https://getcomposer.org/ Composer] handelt es sich um ein ''tool for dependency management in PHP'' - zu deutsch ''Tool zum Management von Abhängigkeiten…“</p>
<hr />
<div>Bei [https://getcomposer.org/ Composer] handelt es sich um ein ''tool for dependency management in PHP'' - zu deutsch ''Tool zum Management von Abhängigkeiten in PHP''.<br />
Composer ist eigentlich ein eigenständiges Projekt / Programm, dass primär von [http://naderman.de/ Nils Adermann], [http://nelm.io/jordi Jordi Boggiano] und der [https://github.com/composer/composer/graphs/contributors Composer Gemeinschaft] entwickelt wird.<br />
<br />
Im Kontext von Contao unterscheidet man zwischen 3 Teilen.<br />
Wenn von dem ''Composer Projekt'' oder ''composer.phar'' gesprochen wird, meint man damit in der Regel das ursprüngliche [https://getcomposer.org/ Composer Projekt] und nicht die Contao Integration.<br />
Die Contao Integration gliedert sich in 2 Teile: Den [[Composer/Client|Contao Composer Client]] und das [[Composer/Plugin|Contao Composer Plugin]].<br />
Wenn von ''Composer'' gesprochen wird, ist im Contao Kontext eigentlich primär von dem [[Composer/Client|Contao Composer Client]] die Rede.</div>Trilhttps://de.contaowiki.org/ComposerComposer2014-06-21T17:51:47Z<p>Tril: Weiterleitung nach Kategorie:Composer erstellt</p>
<hr />
<div>#REDIRECT [[:Category:Composer]]<br />
[[Category:Composer]]</div>Trilhttps://de.contaowiki.org/Composer/PluginComposer/Plugin2014-06-21T17:51:01Z<p>Tril: Die Seite wurde neu angelegt: „Category:Composer {{stub}}“</p>
<hr />
<div>[[Category:Composer]]<br />
<br />
{{stub}}</div>Trilhttps://de.contaowiki.org/Composer/ReplaceComposer/Replace2014-06-21T17:50:44Z<p>Tril: </p>
<hr />
<div>{{stub}}<br />
[[Category:Composer]]<br />
<br />
__TOC__<br />
<br />
= Wie composer mit <code>replace</code> umgeht =<br />
<br />
Mit der <code>replace</code> Eigenschaft kann man festlegen, dass das eigene Paket ein fremdes Paket "ersetzt". Dafür kann es mehrere Gründe geben, der häufigste ist wohl, dass das Paket unter einem anderen Namen weiter entwickelt wird, weil bspw. der Entwickler gewechselt hat. Im Contao Kontext sieht man auch sehr viel <code>{ "replace": { "contao-legacy/my-extension": "..." } }</code>. Das sind replaces für Pakete, die über den Legacy ER2 Server in Composer bereitgestellt werden, vom Entwickler dann aber später als "echtes" Composer Paket weiter geführt werden.<br />
<br />
Sehr weit verbreitet ist vor allem die Notation mit <code>*</code>:<br />
<source lang="javascript"><br />
{ "replace": { "contao-legacy/my-extension": "*" } }<br />
</source><br />
<br />
Im folgenden soll erläutert werden, warum ein replace auf alle Versionen wie in dem vorhergehenden Beispiel die denkbar schlechteste Variante ist, die man sich vorstellen kann.<br />
Dazu muss man erst ein mal verstehen, wie replace funktioniert.<br />
<br />
Wir gehen einfach mal davon aus, wir haben die folgenden 3 Pakete:<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "test/old",<br />
"version": "1.0",<br />
"dist": {<br />
"url": "...",<br />
"type": "zip"<br />
},<br />
"source": {<br />
"url": "...",<br />
"type": "svn",<br />
"reference": "master"<br />
}<br />
}<br />
</source><br />
<br />
<source lang="javascript"><br />
{<br />
"name": "test/old",<br />
"version": "1.1",<br />
"dist": {<br />
"url": "...",<br />
"type": "zip"<br />
},<br />
"source": {<br />
"url": "...",<br />
"type": "svn",<br />
"reference": "master"<br />
}<br />
}<br />
</source><br />
<br />
<source lang="javascript"><br />
{<br />
"name": "test/new",<br />
"version": "2.0",<br />
"dist": {<br />
"url": "...",<br />
"type": "zip"<br />
},<br />
"source": {<br />
"url": "...",<br />
"type": "svn",<br />
"reference": "master"<br />
},<br />
"replace": {<br />
"test/old": "*"<br />
}<br />
}<br />
</source><br />
<br />
Um die gültigen Pakete zu finden, arbeitet Composer intern mit einem Pool. In diesen Pool generiert Composer für jeden Paketnamen eine sortierte Liste der Pakete erzeugt, die für den Paketnamen gültig sind.<br />
<br />
Für das Paket <code>test/old</code> sieht diese Liste folgend aus:<br />
<br />
* test/old 1.0<br />
* test/old 1.1<br />
* test/new 2.0<br />
<br />
Wie Composer darauf kommt, dass <code>test/new</code> in diese Liste kommt ist ganz einfach. Jedes Paket verfügt nicht nur über seinen eindeutigen Namen, sondern auch über Alias-Namen. Schaut man sich die [https://github.com/composer/composer/blob/master/src/Composer/Package/BasePackage.php#L86 BasePackage::getNames()] Methode an, wird schnell klar welche Namen für ein Paket akzeptiert werden. Abgesehen vom <code>Package::$name</code> werden auch noch alle <code>Package::$provides</code> und <code>Package::$replaces</code> als gültige Namen für das Paket betrachtet.<br />
<br />
Unter Strich heißt dass, dass die Namensliste von <code>test/new</code> aus <code>[test/new, test/old]</code> besteht und <code>test/new</code> deshalb in der Paketliste zu <code>test/old</code> (2 Absätze zuvor) auftaucht.<br />
<br />
Wir gehen davon aus, wir wollen mit <code>{ "require": { "test/old": "~1.0" } }</code> das Paket <code>test/old</code> in irgendeiner 1er Version installieren (Hinweis: <code>~1.0</code> ist gleichbedeutend mit <code>>=1,<2-dev</code>).<br />
<br />
Betrachtet man jetzt die Auswertungslogik in der [https://github.com/composer/composer/blob/master/src/Composer/DependencyResolver/Pool.php#L249 Pool::computeWhatProvides()] Methode welche die Paketliste durchgeht und das höchst-versionierte (letzte) gültige Paket auswählt, kommt man zu folgendem Ergebnis:<br />
<br />
* Paket <code>test/old</code> in Version 1.0 matched über seinen Namen und seine Version<br />
* Paket <code>test/old</code> in Version 1.0 matched ebenfalls über seinen Namen und seine Version<br />
* Paket <code>test/new</code> in Version 2.0 matched über sein replace, außerdem matched die Version <code>*</code> auf die Constraint <code>~1.0</code><br />
<br />
Damit wird <code>test/new</code> als gültiges Paket akzeptiert und weil es die jüngste Versionsnummer hat, wird dieses auch installiert.<br />
<br />
Intern macht Composer also innerhalb der [https://github.com/composer/composer/blob/master/src/Composer/DependencyResolver/Pool.php#L467 Pool::match()] Methode eine Prüfung, ob die Version <code>*</code> auf die Constraint <code>~1.0</code> zutrifft. Und weil <code>*</code> immer zutrifft, ist es also völlig egal was man als Constraint auswählt. Dem Nutzer wird quasi jede Chance genommen, das Paket <code>test/old</code> in einer von ihm vorgegebenen Version zu installieren!<br />
<br />
'''Lösung:''' Anstelle des Wildcards, verwendet man einfach <code>{ "replace": { "contao-legacy/my-extension": "self.version" } }</code>!<br />
<br />
<source lang="javascript"><br />
{<br />
"name": "test/new",<br />
"version": "2.0",<br />
"dist": {<br />
"url": "...",<br />
"type": "zip"<br />
},<br />
"source": {<br />
"url": "...",<br />
"type": "svn",<br />
"reference": "master"<br />
},<br />
"replace": {<br />
"test/old": "self.version"<br />
}<br />
}<br />
</source><br />
<br />
Die Constraint <code>self.version</code> wird intern durch die Version des ersetzenden Pakets ersetzt. In [https://github.com/composer/composer/blob/master/src/Composer/DependencyResolver/Pool.php#L467 Pool::match()] wird jetzt also geprüft ob die Version <code>2.0</code> auf die Constraint <code>~1.0</code> zutrifft, was natürlich fehl schlägt.<br />
<br />
Hätten wir jetzt allerdings ein Paket <code>test/new</code> in Version 1.2, welches als Nachfolger von <code>test/old</code> Version 1.1 fungiert, wäre wieder alles in Ordnung, weil die Version <code>1.2</code> auf die Constraint <code>~1.0</code> matched. '''Im Regelfall ist es genau dass, was wir wollen!'''<br />
<br />
== TL;DR ==<br />
<br />
Ein <code>{ "name": "me/my-extension", "replace": { "contao-legacy/my-extension": "*" } }</code> sorgt dafür, dass jede Version des alten Paketes, durch das neue ersetzt wird. Das bedeutet aber auch, dass eine potentiell inkompatible Version 3 von <code>me/my-extension</code> installiert wird, auch wenn mit <code>{ "require": { "contao-legacy/my-extension": "1.0" } }</code> die Version 1 von <code>contao-legacy/my-extension</code> angefordert wird. Das schlimmste: Als Benutzer kann man (fast) nichts dagegen machen!<br />
<br />
Vereinfacht ausgedrückt ist ein replace nichts weiter, als ein Alias auf das Paket in dem der replace definiert wurde:<br />
<br />
<pre><br />
test/old 1.0<br />
test/old 1.1<br />
test/old * alias for test/new 2.0<br />
</pre><br />
<br />
<br />
Deshalb sollte immer <code>{ "name": "me/my-extension", "replace": { "contao-legacy/my-extension": "self.version" } }</code> verwendet werden!<br />
<br />
== Sonderfälle ==<br />
<br />
Natürlich gibt es Sonderfälle, diese bedingen aber in der Regel die Angabe einer expliziten Version bspw. <code>{ "replace": { "contao-legacy/my-extension": "1.1" } }</code>.<br />
In diesem Fall muss der Entwickler darauf achten, seinen replace Eintrag akribisch mit zu führen, bei steigenden Versionsnummern.<br />
Von der Verwendung von Wildcards, auch wenn es nur eine Major- oder Release-Wildcard bspw. <code>{ "replace": { "contao-legacy/my-extension": "1.1.*" } }</code> ist, wird grundsätzlich abgeraten!</div>Trilhttps://de.contaowiki.org/Composer/ClientComposer/Client2014-06-21T17:50:24Z<p>Tril: </p>
<hr />
<div>{{stub}}<br />
[[Category:Composer]]<br />
[[Category:Admin HOWTOS]]<br />
[[Category:Installation und Updates]]<br />
<br />
=Composer=<br />
Auf gut deutsch = Komponist.<br />
Er gibt den Ton an in einer Contao Installation und ist als Ersatz für die Erweiterungs-Verwaltung gedacht. Der Composer wird von der CCA (Contao-Community-Alliance) betreut. <br />
<br />
Hier findest Du mehr Infos: http://c-c-a.org/projekte<br />
<br />
==Installation==<br />
Um ein reibungsloses Funktionieren zu gewährleisten, sollten Anwender die Stable-Version verwenden. Dazu die Erweiterungsverwaltung aufrufen und nach Composer suchen. Vor der Installation dann die aktuelle Stable-Version auswählen und mit der Installation fortfahren.<br />
<br />
Beim ersten Aufruf des Composers (der sich unter dem Menüpunkt "Paketverwaltung" findet) wird man aufgefordert, den Migrationsprozess zu starten. Nach der Installation sieht es erstmal so aus (Contao 3.2.5).<br />
<br />
===Übersicht===<br />
Im linken Backendmenü ersetzt die Paketverwaltung die Erweiterungsverwaltung und den Erweiterungskatalog. Das Sicherheitsschloss dient dazu Erweiterungen festzupinnen und damit vor der Aktualisierung zu schützen. Dieses Schloss sollte aber nicht für Composer selbst genutzt werden, da dadurch wichtige Aktualisierungen nicht mehr durchgeführt werden können.<br />
[[File:Composer_uebersicht.png|center]]<br><br><br />
<br />
===Einstellungen===<br />
# Rückkehr zur normalen Erweiterungsverwaltung.<br />
# Composer-Cache leeren<br />
# Einschalten des Expertenmodus<br />
[[File:Composer_einstellungen.png|center]]<br><br><br />
<br />
===Expertenmodus===<br />
Detailansicht im Expertenmodus. Zeigt das Installationsscript an.<br />
[[File:composer_expertenmodus.png|center]]<br><br><br />
<br />
===Abhängigkeiten===<br />
Bei angecklickter Checkbox werden die Abhängigkeiten zu den entsprechenden Erweiterungen angezeigt.<br />
[[File:composer_abhaengigkeiten.png|center]]<br><br><br />
<br />
===Erweiterungs Suche===<br />
Umfangreiche Suche von Erweiterungen.<br />
<br />
=Erweiterungs Katalog (Übersicht)=<br />
Eine mögliche Übersicht von Erweiterungen (Packages from contao-community-alliance)<br />
https://packagist.org/packages/contao-community-alliance/<br />
<br />
=Troubleshooting=<br />
<br />
== XAMPP == <br />
<br />
=== Unable to find the socket transport "ssl" ===<br />
<br />
In einem Standard XAMPP kann es zu folgender Fehlermeldung kommen:<br />
<br />
<source>Fatal error: Uncaught exception Composer\Downloader\TransportException with message The "http://packagist.org/search.json?q=calendar" file could not be downloaded: failed to open stream: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? thrown in phar://htdocs/contao/composer/composer.phar/src/Composer/Util/RemoteFilesystem.php on line 216 </source><br />
<br />
In XAMPP ist das OpenSSL Modul standardmäßig deaktiviert, man kann es durch entfernen des Semikolon in der php.ini einfach aktivieren:<br />
<br />
<source lang="ini">extension=php_openssl.dll</source></div>Trilhttps://de.contaowiki.org/ComposerComposer2014-06-21T17:48:20Z<p>Tril: </p>
<hr />
<div>Bei [https://getcomposer.org/ Composer] handelt es sich um ein ''tool for dependency management in PHP'' - zu deutsch ''Tool zum Management von Abhängigkeiten in PHP''.<br />
Composer ist eigentlich ein eigenständiges Projekt / Programm, dass primär von [http://naderman.de/ Nils Adermann], [http://nelm.io/jordi Jordi Boggiano] und der [https://github.com/composer/composer/graphs/contributors Composer Gemeinschaft] entwickelt wird.<br />
<br />
Im Kontext von Contao unterscheidet man zwischen 3 Teilen.<br />
Wenn von dem ''Composer Projekt'' oder ''composer.phar'' gesprochen wird, meint man damit in der Regel das ursprüngliche [https://getcomposer.org/ Composer Projekt] und nicht die Contao Integration.<br />
Die Contao Integration gliedert sich in 2 Teile: Den [[Composer/Client|Contao Composer Client]] und das [[Composer/Plugin|Contao Composer Plugin]].<br />
Wenn von ''Composer'' gesprochen wird, ist im Contao Kontext eigentlich primär von dem [[Composer/Client|Contao Composer Client]] die Rede.</div>Trilhttps://de.contaowiki.org/Composer/ClientComposer/Client2014-06-21T16:50:41Z<p>Tril: Troubleshooting - XAMPP Hinweis zu OpenSSL Extension aus der Seite "Composer Client" hier her verschoben.</p>
<hr />
<div>{{stub}}<br />
[[Category:Admin HOWTOS]]<br />
[[Category:Installation und Updates]]<br />
<br />
=Composer=<br />
Auf gut deutsch = Komponist.<br />
Er gibt den Ton an in einer Contao Installation und ist als Ersatz für die Erweiterungs-Verwaltung gedacht. Der Composer wird von der CCA (Contao-Community-Alliance) betreut. <br />
<br />
Hier findest Du mehr Infos: http://c-c-a.org/projekte<br />
<br />
==Installation==<br />
Um ein reibungsloses Funktionieren zu gewährleisten, sollten Anwender die Stable-Version verwenden. Dazu die Erweiterungsverwaltung aufrufen und nach Composer suchen. Vor der Installation dann die aktuelle Stable-Version auswählen und mit der Installation fortfahren.<br />
<br />
Beim ersten Aufruf des Composers (der sich unter dem Menüpunkt "Paketverwaltung" findet) wird man aufgefordert, den Migrationsprozess zu starten. Nach der Installation sieht es erstmal so aus (Contao 3.2.5).<br />
<br />
===Übersicht===<br />
Im linken Backendmenü ersetzt die Paketverwaltung die Erweiterungsverwaltung und den Erweiterungskatalog. Das Sicherheitsschloss dient dazu Erweiterungen festzupinnen und damit vor der Aktualisierung zu schützen. Dieses Schloss sollte aber nicht für Composer selbst genutzt werden, da dadurch wichtige Aktualisierungen nicht mehr durchgeführt werden können.<br />
[[File:Composer_uebersicht.png|center]]<br><br><br />
<br />
===Einstellungen===<br />
# Rückkehr zur normalen Erweiterungsverwaltung.<br />
# Composer-Cache leeren<br />
# Einschalten des Expertenmodus<br />
[[File:Composer_einstellungen.png|center]]<br><br><br />
<br />
===Expertenmodus===<br />
Detailansicht im Expertenmodus. Zeigt das Installationsscript an.<br />
[[File:composer_expertenmodus.png|center]]<br><br><br />
<br />
===Abhängigkeiten===<br />
Bei angecklickter Checkbox werden die Abhängigkeiten zu den entsprechenden Erweiterungen angezeigt.<br />
[[File:composer_abhaengigkeiten.png|center]]<br><br><br />
<br />
===Erweiterungs Suche===<br />
Umfangreiche Suche von Erweiterungen.<br />
<br />
=Erweiterungs Katalog (Übersicht)=<br />
Eine mögliche Übersicht von Erweiterungen (Packages from contao-community-alliance)<br />
https://packagist.org/packages/contao-community-alliance/<br />
<br />
=Troubleshooting=<br />
<br />
== XAMPP == <br />
<br />
=== Unable to find the socket transport "ssl" ===<br />
<br />
In einem Standard XAMPP kann es zu folgender Fehlermeldung kommen:<br />
<br />
<source>Fatal error: Uncaught exception Composer\Downloader\TransportException with message The "http://packagist.org/search.json?q=calendar" file could not be downloaded: failed to open stream: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? thrown in phar://htdocs/contao/composer/composer.phar/src/Composer/Util/RemoteFilesystem.php on line 216 </source><br />
<br />
In XAMPP ist das OpenSSL Modul standardmäßig deaktiviert, man kann es durch entfernen des Semikolon in der php.ini einfach aktivieren:<br />
<br />
<source lang="ini">extension=php_openssl.dll</source></div>Trilhttps://de.contaowiki.org/Composer_ClientComposer Client2014-06-21T16:47:22Z<p>Tril: Inhalt in Composer/Client eingearbeitet.</p>
<hr />
<div>#WEITERLEITUNG [[Composer/Client]]</div>Trilhttps://de.contaowiki.org/Composer/ClientComposer/Client2014-06-21T16:46:42Z<p>Tril: Tril verschob die Seite Composer nach Composer/Client: Restrukturierung.</p>
<hr />
<div>{{stub}}<br />
[[Category:Admin HOWTOS]]<br />
[[Category:Installation und Updates]]<br />
<br />
=Composer=<br />
Auf gut deutsch = Komponist.<br />
Er gibt den Ton an in einer Contao Installation und ist als Ersatz für die Erweiterungs-Verwaltung gedacht. Der Composer wird von der CCA (Contao-Community-Alliance) betreut. <br />
<br />
Hier findest Du mehr Infos: http://c-c-a.org/projekte<br />
<br />
==Installation==<br />
Um ein reibungsloses Funktionieren zu gewährleisten, sollten Anwender die Stable-Version verwenden. Dazu die Erweiterungsverwaltung aufrufen und nach Composer suchen. Vor der Installation dann die aktuelle Stable-Version auswählen und mit der Installation fortfahren.<br />
<br />
Beim ersten Aufruf des Composers (der sich unter dem Menüpunkt "Paketverwaltung" findet) wird man aufgefordert, den Migrationsprozess zu starten. Nach der Installation sieht es erstmal so aus (Contao 3.2.5).<br />
<br />
===Übersicht===<br />
Im linken Backendmenü ersetzt die Paketverwaltung die Erweiterungsverwaltung und den Erweiterungskatalog. Das Sicherheitsschloss dient dazu Erweiterungen festzupinnen und damit vor der Aktualisierung zu schützen. Dieses Schloss sollte aber nicht für Composer selbst genutzt werden, da dadurch wichtige Aktualisierungen nicht mehr durchgeführt werden können.<br />
[[File:Composer_uebersicht.png|center]]<br><br><br />
<br />
===Einstellungen===<br />
# Rückkehr zur normalen Erweiterungsverwaltung.<br />
# Composer-Cache leeren<br />
# Einschalten des Expertenmodus<br />
[[File:Composer_einstellungen.png|center]]<br><br><br />
<br />
===Expertenmodus===<br />
Detailansicht im Expertenmodus. Zeigt das Installationsscript an.<br />
[[File:composer_expertenmodus.png|center]]<br><br><br />
<br />
===Abhängigkeiten===<br />
Bei angecklickter Checkbox werden die Abhängigkeiten zu den entsprechenden Erweiterungen angezeigt.<br />
[[File:composer_abhaengigkeiten.png|center]]<br><br><br />
<br />
===Erweiterungs Suche===<br />
Umfangreiche Suche von Erweiterungen.<br />
<br />
=Erweiterungs Katalog (Übersicht)=<br />
Eine mögliche Übersicht von Erweiterungen (Packages from contao-community-alliance)<br />
https://packagist.org/packages/contao-community-alliance/</div>Trilhttps://de.contaowiki.org/ComposerComposer2014-06-21T16:46:42Z<p>Tril: Tril verschob die Seite Composer nach Composer/Client: Restrukturierung.</p>
<hr />
<div>#WEITERLEITUNG [[Composer/Client]]</div>Trilhttps://de.contaowiki.org/XNavigationXNavigation2014-06-11T13:52:12Z<p>Tril: /* Beschreibung */</p>
<hr />
<div>[[en:xNavigation]]<br />
[[Kategorie:Extensions]]<br />
[[Kategorie:Extensions/Inhaltselemente]]<br />
[[Kategorie:Extensions/Module]]<br />
<br />
xNavigation steht für ''e<strong>x</strong>treme e<strong>x</strong>tendable and fle<strong>x</strong>ible navigation'' und stellt eine leicht erweiterbare Navigation zur Verfügung, die nicht nur die Seitenstruktur, sondern auch Artikel, Inhaltselemente, News, Events und mehr abbilden kann.<br />
<br />
== Pakete ==<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation<br />
}}<br />
<br />
Das Hauptpaket stellt das Framework, die Verwaltung von Bedingungen, Providern und Menüs, sowie die Module/Inhaltselemente zur Verfügung.<br />
<br />
{{Achtung|Das Hauptpaket alleine liefert '''keine Provider''' mit. Verwenden Sie einen der folgenden Provider um Menüpunkte erzeugen zu können!}}<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-page<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-page<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-page<br />
}}<br />
<br />
Das ''Page'' Paket stellt Provider für die Seitenstruktur zur Verfügung.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-article<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-article<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-article<br />
}}<br />
<br />
Das ''Article'' Paket stellt Provider für Artikel zur Verfügung. Damit lassen sich die Artikel von Seiten in der Navigation anzeigen.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-content<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-content<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-content<br />
}}<br />
<br />
Das ''Content'' Paket stellt Provider für Inhaltselemente zur Verfügung. Damit lassen sich die Inhaltselemente von Artikeln in der Navigation anzeigen.<br />
<br />
== Beschreibung ==<br />
<br />
{{stub}}<br />
<br />
Mit xNavigation lassen sich Navigationen und Sitemaps erzeugen. Eigentlich liefert Contao dafür bereits ein Modul, dieses lässt sich aber nicht beliebig erweitern.<br />
xNavigation ist nicht die einzige Erweiterung, die sich mit dem Problem beschäftigt. Alternativ gibt es bspw. die [[Backboneit navigation]], die jedoch etwas weniger abstrakt aufgebaut ist.<br />
<br />
xNavigation zeichnet sich durch folgende Funktionalitäten aus:<br />
<br />
* Aufbau der Navigation in einem Item-Tree<br />
** Intern wird mit einem Item-Tree gearbeitet. Dieser basiert auf der [https://github.com/bit3/php-flexi-tree bit3/php-flexi-tree] Bibliothek.<br />
* Unterstützung von Events<br />
** Intern werden zur Kommunikation und zum Aufbau Events verwendet.<br />
* Lazy-Loading des Item-Tree's<br />
** Anstatt alle Items in einem Zug zu laden, werden die Items sukzessiv bei Bedarf geladen. Die dadurch entstehende "Entzerrung" sorgt für eine höhere Performance durch bessere Verteilung der IO/Datenbank Last und sie verhindert das erzeugen unnötiger Items.<br />
* Individualisierbare Bedingungen<br />
** Für gewöhnlich definiert die Navigationserweiterung selbst wann Einträge angezeigt werden sollen und wann nicht. Bei xNavigation geschieht dies durch ein Set von Bedingungen, das man selbst aufbauen '''muss'''. Dadurch erreicht man eine nie dagewesene Flexibilität. Einfach mal einen Teilbaum ausblenden? Kein Problem, mit einer eigenen Bedingung die sich bequem über das Backend konfigurieren lässt überhaupt kein Problem.<br />
* Flexible Provider<br />
** Die Einträge und deren Detailinformationen werden von sogenannten Providern geliefert. Welche Provider in welchem Menü verwendet werden kann frei bestimmt werden, damit ist es sehr einfach festzulegen, welche Einträge in welchem Menü überhaupt angezeigt werden.<br />
<br />
== Internas ==<br />
<br />
Intern arbeitet xNavigation mit der [https://github.com/bit3/php-flexi-tree bit3/php-flexi-tree] Bibliothek. Genau genommen primär mit der ''event driven'' Implementierungen.<br />
Durch die Verwendung der ''event driven'' Implementierung entsteht das ''lazy loading''. Die ''event driven'' und die statischen (normalen) Items können aber auch beliebig kombiniert werden.<br />
Der Nachteil dieser Technik ist allerdings, dass der ganze Item-Tree nicht mehr stateless ist, was aber für den Einsatz in Contao vertretbar ist.<br />
<br />
Beim erzeugen des Item-Tree's wird ein eigener EventDispatcher verwendet. Das ist notwendig, weil es sonst unmöglich ist, Provider einem Menü zuzuordnen. D.h. es ist nicht möglich, über globale Events auf die Generierung des Item-Tree's einzugreifen. <br />
<br />
== Anpassen ==<br />
<br />
== Alte Versionen ==<br />
<br />
=== xNavigation 1.5 ===<br />
<br />
{{Hinweis|Die Erweiterung wurde für Version 2 vollständig überarbeitet und neu geschrieben.}}<br />
<br />
Seit Version 1.5.0 ist das Modul xNavigation modular aufgebaut. Die Integration der Inhaltsnavigation und Newsarchiv-Navigation wurde extrahiert und wird über externe Module bereit gestellt.<br />
{{Achtung|Benutzer der xNavigation müssen beim Update beachten, dass die Integration der Inhaltsnavigation und Newsarchiv-Navigation entfernt wurde. Wer diese Funktion benutzt, sollte mit dem Update warten, bis die dafür erforderlichen Module bereitgestellt werden.}}<br />
<br />
Das modulare Konzept, erlaubt nun eigene Menüpunkte auf einfache Art und Weise zur Verfügung zu stellen. Details hierzu sind dem [http://dev.infinitysoft.de/projects/xnavigation/wiki/Wiki Handbuch] zu entnehmen.<br />
<br />
=== xNavigation 1.0 ===<br />
<br />
Eine Detaillierte Beschreibung findet sich hier [http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation Modulvorstellung in der Contao Community].<br />
<br />
=== Modulkonfiguration ===<br />
<br />
[[Datei:Xnavigation_be_modul.png|Modulkonfiguration]]<br />
<br />
=== Seitenkonfiguration - Artikel ===<br />
<br />
[[Datei:Xnavigation_be_page_article.png|Seitenkonfiguration - Artikel]]<br />
<br />
=== Seitenkonfiguration - News ===<br />
<br />
[[Datei:Xnavigation_be_page_news.png|Seitenkonfiguration - News]]<br />
<br />
=== Seitenkonfiguration - Sichtbarkeit ===<br />
<br />
[[Datei:Xnavigation_be_page_visibility.png|Seitenkonfiguration - Sichtbarkeit]]<br />
<br />
=== FE Beispiel ===<br />
<br />
[[Datei:Xnavigation_fe_example.png|FE Beispiel]]</div>Trilhttps://de.contaowiki.org/XNavigationXNavigation2014-06-11T12:29:11Z<p>Tril: /* Beschreibung */</p>
<hr />
<div>[[en:xNavigation]]<br />
[[Kategorie:Extensions]]<br />
[[Kategorie:Extensions/Inhaltselemente]]<br />
[[Kategorie:Extensions/Module]]<br />
<br />
xNavigation steht für ''e<strong>x</strong>treme e<strong>x</strong>tendable and fle<strong>x</strong>ible navigation'' und stellt eine leicht erweiterbare Navigation zur Verfügung, die nicht nur die Seitenstruktur, sondern auch Artikel, Inhaltselemente, News, Events und mehr abbilden kann.<br />
<br />
== Pakete ==<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation<br />
}}<br />
<br />
Das Hauptpaket stellt das Framework, die Verwaltung von Bedingungen, Providern und Menüs, sowie die Module/Inhaltselemente zur Verfügung.<br />
<br />
{{Achtung|Das Hauptpaket alleine liefert '''keine Provider''' mit. Verwenden Sie einen der folgenden Provider um Menüpunkte erzeugen zu können!}}<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-page<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-page<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-page<br />
}}<br />
<br />
Das ''Page'' Paket stellt Provider für die Seitenstruktur zur Verfügung.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-article<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-article<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-article<br />
}}<br />
<br />
Das ''Article'' Paket stellt Provider für Artikel zur Verfügung. Damit lassen sich die Artikel von Seiten in der Navigation anzeigen.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-content<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-content<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-content<br />
}}<br />
<br />
Das ''Content'' Paket stellt Provider für Inhaltselemente zur Verfügung. Damit lassen sich die Inhaltselemente von Artikeln in der Navigation anzeigen.<br />
<br />
== Beschreibung ==<br />
<br />
{{stub}}<br />
<br />
Mit xNavigation lassen sich Navigationen und Sitemaps erzeugen. Eigentlich liefert Contao dafür bereits ein Modul, dieses lässt sich aber nicht beliebig erweitern.<br />
xNavigation ist nicht die einzige Erweiterung, die sich mit dem Problem beschäftigt. Alternativ gibt es bspw. die [[Backboneit navigation]], die jedoch etwas weniger abstrakt aufgebaut ist.<br />
<br />
xNavigation zeichnet sich durch folgende Funktionalitäten aus:<br />
<br />
* Aufbau der Navigation in einem Item-Tree<br />
** Intern wird mit einem Item-Tree gearbeitet. Dieser basiert auf der [https://github.com/bit3/php-flexi-tree bit3/php-flexi-tree] Bibliothek.<br />
* Unterstützung von Events<br />
** Intern werden zur Kommunikation und zum Aufbau Events verwendet.<br />
* Lazy-Loading des Item-Tree's<br />
** Anstatt alle Items in einem Zug zu laden, werden die Items sukzessiv bei Bedarf geladen. Die dadurch entstehende "Entzerrung" sorgt für eine höhere Performance durch bessere Verteilung der IO/Datenbank Last und sie verhindert das erzeugen unnötiger Items.<br />
* Individualisierbare Bedingungen<br />
** Für gewöhnlich definiert die Navigationserweiterung selbst wann Einträge angezeigt werden sollen und wann nicht. Bei xNavigation geschieht dies durch ein Set von Bedingungen, das man selbst aufbauen '''muss'''. Dadurch erreicht man eine nie dagewesene Flexibilität. Einfach mal einen Teilbaum ausblenden? Kein Problem, mit einer eigenen Bedingung die sich bequem über das Backend konfigurieren lässt überhaupt kein Problem.<br />
* Flexible Provider<br />
** Die Einträge und deren Detailinformationen werden von sogenannten Providern geliefert. Welche Provider in welchem Menü verwendet werden kann frei bestimmt werden, damit ist es sehr einfach festzulegen, welche Einträge in welchem Menü überhaupt angezeigt werden.<br />
<br />
== Alte Versionen ==<br />
<br />
=== xNavigation 1.5 ===<br />
<br />
{{Hinweis|Die Erweiterung wurde für Version 2 vollständig überarbeitet und neu geschrieben.}}<br />
<br />
Seit Version 1.5.0 ist das Modul xNavigation modular aufgebaut. Die Integration der Inhaltsnavigation und Newsarchiv-Navigation wurde extrahiert und wird über externe Module bereit gestellt.<br />
{{Achtung|Benutzer der xNavigation müssen beim Update beachten, dass die Integration der Inhaltsnavigation und Newsarchiv-Navigation entfernt wurde. Wer diese Funktion benutzt, sollte mit dem Update warten, bis die dafür erforderlichen Module bereitgestellt werden.}}<br />
<br />
Das modulare Konzept, erlaubt nun eigene Menüpunkte auf einfache Art und Weise zur Verfügung zu stellen. Details hierzu sind dem [http://dev.infinitysoft.de/projects/xnavigation/wiki/Wiki Handbuch] zu entnehmen.<br />
<br />
=== xNavigation 1.0 ===<br />
<br />
Eine Detaillierte Beschreibung findet sich hier [http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation Modulvorstellung in der Contao Community].<br />
<br />
=== Modulkonfiguration ===<br />
<br />
[[Datei:Xnavigation_be_modul.png|Modulkonfiguration]]<br />
<br />
=== Seitenkonfiguration - Artikel ===<br />
<br />
[[Datei:Xnavigation_be_page_article.png|Seitenkonfiguration - Artikel]]<br />
<br />
=== Seitenkonfiguration - News ===<br />
<br />
[[Datei:Xnavigation_be_page_news.png|Seitenkonfiguration - News]]<br />
<br />
=== Seitenkonfiguration - Sichtbarkeit ===<br />
<br />
[[Datei:Xnavigation_be_page_visibility.png|Seitenkonfiguration - Sichtbarkeit]]<br />
<br />
=== FE Beispiel ===<br />
<br />
[[Datei:Xnavigation_fe_example.png|FE Beispiel]]</div>Trilhttps://de.contaowiki.org/XNavigationXNavigation2014-06-11T12:28:33Z<p>Tril: /* Beschreibung */</p>
<hr />
<div>[[en:xNavigation]]<br />
[[Kategorie:Extensions]]<br />
[[Kategorie:Extensions/Inhaltselemente]]<br />
[[Kategorie:Extensions/Module]]<br />
<br />
xNavigation steht für ''e<strong>x</strong>treme e<strong>x</strong>tendable and fle<strong>x</strong>ible navigation'' und stellt eine leicht erweiterbare Navigation zur Verfügung, die nicht nur die Seitenstruktur, sondern auch Artikel, Inhaltselemente, News, Events und mehr abbilden kann.<br />
<br />
== Pakete ==<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation<br />
}}<br />
<br />
Das Hauptpaket stellt das Framework, die Verwaltung von Bedingungen, Providern und Menüs, sowie die Module/Inhaltselemente zur Verfügung.<br />
<br />
{{Achtung|Das Hauptpaket alleine liefert '''keine Provider''' mit. Verwenden Sie einen der folgenden Provider um Menüpunkte erzeugen zu können!}}<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-page<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-page<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-page<br />
}}<br />
<br />
Das ''Page'' Paket stellt Provider für die Seitenstruktur zur Verfügung.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-article<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-article<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-article<br />
}}<br />
<br />
Das ''Article'' Paket stellt Provider für Artikel zur Verfügung. Damit lassen sich die Artikel von Seiten in der Navigation anzeigen.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-content<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-content<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-content<br />
}}<br />
<br />
Das ''Content'' Paket stellt Provider für Inhaltselemente zur Verfügung. Damit lassen sich die Inhaltselemente von Artikeln in der Navigation anzeigen.<br />
<br />
== Beschreibung ==<br />
<br />
{{stub}}<br />
<br />
Mit xNavigation lassen sich Navigationen und Sitemaps erzeugen. Eigentlich liefert Contao dafür bereits ein Modul, dieses lässt sich aber nicht beliebig erweitern.<br />
xNavigation ist nicht die einzige Erweiterung, die sich mit dem Problem beschäftigt. Alternativ gibt es bspw. die [[Backboneit navigation]], die jedoch etwas weniger abstrakt aufgebaut ist.<br />
<br />
xNavigation zeichnet sich durch folgende Funktionalitäten aus:<br />
<br />
* Aufbau der Navigation in einem Item-Tree<br />
** Intern wird mit einem Item-Tree gearbeitet. Dieser basiert auf der [[bit3/php-flexi-tree https://github.com/bit3/php-flexi-tree]] Bibliothek.<br />
* Unterstützung von Events<br />
** Intern werden zur Kommunikation und zum Aufbau Events verwendet.<br />
* Lazy-Loading des Item-Tree's<br />
** Anstatt alle Items in einem Zug zu laden, werden die Items sukzessiv bei Bedarf geladen. Die dadurch entstehende "Entzerrung" sorgt für eine höhere Performance durch bessere Verteilung der IO/Datenbank Last und sie verhindert das erzeugen unnötiger Items.<br />
* Individualisierbare Bedingungen<br />
** Für gewöhnlich definiert die Navigationserweiterung selbst wann Einträge angezeigt werden sollen und wann nicht. Bei xNavigation geschieht dies durch ein Set von Bedingungen, das man selbst aufbauen '''muss'''. Dadurch erreicht man eine nie dagewesene Flexibilität. Einfach mal einen Teilbaum ausblenden? Kein Problem, mit einer eigenen Bedingung die sich bequem über das Backend konfigurieren lässt überhaupt kein Problem.<br />
* Flexible Provider<br />
** Die Einträge und deren Detailinformationen werden von sogenannten Providern geliefert. Welche Provider in welchem Menü verwendet werden kann frei bestimmt werden, damit ist es sehr einfach festzulegen, welche Einträge in welchem Menü überhaupt angezeigt werden.<br />
<br />
== Alte Versionen ==<br />
<br />
=== xNavigation 1.5 ===<br />
<br />
{{Hinweis|Die Erweiterung wurde für Version 2 vollständig überarbeitet und neu geschrieben.}}<br />
<br />
Seit Version 1.5.0 ist das Modul xNavigation modular aufgebaut. Die Integration der Inhaltsnavigation und Newsarchiv-Navigation wurde extrahiert und wird über externe Module bereit gestellt.<br />
{{Achtung|Benutzer der xNavigation müssen beim Update beachten, dass die Integration der Inhaltsnavigation und Newsarchiv-Navigation entfernt wurde. Wer diese Funktion benutzt, sollte mit dem Update warten, bis die dafür erforderlichen Module bereitgestellt werden.}}<br />
<br />
Das modulare Konzept, erlaubt nun eigene Menüpunkte auf einfache Art und Weise zur Verfügung zu stellen. Details hierzu sind dem [http://dev.infinitysoft.de/projects/xnavigation/wiki/Wiki Handbuch] zu entnehmen.<br />
<br />
=== xNavigation 1.0 ===<br />
<br />
Eine Detaillierte Beschreibung findet sich hier [http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation Modulvorstellung in der Contao Community].<br />
<br />
=== Modulkonfiguration ===<br />
<br />
[[Datei:Xnavigation_be_modul.png|Modulkonfiguration]]<br />
<br />
=== Seitenkonfiguration - Artikel ===<br />
<br />
[[Datei:Xnavigation_be_page_article.png|Seitenkonfiguration - Artikel]]<br />
<br />
=== Seitenkonfiguration - News ===<br />
<br />
[[Datei:Xnavigation_be_page_news.png|Seitenkonfiguration - News]]<br />
<br />
=== Seitenkonfiguration - Sichtbarkeit ===<br />
<br />
[[Datei:Xnavigation_be_page_visibility.png|Seitenkonfiguration - Sichtbarkeit]]<br />
<br />
=== FE Beispiel ===<br />
<br />
[[Datei:Xnavigation_fe_example.png|FE Beispiel]]</div>Trilhttps://de.contaowiki.org/XNavigationXNavigation2014-06-11T11:29:17Z<p>Tril: /* Alte Versionen */</p>
<hr />
<div>[[en:xNavigation]]<br />
[[Kategorie:Extensions]]<br />
[[Kategorie:Extensions/Inhaltselemente]]<br />
[[Kategorie:Extensions/Module]]<br />
<br />
xNavigation steht für ''e<strong>x</strong>treme e<strong>x</strong>tendable and fle<strong>x</strong>ible navigation'' und stellt eine leicht erweiterbare Navigation zur Verfügung, die nicht nur die Seitenstruktur, sondern auch Artikel, Inhaltselemente, News, Events und mehr abbilden kann.<br />
<br />
== Pakete ==<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation<br />
}}<br />
<br />
Das Hauptpaket stellt das Framework, die Verwaltung von Bedingungen, Providern und Menüs, sowie die Module/Inhaltselemente zur Verfügung.<br />
<br />
{{Achtung|Das Hauptpaket alleine liefert '''keine Provider''' mit. Verwenden Sie einen der folgenden Provider um Menüpunkte erzeugen zu können!}}<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-page<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-page<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-page<br />
}}<br />
<br />
Das ''Page'' Paket stellt Provider für die Seitenstruktur zur Verfügung.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-article<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-article<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-article<br />
}}<br />
<br />
Das ''Article'' Paket stellt Provider für Artikel zur Verfügung. Damit lassen sich die Artikel von Seiten in der Navigation anzeigen.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-content<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-content<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-content<br />
}}<br />
<br />
Das ''Content'' Paket stellt Provider für Inhaltselemente zur Verfügung. Damit lassen sich die Inhaltselemente von Artikeln in der Navigation anzeigen.<br />
<br />
== Beschreibung ==<br />
<br />
<br />
<br />
== Alte Versionen ==<br />
<br />
=== xNavigation 1.5 ===<br />
<br />
{{Hinweis|Die Erweiterung wurde für Version 2 vollständig überarbeitet und neu geschrieben.}}<br />
<br />
Seit Version 1.5.0 ist das Modul xNavigation modular aufgebaut. Die Integration der Inhaltsnavigation und Newsarchiv-Navigation wurde extrahiert und wird über externe Module bereit gestellt.<br />
{{Achtung|Benutzer der xNavigation müssen beim Update beachten, dass die Integration der Inhaltsnavigation und Newsarchiv-Navigation entfernt wurde. Wer diese Funktion benutzt, sollte mit dem Update warten, bis die dafür erforderlichen Module bereitgestellt werden.}}<br />
<br />
Das modulare Konzept, erlaubt nun eigene Menüpunkte auf einfache Art und Weise zur Verfügung zu stellen. Details hierzu sind dem [http://dev.infinitysoft.de/projects/xnavigation/wiki/Wiki Handbuch] zu entnehmen.<br />
<br />
=== xNavigation 1.0 ===<br />
<br />
Eine Detaillierte Beschreibung findet sich hier [http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation Modulvorstellung in der Contao Community].<br />
<br />
=== Modulkonfiguration ===<br />
<br />
[[Datei:Xnavigation_be_modul.png|Modulkonfiguration]]<br />
<br />
=== Seitenkonfiguration - Artikel ===<br />
<br />
[[Datei:Xnavigation_be_page_article.png|Seitenkonfiguration - Artikel]]<br />
<br />
=== Seitenkonfiguration - News ===<br />
<br />
[[Datei:Xnavigation_be_page_news.png|Seitenkonfiguration - News]]<br />
<br />
=== Seitenkonfiguration - Sichtbarkeit ===<br />
<br />
[[Datei:Xnavigation_be_page_visibility.png|Seitenkonfiguration - Sichtbarkeit]]<br />
<br />
=== FE Beispiel ===<br />
<br />
[[Datei:Xnavigation_fe_example.png|FE Beispiel]]</div>Trilhttps://de.contaowiki.org/XNavigationXNavigation2014-06-09T12:03:05Z<p>Tril: /* Pakete */</p>
<hr />
<div>[[en:xNavigation]]<br />
[[Kategorie:Extensions]]<br />
[[Kategorie:Extensions/Inhaltselemente]]<br />
[[Kategorie:Extensions/Module]]<br />
<br />
xNavigation steht für ''e<strong>x</strong>treme e<strong>x</strong>tendable and fle<strong>x</strong>ible navigation'' und stellt eine leicht erweiterbare Navigation zur Verfügung, die nicht nur die Seitenstruktur, sondern auch Artikel, Inhaltselemente, News, Events und mehr abbilden kann.<br />
<br />
== Pakete ==<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation<br />
}}<br />
<br />
Das Hauptpaket stellt das Framework, die Verwaltung von Bedingungen, Providern und Menüs, sowie die Module/Inhaltselemente zur Verfügung.<br />
<br />
{{Achtung|Das Hauptpaket alleine liefert '''keine Provider''' mit. Verwenden Sie einen der folgenden Provider um Menüpunkte erzeugen zu können!}}<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-page<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-page<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-page<br />
}}<br />
<br />
Das ''Page'' Paket stellt Provider für die Seitenstruktur zur Verfügung.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-article<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-article<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-article<br />
}}<br />
<br />
Das ''Article'' Paket stellt Provider für Artikel zur Verfügung. Damit lassen sich die Artikel von Seiten in der Navigation anzeigen.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-content<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-content<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-content<br />
}}<br />
<br />
Das ''Content'' Paket stellt Provider für Inhaltselemente zur Verfügung. Damit lassen sich die Inhaltselemente von Artikeln in der Navigation anzeigen.<br />
<br />
== Beschreibung ==<br />
<br />
<br />
<br />
== Alte Versionen ==<br />
<br />
=== xNavigation 1.5 ===<br />
<br />
Seit Version 1.5.0 ist das Modul xNavigation modular aufgebaut. Die Integration der Inhaltsnavigation und Newsarchiv-Navigation wurde extrahiert und wird über externe Module bereit gestellt.<br />
{{Achtung|Benutzer der xNavigation müssen beim Update beachten, dass die Integration der Inhaltsnavigation und Newsarchiv-Navigation entfernt wurde. Wer diese Funktion benutzt, sollte mit dem Update warten, bis die dafür erforderlichen Module bereitgestellt werden.}}<br />
<br />
Das modulare Konzept, erlaubt nun eigene Menüpunkte auf einfache Art und Weise zur Verfügung zu stellen. Details hierzu sind dem [http://dev.infinitysoft.de/projects/xnavigation/wiki/Wiki Handbuch] zu entnehmen.<br />
<br />
=== xNavigation 1.0 ===<br />
<br />
Eine Detaillierte Beschreibung findet sich hier [http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation Modulvorstellung in der Contao Community].<br />
<br />
=== Modulkonfiguration ===<br />
<br />
[[Datei:Xnavigation_be_modul.png|Modulkonfiguration]]<br />
<br />
=== Seitenkonfiguration - Artikel ===<br />
<br />
[[Datei:Xnavigation_be_page_article.png|Seitenkonfiguration - Artikel]]<br />
<br />
=== Seitenkonfiguration - News ===<br />
<br />
[[Datei:Xnavigation_be_page_news.png|Seitenkonfiguration - News]]<br />
<br />
=== Seitenkonfiguration - Sichtbarkeit ===<br />
<br />
[[Datei:Xnavigation_be_page_visibility.png|Seitenkonfiguration - Sichtbarkeit]]<br />
<br />
=== FE Beispiel ===<br />
<br />
[[Datei:Xnavigation_fe_example.png|FE Beispiel]]</div>Trilhttps://de.contaowiki.org/XNavigationXNavigation2014-06-09T12:02:24Z<p>Tril: </p>
<hr />
<div>[[en:xNavigation]]<br />
[[Kategorie:Extensions]]<br />
[[Kategorie:Extensions/Inhaltselemente]]<br />
[[Kategorie:Extensions/Module]]<br />
<br />
xNavigation steht für ''e<strong>x</strong>treme e<strong>x</strong>tendable and fle<strong>x</strong>ible navigation'' und stellt eine leicht erweiterbare Navigation zur Verfügung, die nicht nur die Seitenstruktur, sondern auch Artikel, Inhaltselemente, News, Events und mehr abbilden kann.<br />
<br />
== Pakete ==<br />
<br />
Das Hauptpaket stellt das Framework, die Verwaltung von Bedingungen, Providern und Menüs, sowie die Module/Inhaltselemente zur Verfügung.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation<br />
}}<br />
<br />
{{Achtung|Das Hauptpaket alleine liefert '''keine Provider''' mit. Verwenden Sie einen der folgenden Provider um Menüpunkte erzeugen zu können!}}<br />
<br />
Das ''Page'' Paket stellt Provider für die Seitenstruktur zur Verfügung.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-page<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-page<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-page<br />
}}<br />
<br />
Das ''Article'' Paket stellt Provider für Artikel zur Verfügung. Damit lassen sich die Artikel von Seiten in der Navigation anzeigen.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-article<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-article<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-article<br />
}}<br />
<br />
Das ''Content'' Paket stellt Provider für Inhaltselemente zur Verfügung. Damit lassen sich die Inhaltselemente von Artikeln in der Navigation anzeigen.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-content<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-content<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-content<br />
}}<br />
<br />
== Beschreibung ==<br />
<br />
<br />
<br />
== Alte Versionen ==<br />
<br />
=== xNavigation 1.5 ===<br />
<br />
Seit Version 1.5.0 ist das Modul xNavigation modular aufgebaut. Die Integration der Inhaltsnavigation und Newsarchiv-Navigation wurde extrahiert und wird über externe Module bereit gestellt.<br />
{{Achtung|Benutzer der xNavigation müssen beim Update beachten, dass die Integration der Inhaltsnavigation und Newsarchiv-Navigation entfernt wurde. Wer diese Funktion benutzt, sollte mit dem Update warten, bis die dafür erforderlichen Module bereitgestellt werden.}}<br />
<br />
Das modulare Konzept, erlaubt nun eigene Menüpunkte auf einfache Art und Weise zur Verfügung zu stellen. Details hierzu sind dem [http://dev.infinitysoft.de/projects/xnavigation/wiki/Wiki Handbuch] zu entnehmen.<br />
<br />
=== xNavigation 1.0 ===<br />
<br />
Eine Detaillierte Beschreibung findet sich hier [http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation Modulvorstellung in der Contao Community].<br />
<br />
=== Modulkonfiguration ===<br />
<br />
[[Datei:Xnavigation_be_modul.png|Modulkonfiguration]]<br />
<br />
=== Seitenkonfiguration - Artikel ===<br />
<br />
[[Datei:Xnavigation_be_page_article.png|Seitenkonfiguration - Artikel]]<br />
<br />
=== Seitenkonfiguration - News ===<br />
<br />
[[Datei:Xnavigation_be_page_news.png|Seitenkonfiguration - News]]<br />
<br />
=== Seitenkonfiguration - Sichtbarkeit ===<br />
<br />
[[Datei:Xnavigation_be_page_visibility.png|Seitenkonfiguration - Sichtbarkeit]]<br />
<br />
=== FE Beispiel ===<br />
<br />
[[Datei:Xnavigation_fe_example.png|FE Beispiel]]</div>Trilhttps://de.contaowiki.org/XNavigationXNavigation2014-06-09T12:01:44Z<p>Tril: </p>
<hr />
<div>[[en:xNavigation]]<br />
[[Kategorie:Extensions]]<br />
[[Kategorie:Extensions/Inhaltselemente]]<br />
[[Kategorie:Extensions/Module]]<br />
<br />
xNavigation steht für ''e<strong>x</strong>treme e<strong>x</strong>tendable and fle<strong>x</strong>ible navigation'' und stellt eine leicht erweiterbare Navigation zur Verfügung, die nicht nur die Seitenstruktur, sondern auch Artikel, Inhaltselemente, News, Events und mehr abbilden kann.<br />
<br />
== Pakete ==<br />
<br />
Das Hauptpaket stellt das Framework, die Verwaltung von Bedingungen, Providern und Menüs, sowie die Module/Inhaltselemente zur Verfügung.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation<br />
}}<br />
<br />
{{Warnung|Das Hauptpaket alleine liefert '''keine Provider''' mit. Verwenden Sie einen der folgenden Provider um Menüpunkte erzeugen zu können!}}<br />
<br />
Das ''Page'' Paket stellt Provider für die Seitenstruktur zur Verfügung.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-page<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-page<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-page<br />
}}<br />
<br />
Das ''Article'' Paket stellt Provider für Artikel zur Verfügung. Damit lassen sich die Artikel von Seiten in der Navigation anzeigen.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-article<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-article<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-article<br />
}}<br />
<br />
Das ''Content'' Paket stellt Provider für Inhaltselemente zur Verfügung. Damit lassen sich die Inhaltselemente von Artikeln in der Navigation anzeigen.<br />
<br />
{{ExtInfo<br />
| Name=bit3/contao-xnavigation-content<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-xnavigation-content<br />
| TrackerLink=https://github.com/bit3/contao-xnavigation-content<br />
}}<br />
<br />
== Beschreibung ==<br />
<br />
<br />
<br />
== Alte Versionen ==<br />
<br />
=== xNavigation 1.5 ===<br />
<br />
Seit Version 1.5.0 ist das Modul xNavigation modular aufgebaut. Die Integration der Inhaltsnavigation und Newsarchiv-Navigation wurde extrahiert und wird über externe Module bereit gestellt.<br />
{{Achtung|Benutzer der xNavigation müssen beim Update beachten, dass die Integration der Inhaltsnavigation und Newsarchiv-Navigation entfernt wurde. Wer diese Funktion benutzt, sollte mit dem Update warten, bis die dafür erforderlichen Module bereitgestellt werden.}}<br />
<br />
Das modulare Konzept, erlaubt nun eigene Menüpunkte auf einfache Art und Weise zur Verfügung zu stellen. Details hierzu sind dem [http://dev.infinitysoft.de/projects/xnavigation/wiki/Wiki Handbuch] zu entnehmen.<br />
<br />
=== xNavigation 1.0 ===<br />
<br />
Eine Detaillierte Beschreibung findet sich hier [http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation Modulvorstellung in der Contao Community].<br />
<br />
=== Modulkonfiguration ===<br />
<br />
[[Datei:Xnavigation_be_modul.png|Modulkonfiguration]]<br />
<br />
=== Seitenkonfiguration - Artikel ===<br />
<br />
[[Datei:Xnavigation_be_page_article.png|Seitenkonfiguration - Artikel]]<br />
<br />
=== Seitenkonfiguration - News ===<br />
<br />
[[Datei:Xnavigation_be_page_news.png|Seitenkonfiguration - News]]<br />
<br />
=== Seitenkonfiguration - Sichtbarkeit ===<br />
<br />
[[Datei:Xnavigation_be_page_visibility.png|Seitenkonfiguration - Sichtbarkeit]]<br />
<br />
=== FE Beispiel ===<br />
<br />
[[Datei:Xnavigation_fe_example.png|FE Beispiel]]</div>Trilhttps://de.contaowiki.org/Vorlage:ExtInfoVorlage:ExtInfo2014-06-09T11:57:14Z<p>Tril: </p>
<hr />
<div><includeonly><!-- begin ExtInfo --><br />
<div class="extinfo"><br />
{| border="2" cellspacing="0" cellpadding="4" rules="all" style="margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#eeeeee; font-size:95%; empty-cells:show;"<br />
|- style="background:#303060; color:white"<br />
! colspan="2" | '''Erweiterungs-Übersicht'''<br />
|-<br />
{{ #if: {{{Name|}}} | {{tableitem|heading=Name|value={{{Name|}}}}} | {{tableempty}} }}<br />
{{ #if: {{{Dev|}}} | {{tableitem|heading=Name des Entwicklers|value={{{Dev|}}}}} | {{tableempty}} }}<br />
{{ #if: {{{DevSite|}}} | {{tableitem|heading=Entwickler Webseite|value={{{DevSite|}}}}} | {{tableempty}} }}<br />
{{ #if: {{{ExtVersion|}}} | {{tableitem|heading=Version der Erweiterung|value={{{ExtVersion|}}}}} | {{tableempty}} }}<br />
{{ #if: {{{Version|}}} | {{tableitem|heading=Kompatibilität mit Contao Version|value={{{Version|}}}}} | {{tableempty}} }}<br />
{{ #if: {{{TLVersion|}}} | {{tableitem|heading=Kompatibilität mit TYPOlight Version|value={{{TLVersion|}}}}} | {{tableempty}} }}<br />
{{ #if: {{{ERLink|}}} | {{tableitem|heading=Link zum Extension Repository|value={{#ifeq: 0 | {{#pos:{{{ERLink|}}}|http}} | [{{{ERLink|}}} Extension im ER anzeigen] | {{{ERLink|}}} }}}} | {{tableempty}} }}<br />
{{ #if: {{{DonateLink|}}} | {{tableitem|heading=Den Entwickler unterstützen|value={{#ifeq: 0 | {{#pos:{{{DonateLink|}}}|http}} | [{{{DonateLink|}}} Zur "Spenden"-Seite gehen] | {{{DonateLink|}}} }}}} | {{tableempty}} }}<br />
{{ #if: {{{TrackerLink|}}} | {{tableitem|heading=Link zum Tracker|value={{#ifeq: 0 | {{#pos:{{{TrackerLink|}}}|http}} | [{{{TrackerLink|}}} Zum Tracker gehen] | {{{TrackerLink|}}} }}}} | {{tableempty}} }}<br />
{{ #if: {{{VCSLink|}}} | {{tableitem|heading=Link zum VCS|value={{#ifeq: 0 | {{#pos:{{{VCSLink|}}}|http}} | [{{{VCSLink|}}} Zum VCS gehen] | {{{VCSLink|}}} }}}} | {{tableempty}} }}<br />
{{ #if: {{{Depending|}}} | {{tableitem|heading=Abhängig von ff. Erweiterungen|value={{{Depending|}}}}} | {{tableempty}} }}<br />
{{ #if: {{{Comment|}}} | {{tableitem|heading=Anmerkung|value={{{Comment|}}}}} | {{tableempty}} }}<br />
|}<br />
</div><br />
<!-- end ExtInfo --></includeonly><noinclude><br />
Diese Vorlage ermöglicht es, eine Kurzübersicht über die beschriebene Erweiterung zu definieren, welche einen Artikel betreffen.<br />
<pre><nowiki><br />
{{ExtInfo<br />
| Name=Name der Erweiterung / des Pakets<br />
| Dev=Name des Entwicklers<br />
| DevSite=Webseite des Entwicklers<br />
| ExtVersion=Version der in der Seite beschriebenen Version<br />
| Version=Kompatibilität mit Contao-Version<br />
| TLVersion=Kompatibilität mit TYPOlight-Version<br />
| ERLink=Link zu der Erweiterung im Extension Repository<br />
| DonateLink=Link zu der Spendenseite, um den Entwickler zu unterstützen<br />
| TrackerLink=Link zum issue tracker der Erweiterung<br />
| VCSLink=Link zum VCS (Version Control System, svn, git, ...)<br />
| Depending=Abhängigkeit von anderen Erweiterungen<br />
| Comment=spezielle Anmerkung<br />
}}<br />
</nowiki></pre><br />
<br />
Bsp:<br />
<br />
<pre><nowiki><br />
{{ExtInfo<br />
| Dev=Christian Schiffler<br />
| DevSite=http://www.cyberspectrum.de<br />
| ExtVersion=1.0.0<br />
| Version=ab 2.9<br />
| TLVersion=2.7.0 - 2.8.3<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/catalog.html<br />
| DonateLink=http://www.cyberspectrum.de/spendmegoodies.html<br />
| TrackerLink=http://contao-forge.de/projects/catalog/issues<br />
| VCSLink=http://code.google.com/p/typolight-catalog/source/checkout<br />
| Depending=[[Taxonomy]] [[backend_filterwiz]]<br />
| Comment=Demo: [http://catalogdemo.dasprojekt.org/ Catalog Demo]<br />
}}<br />
</nowiki></pre><br />
<br />
[[Category: Vorlagen]]<br />
</noinclude></div>Trilhttps://de.contaowiki.org/XNavigationXNavigation2014-06-09T11:48:06Z<p>Tril: </p>
<hr />
<div>xNavigation bietet eine erweiterte Navigation und Sitemap, die mittels Hooks leicht erweitert werden kann.<br />
{{ExtInfo<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://www.infinitysoft.de<br />
| ExtVersion=1.5.0<br />
| Version=2.9.0 - 2.9.1 (ab xNavigation 1.5)<br />
| TLVersion=2.8.0 - 2.8.3 (xNavigation 1.0)<br />
| Depending=[[ce_navigation|Content Navigation]] (nur xNavigation 1.0)<br />
| Community Link=http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/xNavigation.de.html<br />
| DonateLink=<br />
| TrackerLink=http://dev.infinitysoft.de/projects/xnavigation/issues<br />
| Comment=[http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation Modulvorstellung in der Contao Community]<br />
}}<br />
[[en:xNavigation]]<br />
[[Kategorie:Extensions]]<br />
<br />
== Beschreibung ==<br />
<br />
== Alte Versionen ==<br />
<br />
=== xNavigation 1.5 ===<br />
<br />
Seit Version 1.5.0 ist das Modul xNavigation modular aufgebaut. Die Integration der Inhaltsnavigation und Newsarchiv-Navigation wurde extrahiert und wird über externe Module bereit gestellt.<br />
{{Achtung|Benutzer der xNavigation müssen beim Update beachten, dass die Integration der Inhaltsnavigation und Newsarchiv-Navigation entfernt wurde. Wer diese Funktion benutzt, sollte mit dem Update warten, bis die dafür erforderlichen Module bereitgestellt werden.}}<br />
<br />
Das modulare Konzept, erlaubt nun eigene Menüpunkte auf einfache Art und Weise zur Verfügung zu stellen. Details hierzu sind dem [http://dev.infinitysoft.de/projects/xnavigation/wiki/Wiki Handbuch] zu entnehmen.<br />
<br />
=== xNavigation 1.0 ===<br />
<br />
Eine Detaillierte Beschreibung findet sich hier [http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation Modulvorstellung in der Contao Community].<br />
<br />
=== Modulkonfiguration ===<br />
<br />
[[Datei:Xnavigation_be_modul.png|Modulkonfiguration]]<br />
<br />
=== Seitenkonfiguration - Artikel ===<br />
<br />
[[Datei:Xnavigation_be_page_article.png|Seitenkonfiguration - Artikel]]<br />
<br />
=== Seitenkonfiguration - News ===<br />
<br />
[[Datei:Xnavigation_be_page_news.png|Seitenkonfiguration - News]]<br />
<br />
=== Seitenkonfiguration - Sichtbarkeit ===<br />
<br />
[[Datei:Xnavigation_be_page_visibility.png|Seitenkonfiguration - Sichtbarkeit]]<br />
<br />
=== FE Beispiel ===<br />
<br />
[[Datei:Xnavigation_fe_example.png|FE Beispiel]]</div>Trilhttps://de.contaowiki.org/XNavigationXNavigation2014-06-09T11:46:00Z<p>Tril: </p>
<hr />
<div>xNavigation bietet eine erweiterte Navigation und Sitemap, die mittels Hooks leicht erweitert werden kann.<br />
{{ExtInfo<br />
| Dev=Tristan Lins ([[User:tril|tril]])<br />
| DevSite=http://www.infinitysoft.de<br />
| ExtVersion=1.5.0<br />
| Version=2.9.0 - 2.9.1 (ab xNavigation 1.5)<br />
| TLVersion=2.8.0 - 2.8.3 (xNavigation 1.0)<br />
| Depending=[[ce_navigation|Content Navigation]] (nur xNavigation 1.0)<br />
| Community Link=http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/xNavigation.de.html<br />
| DonateLink=<br />
| TrackerLink=http://dev.infinitysoft.de/projects/xnavigation/issues<br />
| Comment=[http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation Modulvorstellung in der Contao Community]<br />
}}<br />
[[en:xNavigation]]<br />
[[Kategorie:Extensions]]<br />
<br />
== Beschreibung ==<br />
<br />
== Alte Versionen ==<br />
<br />
=== xNavigation 1.5 ===<br />
<br />
Seit Version 1.5.0 ist das Modul xNavigation modular aufgebaut. Die Integration der Inhaltsnavigation und Newsarchiv-Navigation wurde extrahiert und wird über externe Module bereit gestellt.<br />
{{Achtung|Benutzer der xNavigation müssen beim Update beachten, dass die Integration der Inhaltsnavigation und Newsarchiv-Navigation entfernt wurde. Wer diese Funktion benutzt, sollte mit dem Update warten, bis die dafür erforderlichen Module bereitgestellt werden.}}<br />
<br />
Das modulare Konzept, erlaubt nun eigene Menüpunkte auf einfache Art und Weise zur Verfügung zu stellen. Details hierzu sind dem [http://dev.infinitysoft.de/projects/xnavigation/wiki/Wiki Handbuch] zu entnehmen.<br />
<br />
=== xNavigation 1.0 ===<br />
<br />
Eine Detaillierte Beschreibung findet sich hier [http://www.contao-community.de/showthread.php?5967-Modulvorstellung-xNavigation-und-ce_navigation Modulvorstellung in der Contao Community].<br />
<br />
==Modulkonfiguration==<br />
[[Datei:Xnavigation_be_modul.png|Modulkonfiguration]]<br />
==Seitenkonfiguration - Artikel==<br />
[[Datei:Xnavigation_be_page_article.png|Seitenkonfiguration - Artikel]]<br />
==Seitenkonfiguration - News==<br />
[[Datei:Xnavigation_be_page_news.png|Seitenkonfiguration - News]]<br />
==Seitenkonfiguration - Sichtbarkeit==<br />
[[Datei:Xnavigation_be_page_visibility.png|Seitenkonfiguration - Sichtbarkeit]]<br />
==FE Beispiel==<br />
[[Datei:Xnavigation_fe_example.png|FE Beispiel]]</div>Trilhttps://de.contaowiki.org/Inhaltsverzeichnis_Element_(bit3/contao-toc-element)Inhaltsverzeichnis Element (bit3/contao-toc-element)2014-06-09T11:40:23Z<p>Tril: /* Anleitung */</p>
<hr />
<div>[[Category:Extensions]]<br />
[[Category:Extensions/Inhaltselemente]]<br />
<br />
Inhaltsverzeichnis über die Inhalte einer oder mehrerer Artikel.<br />
<br />
{{Hinweis|Diese Erweiterung ist der offizielle Nachfolger von der [[ce_navigation]] Erweiterung.}}<br />
<br />
{{ExtInfo<br />
| Dev=Tristan Lins<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-toc-element<br />
| TrackerLink=https://github.com/bit3/contao-toc-element<br />
}}<br />
<br />
<br />
== Beschreibung ==<br />
<br />
Inhaltsverzeichnisse sind bei längeren Texten oft vorteilhaft. Wikipedia setzt diese bspw. sehr häufig ein.<br />
<br />
<gallery><br />
Datei:TOC Element - Wikipedia Beispiel.png|Wikipedia Beispiel<br />
</gallery><br />
<br />
Dieses Element erzeugt ebenfalls ein Inhaltsverzeichnis, basierend auf den Inhaltselementen und Artikeln.<br />
<br />
== Anleitung ==<br />
<br />
Das Inhaltsverzeichnis wird auf Basis der Inhaltselemente erzeugt, die sowohl eine '''Überschrift''', als auch eine '''CSS-ID''' besitzen.<br />
<br />
<gallery><br />
Datei:TOC Element - Element bearbeiten.png|Element bearbeiten<br />
Datei:TOC Element - Überschrift und CSS-ID vergeben.png|Überschrift und CSS-ID vergeben<br />
</gallery><br />
<br />
Hat man allen Elementen die im Inhaltsverzeichnis aufgelistet werden sollen eine '''Überschrift''' und '''CSS-ID''' vergeben, kann man jetzt das Inhaltsverzeichnis anlegen.<br />
<br />
<gallery><br />
Datei:TOC Element - Element hinzufügen.png|Element hinzufügen<br />
Datei:TOC Element - Element-Typ auswählen.png|Element-Typ auswählen<br />
Datei:TOC Element - Element konfigurieren.png|Element konfigurieren<br />
Datei:TOC Element - Fronend Vorschau.png|Frontend Vorschau<br />
</gallery><br />
<br />
Es wird sofort aus den Inhaltselementen ein Inhaltsverzeichnis erzeugt. Dabei ist die hierarchische Struktur h1-h6 ausschlaggebend für die Verschachtelung.<br />
<br />
{{Hinweis|Eine unvollständige Hierarchie wird automatisch reduziert. Fehlt bspw. zwischen der h1 und h3 die h2 Ebene, wird die h3 Ebene "nach oben" geschoben.}}<br />
<br />
Wenn gewünscht, können sogar die Artikel in die Struktur eingezogen werden.<br />
<br />
<gallery><br />
Datei:TOC Element - Artikel einbeziehen.png|Artikel einbeziehen<br />
</gallery><br />
<br />
Außerdem kann bestimmt werden, bis zu welcher Ebene das Inhaltsverzeichnis überhaupt dargestellt werden soll. Dabei ist zu beachten dass die erzeugte Strukturtiefe und nicht die über h1-h6 definierte Strukturtiefe ausschlaggebend ist.<br />
<br />
Außerdem gibt es Unterschiede im Verhalten zwischen '''Minimale Ebene''' und '''Maximale Ebene'''. Während die Begrenzung der '''Maximalen Ebene''' tatsächlich die Elemente abschnidet, wird bei '''Minimale Ebene''' lediglich die Verknüpfungen ausgeblendet, die Navigationsebene <code>&lt;ul&gt;</code> bleibt aber erhalten, was viel mehr Möglichkeiten für die Gestaltung lässt.<br />
<br />
<gallery><br />
Datei:TOC Element - 1. Ebene ausblenden.png|1. Ebene ausblenden<br />
</gallery><br />
<br />
Mit nur wenig (S)CSS Code, lässt sich diese "leere" Ebene aber auch sehr einfach "ausblenden".<br />
<br />
<source lang="css"><br />
/* toc-element.scss */<br />
.ce_table-of-contents {<br />
li {<br />
list-style-type: decimal;<br />
<br />
&.hide-link {<br />
list-style-type: none;<br />
<br />
> ul {<br />
padding-left: 0;<br />
}<br />
}<br />
}<br />
}<br />
</source><br />
<br />
<gallery><br />
Datei:TOC Element - Formatiert.png|Formatiert<br />
</gallery><br />
<br />
== Anpassen ==<br />
<br />
Die Erweiterung basiert auf der [[xNavigation]] Erweiterung Version 2 und deren Templating. Für eine ausführliche Anleitung zu Anpassungen an den Templates siehe [[xNavigation#Anpassen]].</div>Trilhttps://de.contaowiki.org/Inhaltsverzeichnis_Element_(bit3/contao-toc-element)Inhaltsverzeichnis Element (bit3/contao-toc-element)2014-06-09T09:45:17Z<p>Tril: /* Beschreibung */</p>
<hr />
<div>[[Category:Extensions]]<br />
[[Category:Extensions/Inhaltselemente]]<br />
<br />
Inhaltsverzeichnis über die Inhalte einer oder mehrerer Artikel.<br />
<br />
{{Hinweis|Diese Erweiterung ist der offizielle Nachfolger von der [[ce_navigation]] Erweiterung.}}<br />
<br />
{{ExtInfo<br />
| Dev=Tristan Lins<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-toc-element<br />
| TrackerLink=https://github.com/bit3/contao-toc-element<br />
}}<br />
<br />
<br />
== Beschreibung ==<br />
<br />
Inhaltsverzeichnisse sind bei längeren Texten oft vorteilhaft. Wikipedia setzt diese bspw. sehr häufig ein.<br />
<br />
<gallery><br />
Datei:TOC Element - Wikipedia Beispiel.png|Wikipedia Beispiel<br />
</gallery><br />
<br />
Dieses Element erzeugt ebenfalls ein Inhaltsverzeichnis, basierend auf den Inhaltselementen und Artikeln.<br />
<br />
== Anleitung ==<br />
<br />
Das Inhaltsverzeichnis wird auf Basis der Inhaltselemente erzeugt, die sowohl eine '''Überschrift''', als auch eine '''CSS-ID''' besitzen.<br />
<br />
<gallery><br />
Datei:TOC Element - Element bearbeiten.png|Element bearbeiten<br />
Datei:TOC Element - Überschrift und CSS-ID vergeben.png|Überschrift und CSS-ID vergeben<br />
</gallery><br />
<br />
Hat man allen Elementen die im Inhaltsverzeichnis aufgelistet werden sollen eine '''Überschrift''' und '''CSS-ID''' vergeben, kann man jetzt das Inhaltsverzeichnis anlegen.<br />
<br />
<gallery><br />
Datei:TOC Element - Element hinzufügen.png|Element hinzufügen<br />
Datei:TOC Element - Element-Typ auswählen.png|Element-Typ auswählen<br />
Datei:TOC Element - Element konfigurieren.png|Element konfigurieren<br />
Datei:TOC Element - Fronend Vorschau.png|Frontend Vorschau<br />
</gallery><br />
<br />
Es wird sofort aus den Inhaltselementen ein Inhaltsverzeichnis erzeugt. Dabei ist die hierarchische Struktur h1-h6 ausschlaggebend für die Verschachtelung.<br />
<br />
{{Hinweis|Eine unvollständige Hierarchie wird automatisch reduziert. Fehlt bspw. zwischen der h1 und h3 die h2 Ebene, wird die h3 Ebene "nach oben" geschoben.}}<br />
<br />
Wenn gewünscht, können sogar die Artikel in die Struktur eingezogen werden.<br />
<br />
<gallery><br />
Datei:TOC Element - Artikel einbeziehen.png|Artikel einbeziehen<br />
</gallery><br />
<br />
Außerdem kann bestimmt werden, bis zu welcher Ebene das Inhaltsverzeichnis überhaupt dargestellt werden soll. Dabei ist zu beachten dass die erzeugte Strukturtiefe und nicht die über h1-h6 definierte Strukturtiefe ausschlaggebend ist.<br />
<br />
Außerdem gibt es Unterschiede im Verhalten zwischen '''Minimale Ebene''' und '''Maximale Ebene'''. Während die Begrenzung der '''Maximalen Ebene''' tatsächlich die Elemente abschnidet, wird bei '''Minimale Ebene''' lediglich die Verknüpfungen ausgeblendet, die Navigationsebene <code>&lt;ul&gt;</code> bleibt aber erhalten, was viel mehr Möglichkeiten für die Gestaltung lässt.<br />
<br />
<gallery><br />
Datei:TOC Element - 1. Ebene ausblenden.png|1. Ebene ausblenden<br />
</gallery><br />
<br />
Mit nur wenig (S)CSS Code, lässt sich diese "leere" Ebene aber auch sehr einfach "ausblenden".<br />
<br />
<source lang="css"><br />
// toc-element.scss<br />
.ce_table-of-contents {<br />
li {<br />
list-style-type: decimal;<br />
<br />
&.hide-link {<br />
list-style-type: none;<br />
<br />
> ul {<br />
padding-left: 0;<br />
}<br />
}<br />
}<br />
}<br />
</source><br />
<br />
<gallery><br />
Datei:TOC Element - Formatiert.png|Formatiert<br />
</gallery></div>Trilhttps://de.contaowiki.org/Inhaltsverzeichnis_Element_(bit3/contao-toc-element)Inhaltsverzeichnis Element (bit3/contao-toc-element)2014-06-09T09:43:51Z<p>Tril: /* Anleitung */</p>
<hr />
<div>[[Category:Extensions]]<br />
[[Category:Extensions/Inhaltselemente]]<br />
<br />
Inhaltsverzeichnis über die Inhalte einer oder mehrerer Artikel.<br />
<br />
{{Hinweis|Diese Erweiterung ist der offizielle Nachfolger von der [[ce_navigation]] Erweiterung.}}<br />
<br />
{{ExtInfo<br />
| Dev=Tristan Lins<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-toc-element<br />
| TrackerLink=https://github.com/bit3/contao-toc-element<br />
}}<br />
<br />
<br />
== Beschreibung ==<br />
<br />
Inhaltsverzeichnisse sind bei längeren Texten oft vorteilhaft. Wikipedia setzt diese bspw. sehr häufig ein.<br />
<br />
[[Datei:TOC Element - Wikipedia Beispiel.png|200px|Wikipedia Beispiel]]<br />
<br />
Dieses Element erzeugt ebenfalls ein Inhaltsverzeichnis, basierend auf den Inhaltselementen und Artikeln.<br />
<br />
== Anleitung ==<br />
<br />
Das Inhaltsverzeichnis wird auf Basis der Inhaltselemente erzeugt, die sowohl eine '''Überschrift''', als auch eine '''CSS-ID''' besitzen.<br />
<br />
<gallery><br />
Datei:TOC Element - Element bearbeiten.png|Element bearbeiten<br />
Datei:TOC Element - Überschrift und CSS-ID vergeben.png|Überschrift und CSS-ID vergeben<br />
</gallery><br />
<br />
Hat man allen Elementen die im Inhaltsverzeichnis aufgelistet werden sollen eine '''Überschrift''' und '''CSS-ID''' vergeben, kann man jetzt das Inhaltsverzeichnis anlegen.<br />
<br />
<gallery><br />
Datei:TOC Element - Element hinzufügen.png|Element hinzufügen<br />
Datei:TOC Element - Element-Typ auswählen.png|Element-Typ auswählen<br />
Datei:TOC Element - Element konfigurieren.png|Element konfigurieren<br />
Datei:TOC Element - Fronend Vorschau.png|Frontend Vorschau<br />
</gallery><br />
<br />
Es wird sofort aus den Inhaltselementen ein Inhaltsverzeichnis erzeugt. Dabei ist die hierarchische Struktur h1-h6 ausschlaggebend für die Verschachtelung.<br />
<br />
{{Hinweis|Eine unvollständige Hierarchie wird automatisch reduziert. Fehlt bspw. zwischen der h1 und h3 die h2 Ebene, wird die h3 Ebene "nach oben" geschoben.}}<br />
<br />
Wenn gewünscht, können sogar die Artikel in die Struktur eingezogen werden.<br />
<br />
<gallery><br />
Datei:TOC Element - Artikel einbeziehen.png|Artikel einbeziehen<br />
</gallery><br />
<br />
Außerdem kann bestimmt werden, bis zu welcher Ebene das Inhaltsverzeichnis überhaupt dargestellt werden soll. Dabei ist zu beachten dass die erzeugte Strukturtiefe und nicht die über h1-h6 definierte Strukturtiefe ausschlaggebend ist.<br />
<br />
Außerdem gibt es Unterschiede im Verhalten zwischen '''Minimale Ebene''' und '''Maximale Ebene'''. Während die Begrenzung der '''Maximalen Ebene''' tatsächlich die Elemente abschnidet, wird bei '''Minimale Ebene''' lediglich die Verknüpfungen ausgeblendet, die Navigationsebene <code>&lt;ul&gt;</code> bleibt aber erhalten, was viel mehr Möglichkeiten für die Gestaltung lässt.<br />
<br />
<gallery><br />
Datei:TOC Element - 1. Ebene ausblenden.png|1. Ebene ausblenden<br />
</gallery><br />
<br />
Mit nur wenig (S)CSS Code, lässt sich diese "leere" Ebene aber auch sehr einfach "ausblenden".<br />
<br />
<source lang="css"><br />
// toc-element.scss<br />
.ce_table-of-contents {<br />
li {<br />
list-style-type: decimal;<br />
<br />
&.hide-link {<br />
list-style-type: none;<br />
<br />
> ul {<br />
padding-left: 0;<br />
}<br />
}<br />
}<br />
}<br />
</source><br />
<br />
<gallery><br />
Datei:TOC Element - Formatiert.png|Formatiert<br />
</gallery></div>Trilhttps://de.contaowiki.org/Inhaltsverzeichnis_Element_(bit3/contao-toc-element)Inhaltsverzeichnis Element (bit3/contao-toc-element)2014-06-09T09:41:15Z<p>Tril: /* Anleitung */</p>
<hr />
<div>[[Category:Extensions]]<br />
[[Category:Extensions/Inhaltselemente]]<br />
<br />
Inhaltsverzeichnis über die Inhalte einer oder mehrerer Artikel.<br />
<br />
{{Hinweis|Diese Erweiterung ist der offizielle Nachfolger von der [[ce_navigation]] Erweiterung.}}<br />
<br />
{{ExtInfo<br />
| Dev=Tristan Lins<br />
| DevSite=http://bit3.de<br />
| ERLink=https://packagist.org/packages/bit3/contao-toc-element<br />
| TrackerLink=https://github.com/bit3/contao-toc-element<br />
}}<br />
<br />
<br />
== Beschreibung ==<br />
<br />
Inhaltsverzeichnisse sind bei längeren Texten oft vorteilhaft. Wikipedia setzt diese bspw. sehr häufig ein.<br />
<br />
[[Datei:TOC Element - Wikipedia Beispiel.png|200px|Wikipedia Beispiel]]<br />
<br />
Dieses Element erzeugt ebenfalls ein Inhaltsverzeichnis, basierend auf den Inhaltselementen und Artikeln.<br />
<br />
== Anleitung ==<br />
<br />
Das Inhaltsverzeichnis wird auf Basis der Inhaltselemente erzeugt, die sowohl eine '''Überschrift''', als auch eine '''CSS-ID''' besitzen.<br />
<br />
[[Datei:TOC Element - Element bearbeiten.png|200px|Element bearbeiten]]<br />
[[Datei:TOC Element - Überschrift und CSS-ID vergeben.png|200px|hochkant=0.75|Überschrift und CSS-ID vergeben]]<br />
<br />
Hat man allen Elementen die im Inhaltsverzeichnis aufgelistet werden sollen eine '''Überschrift''' und '''CSS-ID''' vergeben, kann man jetzt das Inhaltsverzeichnis anlegen.<br />
<br />
[[Datei:TOC Element - Element hinzufügen.png|200px|Element hinzufügen]]<br />
[[Datei:TOC Element - Element-Typ auswählen.png|200px|Element-Typ auswählen]]<br />
[[Datei:TOC Element - Element konfigurieren.png|200px|Element konfigurieren]]<br />
[[Datei:TOC Element - Fronend Vorschau.png|200px|Frontend Vorschau]]<br />
<br />
Es wird sofort aus den Inhaltselementen ein Inhaltsverzeichnis erzeugt. Dabei ist die hierarchische Struktur h1-h6 ausschlaggebend für die Verschachtelung.<br />
<br />
{{Hinweis|Eine unvollständige Hierarchie wird automatisch reduziert. Fehlt bspw. zwischen der h1 und h3 die h2 Ebene, wird die h3 Ebene "nach oben" geschoben.}}<br />
<br />
Wenn gewünscht, können sogar die Artikel in die Struktur eingezogen werden.<br />
<br />
[[Datei:TOC Element - Artikel einbeziehen.png|200px|Artikel einbeziehen]]<br />
<br />
Außerdem kann bestimmt werden, bis zu welcher Ebene das Inhaltsverzeichnis überhaupt dargestellt werden soll. Dabei ist zu beachten dass die erzeugte Strukturtiefe und nicht die über h1-h6 definierte Strukturtiefe ausschlaggebend ist.<br />
<br />
Außerdem gibt es Unterschiede im Verhalten zwischen '''Minimale Ebene''' und '''Maximale Ebene'''. Während die Begrenzung der '''Maximalen Ebene''' tatsächlich die Elemente abschnidet, wird bei '''Minimale Ebene''' lediglich die Verknüpfungen ausgeblendet, die Navigationsebene <code>&lt;ul&gt;</code> bleibt aber erhalten, was viel mehr Möglichkeiten für die Gestaltung lässt.<br />
<br />
[[Datei:TOC Element - 1. Ebene ausblenden.png|200px|1. Ebene ausblenden]]<br />
<br />
Mit nur wenig (S)CSS Code, lässt sich diese "leere" Ebene aber auch sehr einfach "ausblenden".<br />
<br />
<source lang="css"><br />
// toc-element.scss<br />
.ce_table-of-contents {<br />
li {<br />
list-style-type: decimal;<br />
<br />
&.hide-link {<br />
list-style-type: none;<br />
<br />
> ul {<br />
padding-left: 0;<br />
}<br />
}<br />
}<br />
}<br />
</source><br />
<br />
[[Datei:TOC Element - Formatiert.png|200px|Formatiert]]</div>Tril