<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=37.49.33.174</id>
	<title>Wikizone - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=37.49.33.174"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/37.49.33.174"/>
	<updated>2026-05-06T13:57:30Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Processwire_-_Backend_Felder&amp;diff=23276</id>
		<title>Processwire - Backend Felder</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Processwire_-_Backend_Felder&amp;diff=23276"/>
		<updated>2018-08-18T14:11:32Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier geht es um die Konfiguration des Backend Editors. Für technische Infos zu Feldern im allgemeinen siehe &lt;br /&gt;
== Typ Textarea ==&lt;br /&gt;
=== Details ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;HTML Entity Encoder&amp;#039;&amp;#039;&amp;#039; - sollte gewählt werden wenn das Textfeld nicht auf HTML Markup steht.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Input Field Type&amp;#039;&amp;#039;&amp;#039; - auf CK Editor &lt;br /&gt;
=== Input ===&lt;br /&gt;
* Visibility&lt;br /&gt;
* Rows &amp;amp; Columns Width und Height einstellen&lt;br /&gt;
=== Access ===&lt;br /&gt;
* Userroles die Zugriff haben einstellen&lt;br /&gt;
&lt;br /&gt;
== CK Editor konfigurieren ==&lt;br /&gt;
=== HTML mit Klassen etc. erlauben ===&lt;br /&gt;
&lt;br /&gt;
=== Eigene Stile / Klassen ===&lt;br /&gt;
https://processwire.com/talk/topic/8342-adding-css-classes-to-ckeditor/&lt;br /&gt;
&lt;br /&gt;
=== Schaltflächen ===&lt;br /&gt;
Im Bereich Input&lt;br /&gt;
&lt;br /&gt;
Standard&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel inkl. Absatzausrichtung&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ProcessWire - Backend anpassen ===&lt;br /&gt;
[[ProcessWire - Backend anpassen]]&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Fields&amp;diff=23275</id>
		<title>ProcessWire - Fields</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Fields&amp;diff=23275"/>
		<updated>2018-08-18T13:06:50Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: Die Seite wurde neu angelegt: „http://www.flamingruby.com/blog/anatomy-of-fields-in-processwire/“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.flamingruby.com/blog/anatomy-of-fields-in-processwire/&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Field_Types&amp;diff=23274</id>
		<title>ProcessWire - Field Types</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Field_Types&amp;diff=23274"/>
		<updated>2018-08-18T13:04:07Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch &lt;br /&gt;
 [[ProcessWire - Fields]]&lt;br /&gt;
&lt;br /&gt;
Hier werden ausgewählte Felder Beschrieben und in kurzen Beispielen erklärt wie man Sie nutzen kann.&lt;br /&gt;
== Select Options ==&lt;br /&gt;
https://processwire.com/api/modules/select-options-fieldtype/&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
  // Does field has option selected ?&lt;br /&gt;
  $page-&amp;gt;fieldname-&amp;gt;has(#idofselectoption#);&lt;br /&gt;
&lt;br /&gt;
  // filter page objects by option id&lt;br /&gt;
  $pa = $homepage-&amp;gt;and($homepage-&amp;gt;children(&amp;quot;menus.id=1&amp;quot;));&lt;br /&gt;
  $pa = $homepage-&amp;gt;children(&amp;quot;menus.id=1&amp;quot;);//only if main menu is checked&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Field_Rendering&amp;diff=23273</id>
		<title>ProcessWire - Field Rendering</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Field_Rendering&amp;diff=23273"/>
		<updated>2018-08-18T13:03:53Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch &lt;br /&gt;
 [[ProcessWire - Fields]]&lt;br /&gt;
&lt;br /&gt;
== Field Templates ==&lt;br /&gt;
In Processwire kann man (zumindest ab Version 3.x) eine verbesserte render() Funktion nutzen. &lt;br /&gt;
Dabei &amp;#039;&amp;#039;&amp;#039;sucht ProcessWire automatisch&amp;#039;&amp;#039;&amp;#039; in verschiedenen Verzeichnissen nach einem passenden Template File.&lt;br /&gt;
&lt;br /&gt;
Angenommen man möchte ein Textfeld mit dem Namen &amp;quot;body&amp;quot; im Template basic_page.php rendern.&lt;br /&gt;
 echo $page-&amp;gt;render(&amp;#039;body&amp;#039;); // looks for /site/templates/fields/body.php to return markup&lt;br /&gt;
Dann sucht PW nach dem passenden Subtemplete im fields Verzeichnis.&lt;br /&gt;
&lt;br /&gt;
Ab 3.0.7 sucht Processwire außerdem in &lt;br /&gt;
 /site/templates/fields/body/basic-page.php&lt;br /&gt;
 /site/templates/fields/basic-page/body.php&lt;br /&gt;
 /site/templates/fields/body.php (default/fallback) &lt;br /&gt;
bis es eine Definition findet. Außderdem kann man jetzt auch auf einfache Art Varianten erzeugen. https://processwire.com/blog/posts/processwire-3.0.7-expands-field-rendering-page-path-history-and-more/#field-rendering-with-template-files&lt;br /&gt;
&lt;br /&gt;
== Custom Views ==&lt;br /&gt;
https://processwire.com/blog/posts/processwire-3.0.7-expands-field-rendering-page-path-history-and-more/#field-rendering-with-template-files&lt;br /&gt;
&lt;br /&gt;
Es gibt viele Möglichkeiten sehr Komplexe Setups mit Varianten aufzusetzen. Der Link oben gibt einen guten Einstieg.&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Field_Types&amp;diff=23272</id>
		<title>ProcessWire - Field Types</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Field_Types&amp;diff=23272"/>
		<updated>2018-08-18T13:02:17Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch &lt;br /&gt;
 [[ProcessWire - Fields]]&lt;br /&gt;
== Select Options ==&lt;br /&gt;
https://processwire.com/api/modules/select-options-fieldtype/&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
  // Does field has option selected ?&lt;br /&gt;
  $page-&amp;gt;fieldname-&amp;gt;has(#idofselectoption#);&lt;br /&gt;
&lt;br /&gt;
  // filter page objects by option id&lt;br /&gt;
  $pa = $homepage-&amp;gt;and($homepage-&amp;gt;children(&amp;quot;menus.id=1&amp;quot;));&lt;br /&gt;
  $pa = $homepage-&amp;gt;children(&amp;quot;menus.id=1&amp;quot;);//only if main menu is checked&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Wartung&amp;diff=23271</id>
		<title>ProcessWire - Wartung</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Wartung&amp;diff=23271"/>
		<updated>2018-08-18T11:01:28Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: Die Seite wurde neu angelegt: „Tools Original Bilder Resizen  Wenn der Kunde zu große Bilder hochgeladen hat und diese nicht Resized werden.“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tools&lt;br /&gt;
Original Bilder Resizen&lt;br /&gt;
&lt;br /&gt;
Wenn der Kunde zu große Bilder hochgeladen hat und diese nicht Resized werden.&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Cache&amp;diff=23270</id>
		<title>ProcessWire - Cache</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Cache&amp;diff=23270"/>
		<updated>2018-08-18T10:59:13Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Page Cache ==&lt;br /&gt;
 /site/assets/cache/Page&lt;br /&gt;
== Template Cache ==&lt;br /&gt;
&lt;br /&gt;
== Cache Tables ==&lt;br /&gt;
Kann gelöscht werden (evtl. Backup machen) Danach evtl. nach neuen Modulen suchen (Forum)&lt;br /&gt;
* Information about FileCompiler (which files it compiled and when), &lt;br /&gt;
* module infos, &lt;br /&gt;
* caches saved using $cache variable etc. &lt;br /&gt;
When you refresh, you may experience a bit of delay before all caches (accessed during current request) are generated again.&lt;br /&gt;
&lt;br /&gt;
== Clear ProcessWire Cache ==&lt;br /&gt;
   /site/assets/cache/Page&lt;br /&gt;
&lt;br /&gt;
Template cache you would go to the PageRender module settings and delete cache.&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Backend_anpassen&amp;diff=23269</id>
		<title>ProcessWire - Backend anpassen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Backend_anpassen&amp;diff=23269"/>
		<updated>2018-08-18T09:48:03Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: Die Seite wurde neu angelegt: „== Templates für Backend Files == https://processwire.com/blog/posts/processwire-3.0.7-expands-field-rendering-page-path-history-and-more/#field-rendering-wit…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Templates für Backend Files ==&lt;br /&gt;
https://processwire.com/blog/posts/processwire-3.0.7-expands-field-rendering-page-path-history-and-more/#field-rendering-with-template-files&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Processwire_-_Backend_Felder&amp;diff=23268</id>
		<title>Processwire - Backend Felder</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Processwire_-_Backend_Felder&amp;diff=23268"/>
		<updated>2018-08-18T09:45:50Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Typ Textarea ==&lt;br /&gt;
=== Details ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;HTML Entity Encoder&amp;#039;&amp;#039;&amp;#039; - sollte gewählt werden wenn das Textfeld nicht auf HTML Markup steht.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Input Field Type&amp;#039;&amp;#039;&amp;#039; - auf CK Editor &lt;br /&gt;
=== Input ===&lt;br /&gt;
* Visibility&lt;br /&gt;
* Rows &amp;amp; Columns Width und Height einstellen&lt;br /&gt;
=== Access ===&lt;br /&gt;
* Userroles die Zugriff haben einstellen&lt;br /&gt;
&lt;br /&gt;
== CK Editor konfigurieren ==&lt;br /&gt;
=== HTML mit Klassen etc. erlauben ===&lt;br /&gt;
&lt;br /&gt;
=== Eigene Stile / Klassen ===&lt;br /&gt;
https://processwire.com/talk/topic/8342-adding-css-classes-to-ckeditor/&lt;br /&gt;
&lt;br /&gt;
=== Schaltflächen ===&lt;br /&gt;
Im Bereich Input&lt;br /&gt;
&lt;br /&gt;
Standard&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel inkl. Absatzausrichtung&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ProcessWire - Backend anpassen ===&lt;br /&gt;
[[ProcessWire - Backend anpassen]]&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Siehe_CSS_-_Flexbox&amp;diff=23267</id>
		<title>Siehe CSS - Flexbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Siehe_CSS_-_Flexbox&amp;diff=23267"/>
		<updated>2018-08-16T21:32:03Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: Der Seiteninhalt wurde durch einen anderen Text ersetzt: „Siehe CSS - Flexbox“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe [[CSS - Flexbox]]&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=CSS_-_Flexbox&amp;diff=23266</id>
		<title>CSS - Flexbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=CSS_-_Flexbox&amp;diff=23266"/>
		<updated>2018-08-16T21:31:48Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://css-tricks.com/snippets/css/a-guide-to-flexbox/&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
https://medium.freecodecamp.org/the-ultimate-guide-to-flexbox-learning-through-examples-8c90248d4676&lt;br /&gt;
 https://www.w3schools.com/css/css3_flexbox.asp&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Before the Flexbox Layout module, there were four layout modes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Block, for sections in a webpage&lt;br /&gt;
Inline, for text&lt;br /&gt;
Table, for two-dimensional table data&lt;br /&gt;
Positioned, for explicit position of an element&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Flexible Box Layout Module, makes it easier to design flexible responsive layout structure without using float or positioning.&lt;br /&gt;
== Properties ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
flex-direction&lt;br /&gt;
flex-wrap&lt;br /&gt;
flex-flow&lt;br /&gt;
justify-content&lt;br /&gt;
align-items&lt;br /&gt;
align-content&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-direction&amp;#039;&amp;#039;&amp;#039; property defines in which &amp;#039;&amp;#039;&amp;#039;direction&amp;#039;&amp;#039;&amp;#039; the container wants to stack the flex items.&lt;br /&gt;
 column&lt;br /&gt;
 row&lt;br /&gt;
 column-reverse&lt;br /&gt;
 row-reverse&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-wrap&amp;#039;&amp;#039;&amp;#039; property specifies whether the flex items should &amp;#039;&amp;#039;&amp;#039;wrap or not&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
 wrap&lt;br /&gt;
 nowrap&lt;br /&gt;
 wrap-reverse&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-flow&amp;#039;&amp;#039;&amp;#039; property is a &amp;#039;&amp;#039;&amp;#039;shorthand&amp;#039;&amp;#039;&amp;#039; property for setting both the flex-direction and flex-wrap properties.&lt;br /&gt;
 row wrap&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;justify-content&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align&amp;#039;&amp;#039;&amp;#039; the flex items:&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
 space-around&lt;br /&gt;
 space-between&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-items&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align&amp;#039;&amp;#039;&amp;#039; the flex items &amp;#039;&amp;#039;&amp;#039;vertically&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
 stretch&lt;br /&gt;
 baseline&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-content&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align the flex lines&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
 space-between&lt;br /&gt;
 space-around&lt;br /&gt;
 stretch&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Child Elements (Items)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;direct child elements&amp;#039;&amp;#039;&amp;#039; of a flex container automatically &amp;#039;&amp;#039;&amp;#039;becomes flexible (flex) items&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;order property&amp;#039;&amp;#039;&amp;#039; specifies the order of the flex items.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 3&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 2&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 4&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt; &lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 1&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-grow&amp;#039;&amp;#039;&amp;#039; property specifies how much a flex item will grow relative to the rest of the flex items.&lt;br /&gt;
&lt;br /&gt;
Make the third flex item grow eight times faster than the other flex items:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 1&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 1&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 8&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-shrink&amp;#039;&amp;#039;&amp;#039; property specifies how much a flex item will shrink relative to the rest of the flex items.&lt;br /&gt;
Do not let the third flex item shrink as much as the other flex items:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-shrink: 0&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-basis&amp;#039;&amp;#039;&amp;#039; property specifies the &amp;#039;&amp;#039;&amp;#039;initial length&amp;#039;&amp;#039;&amp;#039; of a flex item.&lt;br /&gt;
 &amp;lt;div style=&amp;quot;flex-basis: 200px&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex&amp;#039;&amp;#039;&amp;#039; property is a &amp;#039;&amp;#039;&amp;#039;shorthand&amp;#039;&amp;#039;&amp;#039; property for the flex-grow, flex-shrink, and flex-basis properties&lt;br /&gt;
 &amp;lt;div style=&amp;quot;flex: 0 0 200px&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-self&amp;#039;&amp;#039;&amp;#039; property specifies the &amp;#039;&amp;#039;&amp;#039;alignment for the selected item inside the flexible container&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The align-self property overrides the default alignment set by the container&amp;#039;s align-items property.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
=== Fotogrid ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
* {&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    font-family: Arial;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.header {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 32px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: wrap;&lt;br /&gt;
    padding: 0 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Create four equal columns that sits next to each other */&lt;br /&gt;
.column {&lt;br /&gt;
    flex: 25%;&lt;br /&gt;
    max-width: 25%;&lt;br /&gt;
    padding: 0 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.column img {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes a two column-layout instead of four columns */&lt;br /&gt;
@media (max-width: 800px) {&lt;br /&gt;
    .column {&lt;br /&gt;
        flex: 50%;&lt;br /&gt;
        max-width: 50%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes the two columns stack on top of each other instead of next to each other */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .column {&lt;br /&gt;
        flex: 100%;&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Responsive Image Grid&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Resize the browser window to see the responsive effect.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Photo Grid --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/falls2.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/nature.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mist.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/ocean.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mountainskies.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;  &lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/falls2.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/nature.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mist.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/ocean.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mountainskies.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Homepage Layout ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Page Title&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
* {&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style the body */&lt;br /&gt;
body {&lt;br /&gt;
    font-family: Arial;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header/logo Title */&lt;br /&gt;
.header {&lt;br /&gt;
    padding: 60px;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    background: #1abc9c;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style the top navigation bar */&lt;br /&gt;
.navbar {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    background-color: #333;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style the navigation bar links */&lt;br /&gt;
.navbar a {&lt;br /&gt;
    color: white;&lt;br /&gt;
    padding: 14px 20px;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Change color on hover */&lt;br /&gt;
.navbar a:hover {&lt;br /&gt;
    background-color: #ddd;&lt;br /&gt;
    color: black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Column container */&lt;br /&gt;
.row {  &lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: wrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Create two unequal columns that sits next to each other */&lt;br /&gt;
/* Sidebar/left column */&lt;br /&gt;
.side {&lt;br /&gt;
    flex: 30%;&lt;br /&gt;
    background-color: #f1f1f1;&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main column */&lt;br /&gt;
.main {&lt;br /&gt;
    flex: 70%;&lt;br /&gt;
    background-color: white;&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fake image, just for this example */&lt;br /&gt;
.fakeimg {&lt;br /&gt;
    background-color: #aaa;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer */&lt;br /&gt;
.footer {&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    background: #ddd;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - when the screen is less than 700px wide, make the two columns stack on top of each other instead of next to each other */&lt;br /&gt;
@media screen and (max-width: 700px) {&lt;br /&gt;
    .row, .navbar {   &lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Note --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:yellow;padding:5px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h4 style=&amp;quot;text-align:center&amp;quot;&amp;gt;Resize the browser window to see the responsive effect.&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;My Website&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;With a &amp;lt;b&amp;gt;flexible&amp;lt;/b&amp;gt; layout.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Navigation Bar --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;navbar&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The flexible grid (content) --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;side&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;About Me&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;h5&amp;gt;Photo of me:&amp;lt;/h5&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:200px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Some text about me in culpa qui officia deserunt mollit anim..&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;More Text&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Lorem ipsum dolor sit ame.&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:60px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:60px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:60px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;TITLE HEADING&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;h5&amp;gt;Title description, Dec 7, 2017&amp;lt;/h5&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:200px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Some text..&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sunt in culpa qui officia deserunt mollit anim id est laborum consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;TITLE HEADING&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;h5&amp;gt;Title description, Sep 2, 2017&amp;lt;/h5&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:200px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Some text..&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sunt in culpa qui officia deserunt mollit anim id est laborum consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Footer --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h2&amp;gt;Footer&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Siehe_CSS_-_Flexbox&amp;diff=23265</id>
		<title>Siehe CSS - Flexbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Siehe_CSS_-_Flexbox&amp;diff=23265"/>
		<updated>2018-08-16T21:31:30Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe [[CSS - Flexbox]]&lt;br /&gt;
== Links ==&lt;br /&gt;
https://medium.freecodecamp.org/the-ultimate-guide-to-flexbox-learning-through-examples-8c90248d4676&lt;br /&gt;
 https://www.w3schools.com/css/css3_flexbox.asp&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Before the Flexbox Layout module, there were four layout modes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Block, for sections in a webpage&lt;br /&gt;
Inline, for text&lt;br /&gt;
Table, for two-dimensional table data&lt;br /&gt;
Positioned, for explicit position of an element&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Flexible Box Layout Module, makes it easier to design flexible responsive layout structure without using float or positioning.&lt;br /&gt;
== Properties ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
flex-direction&lt;br /&gt;
flex-wrap&lt;br /&gt;
flex-flow&lt;br /&gt;
justify-content&lt;br /&gt;
align-items&lt;br /&gt;
align-content&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-direction&amp;#039;&amp;#039;&amp;#039; property defines in which &amp;#039;&amp;#039;&amp;#039;direction&amp;#039;&amp;#039;&amp;#039; the container wants to stack the flex items.&lt;br /&gt;
 column&lt;br /&gt;
 row&lt;br /&gt;
 column-reverse&lt;br /&gt;
 row-reverse&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-wrap&amp;#039;&amp;#039;&amp;#039; property specifies whether the flex items should &amp;#039;&amp;#039;&amp;#039;wrap or not&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
 wrap&lt;br /&gt;
 nowrap&lt;br /&gt;
 wrap-reverse&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-flow&amp;#039;&amp;#039;&amp;#039; property is a &amp;#039;&amp;#039;&amp;#039;shorthand&amp;#039;&amp;#039;&amp;#039; property for setting both the flex-direction and flex-wrap properties.&lt;br /&gt;
 row wrap&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;justify-content&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align&amp;#039;&amp;#039;&amp;#039; the flex items:&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
 space-around&lt;br /&gt;
 space-between&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-items&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align&amp;#039;&amp;#039;&amp;#039; the flex items &amp;#039;&amp;#039;&amp;#039;vertically&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
 stretch&lt;br /&gt;
 baseline&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-content&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align the flex lines&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
 space-between&lt;br /&gt;
 space-around&lt;br /&gt;
 stretch&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Child Elements (Items)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;direct child elements&amp;#039;&amp;#039;&amp;#039; of a flex container automatically &amp;#039;&amp;#039;&amp;#039;becomes flexible (flex) items&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;order property&amp;#039;&amp;#039;&amp;#039; specifies the order of the flex items.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 3&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 2&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 4&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt; &lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 1&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-grow&amp;#039;&amp;#039;&amp;#039; property specifies how much a flex item will grow relative to the rest of the flex items.&lt;br /&gt;
&lt;br /&gt;
Make the third flex item grow eight times faster than the other flex items:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 1&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 1&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 8&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-shrink&amp;#039;&amp;#039;&amp;#039; property specifies how much a flex item will shrink relative to the rest of the flex items.&lt;br /&gt;
Do not let the third flex item shrink as much as the other flex items:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-shrink: 0&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-basis&amp;#039;&amp;#039;&amp;#039; property specifies the &amp;#039;&amp;#039;&amp;#039;initial length&amp;#039;&amp;#039;&amp;#039; of a flex item.&lt;br /&gt;
 &amp;lt;div style=&amp;quot;flex-basis: 200px&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex&amp;#039;&amp;#039;&amp;#039; property is a &amp;#039;&amp;#039;&amp;#039;shorthand&amp;#039;&amp;#039;&amp;#039; property for the flex-grow, flex-shrink, and flex-basis properties&lt;br /&gt;
 &amp;lt;div style=&amp;quot;flex: 0 0 200px&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-self&amp;#039;&amp;#039;&amp;#039; property specifies the &amp;#039;&amp;#039;&amp;#039;alignment for the selected item inside the flexible container&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The align-self property overrides the default alignment set by the container&amp;#039;s align-items property.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
=== Fotogrid ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
* {&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    font-family: Arial;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.header {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 32px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: wrap;&lt;br /&gt;
    padding: 0 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Create four equal columns that sits next to each other */&lt;br /&gt;
.column {&lt;br /&gt;
    flex: 25%;&lt;br /&gt;
    max-width: 25%;&lt;br /&gt;
    padding: 0 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.column img {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes a two column-layout instead of four columns */&lt;br /&gt;
@media (max-width: 800px) {&lt;br /&gt;
    .column {&lt;br /&gt;
        flex: 50%;&lt;br /&gt;
        max-width: 50%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes the two columns stack on top of each other instead of next to each other */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .column {&lt;br /&gt;
        flex: 100%;&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Responsive Image Grid&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Resize the browser window to see the responsive effect.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Photo Grid --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/falls2.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/nature.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mist.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/ocean.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mountainskies.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;  &lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/falls2.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/nature.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mist.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/ocean.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mountainskies.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Homepage Layout ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Page Title&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
* {&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style the body */&lt;br /&gt;
body {&lt;br /&gt;
    font-family: Arial;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header/logo Title */&lt;br /&gt;
.header {&lt;br /&gt;
    padding: 60px;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    background: #1abc9c;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style the top navigation bar */&lt;br /&gt;
.navbar {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    background-color: #333;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style the navigation bar links */&lt;br /&gt;
.navbar a {&lt;br /&gt;
    color: white;&lt;br /&gt;
    padding: 14px 20px;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Change color on hover */&lt;br /&gt;
.navbar a:hover {&lt;br /&gt;
    background-color: #ddd;&lt;br /&gt;
    color: black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Column container */&lt;br /&gt;
.row {  &lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: wrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Create two unequal columns that sits next to each other */&lt;br /&gt;
/* Sidebar/left column */&lt;br /&gt;
.side {&lt;br /&gt;
    flex: 30%;&lt;br /&gt;
    background-color: #f1f1f1;&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main column */&lt;br /&gt;
.main {&lt;br /&gt;
    flex: 70%;&lt;br /&gt;
    background-color: white;&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fake image, just for this example */&lt;br /&gt;
.fakeimg {&lt;br /&gt;
    background-color: #aaa;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer */&lt;br /&gt;
.footer {&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    background: #ddd;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - when the screen is less than 700px wide, make the two columns stack on top of each other instead of next to each other */&lt;br /&gt;
@media screen and (max-width: 700px) {&lt;br /&gt;
    .row, .navbar {   &lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Note --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:yellow;padding:5px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h4 style=&amp;quot;text-align:center&amp;quot;&amp;gt;Resize the browser window to see the responsive effect.&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;My Website&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;With a &amp;lt;b&amp;gt;flexible&amp;lt;/b&amp;gt; layout.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Navigation Bar --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;navbar&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The flexible grid (content) --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;side&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;About Me&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;h5&amp;gt;Photo of me:&amp;lt;/h5&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:200px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Some text about me in culpa qui officia deserunt mollit anim..&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;More Text&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Lorem ipsum dolor sit ame.&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:60px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:60px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:60px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;TITLE HEADING&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;h5&amp;gt;Title description, Dec 7, 2017&amp;lt;/h5&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:200px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Some text..&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sunt in culpa qui officia deserunt mollit anim id est laborum consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;TITLE HEADING&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;h5&amp;gt;Title description, Sep 2, 2017&amp;lt;/h5&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:200px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Some text..&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sunt in culpa qui officia deserunt mollit anim id est laborum consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Footer --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h2&amp;gt;Footer&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=SPF_(Sender_Policy_Framework)&amp;diff=23264</id>
		<title>SPF (Sender Policy Framework)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=SPF_(Sender_Policy_Framework)&amp;diff=23264"/>
		<updated>2018-08-15T11:52:49Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SPF wird von vielen IT-lern als in der Praxis unwirksam angesehen. Wenn man Weiterleitungen über Newsletterdienstleister oder auch manuelle in der Praxis einbezieht, kann man praktisch nicht mehr hart blockieren (-all). Es kann allerdings als Beweis dafür gelten, das die Mail original ist, wenn sie tatsächlich über den Original-Server versendet wurde. Das ist aber nur dann sinnvoll, wenn dem Empfänger der Absender bekannt ist. Als reiner Schutz gegen Spam funktioniert das nicht, da auch ein Spammer sich eine Domain mit SPF Eintrag billig und Anonym zulegen kann.&lt;br /&gt;
&lt;br /&gt;
Alternative [[DKIM]]&lt;br /&gt;
&lt;br /&gt;
Siehe auch&lt;br /&gt;
== Links ==&lt;br /&gt;
 https://all-inkl.com/wichtig/anleitungen/kas/tools/dns-werkzeuge/spf_482.html&lt;br /&gt;
 https://www.youtube.com/watch?v=T1d7wTgBi28&lt;br /&gt;
 https://switchie.ch/was-bedeutet-spf-sender-policy-framework/# (Quelle dieses Artikels / Zugriff: 2018-01)&lt;br /&gt;
&lt;br /&gt;
== Beispiel erklärt ==&lt;br /&gt;
=== Problem ===&lt;br /&gt;
Absender können gefälscht werden. Es darf jeder alles verschicken.&lt;br /&gt;
=== Lösung ???===&lt;br /&gt;
TXT (SPF) DNS Eintrag gibt vor wer versenden darf.&lt;br /&gt;
 heinlein-support.de. IN TXT &amp;quot;v=spf1 ip4:213.203.238.0/25 ip4:195.10.208.0/24 mx include:jpberlin.de ?all&amp;quot;&lt;br /&gt;
Hier wird quasi hinterlegt wer versenden darf&lt;br /&gt;
 v=spf1 -&amp;gt; Version (SPF-Record Version 1)&lt;br /&gt;
 ip4:xxx:xxx:xxx:xxx/xx -&amp;gt; IP Bereich&lt;br /&gt;
 include:... -&amp;gt; Ein SPF-Reord einer anderen Domain wird included&lt;br /&gt;
 mx -&amp;gt; Server die auch als MX-Recrds definiert sind dürfen verschicken&lt;br /&gt;
 ?all -&amp;gt; Keine Aussage was andere Server dürfen (-all = kein anderer Server darf versenden, +all = alle anderen dürfen sind dann halt nicht verifiziert)&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
* Die Einstellung TXT statt SPF ist wichtig, da TXT seit rfc7208 der einzig standardkonforme Record für SPF ist! Der dedizierte SPF-Record ist damit obsolet und wird daher nicht breitflächig unterstützt. &lt;br /&gt;
&lt;br /&gt;
== Übersicht von switcher.ch ==&lt;br /&gt;
SPF (Sender Policy Framework) ist ein Protokoll, mit dem ein Halter einer DOMAIN festlegen kann, welche IP-Adressen E-Mails im Namen seiner DOMAINs verschicken dürfen und steht für „Sender Policy Framework“. Wenn jemand also eine E-Mail erhält, die behauptet von der DOMAIN ihr-unternehmen.ch versendet worden zu sein, so kann man mittels SPF prüfen, ob dies wirklich der Fall ist. Wenn die entsprechende IP-Adresse nicht durch den SPF-Eintrag autorisiert wurde, so ist die Wahrscheinlichkeit sehr gross, dass die versendete E-Mail ohne Zustimmung des Halter der DOMAIN verschickt wurde. Die Deutung dieser Information liegt letztlich immer im Verantwortungsbereich des Empfängers, ein fehlgeschlagener SPF-Test ist jedoch definitiv ein sehr deutliches Indiz für Spam.&lt;br /&gt;
&lt;br /&gt;
== So funktioniert es ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Funktionalität von SPF setzt zwei Bedingungen voraus:&lt;br /&gt;
&lt;br /&gt;
    Jeder Halter des DOMAINs sollte einen korrekten SPF-Eintrag für seine DOMAIN haben, um eine möglichst grosse Flächenabdeckung von SPF gewährleisten zu können.&lt;br /&gt;
    Mailserver müssen die SPF-Prüfung durchführen.&lt;br /&gt;
&lt;br /&gt;
Die Erstellung eines SPF-Eintrages für die DOMAIN kann  problemlos über das Benutzerkonto vorgenommen werden. Der zweite Teil ist jedoch der kompliziertere Teil. Es gibt zwar immer mehr Mailserverbetreiber, die anfangen, SPF-Einträge zu prüfen, von einer flächendeckenden Installation kann jedoch momentan noch bei weitem keine Rede sein.&lt;br /&gt;
&lt;br /&gt;
Trotz allem ist es sehr empfehlenswert, einen SPF-Eintrag für jede DOMAIN zu hinterlegen. Die Verbreitung von SPF nimmt stetig zu. Je mehr DOMAINs SPF-Einträge haben, umso schneller werden auch die Mailserver beginnen, diese Einträge auszuwerten!&lt;br /&gt;
&lt;br /&gt;
Unter den folgenden Links können Sie weitere Informationen zum Thema SPF in Erfahrung bringen:&lt;br /&gt;
&lt;br /&gt;
    http://www.openspf.org&lt;br /&gt;
    http://www.baschny.de/spf/&lt;br /&gt;
&lt;br /&gt;
=== Kann SPF Spam verhindern ? ===&lt;br /&gt;
&lt;br /&gt;
Auch SPF ist leider kein Allheilmittel gegen Spam. Indirekt kann SPF jedoch sehr viel hierzu beitragen. E-Mails werden mittels „Simple Mail Transfer Protocol“ (SMTP) versendet. Bei diesem Protokoll handelt es sich um einen mehr als 20 Jahre alten Standard, der aus einer Zeit stammt, in der es noch keinen Spam gab und man sich „gegenseitig vertrauen“ konnte. Deshalb verfügt das SMTP-Protokoll auch über kein Verfahren, E-Mails versendende Rechner entsprechend zu authentifizieren.&lt;br /&gt;
&lt;br /&gt;
Genau an dieser Stelle setzt „SPF“ an: Bei Definition eines SPF-Eintrages für eine DOMAIN kann einwandfrei festgestellt werden, ob ein Rechner, von dem eine E-Mail versendet wurde, auch tatsächlich für die entsprechende DOMAIN autorisiert ist.&lt;br /&gt;
&lt;br /&gt;
Dies heisst also, dass der SPF-Eintrag für Ihre DOMAIN keine Wirkung hat auf E-Mails die Sie empfangen. Der SPF-Eintrag ist für E-Mails, die Sie versenden. Wenn ein Empfänger eine E-Mail von Ihnen erhält und Ihre DOMAIN einen SPF-Eintrag besitzt, so kann der Empfänger dieser E-Mail prüfen, ob die E-Mail tatsächlich von Ihnen versendet wurde.&lt;br /&gt;
Kann ich überprüfen, ob mein SPF-Eintrag funktioniert ?&lt;br /&gt;
&lt;br /&gt;
Ja, das ist möglich. Hier können Sie die Funktionalität des SPF-Eintrags überprüfen.&lt;br /&gt;
Wie lautet der SPF-Eintrag, wenn ich MAIL von switchplus nutze ?&lt;br /&gt;
&lt;br /&gt;
Der SPF-Eintrag für das Versenden über die switchplus E-Mailkonten lautet:&lt;br /&gt;
&lt;br /&gt;
 v=spf1 a mx include:spf.switchplus-mail.ch ~all&lt;br /&gt;
&lt;br /&gt;
Bitte kopieren Sie diesen mit genau dieser Syntax in die Eingabemaske und speichern Sie die Änderung.&lt;br /&gt;
&lt;br /&gt;
Im unserem GUI können Sie „nur“ einen SPF-Record eintragen (es kann also kein zweiter SPF-Record erstellt werden). Sollten zwei Einträge gesetzt werden müssen, können Sie den SPF-Eintrag wie nachfolgendes Beispiel zeigt ergänzen (hier wird z.B. eine zusätzliche IP-Adresse hinzugefügt):&lt;br /&gt;
v=spf1 a mx include:spf.switchplus-mail.ch ip4:xxx.xxx.xxx.xxx ~all&lt;br /&gt;
&lt;br /&gt;
=== Wie erstelle ich einen SPF-Eintrag für eine DOMAIN ? ===&lt;br /&gt;
&lt;br /&gt;
Um für eine bestimmte DOMAIN einen SPF-Eintrag zu erstellen, gehen Sie bitte wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
    Loggen Sie sich auf www.switchplus.ch in Ihr Benutzerkonto ein, klicken Sie links in der Navigationsleiste auf „Grundkonfiguration“. Gehen Sie anschliessend rechts am Zeilenende der jeweiligen DOMAIN auf das Editierungssymbol und wählen Sie „Nameserver editieren“. In der Folge-Maske finden Sie alle Records. Klicken Sie nun unten links auf „Eintrag hinzufügen“ und wählen Sie nun beim neu erschienenem Eintrag den Typ „SPF“. Klicken Sie danach auf das nun erschienene Auflistungs-Symbol rechts.&lt;br /&gt;
&lt;br /&gt;
Folgende Konfigurationsmöglichkeiten stehen über die Eingabemaske (Auflistungs-Symbol) zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
    1. Meine Webseiten verschicken E-Mails, z.B. über Formmailskripte oder als Teil der installierten Programme wie Forum, Shoplösung etc.&lt;br /&gt;
    Geben Sie hier bitte an, ob E-Mails von Ihrer DOMAIN auch über Formmailer, Shopsoftware o.ä. Anwendungen verschickt werden. So können Sie bestimmen, ob die IP-Adresse des Webservers in den SPF-Eintrag aufgenommen werden soll.&lt;br /&gt;
&lt;br /&gt;
    2. Wenn ich E-Mails verschicke, verwende ich die SMTP-Server von switchplus&lt;br /&gt;
    Definieren Sie hier, ob Sie beim Versand von E-Mails die Mailserver von switchplus verwenden. Sofern Sie keinen eigenen Mailserver in Ihrem Hause betreiben, ist hier standardmässig die Einstellung „JA“ vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
    2a. Wenn Sie Frage 2 mit „Nein“ beantwortet haben:&lt;br /&gt;
    Die folgende IP-Adresse versendet E-Mails für meine DOMAIN:&lt;br /&gt;
    Bitte so eingeben: 123.46.78.0 oder 123.43.12.0/24&lt;br /&gt;
    Sofern Sie für den Versand von E-Mails nicht die Mailserver von switchplus verwenden und bei der vorhergehenden Option „NEIN“ gewählt haben, so können Sie hier die IP-Adressen angeben, über welche Ihre E-Mails versendet werden.&lt;br /&gt;
&lt;br /&gt;
    3. Von anderen IP-Adressen werden niemals E-Mails für meine DOMAIN verschickt.&lt;br /&gt;
    Hier können Sie bestimmen, ob neben den über die obigen Konfigurationsmöglichkeiten angegebenen Mailservern noch weitere Mailserver für den Versand Ihrer E-Mails zuständig sind.&lt;br /&gt;
&lt;br /&gt;
    Klicken Sie auf „speichern“, um den SPF-Eintrag für Ihre DOMAIN einzutragen und zu aktivieren.&lt;br /&gt;
&lt;br /&gt;
===Wie kann ein bestehender SPF-Eintrag geändert werden ? ===&lt;br /&gt;
&lt;br /&gt;
Loggen Sie sich auf www.switchplus.ch in Ihr Benutzerkonto ein und klicken Sie links in der Navigationsleiste auf „Grundkonfiguration“. Gehen Sie anschliessend rechts am Zeilenende der jeweiligen DOMAIN auf das Editierungssymbol und wählen Sie „Nameserver editieren“. In der Folge-Maske finden Sie alle Records. Beim bestehenden SPF-Record können Sie nun die gewünschten Einstellungen vornehmen in dem Sie auf das Auflistungs-Symbol klicken.&lt;br /&gt;
Der SPF-Assistent erzeugt einen korrekten SPF-Eintrag, den Sie nach Belieben ändern können. Sie sollten dies jedoch nur dann machen, wenn Sie SPF und seine Parameter wirklich kennen. Der SPF-Eintrag wird aber immer auf Korrektheit überprüft. Sollten Sie daher Fehler bei der individuellen Eingabe machen, werden Sie über die Fehler informiert und der Eintrag wird nicht aktiviert.&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=SASS&amp;diff=23263</id>
		<title>SASS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=SASS&amp;diff=23263"/>
		<updated>2018-08-15T11:48:33Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch &lt;br /&gt;
 [[SCSS]]&lt;br /&gt;
 [[LESS]]&lt;br /&gt;
 [[SASS vs SCSS vs LESS vs ?]]&lt;br /&gt;
 https://gist.github.com/chriseppstein/674726 (Super Übersicht über LESS / SCSS Syntax)&lt;br /&gt;
== Links ==&lt;br /&gt;
* Sass Dokumentation: http://sass-lang.com/documentation/file.SASS_REFERENCE.html&lt;br /&gt;
* Sass on the fly https://www.sassmeister.com/&lt;br /&gt;
* https://scotch.io/tutorials/getting-started-with-sass (Syntax Tutorial)&lt;br /&gt;
* https://medium.com/@jstubblefield7939/getting-started-with-sass-scss-and-nodejs-6f7b4589aaf2 (Basis Kompilieren mit node-js)&lt;br /&gt;
* [[Sass mit node-sass (Node.js)]] RECOMMENDED&lt;br /&gt;
* https://github.com/scout-app/scout-app oder http://scout-app.io/&lt;br /&gt;
* http://noeticforce.com/best-sass-tools-for-modern-web-design&lt;br /&gt;
Zu Compass&lt;br /&gt;
* http://compass-style.org/install/&lt;br /&gt;
Scout-App&lt;br /&gt;
* http://Scout-App.io&lt;br /&gt;
* https://pagewizz.com/sass-setup-in-5-minuten-ganz-ohne-ruby-installation-32281/ &amp;#039;&amp;#039;&amp;#039;(auch eine gute Sass Einführung)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Übersicht ==&lt;br /&gt;
Die Grundidee hinter der Entwicklung von Sass war es, die Arbeit mit CSS einfacher zu machen, aber gleichzeitig auch den Funktionsumfang zu erhöhen. Daher wurden in Sass &amp;#039;&amp;#039;&amp;#039;Klammern sowie Semikolons entfernt&amp;#039;&amp;#039;&amp;#039;. Kurze Zeit später entstand die &amp;#039;&amp;#039;&amp;#039;SCSS Variante&amp;#039;&amp;#039;&amp;#039; die &amp;#039;&amp;#039;&amp;#039;Klammern&amp;#039;&amp;#039;&amp;#039; wieder einführt und auch &amp;#039;&amp;#039;&amp;#039;normales CSS&amp;#039;&amp;#039;&amp;#039; erlaubt. &lt;br /&gt;
&lt;br /&gt;
Wie alle CSS Präprozessoren erweitert SASS den Funktionsumfang um Variablen, Mixins, Farb und Zahlenberechnungen und Vererbung von Eigenschaften.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Es gibt gute &amp;#039;&amp;#039;&amp;#039;Erweiterungen&amp;#039;&amp;#039;&amp;#039; die z.B. &amp;#039;&amp;#039;&amp;#039;Mixins&amp;#039;&amp;#039;&amp;#039; (s.u.) liefern oder zusätzliche Funktionalität. &lt;br /&gt;
&lt;br /&gt;
Früher lief es nur unter Ruby unter der Konsole. Heute gibt es z.B. libsass eine C Bibliothek auf die diverse &amp;#039;&amp;#039;&amp;#039;Sass Tools&amp;#039;&amp;#039;&amp;#039; zurückgreifen. Compass 2.0 soll z.B. auch auf libsass zurückgreifen. Auch NodeJS bringt eine eigene Umsetzung. Auch &amp;#039;&amp;#039;&amp;#039;Tools mit grafischer Oberfläche&amp;#039;&amp;#039;&amp;#039; gibt es mitlerweile. Z.B. Scout-App.&lt;br /&gt;
&lt;br /&gt;
=== Was bringt es ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorteile&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* Wartbarer Code&lt;br /&gt;
* Wiederverwenden von Code&lt;br /&gt;
* Übersicht&lt;br /&gt;
* Gute Erweiterungen z.B. mit Compass&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nachteile&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* Man wird faul und achtet nicht mehr auf schönen CSS Code&lt;br /&gt;
* Abhängigkeit der Webprojekte von weiteren Tools. Z.B. aufpassen bei Änderungen auf dem Server die dann wieder überschrieben werden. Tipp - eine Datei zum Überschreiben die nicht von Sass generiert wird. z.B. custom.css&lt;br /&gt;
* Man geht vor allem beim Old-School Ansatz mit Ruby viele Abhängigkeiten ein (rvm, evtl. homebrew, ...) Das kann extrem Zeit kosten bis alles läuft.&lt;br /&gt;
&lt;br /&gt;
* Schneller Start mit der &amp;#039;&amp;#039;&amp;#039;Scout App&amp;#039;&amp;#039;&amp;#039; (Sass und Compass und alle Abhängigen Libs) Hier wird keine weitere Installation benötigt. In der neuen Version (2016) Läuft es ohne Ruby dafür mit NW.js, Node. Aber oft ist es besser die Sache von der Pike anzugehen.&lt;br /&gt;
* Ruby wird für SASS benötigt (Test in der Konsole mit  ruby -v)&lt;br /&gt;
** Ausnahme: Manche Sass Tools bringen Ruby bereits mit. Z.B. &amp;#039;&amp;#039;&amp;#039;Scout welches Compass und Ruby&amp;#039;&amp;#039;&amp;#039; mitbringt.&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
=== Ohne Konsole ===&lt;br /&gt;
https://pagewizz.com/sass-setup-in-5-minuten-ganz-ohne-ruby-installation-32281/&lt;br /&gt;
&lt;br /&gt;
Scout App&lt;br /&gt;
&lt;br /&gt;
Hier ist die Frage wie man Ruby Gems nutzen kann. Wahrscheinlich muß man schauen daß man die relevanten Files einfach selbst runterlädt und aufräumt. Ist vielleicht eh im Sinne der Übersichtlichkeit und des geringen Overloads.&lt;br /&gt;
&lt;br /&gt;
=== New-School ===&lt;br /&gt;
* libsass oder node.js &lt;br /&gt;
* gulp-sass (siehe [[gulp]])&lt;br /&gt;
&lt;br /&gt;
=== Old-School - Ruby based ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ruby Installieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Siehe [[Ruby]]&lt;br /&gt;
**  Ruby, Sass und Compass installieren (hier findest du eine Anleitung http://compass-style.org/install/). Wenn die Rechte nicht passen immer vorne sudo eingeben um mit Admin Rechten auf der Konsole zu arbeiten.&lt;br /&gt;
** Ruby Updaten falls nötig:&lt;br /&gt;
 gem update --system&lt;br /&gt;
** Wenn Homebrew installiert ist (Paketmanager): brew install ruby&lt;br /&gt;
* Compass Framework als Ruby Gem installieren&lt;br /&gt;
 gem install compass&lt;br /&gt;
 gem compass -v&lt;br /&gt;
* Ordnerstruktur (hängt von der Sass Konfiguration ab.&lt;br /&gt;
** scss Ordner - enthält die Sass Dateien&lt;br /&gt;
** css Ordner - enthält css dateien&lt;br /&gt;
** config.rb - Einstellungen für den Sass Compiler&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Neues Projekt anlegen&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
Im Terminal in Ordner wechseln und z.B.&lt;br /&gt;
 compass/create/meineProjekt&lt;br /&gt;
Erzeugt einen Projekt Ordner mit einer Basis Ordnerstruktur und Dateien&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Projekt kompilieren&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
=== SASS pur ===&lt;br /&gt;
 sass --watch projekt/sass&lt;br /&gt;
Von nun an wird das „/sass“ Verzeichnis überwacht. Wird an einer Datei mit der Endung .scss oder .sass etwas geändert wird diese automatisch kompiliert und als .css Datei ausgegeben. In unserem Fall werden automtisch zwei Dateien mit den Namen „style1.css“ und „style2.css“ angelegt.&lt;br /&gt;
Will man die CSS Dateien in ein separaten Unterordner unterbringen gibt man einfach folgendes ein:&lt;br /&gt;
&lt;br /&gt;
 sass --watch projekt/sass:projekt/css&lt;br /&gt;
Das Verzeichnis VOR dem : gibt die Herkunft der SASS Dateien an (den Input), dass Verzeichnis NACH dem : gibt das Zielverzeichnis für die fertigen CSS Dateien an (den Output).&lt;br /&gt;
=== Mit Compass ===&lt;br /&gt;
Im Terminal im Projektordner&lt;br /&gt;
 compass compile &lt;br /&gt;
Ausgehend von der Konfigurationsdatei werden die CSS Dateien erzeugt.&lt;br /&gt;
&lt;br /&gt;
== Automatisch kompilieren im Watch Mode ==&lt;br /&gt;
Der Compiler kann Dateien überwachen und automatisch kompilieren wenn die Datei sich ändert.&lt;br /&gt;
 compass watch&lt;br /&gt;
&lt;br /&gt;
== SASS Features ==&lt;br /&gt;
=== Variablen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
$color_1: #333;&lt;br /&gt;
body{&lt;br /&gt;
  color: $color_1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Nesting ===&lt;br /&gt;
Statt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#section1{&lt;br /&gt;
  background: pink;&lt;br /&gt;
}&lt;br /&gt;
#section1 h1{&lt;br /&gt;
  color: blue;&lt;br /&gt;
}&lt;br /&gt;
#section.wichtig{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
schreiben wir:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#section1{&lt;br /&gt;
  background: pink;&lt;br /&gt;
  h1{&lt;br /&gt;
    color: blue;&lt;br /&gt;
  }&lt;br /&gt;
  &amp;amp;.wichtig{&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zusatzfunktionen mit Compass ==&lt;br /&gt;
=== CSS3 - Zusatzfunktionen ===&lt;br /&gt;
Über einen import lädt man diverse von Compass mitgelieferte Mixins (s.u.) zum Thema css3. Über include werden dann Browserübergreifende Statments generiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import &amp;quot;compass/css3&amp;quot;;&lt;br /&gt;
.layout-1{&lt;br /&gt;
  @include box-shadow(2px 2px 1px #999);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erzeugt folgendes CSS&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.layout-1 {&lt;br /&gt;
  -moz-box-shadow: 2px 2px 1px #999;&lt;br /&gt;
  -webkit-box-shadow: 2px 2px 1px #999;&lt;br /&gt;
  box-shadow: 2px 2px 1px #999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Browser Reset CSS ===&lt;br /&gt;
Kompass kein Standard Styles für einen Browser Reset erzeugen.&lt;br /&gt;
 @import &amp;quot;compass/reset&amp;quot;;&lt;br /&gt;
=== Components ===&lt;br /&gt;
Auslagern von Teilen geht sehr schön mit Components. Am besten in einen Unterordner. Die Dateinamen beginnen mit einem Unterstrich. Somit weiß Compass, dass es sich um Komponenten handelt. Beim Import läßt man den Unterstrich und das Dattei Suffix (.scss) weg.&lt;br /&gt;
 components&lt;br /&gt;
   - _var.scss&lt;br /&gt;
   - _mixin.scss&lt;br /&gt;
_var&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
$color_1: #333;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eingebunden wird es so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import &amp;quot;components/var&amp;quot;;&lt;br /&gt;
@import &amp;quot;components/mixin&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
.layout-1{&lt;br /&gt;
  color: $color_1;&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Mixins ===&lt;br /&gt;
Mit Mixins kann man einfache Funktionen, ähnlich wie Makros, erzeugen. Man definiert die Funktion mit dem Schlüsselwort @mixin und bindet sie später über include ein. Auch Rechenoperationen sind erlaubt.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;_mixin.scss&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
// Definition der Radius Funktion (bzw. des Mixin)&lt;br /&gt;
@mixin radius($r){&lt;br /&gt;
	-moz-border-radius: $r;&lt;br /&gt;
	-webkit-border-radius: $r+2px;&lt;br /&gt;
	border-radius: $r;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;myScss.scss&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
// Radius Mixin nutzen&lt;br /&gt;
...&lt;br /&gt;
@include radius(4px);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erzeugt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
  -moz-border-radius: 4px;&lt;br /&gt;
  -webkit-border-radius: 6px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vererbung ===&lt;br /&gt;
Über das Schlüsselwort @extend, kann man Stile vererben.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.error{&lt;br /&gt;
  @extend .layout-1; // erbe alle Stile von .layout-1&lt;br /&gt;
  color: red;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sass ohne Konsole ==&lt;br /&gt;
=== Scout-App ===&lt;br /&gt;
https://github.com/scout-app/scout-app&lt;br /&gt;
* Nutzt mitlerweile (Sept 2016) node-sass und chokidar (verbessert die watch Funktionalität)&lt;br /&gt;
* Unterstützt viele Mixins&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@import &amp;quot;compass&amp;quot;; @Igosuki/compass-mixins&lt;br /&gt;
@import &amp;quot;bourbon&amp;quot;; @thoughtbot/bourbon&lt;br /&gt;
@import &amp;quot;neat&amp;quot;; @thoughtbot/neat&lt;br /&gt;
@import &amp;quot;meyer&amp;quot;; @TheJaredWilcurt/meyer-sass&lt;br /&gt;
@import &amp;quot;buttons&amp;quot;; @alexwolfe/Buttons&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bootstrap und SASS ==&lt;br /&gt;
Bootstrap wird mit LESS entwickelt, aber es gibt einen offiziellen SASS Port.&lt;br /&gt;
&lt;br /&gt;
Wenn [[Ruby]] installiert ist kann man einen bootstrap-sass gem installieren, dann kann man später ganz einfach über Compass, Projekte mit Bootstrap erstellen:&lt;br /&gt;
&lt;br /&gt;
Bootstrap Sass Gem installieren &lt;br /&gt;
 gem install bootstrap-sass&lt;br /&gt;
&lt;br /&gt;
Bootstrap Sass zu vorhandenem Compass Projekt hinzufügen&lt;br /&gt;
 compass install bootstrap -r bootstrap-sass&lt;br /&gt;
&lt;br /&gt;
Neues Compass Projekt mit Bootstrap-Sass erstellen (Funktioniert bei mir nicht)&lt;br /&gt;
 compass create my-new-project -r bootstrap-sass --using bootstrap&lt;br /&gt;
&lt;br /&gt;
== Hinweise zu Ruby ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Achtung&amp;#039;&amp;#039;&amp;#039; - da Sass unter Ruby nicht besonders performant ist und inzwischen andere Varianten bereitstehen (z.b. libsass) sollte man auf bessere Tools umsteigen.)&lt;br /&gt;
&lt;br /&gt;
Sass und Compass werden als Ruby Gems installiert. Viele Entwickler sagen man soll Gems mit RVM (ein Ruby Version Manager) installieren. Damit kann man mehrere Ruby Versionen verwalten und vermeidet Probleme mit fehlenden Schreibrechten.) Für viele Zwecke ist das aber Overkill schon wieder einen Paketmanager zu installieren, wenn man nur ein paar Sachen braucht. Es gibt auch einfachere Methoden.&lt;br /&gt;
&lt;br /&gt;
Option 1: Weiter Sudo benutzen aber in anderem Ordner. Sudo ist OK wenn Gems global installiert werden dürfen. Allerdings nicht in /usr/bin. Man kann Sie stattdessen in /usr/local/bin speichern. Dort installiert auch homebrew sein Zeug.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
 sudo gem install fakes3 -n/usr/local/bin&lt;br /&gt;
 &lt;br /&gt;
Gems in /usr/local/bin kann jeder User im System nutzen, wenn der Ordner in der PATH Variable ist.&lt;br /&gt;
&lt;br /&gt;
Option 2: OHNE Sudo im home Verzeichnis&lt;br /&gt;
&lt;br /&gt;
Gems sollen in ~/.gem gespeichert werden und binaries in ~/bin (zu PATH hinzufügen).&lt;br /&gt;
&lt;br /&gt;
 gem install fakes3 --user-install -n~/bin&lt;br /&gt;
&lt;br /&gt;
Either way, you can add these parameters to your ~/.gemrc so you don&amp;#039;t have to remember them:&lt;br /&gt;
&lt;br /&gt;
 gem: -n/usr/local/bin&lt;br /&gt;
i.e. echo &amp;quot;gem: -n/usr/local/bin&amp;quot; &amp;gt;&amp;gt; ~/.gemrc&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 gem: --user-install -n~/bin&lt;br /&gt;
i.e. echo &amp;quot;gem: --user-install -n~/bin&amp;quot; &amp;gt;&amp;gt; ~/.gemrc&lt;br /&gt;
&lt;br /&gt;
(Tip: You can also throw in --no-document to skip generating Ruby developer documentation.)&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=SASS_vs_SCSS_vs_LESS_vs_%3F&amp;diff=23262</id>
		<title>SASS vs SCSS vs LESS vs ?</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=SASS_vs_SCSS_vs_LESS_vs_%3F&amp;diff=23262"/>
		<updated>2018-08-15T06:57:56Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vergleich von Präprozessoren&lt;br /&gt;
&lt;br /&gt;
 https://www.heise.de/developer/artikel/CSS-Praeprozessoren-im-Vergleich-2288284.html?seite=all (etwas Ausführlicher)&lt;br /&gt;
 https://gist.github.com/chriseppstein/674726 (gute kurze Übersicht)&lt;br /&gt;
&lt;br /&gt;
Für Variablennamen verwendet LESS den @-, Sass den $- und Stylus einen optionalen $-Präfix.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;SASS / SCSS&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
* Syntaxvariante von SASS (gleicher Kompiler)&lt;br /&gt;
* SASS ohne Klammern (.sass) SCSS mit Klammern (.scss)&lt;br /&gt;
* SCSS akzeptiert reines CSS&lt;br /&gt;
* Variablen mit $ (wird in CSS sonst nicht verwendet)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;LESS&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
* Ziel, so nah wie möglich an Vanilla-CSS&lt;br /&gt;
* Früher Ruby heute JS basiert&lt;br /&gt;
* Akzeptiert reines CSS&lt;br /&gt;
* Variablen mit @&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stylus&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* erlaubt die normale CSS-Syntax, wobei Klammern, Doppelpunkte und Semikolons optional&lt;br /&gt;
* Variablen optional mit oder ohne $&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=SASS_vs_SCSS_vs_LESS_vs_%3F&amp;diff=23261</id>
		<title>SASS vs SCSS vs LESS vs ?</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=SASS_vs_SCSS_vs_LESS_vs_%3F&amp;diff=23261"/>
		<updated>2018-08-15T06:57:33Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: Die Seite wurde neu angelegt: „Vergleich von Präprozessoren   https://www.heise.de/developer/artikel/CSS-Praeprozessoren-im-Vergleich-2288284.html?seite=all (etwas Ausführlicher)  https://…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vergleich von Präprozessoren&lt;br /&gt;
&lt;br /&gt;
 https://www.heise.de/developer/artikel/CSS-Praeprozessoren-im-Vergleich-2288284.html?seite=all (etwas Ausführlicher)&lt;br /&gt;
 https://gist.github.com/chriseppstein/674726 (gute kurze Übersicht)&lt;br /&gt;
&lt;br /&gt;
Für Variablennamen verwendet LESS den @-, Sass den $- und Stylus einen optionalen $-Präfix.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;SASS / SCSS&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
* Syntaxvariante von SASS (gleicher Kompiler)&lt;br /&gt;
* SASS ohne Klammern (.sass) SCSS mit Klammern (.scss)&lt;br /&gt;
* SCSS akzeptiert reines CSS&lt;br /&gt;
* Variablen mit $ (wird in CSS sonst nicht verwendet)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;LESS&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
* Ziel, so nah wie möglich an Vanilla-CSS&lt;br /&gt;
* Früher Ruby heut JS basiert&lt;br /&gt;
* Akzeptiert reines CSS&lt;br /&gt;
* Variablen mit @&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stylus&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* erlaubt die normale CSS-Syntax, wobei Klammern, Doppelpunkte und Semikolons optional&lt;br /&gt;
* Variablen optional mit oder ohne $&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=SASS&amp;diff=23260</id>
		<title>SASS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=SASS&amp;diff=23260"/>
		<updated>2018-08-15T06:34:23Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch &lt;br /&gt;
 [[SCSS]]&lt;br /&gt;
 [[LESS]]&lt;br /&gt;
 [[SASS vs SCSS vs LESS vs ?]]&lt;br /&gt;
== Links ==&lt;br /&gt;
* Sass Dokumentation: http://sass-lang.com/documentation/file.SASS_REFERENCE.html&lt;br /&gt;
* Sass on the fly https://www.sassmeister.com/&lt;br /&gt;
* https://scotch.io/tutorials/getting-started-with-sass (Syntax Tutorial)&lt;br /&gt;
* https://medium.com/@jstubblefield7939/getting-started-with-sass-scss-and-nodejs-6f7b4589aaf2 (Basis Kompilieren mit node-js)&lt;br /&gt;
* [[Sass mit node-sass (Node.js)]] RECOMMENDED&lt;br /&gt;
* https://github.com/scout-app/scout-app oder http://scout-app.io/&lt;br /&gt;
* http://noeticforce.com/best-sass-tools-for-modern-web-design&lt;br /&gt;
Zu Compass&lt;br /&gt;
* http://compass-style.org/install/&lt;br /&gt;
Scout-App&lt;br /&gt;
* http://Scout-App.io&lt;br /&gt;
* https://pagewizz.com/sass-setup-in-5-minuten-ganz-ohne-ruby-installation-32281/ &amp;#039;&amp;#039;&amp;#039;(auch eine gute Sass Einführung)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Übersicht ==&lt;br /&gt;
Die Grundidee hinter der Entwicklung von Sass war es, die Arbeit mit CSS einfacher zu machen, aber gleichzeitig auch den Funktionsumfang zu erhöhen. Daher wurden in Sass Klammern sowie Semikolons entfernt.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Es gibt gute &amp;#039;&amp;#039;&amp;#039;Erweiterungen&amp;#039;&amp;#039;&amp;#039; die z.B. &amp;#039;&amp;#039;&amp;#039;Mixins&amp;#039;&amp;#039;&amp;#039; (s.u.) liefern oder zusätzliche Funktionalität. &lt;br /&gt;
&lt;br /&gt;
Früher lief es nur unter Ruby unter der Konsole. Heute gibt es z.B. libsass eine C Bibliothek auf die diverse &amp;#039;&amp;#039;&amp;#039;Sass Tools&amp;#039;&amp;#039;&amp;#039; zurückgreifen. Compass 2.0 soll z.B. auch auf libsass zurückgreifen. Auch NodeJS bringt eine eigene Umsetzung. Auch &amp;#039;&amp;#039;&amp;#039;Tools mit grafischer Oberfläche&amp;#039;&amp;#039;&amp;#039; gibt es mitlerweile. Z.B. Scout-App.&lt;br /&gt;
&lt;br /&gt;
=== Was bringt es ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorteile&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* Wartbarer Code&lt;br /&gt;
* Wiederverwenden von Code&lt;br /&gt;
* Übersicht&lt;br /&gt;
* Gute Erweiterungen z.B. mit Compass&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nachteile&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* Man wird faul und achtet nicht mehr auf schönen CSS Code&lt;br /&gt;
* Abhängigkeit der Webprojekte von weiteren Tools. Z.B. aufpassen bei Änderungen auf dem Server die dann wieder überschrieben werden. Tipp - eine Datei zum Überschreiben die nicht von Sass generiert wird. z.B. custom.css&lt;br /&gt;
* Man geht vor allem beim Old-School Ansatz mit Ruby viele Abhängigkeiten ein (rvm, evtl. homebrew, ...) Das kann extrem Zeit kosten bis alles läuft.&lt;br /&gt;
&lt;br /&gt;
* Schneller Start mit der &amp;#039;&amp;#039;&amp;#039;Scout App&amp;#039;&amp;#039;&amp;#039; (Sass und Compass und alle Abhängigen Libs) Hier wird keine weitere Installation benötigt. In der neuen Version (2016) Läuft es ohne Ruby dafür mit NW.js, Node. Aber oft ist es besser die Sache von der Pike anzugehen.&lt;br /&gt;
* Ruby wird für SASS benötigt (Test in der Konsole mit  ruby -v)&lt;br /&gt;
** Ausnahme: Manche Sass Tools bringen Ruby bereits mit. Z.B. &amp;#039;&amp;#039;&amp;#039;Scout welches Compass und Ruby&amp;#039;&amp;#039;&amp;#039; mitbringt.&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
=== Ohne Konsole ===&lt;br /&gt;
https://pagewizz.com/sass-setup-in-5-minuten-ganz-ohne-ruby-installation-32281/&lt;br /&gt;
&lt;br /&gt;
Scout App&lt;br /&gt;
&lt;br /&gt;
Hier ist die Frage wie man Ruby Gems nutzen kann. Wahrscheinlich muß man schauen daß man die relevanten Files einfach selbst runterlädt und aufräumt. Ist vielleicht eh im Sinne der Übersichtlichkeit und des geringen Overloads.&lt;br /&gt;
&lt;br /&gt;
=== New-School ===&lt;br /&gt;
* libsass oder node.js &lt;br /&gt;
* gulp-sass (siehe [[gulp]])&lt;br /&gt;
&lt;br /&gt;
=== Old-School - Ruby based ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ruby Installieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Siehe [[Ruby]]&lt;br /&gt;
**  Ruby, Sass und Compass installieren (hier findest du eine Anleitung http://compass-style.org/install/). Wenn die Rechte nicht passen immer vorne sudo eingeben um mit Admin Rechten auf der Konsole zu arbeiten.&lt;br /&gt;
** Ruby Updaten falls nötig:&lt;br /&gt;
 gem update --system&lt;br /&gt;
** Wenn Homebrew installiert ist (Paketmanager): brew install ruby&lt;br /&gt;
* Compass Framework als Ruby Gem installieren&lt;br /&gt;
 gem install compass&lt;br /&gt;
 gem compass -v&lt;br /&gt;
* Ordnerstruktur (hängt von der Sass Konfiguration ab.&lt;br /&gt;
** scss Ordner - enthält die Sass Dateien&lt;br /&gt;
** css Ordner - enthält css dateien&lt;br /&gt;
** config.rb - Einstellungen für den Sass Compiler&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Neues Projekt anlegen&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
Im Terminal in Ordner wechseln und z.B.&lt;br /&gt;
 compass/create/meineProjekt&lt;br /&gt;
Erzeugt einen Projekt Ordner mit einer Basis Ordnerstruktur und Dateien&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Projekt kompilieren&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
=== SASS pur ===&lt;br /&gt;
 sass --watch projekt/sass&lt;br /&gt;
Von nun an wird das „/sass“ Verzeichnis überwacht. Wird an einer Datei mit der Endung .scss oder .sass etwas geändert wird diese automatisch kompiliert und als .css Datei ausgegeben. In unserem Fall werden automtisch zwei Dateien mit den Namen „style1.css“ und „style2.css“ angelegt.&lt;br /&gt;
Will man die CSS Dateien in ein separaten Unterordner unterbringen gibt man einfach folgendes ein:&lt;br /&gt;
&lt;br /&gt;
 sass --watch projekt/sass:projekt/css&lt;br /&gt;
Das Verzeichnis VOR dem : gibt die Herkunft der SASS Dateien an (den Input), dass Verzeichnis NACH dem : gibt das Zielverzeichnis für die fertigen CSS Dateien an (den Output).&lt;br /&gt;
=== Mit Compass ===&lt;br /&gt;
Im Terminal im Projektordner&lt;br /&gt;
 compass compile &lt;br /&gt;
Ausgehend von der Konfigurationsdatei werden die CSS Dateien erzeugt.&lt;br /&gt;
&lt;br /&gt;
== Automatisch kompilieren im Watch Mode ==&lt;br /&gt;
Der Compiler kann Dateien überwachen und automatisch kompilieren wenn die Datei sich ändert.&lt;br /&gt;
 compass watch&lt;br /&gt;
&lt;br /&gt;
== SASS Features ==&lt;br /&gt;
=== Variablen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
$color_1: #333;&lt;br /&gt;
body{&lt;br /&gt;
  color: $color_1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Nesting ===&lt;br /&gt;
Statt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#section1{&lt;br /&gt;
  background: pink;&lt;br /&gt;
}&lt;br /&gt;
#section1 h1{&lt;br /&gt;
  color: blue;&lt;br /&gt;
}&lt;br /&gt;
#section.wichtig{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
schreiben wir:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#section1{&lt;br /&gt;
  background: pink;&lt;br /&gt;
  h1{&lt;br /&gt;
    color: blue;&lt;br /&gt;
  }&lt;br /&gt;
  &amp;amp;.wichtig{&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zusatzfunktionen mit Compass ==&lt;br /&gt;
=== CSS3 - Zusatzfunktionen ===&lt;br /&gt;
Über einen import lädt man diverse von Compass mitgelieferte Mixins (s.u.) zum Thema css3. Über include werden dann Browserübergreifende Statments generiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import &amp;quot;compass/css3&amp;quot;;&lt;br /&gt;
.layout-1{&lt;br /&gt;
  @include box-shadow(2px 2px 1px #999);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erzeugt folgendes CSS&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.layout-1 {&lt;br /&gt;
  -moz-box-shadow: 2px 2px 1px #999;&lt;br /&gt;
  -webkit-box-shadow: 2px 2px 1px #999;&lt;br /&gt;
  box-shadow: 2px 2px 1px #999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Browser Reset CSS ===&lt;br /&gt;
Kompass kein Standard Styles für einen Browser Reset erzeugen.&lt;br /&gt;
 @import &amp;quot;compass/reset&amp;quot;;&lt;br /&gt;
=== Components ===&lt;br /&gt;
Auslagern von Teilen geht sehr schön mit Components. Am besten in einen Unterordner. Die Dateinamen beginnen mit einem Unterstrich. Somit weiß Compass, dass es sich um Komponenten handelt. Beim Import läßt man den Unterstrich und das Dattei Suffix (.scss) weg.&lt;br /&gt;
 components&lt;br /&gt;
   - _var.scss&lt;br /&gt;
   - _mixin.scss&lt;br /&gt;
_var&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
$color_1: #333;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eingebunden wird es so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import &amp;quot;components/var&amp;quot;;&lt;br /&gt;
@import &amp;quot;components/mixin&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
.layout-1{&lt;br /&gt;
  color: $color_1;&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Mixins ===&lt;br /&gt;
Mit Mixins kann man einfache Funktionen, ähnlich wie Makros, erzeugen. Man definiert die Funktion mit dem Schlüsselwort @mixin und bindet sie später über include ein. Auch Rechenoperationen sind erlaubt.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;_mixin.scss&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
// Definition der Radius Funktion (bzw. des Mixin)&lt;br /&gt;
@mixin radius($r){&lt;br /&gt;
	-moz-border-radius: $r;&lt;br /&gt;
	-webkit-border-radius: $r+2px;&lt;br /&gt;
	border-radius: $r;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;myScss.scss&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
// Radius Mixin nutzen&lt;br /&gt;
...&lt;br /&gt;
@include radius(4px);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erzeugt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
  -moz-border-radius: 4px;&lt;br /&gt;
  -webkit-border-radius: 6px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vererbung ===&lt;br /&gt;
Über das Schlüsselwort @extend, kann man Stile vererben.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.error{&lt;br /&gt;
  @extend .layout-1; // erbe alle Stile von .layout-1&lt;br /&gt;
  color: red;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sass ohne Konsole ==&lt;br /&gt;
=== Scout-App ===&lt;br /&gt;
https://github.com/scout-app/scout-app&lt;br /&gt;
* Nutzt mitlerweile (Sept 2016) node-sass und chokidar (verbessert die watch Funktionalität)&lt;br /&gt;
* Unterstützt viele Mixins&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@import &amp;quot;compass&amp;quot;; @Igosuki/compass-mixins&lt;br /&gt;
@import &amp;quot;bourbon&amp;quot;; @thoughtbot/bourbon&lt;br /&gt;
@import &amp;quot;neat&amp;quot;; @thoughtbot/neat&lt;br /&gt;
@import &amp;quot;meyer&amp;quot;; @TheJaredWilcurt/meyer-sass&lt;br /&gt;
@import &amp;quot;buttons&amp;quot;; @alexwolfe/Buttons&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bootstrap und SASS ==&lt;br /&gt;
Bootstrap wird mit LESS entwickelt, aber es gibt einen offiziellen SASS Port.&lt;br /&gt;
&lt;br /&gt;
Wenn [[Ruby]] installiert ist kann man einen bootstrap-sass gem installieren, dann kann man später ganz einfach über Compass, Projekte mit Bootstrap erstellen:&lt;br /&gt;
&lt;br /&gt;
Bootstrap Sass Gem installieren &lt;br /&gt;
 gem install bootstrap-sass&lt;br /&gt;
&lt;br /&gt;
Bootstrap Sass zu vorhandenem Compass Projekt hinzufügen&lt;br /&gt;
 compass install bootstrap -r bootstrap-sass&lt;br /&gt;
&lt;br /&gt;
Neues Compass Projekt mit Bootstrap-Sass erstellen (Funktioniert bei mir nicht)&lt;br /&gt;
 compass create my-new-project -r bootstrap-sass --using bootstrap&lt;br /&gt;
&lt;br /&gt;
== Hinweise zu Ruby ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Achtung&amp;#039;&amp;#039;&amp;#039; - da Sass unter Ruby nicht besonders performant ist und inzwischen andere Varianten bereitstehen (z.b. libsass) sollte man auf bessere Tools umsteigen.)&lt;br /&gt;
&lt;br /&gt;
Sass und Compass werden als Ruby Gems installiert. Viele Entwickler sagen man soll Gems mit RVM (ein Ruby Version Manager) installieren. Damit kann man mehrere Ruby Versionen verwalten und vermeidet Probleme mit fehlenden Schreibrechten.) Für viele Zwecke ist das aber Overkill schon wieder einen Paketmanager zu installieren, wenn man nur ein paar Sachen braucht. Es gibt auch einfachere Methoden.&lt;br /&gt;
&lt;br /&gt;
Option 1: Weiter Sudo benutzen aber in anderem Ordner. Sudo ist OK wenn Gems global installiert werden dürfen. Allerdings nicht in /usr/bin. Man kann Sie stattdessen in /usr/local/bin speichern. Dort installiert auch homebrew sein Zeug.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
 sudo gem install fakes3 -n/usr/local/bin&lt;br /&gt;
 &lt;br /&gt;
Gems in /usr/local/bin kann jeder User im System nutzen, wenn der Ordner in der PATH Variable ist.&lt;br /&gt;
&lt;br /&gt;
Option 2: OHNE Sudo im home Verzeichnis&lt;br /&gt;
&lt;br /&gt;
Gems sollen in ~/.gem gespeichert werden und binaries in ~/bin (zu PATH hinzufügen).&lt;br /&gt;
&lt;br /&gt;
 gem install fakes3 --user-install -n~/bin&lt;br /&gt;
&lt;br /&gt;
Either way, you can add these parameters to your ~/.gemrc so you don&amp;#039;t have to remember them:&lt;br /&gt;
&lt;br /&gt;
 gem: -n/usr/local/bin&lt;br /&gt;
i.e. echo &amp;quot;gem: -n/usr/local/bin&amp;quot; &amp;gt;&amp;gt; ~/.gemrc&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 gem: --user-install -n~/bin&lt;br /&gt;
i.e. echo &amp;quot;gem: --user-install -n~/bin&amp;quot; &amp;gt;&amp;gt; ~/.gemrc&lt;br /&gt;
&lt;br /&gt;
(Tip: You can also throw in --no-document to skip generating Ruby developer documentation.)&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=SASS&amp;diff=23259</id>
		<title>SASS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=SASS&amp;diff=23259"/>
		<updated>2018-08-15T06:31:59Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch &lt;br /&gt;
 [[SCSS]]&lt;br /&gt;
 [[LESS]]&lt;br /&gt;
 [[SASS vs SCSS vs LESS vs ?]]&lt;br /&gt;
== Links ==&lt;br /&gt;
* Sass on the fly https://www.sassmeister.com/&lt;br /&gt;
* https://scotch.io/tutorials/getting-started-with-sass (Syntax Tutorial)&lt;br /&gt;
* https://medium.com/@jstubblefield7939/getting-started-with-sass-scss-and-nodejs-6f7b4589aaf2 (Basis Kompilieren mit node-js)&lt;br /&gt;
* [[Sass mit node-sass (Node.js)]] RECOMMENDED&lt;br /&gt;
* https://github.com/scout-app/scout-app oder http://scout-app.io/&lt;br /&gt;
* http://noeticforce.com/best-sass-tools-for-modern-web-design&lt;br /&gt;
Zu Compass&lt;br /&gt;
* http://compass-style.org/install/&lt;br /&gt;
Scout-App&lt;br /&gt;
* http://Scout-App.io&lt;br /&gt;
* https://pagewizz.com/sass-setup-in-5-minuten-ganz-ohne-ruby-installation-32281/ &amp;#039;&amp;#039;&amp;#039;(auch eine gute Sass Einführung)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Übersicht ==&lt;br /&gt;
Die Grundidee hinter der Entwicklung von Sass war es, die Arbeit mit CSS einfacher zu machen, aber gleichzeitig auch den Funktionsumfang zu erhöhen. Daher wurden in Sass Klammern sowie Semikolons entfernt.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Es gibt gute &amp;#039;&amp;#039;&amp;#039;Erweiterungen&amp;#039;&amp;#039;&amp;#039; die z.B. &amp;#039;&amp;#039;&amp;#039;Mixins&amp;#039;&amp;#039;&amp;#039; (s.u.) liefern oder zusätzliche Funktionalität. &lt;br /&gt;
&lt;br /&gt;
Früher lief es nur unter Ruby unter der Konsole. Heute gibt es z.B. libsass eine C Bibliothek auf die diverse &amp;#039;&amp;#039;&amp;#039;Sass Tools&amp;#039;&amp;#039;&amp;#039; zurückgreifen. Compass 2.0 soll z.B. auch auf libsass zurückgreifen. Auch NodeJS bringt eine eigene Umsetzung. Auch &amp;#039;&amp;#039;&amp;#039;Tools mit grafischer Oberfläche&amp;#039;&amp;#039;&amp;#039; gibt es mitlerweile. Z.B. Scout-App.&lt;br /&gt;
&lt;br /&gt;
=== Was bringt es ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorteile&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* Wartbarer Code&lt;br /&gt;
* Wiederverwenden von Code&lt;br /&gt;
* Übersicht&lt;br /&gt;
* Gute Erweiterungen z.B. mit Compass&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nachteile&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* Man wird faul und achtet nicht mehr auf schönen CSS Code&lt;br /&gt;
* Abhängigkeit der Webprojekte von weiteren Tools. Z.B. aufpassen bei Änderungen auf dem Server die dann wieder überschrieben werden. Tipp - eine Datei zum Überschreiben die nicht von Sass generiert wird. z.B. custom.css&lt;br /&gt;
* Man geht vor allem beim Old-School Ansatz mit Ruby viele Abhängigkeiten ein (rvm, evtl. homebrew, ...) Das kann extrem Zeit kosten bis alles läuft.&lt;br /&gt;
&lt;br /&gt;
* Schneller Start mit der &amp;#039;&amp;#039;&amp;#039;Scout App&amp;#039;&amp;#039;&amp;#039; (Sass und Compass und alle Abhängigen Libs) Hier wird keine weitere Installation benötigt. In der neuen Version (2016) Läuft es ohne Ruby dafür mit NW.js, Node. Aber oft ist es besser die Sache von der Pike anzugehen.&lt;br /&gt;
* Ruby wird für SASS benötigt (Test in der Konsole mit  ruby -v)&lt;br /&gt;
** Ausnahme: Manche Sass Tools bringen Ruby bereits mit. Z.B. &amp;#039;&amp;#039;&amp;#039;Scout welches Compass und Ruby&amp;#039;&amp;#039;&amp;#039; mitbringt.&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
=== Ohne Konsole ===&lt;br /&gt;
https://pagewizz.com/sass-setup-in-5-minuten-ganz-ohne-ruby-installation-32281/&lt;br /&gt;
&lt;br /&gt;
Scout App&lt;br /&gt;
&lt;br /&gt;
Hier ist die Frage wie man Ruby Gems nutzen kann. Wahrscheinlich muß man schauen daß man die relevanten Files einfach selbst runterlädt und aufräumt. Ist vielleicht eh im Sinne der Übersichtlichkeit und des geringen Overloads.&lt;br /&gt;
&lt;br /&gt;
=== New-School ===&lt;br /&gt;
* libsass oder node.js &lt;br /&gt;
* gulp-sass (siehe [[gulp]])&lt;br /&gt;
&lt;br /&gt;
=== Old-School - Ruby based ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ruby Installieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Siehe [[Ruby]]&lt;br /&gt;
**  Ruby, Sass und Compass installieren (hier findest du eine Anleitung http://compass-style.org/install/). Wenn die Rechte nicht passen immer vorne sudo eingeben um mit Admin Rechten auf der Konsole zu arbeiten.&lt;br /&gt;
** Ruby Updaten falls nötig:&lt;br /&gt;
 gem update --system&lt;br /&gt;
** Wenn Homebrew installiert ist (Paketmanager): brew install ruby&lt;br /&gt;
* Compass Framework als Ruby Gem installieren&lt;br /&gt;
 gem install compass&lt;br /&gt;
 gem compass -v&lt;br /&gt;
* Ordnerstruktur (hängt von der Sass Konfiguration ab.&lt;br /&gt;
** scss Ordner - enthält die Sass Dateien&lt;br /&gt;
** css Ordner - enthält css dateien&lt;br /&gt;
** config.rb - Einstellungen für den Sass Compiler&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Neues Projekt anlegen&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
Im Terminal in Ordner wechseln und z.B.&lt;br /&gt;
 compass/create/meineProjekt&lt;br /&gt;
Erzeugt einen Projekt Ordner mit einer Basis Ordnerstruktur und Dateien&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Projekt kompilieren&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
=== SASS pur ===&lt;br /&gt;
 sass --watch projekt/sass&lt;br /&gt;
Von nun an wird das „/sass“ Verzeichnis überwacht. Wird an einer Datei mit der Endung .scss oder .sass etwas geändert wird diese automatisch kompiliert und als .css Datei ausgegeben. In unserem Fall werden automtisch zwei Dateien mit den Namen „style1.css“ und „style2.css“ angelegt.&lt;br /&gt;
Will man die CSS Dateien in ein separaten Unterordner unterbringen gibt man einfach folgendes ein:&lt;br /&gt;
&lt;br /&gt;
 sass --watch projekt/sass:projekt/css&lt;br /&gt;
Das Verzeichnis VOR dem : gibt die Herkunft der SASS Dateien an (den Input), dass Verzeichnis NACH dem : gibt das Zielverzeichnis für die fertigen CSS Dateien an (den Output).&lt;br /&gt;
=== Mit Compass ===&lt;br /&gt;
Im Terminal im Projektordner&lt;br /&gt;
 compass compile &lt;br /&gt;
Ausgehend von der Konfigurationsdatei werden die CSS Dateien erzeugt.&lt;br /&gt;
&lt;br /&gt;
== Automatisch kompilieren im Watch Mode ==&lt;br /&gt;
Der Compiler kann Dateien überwachen und automatisch kompilieren wenn die Datei sich ändert.&lt;br /&gt;
 compass watch&lt;br /&gt;
&lt;br /&gt;
== SASS Features ==&lt;br /&gt;
=== Variablen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
$color_1: #333;&lt;br /&gt;
body{&lt;br /&gt;
  color: $color_1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Nesting ===&lt;br /&gt;
Statt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#section1{&lt;br /&gt;
  background: pink;&lt;br /&gt;
}&lt;br /&gt;
#section1 h1{&lt;br /&gt;
  color: blue;&lt;br /&gt;
}&lt;br /&gt;
#section.wichtig{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
schreiben wir:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#section1{&lt;br /&gt;
  background: pink;&lt;br /&gt;
  h1{&lt;br /&gt;
    color: blue;&lt;br /&gt;
  }&lt;br /&gt;
  &amp;amp;.wichtig{&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zusatzfunktionen mit Compass ==&lt;br /&gt;
=== CSS3 - Zusatzfunktionen ===&lt;br /&gt;
Über einen import lädt man diverse von Compass mitgelieferte Mixins (s.u.) zum Thema css3. Über include werden dann Browserübergreifende Statments generiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import &amp;quot;compass/css3&amp;quot;;&lt;br /&gt;
.layout-1{&lt;br /&gt;
  @include box-shadow(2px 2px 1px #999);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erzeugt folgendes CSS&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.layout-1 {&lt;br /&gt;
  -moz-box-shadow: 2px 2px 1px #999;&lt;br /&gt;
  -webkit-box-shadow: 2px 2px 1px #999;&lt;br /&gt;
  box-shadow: 2px 2px 1px #999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Browser Reset CSS ===&lt;br /&gt;
Kompass kein Standard Styles für einen Browser Reset erzeugen.&lt;br /&gt;
 @import &amp;quot;compass/reset&amp;quot;;&lt;br /&gt;
=== Components ===&lt;br /&gt;
Auslagern von Teilen geht sehr schön mit Components. Am besten in einen Unterordner. Die Dateinamen beginnen mit einem Unterstrich. Somit weiß Compass, dass es sich um Komponenten handelt. Beim Import läßt man den Unterstrich und das Dattei Suffix (.scss) weg.&lt;br /&gt;
 components&lt;br /&gt;
   - _var.scss&lt;br /&gt;
   - _mixin.scss&lt;br /&gt;
_var&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
$color_1: #333;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eingebunden wird es so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import &amp;quot;components/var&amp;quot;;&lt;br /&gt;
@import &amp;quot;components/mixin&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
.layout-1{&lt;br /&gt;
  color: $color_1;&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Mixins ===&lt;br /&gt;
Mit Mixins kann man einfache Funktionen, ähnlich wie Makros, erzeugen. Man definiert die Funktion mit dem Schlüsselwort @mixin und bindet sie später über include ein. Auch Rechenoperationen sind erlaubt.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;_mixin.scss&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
// Definition der Radius Funktion (bzw. des Mixin)&lt;br /&gt;
@mixin radius($r){&lt;br /&gt;
	-moz-border-radius: $r;&lt;br /&gt;
	-webkit-border-radius: $r+2px;&lt;br /&gt;
	border-radius: $r;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;myScss.scss&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
// Radius Mixin nutzen&lt;br /&gt;
...&lt;br /&gt;
@include radius(4px);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erzeugt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
  -moz-border-radius: 4px;&lt;br /&gt;
  -webkit-border-radius: 6px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vererbung ===&lt;br /&gt;
Über das Schlüsselwort @extend, kann man Stile vererben.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.error{&lt;br /&gt;
  @extend .layout-1; // erbe alle Stile von .layout-1&lt;br /&gt;
  color: red;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sass ohne Konsole ==&lt;br /&gt;
=== Scout-App ===&lt;br /&gt;
https://github.com/scout-app/scout-app&lt;br /&gt;
* Nutzt mitlerweile (Sept 2016) node-sass und chokidar (verbessert die watch Funktionalität)&lt;br /&gt;
* Unterstützt viele Mixins&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@import &amp;quot;compass&amp;quot;; @Igosuki/compass-mixins&lt;br /&gt;
@import &amp;quot;bourbon&amp;quot;; @thoughtbot/bourbon&lt;br /&gt;
@import &amp;quot;neat&amp;quot;; @thoughtbot/neat&lt;br /&gt;
@import &amp;quot;meyer&amp;quot;; @TheJaredWilcurt/meyer-sass&lt;br /&gt;
@import &amp;quot;buttons&amp;quot;; @alexwolfe/Buttons&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bootstrap und SASS ==&lt;br /&gt;
Bootstrap wird mit LESS entwickelt, aber es gibt einen offiziellen SASS Port.&lt;br /&gt;
&lt;br /&gt;
Wenn [[Ruby]] installiert ist kann man einen bootstrap-sass gem installieren, dann kann man später ganz einfach über Compass, Projekte mit Bootstrap erstellen:&lt;br /&gt;
&lt;br /&gt;
Bootstrap Sass Gem installieren &lt;br /&gt;
 gem install bootstrap-sass&lt;br /&gt;
&lt;br /&gt;
Bootstrap Sass zu vorhandenem Compass Projekt hinzufügen&lt;br /&gt;
 compass install bootstrap -r bootstrap-sass&lt;br /&gt;
&lt;br /&gt;
Neues Compass Projekt mit Bootstrap-Sass erstellen (Funktioniert bei mir nicht)&lt;br /&gt;
 compass create my-new-project -r bootstrap-sass --using bootstrap&lt;br /&gt;
&lt;br /&gt;
== Hinweise zu Ruby ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Achtung&amp;#039;&amp;#039;&amp;#039; - da Sass unter Ruby nicht besonders performant ist und inzwischen andere Varianten bereitstehen (z.b. libsass) sollte man auf bessere Tools umsteigen.)&lt;br /&gt;
&lt;br /&gt;
Sass und Compass werden als Ruby Gems installiert. Viele Entwickler sagen man soll Gems mit RVM (ein Ruby Version Manager) installieren. Damit kann man mehrere Ruby Versionen verwalten und vermeidet Probleme mit fehlenden Schreibrechten.) Für viele Zwecke ist das aber Overkill schon wieder einen Paketmanager zu installieren, wenn man nur ein paar Sachen braucht. Es gibt auch einfachere Methoden.&lt;br /&gt;
&lt;br /&gt;
Option 1: Weiter Sudo benutzen aber in anderem Ordner. Sudo ist OK wenn Gems global installiert werden dürfen. Allerdings nicht in /usr/bin. Man kann Sie stattdessen in /usr/local/bin speichern. Dort installiert auch homebrew sein Zeug.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
 sudo gem install fakes3 -n/usr/local/bin&lt;br /&gt;
 &lt;br /&gt;
Gems in /usr/local/bin kann jeder User im System nutzen, wenn der Ordner in der PATH Variable ist.&lt;br /&gt;
&lt;br /&gt;
Option 2: OHNE Sudo im home Verzeichnis&lt;br /&gt;
&lt;br /&gt;
Gems sollen in ~/.gem gespeichert werden und binaries in ~/bin (zu PATH hinzufügen).&lt;br /&gt;
&lt;br /&gt;
 gem install fakes3 --user-install -n~/bin&lt;br /&gt;
&lt;br /&gt;
Either way, you can add these parameters to your ~/.gemrc so you don&amp;#039;t have to remember them:&lt;br /&gt;
&lt;br /&gt;
 gem: -n/usr/local/bin&lt;br /&gt;
i.e. echo &amp;quot;gem: -n/usr/local/bin&amp;quot; &amp;gt;&amp;gt; ~/.gemrc&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 gem: --user-install -n~/bin&lt;br /&gt;
i.e. echo &amp;quot;gem: --user-install -n~/bin&amp;quot; &amp;gt;&amp;gt; ~/.gemrc&lt;br /&gt;
&lt;br /&gt;
(Tip: You can also throw in --no-document to skip generating Ruby developer documentation.)&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=SASS&amp;diff=23258</id>
		<title>SASS</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=SASS&amp;diff=23258"/>
		<updated>2018-08-15T06:27:12Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch &lt;br /&gt;
 [[SCSS]]&lt;br /&gt;
 [[LESS]]&lt;br /&gt;
== Links ==&lt;br /&gt;
* Sass on the fly https://www.sassmeister.com/&lt;br /&gt;
* https://scotch.io/tutorials/getting-started-with-sass (Syntax Tutorial)&lt;br /&gt;
* https://medium.com/@jstubblefield7939/getting-started-with-sass-scss-and-nodejs-6f7b4589aaf2 (Basis Kompilieren mit node-js)&lt;br /&gt;
* [[Sass mit node-sass (Node.js)]] RECOMMENDED&lt;br /&gt;
* https://github.com/scout-app/scout-app oder http://scout-app.io/&lt;br /&gt;
* http://noeticforce.com/best-sass-tools-for-modern-web-design&lt;br /&gt;
Zu Compass&lt;br /&gt;
* http://compass-style.org/install/&lt;br /&gt;
Scout-App&lt;br /&gt;
* http://Scout-App.io&lt;br /&gt;
* https://pagewizz.com/sass-setup-in-5-minuten-ganz-ohne-ruby-installation-32281/ &amp;#039;&amp;#039;&amp;#039;(auch eine gute Sass Einführung)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Übersicht ==&lt;br /&gt;
Preprozessor für CSS. Ermöglicht &amp;#039;&amp;#039;&amp;#039;Logische Funktionen&amp;#039;&amp;#039;&amp;#039; zu integrieren und generiert aus mehreren Files und der Logik ein finales CSS File. Gut geeignet wenn man schnell ein Farbschema in einem umfangreichen Stylesheet erstellen möchte, da es auch Variablen kennt. &lt;br /&gt;
&lt;br /&gt;
Es gibt gute &amp;#039;&amp;#039;&amp;#039;Erweiterungen&amp;#039;&amp;#039;&amp;#039; die z.B. &amp;#039;&amp;#039;&amp;#039;Mixins&amp;#039;&amp;#039;&amp;#039; (s.u.) liefern oder zusätzliche Funktionalität. &lt;br /&gt;
&lt;br /&gt;
Früher lief es nur unter Ruby unter der Konsole. Heute gibt es z.B. libsass eine C Bibliothek auf die diverse &amp;#039;&amp;#039;&amp;#039;Sass Tools&amp;#039;&amp;#039;&amp;#039; zurückgreifen. Compass 2.0 soll z.B. auch auf libsass zurückgreifen. Auch NodeJS bringt eine eigene Umsetzung. Auch &amp;#039;&amp;#039;&amp;#039;Tools mit grafischer Oberfläche&amp;#039;&amp;#039;&amp;#039; gibt es mitlerweile. Z.B. Scout-App.&lt;br /&gt;
&lt;br /&gt;
=== Was bringt es ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorteile&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* Wartbarer Code&lt;br /&gt;
* Wiederverwenden von Code&lt;br /&gt;
* Übersicht&lt;br /&gt;
* Gute Erweiterungen z.B. mit Compass&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nachteile&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* Man wird faul und achtet nicht mehr auf schönen CSS Code&lt;br /&gt;
* Abhängigkeit der Webprojekte von weiteren Tools. Z.B. aufpassen bei Änderungen auf dem Server die dann wieder überschrieben werden. Tipp - eine Datei zum Überschreiben die nicht von Sass generiert wird. z.B. custom.css&lt;br /&gt;
* Man geht vor allem beim Old-School Ansatz mit Ruby viele Abhängigkeiten ein (rvm, evtl. homebrew, ...) Das kann extrem Zeit kosten bis alles läuft.&lt;br /&gt;
&lt;br /&gt;
* Schneller Start mit der &amp;#039;&amp;#039;&amp;#039;Scout App&amp;#039;&amp;#039;&amp;#039; (Sass und Compass und alle Abhängigen Libs) Hier wird keine weitere Installation benötigt. In der neuen Version (2016) Läuft es ohne Ruby dafür mit NW.js, Node. Aber oft ist es besser die Sache von der Pike anzugehen.&lt;br /&gt;
* Ruby wird für SASS benötigt (Test in der Konsole mit  ruby -v)&lt;br /&gt;
** Ausnahme: Manche Sass Tools bringen Ruby bereits mit. Z.B. &amp;#039;&amp;#039;&amp;#039;Scout welches Compass und Ruby&amp;#039;&amp;#039;&amp;#039; mitbringt.&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
=== Ohne Konsole ===&lt;br /&gt;
https://pagewizz.com/sass-setup-in-5-minuten-ganz-ohne-ruby-installation-32281/&lt;br /&gt;
&lt;br /&gt;
Scout App&lt;br /&gt;
&lt;br /&gt;
Hier ist die Frage wie man Ruby Gems nutzen kann. Wahrscheinlich muß man schauen daß man die relevanten Files einfach selbst runterlädt und aufräumt. Ist vielleicht eh im Sinne der Übersichtlichkeit und des geringen Overloads.&lt;br /&gt;
&lt;br /&gt;
=== New-School ===&lt;br /&gt;
* libsass oder node.js &lt;br /&gt;
* gulp-sass (siehe [[gulp]])&lt;br /&gt;
&lt;br /&gt;
=== Old-School - Ruby based ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ruby Installieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Siehe [[Ruby]]&lt;br /&gt;
**  Ruby, Sass und Compass installieren (hier findest du eine Anleitung http://compass-style.org/install/). Wenn die Rechte nicht passen immer vorne sudo eingeben um mit Admin Rechten auf der Konsole zu arbeiten.&lt;br /&gt;
** Ruby Updaten falls nötig:&lt;br /&gt;
 gem update --system&lt;br /&gt;
** Wenn Homebrew installiert ist (Paketmanager): brew install ruby&lt;br /&gt;
* Compass Framework als Ruby Gem installieren&lt;br /&gt;
 gem install compass&lt;br /&gt;
 gem compass -v&lt;br /&gt;
* Ordnerstruktur (hängt von der Sass Konfiguration ab.&lt;br /&gt;
** scss Ordner - enthält die Sass Dateien&lt;br /&gt;
** css Ordner - enthält css dateien&lt;br /&gt;
** config.rb - Einstellungen für den Sass Compiler&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Neues Projekt anlegen&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
Im Terminal in Ordner wechseln und z.B.&lt;br /&gt;
 compass/create/meineProjekt&lt;br /&gt;
Erzeugt einen Projekt Ordner mit einer Basis Ordnerstruktur und Dateien&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Projekt kompilieren&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
=== SASS pur ===&lt;br /&gt;
 sass --watch projekt/sass&lt;br /&gt;
Von nun an wird das „/sass“ Verzeichnis überwacht. Wird an einer Datei mit der Endung .scss oder .sass etwas geändert wird diese automatisch kompiliert und als .css Datei ausgegeben. In unserem Fall werden automtisch zwei Dateien mit den Namen „style1.css“ und „style2.css“ angelegt.&lt;br /&gt;
Will man die CSS Dateien in ein separaten Unterordner unterbringen gibt man einfach folgendes ein:&lt;br /&gt;
&lt;br /&gt;
 sass --watch projekt/sass:projekt/css&lt;br /&gt;
Das Verzeichnis VOR dem : gibt die Herkunft der SASS Dateien an (den Input), dass Verzeichnis NACH dem : gibt das Zielverzeichnis für die fertigen CSS Dateien an (den Output).&lt;br /&gt;
=== Mit Compass ===&lt;br /&gt;
Im Terminal im Projektordner&lt;br /&gt;
 compass compile &lt;br /&gt;
Ausgehend von der Konfigurationsdatei werden die CSS Dateien erzeugt.&lt;br /&gt;
&lt;br /&gt;
== Automatisch kompilieren im Watch Mode ==&lt;br /&gt;
Der Compiler kann Dateien überwachen und automatisch kompilieren wenn die Datei sich ändert.&lt;br /&gt;
 compass watch&lt;br /&gt;
&lt;br /&gt;
== SASS Features ==&lt;br /&gt;
=== Variablen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
$color_1: #333;&lt;br /&gt;
body{&lt;br /&gt;
  color: $color_1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Nesting ===&lt;br /&gt;
Statt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#section1{&lt;br /&gt;
  background: pink;&lt;br /&gt;
}&lt;br /&gt;
#section1 h1{&lt;br /&gt;
  color: blue;&lt;br /&gt;
}&lt;br /&gt;
#section.wichtig{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
schreiben wir:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#section1{&lt;br /&gt;
  background: pink;&lt;br /&gt;
  h1{&lt;br /&gt;
    color: blue;&lt;br /&gt;
  }&lt;br /&gt;
  &amp;amp;.wichtig{&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zusatzfunktionen mit Compass ==&lt;br /&gt;
=== CSS3 - Zusatzfunktionen ===&lt;br /&gt;
Über einen import lädt man diverse von Compass mitgelieferte Mixins (s.u.) zum Thema css3. Über include werden dann Browserübergreifende Statments generiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import &amp;quot;compass/css3&amp;quot;;&lt;br /&gt;
.layout-1{&lt;br /&gt;
  @include box-shadow(2px 2px 1px #999);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erzeugt folgendes CSS&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.layout-1 {&lt;br /&gt;
  -moz-box-shadow: 2px 2px 1px #999;&lt;br /&gt;
  -webkit-box-shadow: 2px 2px 1px #999;&lt;br /&gt;
  box-shadow: 2px 2px 1px #999;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Browser Reset CSS ===&lt;br /&gt;
Kompass kein Standard Styles für einen Browser Reset erzeugen.&lt;br /&gt;
 @import &amp;quot;compass/reset&amp;quot;;&lt;br /&gt;
=== Components ===&lt;br /&gt;
Auslagern von Teilen geht sehr schön mit Components. Am besten in einen Unterordner. Die Dateinamen beginnen mit einem Unterstrich. Somit weiß Compass, dass es sich um Komponenten handelt. Beim Import läßt man den Unterstrich und das Dattei Suffix (.scss) weg.&lt;br /&gt;
 components&lt;br /&gt;
   - _var.scss&lt;br /&gt;
   - _mixin.scss&lt;br /&gt;
_var&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
$color_1: #333;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eingebunden wird es so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import &amp;quot;components/var&amp;quot;;&lt;br /&gt;
@import &amp;quot;components/mixin&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
.layout-1{&lt;br /&gt;
  color: $color_1;&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Mixins ===&lt;br /&gt;
Mit Mixins kann man einfache Funktionen, ähnlich wie Makros, erzeugen. Man definiert die Funktion mit dem Schlüsselwort @mixin und bindet sie später über include ein. Auch Rechenoperationen sind erlaubt.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;_mixin.scss&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
// Definition der Radius Funktion (bzw. des Mixin)&lt;br /&gt;
@mixin radius($r){&lt;br /&gt;
	-moz-border-radius: $r;&lt;br /&gt;
	-webkit-border-radius: $r+2px;&lt;br /&gt;
	border-radius: $r;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;myScss.scss&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
// Radius Mixin nutzen&lt;br /&gt;
...&lt;br /&gt;
@include radius(4px);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
erzeugt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
  -moz-border-radius: 4px;&lt;br /&gt;
  -webkit-border-radius: 6px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vererbung ===&lt;br /&gt;
Über das Schlüsselwort @extend, kann man Stile vererben.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.error{&lt;br /&gt;
  @extend .layout-1; // erbe alle Stile von .layout-1&lt;br /&gt;
  color: red;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sass ohne Konsole ==&lt;br /&gt;
=== Scout-App ===&lt;br /&gt;
https://github.com/scout-app/scout-app&lt;br /&gt;
* Nutzt mitlerweile (Sept 2016) node-sass und chokidar (verbessert die watch Funktionalität)&lt;br /&gt;
* Unterstützt viele Mixins&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@import &amp;quot;compass&amp;quot;; @Igosuki/compass-mixins&lt;br /&gt;
@import &amp;quot;bourbon&amp;quot;; @thoughtbot/bourbon&lt;br /&gt;
@import &amp;quot;neat&amp;quot;; @thoughtbot/neat&lt;br /&gt;
@import &amp;quot;meyer&amp;quot;; @TheJaredWilcurt/meyer-sass&lt;br /&gt;
@import &amp;quot;buttons&amp;quot;; @alexwolfe/Buttons&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bootstrap und SASS ==&lt;br /&gt;
Bootstrap wird mit LESS entwickelt, aber es gibt einen offiziellen SASS Port.&lt;br /&gt;
&lt;br /&gt;
Wenn [[Ruby]] installiert ist kann man einen bootstrap-sass gem installieren, dann kann man später ganz einfach über Compass, Projekte mit Bootstrap erstellen:&lt;br /&gt;
&lt;br /&gt;
Bootstrap Sass Gem installieren &lt;br /&gt;
 gem install bootstrap-sass&lt;br /&gt;
&lt;br /&gt;
Bootstrap Sass zu vorhandenem Compass Projekt hinzufügen&lt;br /&gt;
 compass install bootstrap -r bootstrap-sass&lt;br /&gt;
&lt;br /&gt;
Neues Compass Projekt mit Bootstrap-Sass erstellen (Funktioniert bei mir nicht)&lt;br /&gt;
 compass create my-new-project -r bootstrap-sass --using bootstrap&lt;br /&gt;
&lt;br /&gt;
== Hinweise zu Ruby ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Achtung&amp;#039;&amp;#039;&amp;#039; - da Sass unter Ruby nicht besonders performant ist und inzwischen andere Varianten bereitstehen (z.b. libsass) sollte man auf bessere Tools umsteigen.)&lt;br /&gt;
&lt;br /&gt;
Sass und Compass werden als Ruby Gems installiert. Viele Entwickler sagen man soll Gems mit RVM (ein Ruby Version Manager) installieren. Damit kann man mehrere Ruby Versionen verwalten und vermeidet Probleme mit fehlenden Schreibrechten.) Für viele Zwecke ist das aber Overkill schon wieder einen Paketmanager zu installieren, wenn man nur ein paar Sachen braucht. Es gibt auch einfachere Methoden.&lt;br /&gt;
&lt;br /&gt;
Option 1: Weiter Sudo benutzen aber in anderem Ordner. Sudo ist OK wenn Gems global installiert werden dürfen. Allerdings nicht in /usr/bin. Man kann Sie stattdessen in /usr/local/bin speichern. Dort installiert auch homebrew sein Zeug.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
 sudo gem install fakes3 -n/usr/local/bin&lt;br /&gt;
 &lt;br /&gt;
Gems in /usr/local/bin kann jeder User im System nutzen, wenn der Ordner in der PATH Variable ist.&lt;br /&gt;
&lt;br /&gt;
Option 2: OHNE Sudo im home Verzeichnis&lt;br /&gt;
&lt;br /&gt;
Gems sollen in ~/.gem gespeichert werden und binaries in ~/bin (zu PATH hinzufügen).&lt;br /&gt;
&lt;br /&gt;
 gem install fakes3 --user-install -n~/bin&lt;br /&gt;
&lt;br /&gt;
Either way, you can add these parameters to your ~/.gemrc so you don&amp;#039;t have to remember them:&lt;br /&gt;
&lt;br /&gt;
 gem: -n/usr/local/bin&lt;br /&gt;
i.e. echo &amp;quot;gem: -n/usr/local/bin&amp;quot; &amp;gt;&amp;gt; ~/.gemrc&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 gem: --user-install -n~/bin&lt;br /&gt;
i.e. echo &amp;quot;gem: --user-install -n~/bin&amp;quot; &amp;gt;&amp;gt; ~/.gemrc&lt;br /&gt;
&lt;br /&gt;
(Tip: You can also throw in --no-document to skip generating Ruby developer documentation.)&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Aligator_(ProcessWire)&amp;diff=23252</id>
		<title>Aligator (ProcessWire)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Aligator_(ProcessWire)&amp;diff=23252"/>
		<updated>2018-08-12T06:59:39Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* UIkit Offcanvas Navigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modul zum Erzeugen von Navigationen. Für meinen Geschmack sehr flexibel und übersichtlich. Bei Standard Menüs etwas mehr PHP Kenntnisse erforderlich. Bei komplexeren Markups und Anforderungen aber erheblich einfacher als bei MarkupSimpleNavigation vom selben Autor.&lt;br /&gt;
== Links ==&lt;br /&gt;
 https://processwire.com/talk/topic/13688-aligator/&lt;br /&gt;
 https://github.com/somatonic/Aligator&lt;br /&gt;
== Funktionsweise ==&lt;br /&gt;
=== Options Array ===&lt;br /&gt;
&lt;br /&gt;
The options array can contain a configuration for each level separately. So each entry represents a level.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array(...), // level 1&lt;br /&gt;
    array(...), // level 2&lt;br /&gt;
    array(...), // level 3&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Render Methode ===&lt;br /&gt;
The render method accepts four arguments and returns the markup as a string:&lt;br /&gt;
 $markup = $modules-&amp;gt;Aligator-&amp;gt;render(root, options, maxlevels, collapsed);&lt;br /&gt;
Root kann sowohl eine Seite als auch ein PageArray sein.&lt;br /&gt;
&lt;br /&gt;
===  Selektoren und Callback ===&lt;br /&gt;
The options array is meant as a configuration for each level and item and contains two entries&lt;br /&gt;
&lt;br /&gt;
 selector&lt;br /&gt;
&lt;br /&gt;
Is a regular ProcessWire selector used to &amp;#039;&amp;#039;&amp;#039;filter children for this level&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 callback&lt;br /&gt;
&lt;br /&gt;
Is an anonymous function that will get &amp;#039;&amp;#039;&amp;#039;called for each page&amp;#039;&amp;#039;&amp;#039; the module renders. It recieves two arguments for you to use: &amp;#039;&amp;#039;&amp;#039;item and level&amp;#039;&amp;#039;&amp;#039; where $item would be the current rendered child page object and $level the current level.&lt;br /&gt;
&lt;br /&gt;
The callback function &amp;#039;&amp;#039;&amp;#039;must return an associative array&amp;#039;&amp;#039;&amp;#039; containing the &amp;#039;&amp;#039;&amp;#039;markups for the current entry and level&amp;#039;&amp;#039;&amp;#039;. Since this is a function, you can use your own logic and conditions to determine the markup you want to render.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Default options ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            // any code here to determine the output&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The array you return in the callback contains various predefined keys to define the markup. They&amp;#039;re pretty self explanatory. If you omit any of these in the returned array, the module will take the default.&lt;br /&gt;
&lt;br /&gt;
=== Praktischer Einsatz ===&lt;br /&gt;
&lt;br /&gt;
Wie in PW üblich entweder direkt das Modul aufrufen oder ein Objekt erzeugen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nav = $modules-&amp;gt;get(&amp;quot;Aligator&amp;quot;);&lt;br /&gt;
// $nav = $modules-&amp;gt;Aligator; // Kurzform&lt;br /&gt;
$menuOptions = array(...);&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root, $menuOptions, $levels = 3, $collaped = false);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Oder direkt rendern &lt;br /&gt;
 $markup = $modules-&amp;gt;Aligator-&amp;gt;render(root, options, maxlevels, collapsed);&lt;br /&gt;
oder auch &lt;br /&gt;
=== Overwrite Default Options ===&lt;br /&gt;
&lt;br /&gt;
You can &amp;#039;&amp;#039;&amp;#039;overwrite the default options&amp;#039;&amp;#039;&amp;#039; the module uses &amp;#039;&amp;#039;&amp;#039;by using the setDefaultOptions() method&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ol&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ol&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
==== Default Options überschreiben ====&lt;br /&gt;
&lt;br /&gt;
Here we &amp;#039;&amp;#039;&amp;#039;set the default options&amp;#039;&amp;#039;&amp;#039;. This will be used to render the markup when the level it renders isn&amp;#039;t defined in the options array. In this example we set only the first level (1 entry) in the options. It will overwrite the default here only using a different &amp;quot;wrapperOpen&amp;quot;. After that &amp;#039;&amp;#039;&amp;#039;the default will be used to render the further levels&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            if($level &amp;lt; 3) $class .= $item-&amp;gt;numChildren(&amp;quot;template=basic-page&amp;quot;) ? &amp;quot; has_children&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;dropdown$level&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array( // overwrite for first level&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;mainnav&amp;#039;&amp;gt;&amp;quot;&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root, $menuOptions, $levels = 3, $collaped = false);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Level unterschiedlich rendern ====&lt;br /&gt;
&lt;br /&gt;
Here we let the default options the module has and &amp;#039;&amp;#039;&amp;#039;specify explicit the options for each level.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array( // level 1&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page|domain_root&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= $item-&amp;gt;numChildren(&amp;quot;template=basic-page&amp;quot;) ? &amp;quot; has_children&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title $item-&amp;gt;template&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;mainnav&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    ),&lt;br /&gt;
    array( // level 2&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= $item-&amp;gt;numChildren(&amp;quot;template=basic-page&amp;quot;) ? &amp;quot; has_children&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;dropdown2&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    ),&lt;br /&gt;
    array( // level 3&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page|entry&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;dropdown3&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    ),&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root, $menuOptions, $levels = 3, $collaped = false);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Homepage hinzufügen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuPages = new PageArray();&lt;br /&gt;
$home = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$menuPages-&amp;gt;add($home-&amp;gt;children());&lt;br /&gt;
$menuPages-&amp;gt;prepend($home);&lt;br /&gt;
&lt;br /&gt;
$content .= $modules-&amp;gt;Aligator-&amp;gt;render($menuPages, array(&lt;br /&gt;
    array( // level1&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;&lt;br /&gt;
    ),&lt;br /&gt;
    array( // level2 : don&amp;#039;t render the children of &amp;quot;home&amp;quot;&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;parent!=1&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
), 3);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$homeUrl = $pages-&amp;gt;get(1)-&amp;gt;url;&lt;br /&gt;
&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator-&amp;gt;render($pages-&amp;gt;get(1), array(&lt;br /&gt;
	array( // level1&lt;br /&gt;
		&amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
		&amp;quot;callback&amp;quot; =&amp;gt; function($item, $level) use($homeUrl){&lt;br /&gt;
			return array(&lt;br /&gt;
				&amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;#039;$homeUrl&amp;#039;&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
			);&lt;br /&gt;
		}&lt;br /&gt;
	)&lt;br /&gt;
), 3);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What else&lt;br /&gt;
&lt;br /&gt;
Nothing else. With these spare examples you should be able grasp the concept and use it and render navigations like crazy.&lt;br /&gt;
&lt;br /&gt;
Any feedback or improvements are welcome.&lt;br /&gt;
&lt;br /&gt;
== Praxis Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== UIkit Metamenu ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
$selector = &amp;#039;menus.id=2&amp;#039;;//only metamenu items&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
	&amp;#039;selector&amp;#039; =&amp;gt; $selector,&lt;br /&gt;
	&amp;#039;callback&amp;#039; =&amp;gt; function($item, $level){&lt;br /&gt;
		$item === wire(&amp;#039;page&amp;#039;) ? $liClasses = &amp;#039;el-item uk-active&amp;#039; : $liClasses = &amp;#039;el-item&amp;#039;;&lt;br /&gt;
		return array(&lt;br /&gt;
			&amp;#039;item&amp;#039; =&amp;gt; &amp;#039;&amp;lt;a class=&amp;quot;el-link&amp;quot; href=&amp;quot;&amp;#039;.$item-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$item-&amp;gt;title.&amp;#039;&amp;lt;/a&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;listOpen&amp;#039; =&amp;gt; &amp;#039;&amp;lt;li class=&amp;quot;&amp;#039;.$liClasses.&amp;#039;&amp;quot;&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;listClose&amp;#039; =&amp;gt; &amp;#039;&amp;lt;/li&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;wrapperOpen&amp;#039; =&amp;gt; &amp;#039;&amp;lt;ul class=&amp;quot;uk-subnav uk-margin-remove-bottom uk-subnav-divider uk-flex-center&amp;quot; uk-margin&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;wrapperClose&amp;#039; =&amp;gt; &amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;,&lt;br /&gt;
		);&lt;br /&gt;
	})&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root,array(), $levels = 1, $collaped = true);&lt;br /&gt;
echo $markup;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UIkit Navigation ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;header.inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;header class=&amp;#039;uk-background-transparent&amp;#039;&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;#039;masthead&amp;#039; class=&amp;quot;uk-container&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;?php include(&amp;#039;nav-navbar-mobile.inc&amp;#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php include(&amp;#039;nav-navbar-desktop.inc&amp;#039;); ?&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/header&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;nav-navbar-mobile.inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
	&amp;lt;nav id=&amp;#039;navbar-mobile&amp;#039; class=&amp;quot;uk-navbar-container uk-navbar-transparent uk-hidden@m&amp;quot; uk-navbar&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;uk-navbar-left&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;uk-navbar-toggle&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;a id=&amp;#039;offcanvas-toggle&amp;#039; class=&amp;#039;&amp;#039; href=&amp;quot;#offcanvas-nav&amp;quot; uk-toggle&amp;gt;&lt;br /&gt;
					&amp;lt;div uk-navbar-toggle-icon&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;uk-navbar-center&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;uk-navbar-item&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;a class=&amp;quot;uk-logo&amp;quot; href=&amp;quot;&amp;lt;?= $root ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;img class=&amp;quot;logo&amp;quot; src=&amp;quot;&amp;lt;?= $brandmarkImage-&amp;gt;url?&amp;gt;&amp;quot; class=&amp;quot;uk-responsive-height&amp;quot; alt=&amp;quot;&amp;lt;?=$brandmarkImage-&amp;gt;description?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/nav&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
nav-navbar-desktop.inc&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
TODO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Therapiezirkel (Main Menu) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
$menuPages = new PageArray();&lt;br /&gt;
$home = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$nav-&amp;gt;enableStates = true; // enable states (&amp;quot;parent current has_children first last&amp;quot;)&lt;br /&gt;
$nav-&amp;gt;levels = 2; // set max levels to render&lt;br /&gt;
&lt;br /&gt;
// the default options for all levels&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level, $states){&lt;br /&gt;
            // $states is a string of item state classes to insert somewhere&lt;br /&gt;
            $classes = $states ? &amp;quot; class=&amp;#039;$states&amp;#039;&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $template = $item-&amp;gt;template;&lt;br /&gt;
						// Handle Dropdown $items&lt;br /&gt;
&lt;br /&gt;
						$ddAttribute = &amp;quot;&amp;quot;;&lt;br /&gt;
						$ddLink = &amp;quot;&amp;quot;;&lt;br /&gt;
						if( $item-&amp;gt;numChildren() ) {&lt;br /&gt;
							$ddAttribute = &amp;quot; data-ix=&amp;#039;open-dd-res&amp;#039;&amp;quot;;&lt;br /&gt;
							$ddLink =  &amp;#039;&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;w-inline-block arrow-ico-res&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-angle-down&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
						}&lt;br /&gt;
						// Handle Placeholder code&lt;br /&gt;
            if($template-&amp;gt;name == &amp;quot;placeholder&amp;quot;){&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div$ddAttribute class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;#&amp;#039; class=&amp;#039;res-txt&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;$ddLink&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            else {&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039; class=&amp;#039;res-txt animsition-link&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            return array(&lt;br /&gt;
              // todo animsition-link only when has children&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; $itemString,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li$classes&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;w-list-unstyled dd-big-res&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
// render the menu&lt;br /&gt;
$markup = $nav-&amp;gt;render($home, array(&lt;br /&gt;
    array( // LEVEL 1&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;menus.id=1&amp;quot;,&lt;br /&gt;
				&amp;quot;callback&amp;quot; =&amp;gt; function($item, $level) use($home){&lt;br /&gt;
					return array(&lt;br /&gt;
						//add homepage&lt;br /&gt;
						&amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;w-list-unstyled dd-big-res&amp;#039;&amp;gt;&lt;br /&gt;
							&amp;lt;li&amp;gt;&amp;lt;div class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;$home-&amp;gt;httpUrl&amp;#039; class=&amp;#039;res-txt animsition-link&amp;#039;&amp;gt;$home-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;&lt;br /&gt;
					);&lt;br /&gt;
				}&lt;br /&gt;
    ),&lt;br /&gt;
    array( // LEVEL 2&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;menus.id=1&amp;quot;,&lt;br /&gt;
				&amp;quot;callback&amp;quot; =&amp;gt; function($item, $level, $states){&lt;br /&gt;
            // $states is a string of item state classes to insert somewhere&lt;br /&gt;
            $classes = $states ? &amp;quot; class=&amp;#039;$states&amp;#039;&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $template = $item-&amp;gt;template;&lt;br /&gt;
						// Handle Dropdown $items&lt;br /&gt;
						$ddAttribute = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
						// Handle Placeholder code&lt;br /&gt;
            if($template-&amp;gt;name == &amp;quot;placeholder&amp;quot;){&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div$ddAttribute class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;#&amp;#039; class=&amp;#039;res-txt&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            else {&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039; class=&amp;#039;res-txt animsition-link&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            return array(&lt;br /&gt;
              // todo animsition-link only when has children&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; $itemString,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li$classes&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;w-list-unstyled dd-res&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;#039;&lt;br /&gt;
&amp;lt;!-- Mobile NAVIGATION --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;w-hidden-main&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;responsive-menu&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;w-container&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;a href=&amp;quot;index.html&amp;quot; class=&amp;quot;w-inline-block brand-logo more-margin animsition-link&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;img width=&amp;quot;135&amp;quot; src=&amp;quot;&amp;#039;.$config-&amp;gt;urls-&amp;gt;templates.&amp;#039;images/logo-therapiezirkel.png&amp;quot; alt=&amp;quot;logo&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;div data-ix=&amp;quot;open-responsive-menu&amp;quot; class=&amp;quot;hamburger&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;w-embed&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;button class=&amp;quot;c-hamburger c-hamburger--htx&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;span&amp;gt;toggle menu&amp;lt;/span&amp;gt;&lt;br /&gt;
					&amp;lt;/button&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&amp;lt;!-- .responsive-menu end --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;nav class=&amp;quot;responsive-nav&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;w-container&amp;quot;&amp;gt;&lt;br /&gt;
  	&amp;#039;.$markup.&amp;#039;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/nav&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Mobile NAVIGATION END--&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Aligator_(ProcessWire)&amp;diff=23251</id>
		<title>Aligator (ProcessWire)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Aligator_(ProcessWire)&amp;diff=23251"/>
		<updated>2018-08-12T05:38:43Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Praxis Beispiele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modul zum Erzeugen von Navigationen. Für meinen Geschmack sehr flexibel und übersichtlich. Bei Standard Menüs etwas mehr PHP Kenntnisse erforderlich. Bei komplexeren Markups und Anforderungen aber erheblich einfacher als bei MarkupSimpleNavigation vom selben Autor.&lt;br /&gt;
== Links ==&lt;br /&gt;
 https://processwire.com/talk/topic/13688-aligator/&lt;br /&gt;
 https://github.com/somatonic/Aligator&lt;br /&gt;
== Funktionsweise ==&lt;br /&gt;
=== Options Array ===&lt;br /&gt;
&lt;br /&gt;
The options array can contain a configuration for each level separately. So each entry represents a level.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array(...), // level 1&lt;br /&gt;
    array(...), // level 2&lt;br /&gt;
    array(...), // level 3&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Render Methode ===&lt;br /&gt;
The render method accepts four arguments and returns the markup as a string:&lt;br /&gt;
 $markup = $modules-&amp;gt;Aligator-&amp;gt;render(root, options, maxlevels, collapsed);&lt;br /&gt;
Root kann sowohl eine Seite als auch ein PageArray sein.&lt;br /&gt;
&lt;br /&gt;
===  Selektoren und Callback ===&lt;br /&gt;
The options array is meant as a configuration for each level and item and contains two entries&lt;br /&gt;
&lt;br /&gt;
 selector&lt;br /&gt;
&lt;br /&gt;
Is a regular ProcessWire selector used to &amp;#039;&amp;#039;&amp;#039;filter children for this level&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 callback&lt;br /&gt;
&lt;br /&gt;
Is an anonymous function that will get &amp;#039;&amp;#039;&amp;#039;called for each page&amp;#039;&amp;#039;&amp;#039; the module renders. It recieves two arguments for you to use: &amp;#039;&amp;#039;&amp;#039;item and level&amp;#039;&amp;#039;&amp;#039; where $item would be the current rendered child page object and $level the current level.&lt;br /&gt;
&lt;br /&gt;
The callback function &amp;#039;&amp;#039;&amp;#039;must return an associative array&amp;#039;&amp;#039;&amp;#039; containing the &amp;#039;&amp;#039;&amp;#039;markups for the current entry and level&amp;#039;&amp;#039;&amp;#039;. Since this is a function, you can use your own logic and conditions to determine the markup you want to render.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Default options ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            // any code here to determine the output&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The array you return in the callback contains various predefined keys to define the markup. They&amp;#039;re pretty self explanatory. If you omit any of these in the returned array, the module will take the default.&lt;br /&gt;
&lt;br /&gt;
=== Praktischer Einsatz ===&lt;br /&gt;
&lt;br /&gt;
Wie in PW üblich entweder direkt das Modul aufrufen oder ein Objekt erzeugen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nav = $modules-&amp;gt;get(&amp;quot;Aligator&amp;quot;);&lt;br /&gt;
// $nav = $modules-&amp;gt;Aligator; // Kurzform&lt;br /&gt;
$menuOptions = array(...);&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root, $menuOptions, $levels = 3, $collaped = false);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Oder direkt rendern &lt;br /&gt;
 $markup = $modules-&amp;gt;Aligator-&amp;gt;render(root, options, maxlevels, collapsed);&lt;br /&gt;
oder auch &lt;br /&gt;
=== Overwrite Default Options ===&lt;br /&gt;
&lt;br /&gt;
You can &amp;#039;&amp;#039;&amp;#039;overwrite the default options&amp;#039;&amp;#039;&amp;#039; the module uses &amp;#039;&amp;#039;&amp;#039;by using the setDefaultOptions() method&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ol&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ol&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
==== Default Options überschreiben ====&lt;br /&gt;
&lt;br /&gt;
Here we &amp;#039;&amp;#039;&amp;#039;set the default options&amp;#039;&amp;#039;&amp;#039;. This will be used to render the markup when the level it renders isn&amp;#039;t defined in the options array. In this example we set only the first level (1 entry) in the options. It will overwrite the default here only using a different &amp;quot;wrapperOpen&amp;quot;. After that &amp;#039;&amp;#039;&amp;#039;the default will be used to render the further levels&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            if($level &amp;lt; 3) $class .= $item-&amp;gt;numChildren(&amp;quot;template=basic-page&amp;quot;) ? &amp;quot; has_children&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;dropdown$level&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array( // overwrite for first level&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;mainnav&amp;#039;&amp;gt;&amp;quot;&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root, $menuOptions, $levels = 3, $collaped = false);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Level unterschiedlich rendern ====&lt;br /&gt;
&lt;br /&gt;
Here we let the default options the module has and &amp;#039;&amp;#039;&amp;#039;specify explicit the options for each level.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array( // level 1&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page|domain_root&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= $item-&amp;gt;numChildren(&amp;quot;template=basic-page&amp;quot;) ? &amp;quot; has_children&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title $item-&amp;gt;template&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;mainnav&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    ),&lt;br /&gt;
    array( // level 2&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= $item-&amp;gt;numChildren(&amp;quot;template=basic-page&amp;quot;) ? &amp;quot; has_children&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;dropdown2&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    ),&lt;br /&gt;
    array( // level 3&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page|entry&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;dropdown3&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    ),&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root, $menuOptions, $levels = 3, $collaped = false);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Homepage hinzufügen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuPages = new PageArray();&lt;br /&gt;
$home = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$menuPages-&amp;gt;add($home-&amp;gt;children());&lt;br /&gt;
$menuPages-&amp;gt;prepend($home);&lt;br /&gt;
&lt;br /&gt;
$content .= $modules-&amp;gt;Aligator-&amp;gt;render($menuPages, array(&lt;br /&gt;
    array( // level1&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;&lt;br /&gt;
    ),&lt;br /&gt;
    array( // level2 : don&amp;#039;t render the children of &amp;quot;home&amp;quot;&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;parent!=1&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
), 3);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$homeUrl = $pages-&amp;gt;get(1)-&amp;gt;url;&lt;br /&gt;
&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator-&amp;gt;render($pages-&amp;gt;get(1), array(&lt;br /&gt;
	array( // level1&lt;br /&gt;
		&amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
		&amp;quot;callback&amp;quot; =&amp;gt; function($item, $level) use($homeUrl){&lt;br /&gt;
			return array(&lt;br /&gt;
				&amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;#039;$homeUrl&amp;#039;&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
			);&lt;br /&gt;
		}&lt;br /&gt;
	)&lt;br /&gt;
), 3);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What else&lt;br /&gt;
&lt;br /&gt;
Nothing else. With these spare examples you should be able grasp the concept and use it and render navigations like crazy.&lt;br /&gt;
&lt;br /&gt;
Any feedback or improvements are welcome.&lt;br /&gt;
&lt;br /&gt;
== Praxis Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== UIkit Metamenu ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
$selector = &amp;#039;menus.id=2&amp;#039;;//only metamenu items&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
	&amp;#039;selector&amp;#039; =&amp;gt; $selector,&lt;br /&gt;
	&amp;#039;callback&amp;#039; =&amp;gt; function($item, $level){&lt;br /&gt;
		$item === wire(&amp;#039;page&amp;#039;) ? $liClasses = &amp;#039;el-item uk-active&amp;#039; : $liClasses = &amp;#039;el-item&amp;#039;;&lt;br /&gt;
		return array(&lt;br /&gt;
			&amp;#039;item&amp;#039; =&amp;gt; &amp;#039;&amp;lt;a class=&amp;quot;el-link&amp;quot; href=&amp;quot;&amp;#039;.$item-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$item-&amp;gt;title.&amp;#039;&amp;lt;/a&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;listOpen&amp;#039; =&amp;gt; &amp;#039;&amp;lt;li class=&amp;quot;&amp;#039;.$liClasses.&amp;#039;&amp;quot;&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;listClose&amp;#039; =&amp;gt; &amp;#039;&amp;lt;/li&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;wrapperOpen&amp;#039; =&amp;gt; &amp;#039;&amp;lt;ul class=&amp;quot;uk-subnav uk-margin-remove-bottom uk-subnav-divider uk-flex-center&amp;quot; uk-margin&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;wrapperClose&amp;#039; =&amp;gt; &amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;,&lt;br /&gt;
		);&lt;br /&gt;
	})&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root,array(), $levels = 1, $collaped = true);&lt;br /&gt;
echo $markup;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UIkit Offcanvas Navigation ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;nav-offcanvas-toggle.inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- OFFCANVAS NAV TOGGLE --&amp;gt;&lt;br /&gt;
&amp;lt;a id=&amp;#039;offcanvas-toggle&amp;#039; class=&amp;#039;uk-hidden@m&amp;#039; href=&amp;quot;#offcanvas-nav&amp;quot; uk-toggle&amp;gt;&lt;br /&gt;
	&amp;lt;?=ukIcon(&amp;#039;menu&amp;#039;, 1.3)?&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;nav-offcanvas.inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Therapiezirkel (Main Menu) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
$menuPages = new PageArray();&lt;br /&gt;
$home = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$nav-&amp;gt;enableStates = true; // enable states (&amp;quot;parent current has_children first last&amp;quot;)&lt;br /&gt;
$nav-&amp;gt;levels = 2; // set max levels to render&lt;br /&gt;
&lt;br /&gt;
// the default options for all levels&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level, $states){&lt;br /&gt;
            // $states is a string of item state classes to insert somewhere&lt;br /&gt;
            $classes = $states ? &amp;quot; class=&amp;#039;$states&amp;#039;&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $template = $item-&amp;gt;template;&lt;br /&gt;
						// Handle Dropdown $items&lt;br /&gt;
&lt;br /&gt;
						$ddAttribute = &amp;quot;&amp;quot;;&lt;br /&gt;
						$ddLink = &amp;quot;&amp;quot;;&lt;br /&gt;
						if( $item-&amp;gt;numChildren() ) {&lt;br /&gt;
							$ddAttribute = &amp;quot; data-ix=&amp;#039;open-dd-res&amp;#039;&amp;quot;;&lt;br /&gt;
							$ddLink =  &amp;#039;&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;w-inline-block arrow-ico-res&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-angle-down&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
						}&lt;br /&gt;
						// Handle Placeholder code&lt;br /&gt;
            if($template-&amp;gt;name == &amp;quot;placeholder&amp;quot;){&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div$ddAttribute class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;#&amp;#039; class=&amp;#039;res-txt&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;$ddLink&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            else {&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039; class=&amp;#039;res-txt animsition-link&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            return array(&lt;br /&gt;
              // todo animsition-link only when has children&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; $itemString,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li$classes&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;w-list-unstyled dd-big-res&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
// render the menu&lt;br /&gt;
$markup = $nav-&amp;gt;render($home, array(&lt;br /&gt;
    array( // LEVEL 1&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;menus.id=1&amp;quot;,&lt;br /&gt;
				&amp;quot;callback&amp;quot; =&amp;gt; function($item, $level) use($home){&lt;br /&gt;
					return array(&lt;br /&gt;
						//add homepage&lt;br /&gt;
						&amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;w-list-unstyled dd-big-res&amp;#039;&amp;gt;&lt;br /&gt;
							&amp;lt;li&amp;gt;&amp;lt;div class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;$home-&amp;gt;httpUrl&amp;#039; class=&amp;#039;res-txt animsition-link&amp;#039;&amp;gt;$home-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;&lt;br /&gt;
					);&lt;br /&gt;
				}&lt;br /&gt;
    ),&lt;br /&gt;
    array( // LEVEL 2&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;menus.id=1&amp;quot;,&lt;br /&gt;
				&amp;quot;callback&amp;quot; =&amp;gt; function($item, $level, $states){&lt;br /&gt;
            // $states is a string of item state classes to insert somewhere&lt;br /&gt;
            $classes = $states ? &amp;quot; class=&amp;#039;$states&amp;#039;&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $template = $item-&amp;gt;template;&lt;br /&gt;
						// Handle Dropdown $items&lt;br /&gt;
						$ddAttribute = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
						// Handle Placeholder code&lt;br /&gt;
            if($template-&amp;gt;name == &amp;quot;placeholder&amp;quot;){&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div$ddAttribute class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;#&amp;#039; class=&amp;#039;res-txt&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            else {&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039; class=&amp;#039;res-txt animsition-link&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            return array(&lt;br /&gt;
              // todo animsition-link only when has children&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; $itemString,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li$classes&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;w-list-unstyled dd-res&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;#039;&lt;br /&gt;
&amp;lt;!-- Mobile NAVIGATION --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;w-hidden-main&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;responsive-menu&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;w-container&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;a href=&amp;quot;index.html&amp;quot; class=&amp;quot;w-inline-block brand-logo more-margin animsition-link&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;img width=&amp;quot;135&amp;quot; src=&amp;quot;&amp;#039;.$config-&amp;gt;urls-&amp;gt;templates.&amp;#039;images/logo-therapiezirkel.png&amp;quot; alt=&amp;quot;logo&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;div data-ix=&amp;quot;open-responsive-menu&amp;quot; class=&amp;quot;hamburger&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;w-embed&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;button class=&amp;quot;c-hamburger c-hamburger--htx&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;span&amp;gt;toggle menu&amp;lt;/span&amp;gt;&lt;br /&gt;
					&amp;lt;/button&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&amp;lt;!-- .responsive-menu end --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;nav class=&amp;quot;responsive-nav&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;w-container&amp;quot;&amp;gt;&lt;br /&gt;
  	&amp;#039;.$markup.&amp;#039;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/nav&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Mobile NAVIGATION END--&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Aligator_(ProcessWire)&amp;diff=23250</id>
		<title>Aligator (ProcessWire)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Aligator_(ProcessWire)&amp;diff=23250"/>
		<updated>2018-08-12T05:30:51Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Beispiele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modul zum Erzeugen von Navigationen. Für meinen Geschmack sehr flexibel und übersichtlich. Bei Standard Menüs etwas mehr PHP Kenntnisse erforderlich. Bei komplexeren Markups und Anforderungen aber erheblich einfacher als bei MarkupSimpleNavigation vom selben Autor.&lt;br /&gt;
== Links ==&lt;br /&gt;
 https://processwire.com/talk/topic/13688-aligator/&lt;br /&gt;
 https://github.com/somatonic/Aligator&lt;br /&gt;
== Funktionsweise ==&lt;br /&gt;
=== Options Array ===&lt;br /&gt;
&lt;br /&gt;
The options array can contain a configuration for each level separately. So each entry represents a level.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array(...), // level 1&lt;br /&gt;
    array(...), // level 2&lt;br /&gt;
    array(...), // level 3&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Render Methode ===&lt;br /&gt;
The render method accepts four arguments and returns the markup as a string:&lt;br /&gt;
 $markup = $modules-&amp;gt;Aligator-&amp;gt;render(root, options, maxlevels, collapsed);&lt;br /&gt;
Root kann sowohl eine Seite als auch ein PageArray sein.&lt;br /&gt;
&lt;br /&gt;
===  Selektoren und Callback ===&lt;br /&gt;
The options array is meant as a configuration for each level and item and contains two entries&lt;br /&gt;
&lt;br /&gt;
 selector&lt;br /&gt;
&lt;br /&gt;
Is a regular ProcessWire selector used to &amp;#039;&amp;#039;&amp;#039;filter children for this level&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 callback&lt;br /&gt;
&lt;br /&gt;
Is an anonymous function that will get &amp;#039;&amp;#039;&amp;#039;called for each page&amp;#039;&amp;#039;&amp;#039; the module renders. It recieves two arguments for you to use: &amp;#039;&amp;#039;&amp;#039;item and level&amp;#039;&amp;#039;&amp;#039; where $item would be the current rendered child page object and $level the current level.&lt;br /&gt;
&lt;br /&gt;
The callback function &amp;#039;&amp;#039;&amp;#039;must return an associative array&amp;#039;&amp;#039;&amp;#039; containing the &amp;#039;&amp;#039;&amp;#039;markups for the current entry and level&amp;#039;&amp;#039;&amp;#039;. Since this is a function, you can use your own logic and conditions to determine the markup you want to render.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Default options ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            // any code here to determine the output&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The array you return in the callback contains various predefined keys to define the markup. They&amp;#039;re pretty self explanatory. If you omit any of these in the returned array, the module will take the default.&lt;br /&gt;
&lt;br /&gt;
=== Praktischer Einsatz ===&lt;br /&gt;
&lt;br /&gt;
Wie in PW üblich entweder direkt das Modul aufrufen oder ein Objekt erzeugen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nav = $modules-&amp;gt;get(&amp;quot;Aligator&amp;quot;);&lt;br /&gt;
// $nav = $modules-&amp;gt;Aligator; // Kurzform&lt;br /&gt;
$menuOptions = array(...);&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root, $menuOptions, $levels = 3, $collaped = false);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Oder direkt rendern &lt;br /&gt;
 $markup = $modules-&amp;gt;Aligator-&amp;gt;render(root, options, maxlevels, collapsed);&lt;br /&gt;
oder auch &lt;br /&gt;
=== Overwrite Default Options ===&lt;br /&gt;
&lt;br /&gt;
You can &amp;#039;&amp;#039;&amp;#039;overwrite the default options&amp;#039;&amp;#039;&amp;#039; the module uses &amp;#039;&amp;#039;&amp;#039;by using the setDefaultOptions() method&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ol&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ol&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
==== Default Options überschreiben ====&lt;br /&gt;
&lt;br /&gt;
Here we &amp;#039;&amp;#039;&amp;#039;set the default options&amp;#039;&amp;#039;&amp;#039;. This will be used to render the markup when the level it renders isn&amp;#039;t defined in the options array. In this example we set only the first level (1 entry) in the options. It will overwrite the default here only using a different &amp;quot;wrapperOpen&amp;quot;. After that &amp;#039;&amp;#039;&amp;#039;the default will be used to render the further levels&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            if($level &amp;lt; 3) $class .= $item-&amp;gt;numChildren(&amp;quot;template=basic-page&amp;quot;) ? &amp;quot; has_children&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;dropdown$level&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array( // overwrite for first level&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;mainnav&amp;#039;&amp;gt;&amp;quot;&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root, $menuOptions, $levels = 3, $collaped = false);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Level unterschiedlich rendern ====&lt;br /&gt;
&lt;br /&gt;
Here we let the default options the module has and &amp;#039;&amp;#039;&amp;#039;specify explicit the options for each level.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array( // level 1&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page|domain_root&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= $item-&amp;gt;numChildren(&amp;quot;template=basic-page&amp;quot;) ? &amp;quot; has_children&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title $item-&amp;gt;template&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;mainnav&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    ),&lt;br /&gt;
    array( // level 2&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= $item-&amp;gt;numChildren(&amp;quot;template=basic-page&amp;quot;) ? &amp;quot; has_children&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;dropdown2&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    ),&lt;br /&gt;
    array( // level 3&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page|entry&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;dropdown3&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    ),&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root, $menuOptions, $levels = 3, $collaped = false);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Homepage hinzufügen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuPages = new PageArray();&lt;br /&gt;
$home = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$menuPages-&amp;gt;add($home-&amp;gt;children());&lt;br /&gt;
$menuPages-&amp;gt;prepend($home);&lt;br /&gt;
&lt;br /&gt;
$content .= $modules-&amp;gt;Aligator-&amp;gt;render($menuPages, array(&lt;br /&gt;
    array( // level1&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;&lt;br /&gt;
    ),&lt;br /&gt;
    array( // level2 : don&amp;#039;t render the children of &amp;quot;home&amp;quot;&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;parent!=1&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
), 3);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$homeUrl = $pages-&amp;gt;get(1)-&amp;gt;url;&lt;br /&gt;
&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator-&amp;gt;render($pages-&amp;gt;get(1), array(&lt;br /&gt;
	array( // level1&lt;br /&gt;
		&amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
		&amp;quot;callback&amp;quot; =&amp;gt; function($item, $level) use($homeUrl){&lt;br /&gt;
			return array(&lt;br /&gt;
				&amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;#039;$homeUrl&amp;#039;&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
			);&lt;br /&gt;
		}&lt;br /&gt;
	)&lt;br /&gt;
), 3);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What else&lt;br /&gt;
&lt;br /&gt;
Nothing else. With these spare examples you should be able grasp the concept and use it and render navigations like crazy.&lt;br /&gt;
&lt;br /&gt;
Any feedback or improvements are welcome.&lt;br /&gt;
&lt;br /&gt;
== Praxis Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== UIkit Metamenu ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
$selector = &amp;#039;menus.id=2&amp;#039;;//only metamenu items&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
	&amp;#039;selector&amp;#039; =&amp;gt; $selector,&lt;br /&gt;
	&amp;#039;callback&amp;#039; =&amp;gt; function($item, $level){&lt;br /&gt;
		$item === wire(&amp;#039;page&amp;#039;) ? $liClasses = &amp;#039;el-item uk-active&amp;#039; : $liClasses = &amp;#039;el-item&amp;#039;;&lt;br /&gt;
		return array(&lt;br /&gt;
			&amp;#039;item&amp;#039; =&amp;gt; &amp;#039;&amp;lt;a class=&amp;quot;el-link&amp;quot; href=&amp;quot;&amp;#039;.$item-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$item-&amp;gt;title.&amp;#039;&amp;lt;/a&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;listOpen&amp;#039; =&amp;gt; &amp;#039;&amp;lt;li class=&amp;quot;&amp;#039;.$liClasses.&amp;#039;&amp;quot;&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;listClose&amp;#039; =&amp;gt; &amp;#039;&amp;lt;/li&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;wrapperOpen&amp;#039; =&amp;gt; &amp;#039;&amp;lt;ul class=&amp;quot;uk-subnav uk-margin-remove-bottom uk-subnav-divider uk-flex-center&amp;quot; uk-margin&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;wrapperClose&amp;#039; =&amp;gt; &amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;,&lt;br /&gt;
		);&lt;br /&gt;
	})&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root,array(), $levels = 1, $collaped = true);&lt;br /&gt;
echo $markup;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Therapiezirkel (Main Menu) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
$menuPages = new PageArray();&lt;br /&gt;
$home = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$nav-&amp;gt;enableStates = true; // enable states (&amp;quot;parent current has_children first last&amp;quot;)&lt;br /&gt;
$nav-&amp;gt;levels = 2; // set max levels to render&lt;br /&gt;
&lt;br /&gt;
// the default options for all levels&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level, $states){&lt;br /&gt;
            // $states is a string of item state classes to insert somewhere&lt;br /&gt;
            $classes = $states ? &amp;quot; class=&amp;#039;$states&amp;#039;&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $template = $item-&amp;gt;template;&lt;br /&gt;
						// Handle Dropdown $items&lt;br /&gt;
&lt;br /&gt;
						$ddAttribute = &amp;quot;&amp;quot;;&lt;br /&gt;
						$ddLink = &amp;quot;&amp;quot;;&lt;br /&gt;
						if( $item-&amp;gt;numChildren() ) {&lt;br /&gt;
							$ddAttribute = &amp;quot; data-ix=&amp;#039;open-dd-res&amp;#039;&amp;quot;;&lt;br /&gt;
							$ddLink =  &amp;#039;&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;w-inline-block arrow-ico-res&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-angle-down&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
						}&lt;br /&gt;
						// Handle Placeholder code&lt;br /&gt;
            if($template-&amp;gt;name == &amp;quot;placeholder&amp;quot;){&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div$ddAttribute class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;#&amp;#039; class=&amp;#039;res-txt&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;$ddLink&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            else {&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039; class=&amp;#039;res-txt animsition-link&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            return array(&lt;br /&gt;
              // todo animsition-link only when has children&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; $itemString,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li$classes&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;w-list-unstyled dd-big-res&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
// render the menu&lt;br /&gt;
$markup = $nav-&amp;gt;render($home, array(&lt;br /&gt;
    array( // LEVEL 1&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;menus.id=1&amp;quot;,&lt;br /&gt;
				&amp;quot;callback&amp;quot; =&amp;gt; function($item, $level) use($home){&lt;br /&gt;
					return array(&lt;br /&gt;
						//add homepage&lt;br /&gt;
						&amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;w-list-unstyled dd-big-res&amp;#039;&amp;gt;&lt;br /&gt;
							&amp;lt;li&amp;gt;&amp;lt;div class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;$home-&amp;gt;httpUrl&amp;#039; class=&amp;#039;res-txt animsition-link&amp;#039;&amp;gt;$home-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;&lt;br /&gt;
					);&lt;br /&gt;
				}&lt;br /&gt;
    ),&lt;br /&gt;
    array( // LEVEL 2&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;menus.id=1&amp;quot;,&lt;br /&gt;
				&amp;quot;callback&amp;quot; =&amp;gt; function($item, $level, $states){&lt;br /&gt;
            // $states is a string of item state classes to insert somewhere&lt;br /&gt;
            $classes = $states ? &amp;quot; class=&amp;#039;$states&amp;#039;&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $template = $item-&amp;gt;template;&lt;br /&gt;
						// Handle Dropdown $items&lt;br /&gt;
						$ddAttribute = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
						// Handle Placeholder code&lt;br /&gt;
            if($template-&amp;gt;name == &amp;quot;placeholder&amp;quot;){&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div$ddAttribute class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;#&amp;#039; class=&amp;#039;res-txt&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            else {&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039; class=&amp;#039;res-txt animsition-link&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            return array(&lt;br /&gt;
              // todo animsition-link only when has children&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; $itemString,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li$classes&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;w-list-unstyled dd-res&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;#039;&lt;br /&gt;
&amp;lt;!-- Mobile NAVIGATION --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;w-hidden-main&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;responsive-menu&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;w-container&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;a href=&amp;quot;index.html&amp;quot; class=&amp;quot;w-inline-block brand-logo more-margin animsition-link&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;img width=&amp;quot;135&amp;quot; src=&amp;quot;&amp;#039;.$config-&amp;gt;urls-&amp;gt;templates.&amp;#039;images/logo-therapiezirkel.png&amp;quot; alt=&amp;quot;logo&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;div data-ix=&amp;quot;open-responsive-menu&amp;quot; class=&amp;quot;hamburger&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;w-embed&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;button class=&amp;quot;c-hamburger c-hamburger--htx&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;span&amp;gt;toggle menu&amp;lt;/span&amp;gt;&lt;br /&gt;
					&amp;lt;/button&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&amp;lt;!-- .responsive-menu end --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;nav class=&amp;quot;responsive-nav&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;w-container&amp;quot;&amp;gt;&lt;br /&gt;
  	&amp;#039;.$markup.&amp;#039;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/nav&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Mobile NAVIGATION END--&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Aligator_(ProcessWire)&amp;diff=23249</id>
		<title>Aligator (ProcessWire)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Aligator_(ProcessWire)&amp;diff=23249"/>
		<updated>2018-08-09T10:25:42Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Komplettes Beispiel 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modul zum Erzeugen von Navigationen. Für meinen Geschmack sehr flexibel und übersichtlich. Bei Standard Menüs etwas mehr PHP Kenntnisse erforderlich. Bei komplexeren Markups und Anforderungen aber erheblich einfacher als bei MarkupSimpleNavigation vom selben Autor.&lt;br /&gt;
== Links ==&lt;br /&gt;
 https://processwire.com/talk/topic/13688-aligator/&lt;br /&gt;
 https://github.com/somatonic/Aligator&lt;br /&gt;
== Funktionsweise ==&lt;br /&gt;
=== Options Array ===&lt;br /&gt;
&lt;br /&gt;
The options array can contain a configuration for each level separately. So each entry represents a level.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array(...), // level 1&lt;br /&gt;
    array(...), // level 2&lt;br /&gt;
    array(...), // level 3&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Render Methode ===&lt;br /&gt;
The render method accepts four arguments and returns the markup as a string:&lt;br /&gt;
 $markup = $modules-&amp;gt;Aligator-&amp;gt;render(root, options, maxlevels, collapsed);&lt;br /&gt;
Root kann sowohl eine Seite als auch ein PageArray sein.&lt;br /&gt;
&lt;br /&gt;
===  Selektoren und Callback ===&lt;br /&gt;
The options array is meant as a configuration for each level and item and contains two entries&lt;br /&gt;
&lt;br /&gt;
 selector&lt;br /&gt;
&lt;br /&gt;
Is a regular ProcessWire selector used to &amp;#039;&amp;#039;&amp;#039;filter children for this level&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 callback&lt;br /&gt;
&lt;br /&gt;
Is an anonymous function that will get &amp;#039;&amp;#039;&amp;#039;called for each page&amp;#039;&amp;#039;&amp;#039; the module renders. It recieves two arguments for you to use: &amp;#039;&amp;#039;&amp;#039;item and level&amp;#039;&amp;#039;&amp;#039; where $item would be the current rendered child page object and $level the current level.&lt;br /&gt;
&lt;br /&gt;
The callback function &amp;#039;&amp;#039;&amp;#039;must return an associative array&amp;#039;&amp;#039;&amp;#039; containing the &amp;#039;&amp;#039;&amp;#039;markups for the current entry and level&amp;#039;&amp;#039;&amp;#039;. Since this is a function, you can use your own logic and conditions to determine the markup you want to render.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Default options ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            // any code here to determine the output&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The array you return in the callback contains various predefined keys to define the markup. They&amp;#039;re pretty self explanatory. If you omit any of these in the returned array, the module will take the default.&lt;br /&gt;
&lt;br /&gt;
=== Praktischer Einsatz ===&lt;br /&gt;
&lt;br /&gt;
Wie in PW üblich entweder direkt das Modul aufrufen oder ein Objekt erzeugen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nav = $modules-&amp;gt;get(&amp;quot;Aligator&amp;quot;);&lt;br /&gt;
// $nav = $modules-&amp;gt;Aligator; // Kurzform&lt;br /&gt;
$menuOptions = array(...);&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root, $menuOptions, $levels = 3, $collaped = false);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Oder direkt rendern &lt;br /&gt;
 $markup = $modules-&amp;gt;Aligator-&amp;gt;render(root, options, maxlevels, collapsed);&lt;br /&gt;
oder auch &lt;br /&gt;
=== Overwrite Default Options ===&lt;br /&gt;
&lt;br /&gt;
You can &amp;#039;&amp;#039;&amp;#039;overwrite the default options&amp;#039;&amp;#039;&amp;#039; the module uses &amp;#039;&amp;#039;&amp;#039;by using the setDefaultOptions() method&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ol&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ol&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
==== Default Options überschreiben ====&lt;br /&gt;
&lt;br /&gt;
Here we &amp;#039;&amp;#039;&amp;#039;set the default options&amp;#039;&amp;#039;&amp;#039;. This will be used to render the markup when the level it renders isn&amp;#039;t defined in the options array. In this example we set only the first level (1 entry) in the options. It will overwrite the default here only using a different &amp;quot;wrapperOpen&amp;quot;. After that &amp;#039;&amp;#039;&amp;#039;the default will be used to render the further levels&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            if($level &amp;lt; 3) $class .= $item-&amp;gt;numChildren(&amp;quot;template=basic-page&amp;quot;) ? &amp;quot; has_children&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;dropdown$level&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array( // overwrite for first level&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;mainnav&amp;#039;&amp;gt;&amp;quot;&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root, $menuOptions, $levels = 3, $collaped = false);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Level unterschiedlich rendern ====&lt;br /&gt;
&lt;br /&gt;
Here we let the default options the module has and &amp;#039;&amp;#039;&amp;#039;specify explicit the options for each level.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
    array( // level 1&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page|domain_root&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= $item-&amp;gt;numChildren(&amp;quot;template=basic-page&amp;quot;) ? &amp;quot; has_children&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title $item-&amp;gt;template&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;mainnav&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    ),&lt;br /&gt;
    array( // level 2&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= $item-&amp;gt;numChildren(&amp;quot;template=basic-page&amp;quot;) ? &amp;quot; has_children&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;dropdown2&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    ),&lt;br /&gt;
    array( // level 3&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;template=basic-page|entry&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level){&lt;br /&gt;
            $class = $item === wire(&amp;quot;page&amp;quot;) ? &amp;quot; current&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $class .= wire(&amp;quot;page&amp;quot;)-&amp;gt;parents-&amp;gt;has($item) ? &amp;quot; parent&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            return array(&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li class=&amp;#039;level$level$class&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;dropdown3&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        },&lt;br /&gt;
    ),&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root, $menuOptions, $levels = 3, $collaped = false);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Homepage hinzufügen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$menuPages = new PageArray();&lt;br /&gt;
$home = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$menuPages-&amp;gt;add($home-&amp;gt;children());&lt;br /&gt;
$menuPages-&amp;gt;prepend($home);&lt;br /&gt;
&lt;br /&gt;
$content .= $modules-&amp;gt;Aligator-&amp;gt;render($menuPages, array(&lt;br /&gt;
    array( // level1&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;&lt;br /&gt;
    ),&lt;br /&gt;
    array( // level2 : don&amp;#039;t render the children of &amp;quot;home&amp;quot;&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;parent!=1&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
), 3);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$homeUrl = $pages-&amp;gt;get(1)-&amp;gt;url;&lt;br /&gt;
&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator-&amp;gt;render($pages-&amp;gt;get(1), array(&lt;br /&gt;
	array( // level1&lt;br /&gt;
		&amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
		&amp;quot;callback&amp;quot; =&amp;gt; function($item, $level) use($homeUrl){&lt;br /&gt;
			return array(&lt;br /&gt;
				&amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;#039;$homeUrl&amp;#039;&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
			);&lt;br /&gt;
		}&lt;br /&gt;
	)&lt;br /&gt;
), 3);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What else&lt;br /&gt;
&lt;br /&gt;
Nothing else. With these spare examples you should be able grasp the concept and use it and render navigations like crazy.&lt;br /&gt;
&lt;br /&gt;
Any feedback or improvements are welcome.&lt;br /&gt;
&lt;br /&gt;
==== Metamenu ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
&lt;br /&gt;
$nav = $modules-&amp;gt;get(&amp;quot;Aligator&amp;quot;);&lt;br /&gt;
// $nav = $modules-&amp;gt;Aligator; // Kurzform&lt;br /&gt;
$menuOptions = array(&lt;br /&gt;
	&amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;menus.id=2&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
$root = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
$markup = $nav-&amp;gt;render($root, $menuOptions, $levels = 1, $collaped = true);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Default Options:&lt;br /&gt;
&amp;quot;item&amp;quot; =&amp;gt; &amp;quot;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;quot;,&lt;br /&gt;
&amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li$classes&amp;gt;&amp;quot;,&lt;br /&gt;
&amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
&amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul&amp;gt;&amp;quot;,&lt;br /&gt;
&amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Default States:&lt;br /&gt;
	&amp;quot;is_parent&amp;quot; =&amp;gt; &amp;quot;parent&amp;quot;,&lt;br /&gt;
	&amp;quot;is_current&amp;quot; =&amp;gt; &amp;quot;current&amp;quot;,&lt;br /&gt;
	&amp;quot;has_children&amp;quot; =&amp;gt; &amp;quot;has_children&amp;quot;,&lt;br /&gt;
	&amp;quot;is_first&amp;quot; =&amp;gt; &amp;quot;first&amp;quot;,&lt;br /&gt;
	&amp;quot;is_last&amp;quot; =&amp;gt; &amp;quot;last&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
echo $markup;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Therapiezirkel (Main Menu) ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
&lt;br /&gt;
$nav = $modules-&amp;gt;Aligator;&lt;br /&gt;
$menuPages = new PageArray();&lt;br /&gt;
$home = $pages-&amp;gt;get(&amp;quot;/&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$nav-&amp;gt;enableStates = true; // enable states (&amp;quot;parent current has_children first last&amp;quot;)&lt;br /&gt;
$nav-&amp;gt;levels = 2; // set max levels to render&lt;br /&gt;
&lt;br /&gt;
// the default options for all levels&lt;br /&gt;
$nav-&amp;gt;setDefaultOptions(array(&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;callback&amp;quot; =&amp;gt; function($item, $level, $states){&lt;br /&gt;
            // $states is a string of item state classes to insert somewhere&lt;br /&gt;
            $classes = $states ? &amp;quot; class=&amp;#039;$states&amp;#039;&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $template = $item-&amp;gt;template;&lt;br /&gt;
						// Handle Dropdown $items&lt;br /&gt;
&lt;br /&gt;
						$ddAttribute = &amp;quot;&amp;quot;;&lt;br /&gt;
						$ddLink = &amp;quot;&amp;quot;;&lt;br /&gt;
						if( $item-&amp;gt;numChildren() ) {&lt;br /&gt;
							$ddAttribute = &amp;quot; data-ix=&amp;#039;open-dd-res&amp;#039;&amp;quot;;&lt;br /&gt;
							$ddLink =  &amp;#039;&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;w-inline-block arrow-ico-res&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-angle-down&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
						}&lt;br /&gt;
						// Handle Placeholder code&lt;br /&gt;
            if($template-&amp;gt;name == &amp;quot;placeholder&amp;quot;){&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div$ddAttribute class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;#&amp;#039; class=&amp;#039;res-txt&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;$ddLink&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            else {&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039; class=&amp;#039;res-txt animsition-link&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            return array(&lt;br /&gt;
              // todo animsition-link only when has children&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; $itemString,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li$classes&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;w-list-unstyled dd-big-res&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
// render the menu&lt;br /&gt;
$markup = $nav-&amp;gt;render($home, array(&lt;br /&gt;
    array( // LEVEL 1&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;menus.id=1&amp;quot;,&lt;br /&gt;
				&amp;quot;callback&amp;quot; =&amp;gt; function($item, $level) use($home){&lt;br /&gt;
					return array(&lt;br /&gt;
						//add homepage&lt;br /&gt;
						&amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;w-list-unstyled dd-big-res&amp;#039;&amp;gt;&lt;br /&gt;
							&amp;lt;li&amp;gt;&amp;lt;div class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;$home-&amp;gt;httpUrl&amp;#039; class=&amp;#039;res-txt animsition-link&amp;#039;&amp;gt;$home-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;&lt;br /&gt;
					);&lt;br /&gt;
				}&lt;br /&gt;
    ),&lt;br /&gt;
    array( // LEVEL 2&lt;br /&gt;
        &amp;quot;selector&amp;quot; =&amp;gt; &amp;quot;menus.id=1&amp;quot;,&lt;br /&gt;
				&amp;quot;callback&amp;quot; =&amp;gt; function($item, $level, $states){&lt;br /&gt;
            // $states is a string of item state classes to insert somewhere&lt;br /&gt;
            $classes = $states ? &amp;quot; class=&amp;#039;$states&amp;#039;&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
            $template = $item-&amp;gt;template;&lt;br /&gt;
						// Handle Dropdown $items&lt;br /&gt;
						$ddAttribute = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
						// Handle Placeholder code&lt;br /&gt;
            if($template-&amp;gt;name == &amp;quot;placeholder&amp;quot;){&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div$ddAttribute class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;#&amp;#039; class=&amp;#039;res-txt&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            else {&lt;br /&gt;
							$itemString = &amp;quot;&amp;lt;div class=&amp;#039;w-clearfix nav-res-link&amp;#039;&amp;gt;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039; class=&amp;#039;res-txt animsition-link&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
						}&lt;br /&gt;
            return array(&lt;br /&gt;
              // todo animsition-link only when has children&lt;br /&gt;
                &amp;quot;item&amp;quot; =&amp;gt; $itemString,&lt;br /&gt;
                &amp;quot;listOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;li$classes&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;listClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperOpen&amp;quot; =&amp;gt; &amp;quot;&amp;lt;ul class=&amp;#039;w-list-unstyled dd-res&amp;#039;&amp;gt;&amp;quot;,&lt;br /&gt;
                &amp;quot;wrapperClose&amp;quot; =&amp;gt; &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;,&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;#039;&lt;br /&gt;
&amp;lt;!-- Mobile NAVIGATION --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;w-hidden-main&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;responsive-menu&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;w-container&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;a href=&amp;quot;index.html&amp;quot; class=&amp;quot;w-inline-block brand-logo more-margin animsition-link&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;img width=&amp;quot;135&amp;quot; src=&amp;quot;&amp;#039;.$config-&amp;gt;urls-&amp;gt;templates.&amp;#039;images/logo-therapiezirkel.png&amp;quot; alt=&amp;quot;logo&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;div data-ix=&amp;quot;open-responsive-menu&amp;quot; class=&amp;quot;hamburger&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;w-embed&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;button class=&amp;quot;c-hamburger c-hamburger--htx&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;span&amp;gt;toggle menu&amp;lt;/span&amp;gt;&lt;br /&gt;
					&amp;lt;/button&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&amp;lt;!-- .responsive-menu end --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;nav class=&amp;quot;responsive-nav&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;w-container&amp;quot;&amp;gt;&lt;br /&gt;
  	&amp;#039;.$markup.&amp;#039;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/nav&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Mobile NAVIGATION END--&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Navigation_Beispiele&amp;diff=23248</id>
		<title>ProcessWire - Navigation Beispiele</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Navigation_Beispiele&amp;diff=23248"/>
		<updated>2018-08-09T10:22:50Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Siehe auch ==&lt;br /&gt;
 [[ProcessWire - Navigation Snippets]]&lt;br /&gt;
 http://wiki.zone30.info/wikizone/index.php?title=Aligator_(ProcessWire)#Komplettes_Beispiel_1&lt;br /&gt;
&lt;br /&gt;
== Mit MarkupSimpleNavigation Modul ==&lt;br /&gt;
=== Multilevel Navigation mit diversen Klassen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
&lt;br /&gt;
$prependHomepage = 0;&lt;br /&gt;
foreach($homepage-&amp;gt;menus as $item) {&lt;br /&gt;
  if($item-&amp;gt;id == 1) $prependHomepage = 1;&lt;br /&gt;
}&lt;br /&gt;
if($prependHomepage) {&lt;br /&gt;
	$pa = $homepage-&amp;gt;and($homepage-&amp;gt;children(&amp;quot;menus.id=1&amp;quot;)); &lt;br /&gt;
}else $pa = $homepage-&amp;gt;children(&amp;quot;menus.id=1&amp;quot;);&lt;br /&gt;
// additional MarkupSimpleNavigation Filter&lt;br /&gt;
$selector = &amp;#039;menus.id=1&amp;#039;; // filter works only for first level because markup simple navigation renders children by itself. This is why we need extra selector&lt;br /&gt;
&lt;br /&gt;
$outer_tpl = &amp;#039;&amp;lt;ul class=&amp;quot; ul-nav&amp;quot;&amp;gt;||&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
$inner_tpl = &amp;#039;&amp;lt;ul&amp;gt;||&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
$list_tpl = &amp;#039;&amp;lt;li%s&amp;gt;||&amp;lt;/li&amp;gt;&amp;#039;;//%s is where classes form parent_class etc. goes&lt;br /&gt;
$item_tpl = &amp;#039;&amp;lt;a href=&amp;quot;{url}&amp;quot; class=&amp;quot;nav-link&amp;quot;&amp;gt;{headline|title}&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
$item_current_tpl =&amp;#039;&amp;lt;a href=&amp;quot;{url}&amp;quot; class=&amp;quot;current nav-link&amp;quot;&amp;gt;{headline|title}&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$myMenu = $modules-&amp;gt;get(&amp;quot;MarkupSimpleNavigation&amp;quot;); // load the module&lt;br /&gt;
$options = array(&lt;br /&gt;
    &amp;#039;parent_class&amp;#039; =&amp;gt; &amp;#039;parent&amp;#039;,	// goes in li classes&lt;br /&gt;
    &amp;#039;current_class&amp;#039; =&amp;gt; &amp;#039;current&amp;#039;, // goes in li classes&lt;br /&gt;
    &amp;#039;has_children_class&amp;#039; =&amp;gt; &amp;#039;has_children&amp;#039;, // goes in li classes&lt;br /&gt;
    &amp;#039;levels&amp;#039; =&amp;gt; true,&lt;br /&gt;
    &amp;#039;levels_prefix&amp;#039; =&amp;gt; &amp;#039;l-&amp;#039;,//goes in li classes&lt;br /&gt;
    &amp;#039;max_levels&amp;#039; =&amp;gt; 4,&lt;br /&gt;
    &amp;#039;firstlast&amp;#039; =&amp;gt; true,&lt;br /&gt;
    &amp;#039;collapsed&amp;#039; =&amp;gt; false,&lt;br /&gt;
    &amp;#039;show_root&amp;#039; =&amp;gt; false,&lt;br /&gt;
    &amp;#039;outer_tpl&amp;#039; =&amp;gt; $outer_tpl, // usually the ul part&lt;br /&gt;
    &amp;#039;inner_tpl&amp;#039; =&amp;gt; $inner_tpl, // usually inner ul tags&lt;br /&gt;
    &amp;#039;list_tpl&amp;#039; =&amp;gt; $list_tpl,&lt;br /&gt;
    &amp;#039;list_field_class&amp;#039; =&amp;gt; &amp;#039;&amp;#039;,&lt;br /&gt;
    &amp;#039;item_tpl&amp;#039; =&amp;gt; $item_tpl,&lt;br /&gt;
    &amp;#039;item_current_tpl&amp;#039; =&amp;gt; $item_current_tpl,&lt;br /&gt;
    &amp;#039;xtemplates&amp;#039; =&amp;gt; &amp;#039;&amp;#039;,&lt;br /&gt;
    &amp;#039;selector&amp;#039; =&amp;gt; $selector,&lt;br /&gt;
    &amp;#039;date_format&amp;#039; =&amp;gt; &amp;#039;d.m.Y&amp;#039;,&lt;br /&gt;
    &amp;#039;code_formatting&amp;#039; =&amp;gt; false,&lt;br /&gt;
    &amp;#039;debug&amp;#039; =&amp;gt; false&lt;br /&gt;
);&lt;br /&gt;
$out = &amp;#039;&lt;br /&gt;
&amp;lt;nav&amp;gt;&lt;br /&gt;
&amp;#039;.$myMenu-&amp;gt;render($options,null,$pa).&amp;#039;&lt;br /&gt;
&amp;lt;/nav&amp;gt;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
echo $out;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sidebar Navigation für MaterializeCSS ===&lt;br /&gt;
Beispiel orig. aus prantner.de. Nutzt ein Selectfeld um im Backen zu bestimmen ob eine Seite aufgeführt wird. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
&lt;br /&gt;
$pages-&amp;gt;get(1001)-&amp;gt;my_selector = &amp;quot;template=projects&amp;quot;;&lt;br /&gt;
$pa = $homepage-&amp;gt;and($homepage-&amp;gt;children(&amp;quot;menus.id=1&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$outer_tpl = &amp;#039;&amp;lt;ul id=&amp;quot;slide-out&amp;quot; class=&amp;quot;sidenav&amp;quot;&amp;gt;||&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
//if($configpage-&amp;gt;nav_type-&amp;gt;value == 1) $outer_tpl = &amp;#039;&amp;lt;ul id=&amp;quot;slide-out&amp;quot; class=&amp;quot;sidenav sidenav-fixed&amp;quot;&amp;gt;||&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
$sideMenu = $modules-&amp;gt;get(&amp;quot;MarkupSimpleNavigation&amp;quot;); // load the module&lt;br /&gt;
$options = array(&lt;br /&gt;
    &amp;#039;parent_class&amp;#039; =&amp;gt; &amp;#039;parent&amp;#039;,&lt;br /&gt;
    &amp;#039;current_class&amp;#039; =&amp;gt; &amp;#039;current&amp;#039;,&lt;br /&gt;
    &amp;#039;has_children_class&amp;#039; =&amp;gt; &amp;#039;has_children&amp;#039;,&lt;br /&gt;
    &amp;#039;levels&amp;#039; =&amp;gt; true,&lt;br /&gt;
    &amp;#039;levels_prefix&amp;#039; =&amp;gt; &amp;#039;l-&amp;#039;,&lt;br /&gt;
    &amp;#039;max_levels&amp;#039; =&amp;gt; 4,&lt;br /&gt;
    &amp;#039;firstlast&amp;#039; =&amp;gt; true,&lt;br /&gt;
    &amp;#039;collapsed&amp;#039; =&amp;gt; false,&lt;br /&gt;
    &amp;#039;show_root&amp;#039; =&amp;gt; false,&lt;br /&gt;
    &amp;#039;selector&amp;#039; =&amp;gt; &amp;#039;&amp;#039;,&lt;br /&gt;
    &amp;#039;selector_field&amp;#039; =&amp;gt; &amp;#039;nav_selector&amp;#039;,&lt;br /&gt;
    &amp;#039;outer_tpl&amp;#039; =&amp;gt; $outer_tpl,&lt;br /&gt;
    &amp;#039;inner_tpl&amp;#039; =&amp;gt; &amp;#039;&amp;lt;ul&amp;gt;||&amp;lt;/ul&amp;gt;&amp;#039;,&lt;br /&gt;
    &amp;#039;list_tpl&amp;#039; =&amp;gt; &amp;#039;&amp;lt;li%s&amp;gt;||&amp;lt;/li&amp;gt;&amp;#039;,&lt;br /&gt;
    &amp;#039;list_field_class&amp;#039; =&amp;gt; &amp;#039;&amp;#039;,&lt;br /&gt;
    &amp;#039;item_tpl&amp;#039; =&amp;gt; &amp;#039;&amp;lt;a href=&amp;quot;{url}&amp;quot;&amp;gt;{title}&amp;lt;/a&amp;gt;&amp;#039;,&lt;br /&gt;
    &amp;#039;item_current_tpl&amp;#039; =&amp;gt; &amp;#039;&amp;lt;a class=&amp;quot;cur&amp;quot; href=&amp;quot;{url}&amp;quot;&amp;gt;{title}&amp;lt;/a&amp;gt;&amp;#039;,&lt;br /&gt;
    &amp;#039;xtemplates&amp;#039; =&amp;gt; &amp;#039;&amp;#039;,&lt;br /&gt;
    &amp;#039;xitem_tpl&amp;#039; =&amp;gt; &amp;#039;&amp;lt;a href=&amp;quot;{url}&amp;quot;&amp;gt;{title}&amp;lt;/a&amp;gt;&amp;#039;,&lt;br /&gt;
    &amp;#039;xitem_current_tpl&amp;#039; =&amp;gt; &amp;#039;&amp;lt;span class=&amp;quot;cur&amp;quot;&amp;gt;{title}&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
    &amp;#039;date_format&amp;#039; =&amp;gt; &amp;#039;d.m.Y&amp;#039;,&lt;br /&gt;
    &amp;#039;code_formatting&amp;#039; =&amp;gt; false,&lt;br /&gt;
    &amp;#039;debug&amp;#039; =&amp;gt; false&lt;br /&gt;
);&lt;br /&gt;
$out = $sideMenu-&amp;gt;render($options,null,$pa);&lt;br /&gt;
&lt;br /&gt;
$out .= &amp;#039;&lt;br /&gt;
&amp;lt;a href=&amp;quot;#&amp;quot; data-target=&amp;quot;slide-out&amp;quot; class=&amp;quot;sidenav-trigger&amp;quot; style=&amp;quot;margin-left:0;&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;material-icons&amp;quot;&amp;gt;menu&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
echo $out;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Previous Next Navigation mit Auswahlfeld im Backend ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Main Template&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;!-- footer --&amp;gt;&lt;br /&gt;
	&amp;lt;?php include(&amp;quot;partials/nav/nav-page.inc&amp;quot;); ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;nav-page.inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Page Prev Next Navigation&lt;br /&gt;
 */&lt;br /&gt;
$next = &amp;#039;&amp;#039;;&lt;br /&gt;
$prev = &amp;#039;&amp;#039;;&lt;br /&gt;
$navPageMarkup = &amp;#039;&amp;#039;;&lt;br /&gt;
if($page-&amp;gt;show_prev_next){&lt;br /&gt;
	if($page-&amp;gt;next-&amp;gt;id){&lt;br /&gt;
		$next = &amp;#039;&lt;br /&gt;
				&amp;lt;span class=&amp;quot;page-title next table-cell&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;a href=&amp;quot;&amp;#039;.$page-&amp;gt;next-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;#039;.$page-&amp;gt;next-&amp;gt;title.&amp;#039;&lt;br /&gt;
					&amp;lt;/a&amp;gt;&lt;br /&gt;
				&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;span class=&amp;quot;nav-icon next table-cell&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;amp;nbsp;&lt;br /&gt;
					&amp;lt;a href=&amp;quot;&amp;#039;.$page-&amp;gt;next-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;i class=&amp;quot;fa fa-chevron-right&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
					&amp;lt;/a&amp;gt;&lt;br /&gt;
				&amp;lt;/span&amp;gt;&lt;br /&gt;
			&amp;lt;/span&amp;gt;&lt;br /&gt;
		&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if($page-&amp;gt;prev-&amp;gt;id){&lt;br /&gt;
		$prev = &amp;#039;&lt;br /&gt;
				&amp;lt;span class=&amp;quot;nav-icon prev table-cell&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;a href=&amp;quot;&amp;#039;.$page-&amp;gt;prev-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;i class=&amp;quot;fa fa-chevron-left&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
					&amp;lt;/a&amp;gt;&lt;br /&gt;
					&amp;amp;nbsp;&lt;br /&gt;
				&amp;lt;/span&amp;gt;&lt;br /&gt;
				&amp;lt;span class=&amp;quot;page-title prev table-cell&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;a href=&amp;quot;&amp;#039;.$page-&amp;gt;prev-&amp;gt;url.&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;#039;.$page-&amp;gt;prev-&amp;gt;title.&amp;#039;&lt;br /&gt;
					&amp;lt;/a&amp;gt;&lt;br /&gt;
				&amp;lt;/span&amp;gt;&lt;br /&gt;
		&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$navPageMarkup = &amp;#039;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;section v2 nav-page hide-on-small-only&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;row container no-margin-bot&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;col s12 nav-page&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;page-nav-wrap table&amp;quot; style=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;table-row&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;#039;.$prev.$next.&amp;#039;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;!--&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;--&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
echo $navPageMarkup;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Siehe_CSS_-_Flexbox&amp;diff=23247</id>
		<title>Siehe CSS - Flexbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Siehe_CSS_-_Flexbox&amp;diff=23247"/>
		<updated>2018-08-07T21:49:41Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Beispiele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
https://medium.freecodecamp.org/the-ultimate-guide-to-flexbox-learning-through-examples-8c90248d4676&lt;br /&gt;
 https://www.w3schools.com/css/css3_flexbox.asp&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Before the Flexbox Layout module, there were four layout modes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Block, for sections in a webpage&lt;br /&gt;
Inline, for text&lt;br /&gt;
Table, for two-dimensional table data&lt;br /&gt;
Positioned, for explicit position of an element&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Flexible Box Layout Module, makes it easier to design flexible responsive layout structure without using float or positioning.&lt;br /&gt;
== Properties ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
flex-direction&lt;br /&gt;
flex-wrap&lt;br /&gt;
flex-flow&lt;br /&gt;
justify-content&lt;br /&gt;
align-items&lt;br /&gt;
align-content&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-direction&amp;#039;&amp;#039;&amp;#039; property defines in which &amp;#039;&amp;#039;&amp;#039;direction&amp;#039;&amp;#039;&amp;#039; the container wants to stack the flex items.&lt;br /&gt;
 column&lt;br /&gt;
 row&lt;br /&gt;
 column-reverse&lt;br /&gt;
 row-reverse&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-wrap&amp;#039;&amp;#039;&amp;#039; property specifies whether the flex items should &amp;#039;&amp;#039;&amp;#039;wrap or not&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
 wrap&lt;br /&gt;
 nowrap&lt;br /&gt;
 wrap-reverse&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-flow&amp;#039;&amp;#039;&amp;#039; property is a &amp;#039;&amp;#039;&amp;#039;shorthand&amp;#039;&amp;#039;&amp;#039; property for setting both the flex-direction and flex-wrap properties.&lt;br /&gt;
 row wrap&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;justify-content&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align&amp;#039;&amp;#039;&amp;#039; the flex items:&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
 space-around&lt;br /&gt;
 space-between&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-items&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align&amp;#039;&amp;#039;&amp;#039; the flex items &amp;#039;&amp;#039;&amp;#039;vertically&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
 stretch&lt;br /&gt;
 baseline&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-content&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align the flex lines&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
 space-between&lt;br /&gt;
 space-around&lt;br /&gt;
 stretch&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Child Elements (Items)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;direct child elements&amp;#039;&amp;#039;&amp;#039; of a flex container automatically &amp;#039;&amp;#039;&amp;#039;becomes flexible (flex) items&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;order property&amp;#039;&amp;#039;&amp;#039; specifies the order of the flex items.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 3&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 2&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 4&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt; &lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 1&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-grow&amp;#039;&amp;#039;&amp;#039; property specifies how much a flex item will grow relative to the rest of the flex items.&lt;br /&gt;
&lt;br /&gt;
Make the third flex item grow eight times faster than the other flex items:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 1&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 1&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 8&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-shrink&amp;#039;&amp;#039;&amp;#039; property specifies how much a flex item will shrink relative to the rest of the flex items.&lt;br /&gt;
Do not let the third flex item shrink as much as the other flex items:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-shrink: 0&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-basis&amp;#039;&amp;#039;&amp;#039; property specifies the &amp;#039;&amp;#039;&amp;#039;initial length&amp;#039;&amp;#039;&amp;#039; of a flex item.&lt;br /&gt;
 &amp;lt;div style=&amp;quot;flex-basis: 200px&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex&amp;#039;&amp;#039;&amp;#039; property is a &amp;#039;&amp;#039;&amp;#039;shorthand&amp;#039;&amp;#039;&amp;#039; property for the flex-grow, flex-shrink, and flex-basis properties&lt;br /&gt;
 &amp;lt;div style=&amp;quot;flex: 0 0 200px&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-self&amp;#039;&amp;#039;&amp;#039; property specifies the &amp;#039;&amp;#039;&amp;#039;alignment for the selected item inside the flexible container&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The align-self property overrides the default alignment set by the container&amp;#039;s align-items property.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
=== Fotogrid ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
* {&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    font-family: Arial;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.header {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 32px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: wrap;&lt;br /&gt;
    padding: 0 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Create four equal columns that sits next to each other */&lt;br /&gt;
.column {&lt;br /&gt;
    flex: 25%;&lt;br /&gt;
    max-width: 25%;&lt;br /&gt;
    padding: 0 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.column img {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes a two column-layout instead of four columns */&lt;br /&gt;
@media (max-width: 800px) {&lt;br /&gt;
    .column {&lt;br /&gt;
        flex: 50%;&lt;br /&gt;
        max-width: 50%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes the two columns stack on top of each other instead of next to each other */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .column {&lt;br /&gt;
        flex: 100%;&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Responsive Image Grid&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Resize the browser window to see the responsive effect.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Photo Grid --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/falls2.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/nature.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mist.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/ocean.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mountainskies.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;  &lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/falls2.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/nature.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mist.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/ocean.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mountainskies.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Homepage Layout ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Page Title&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
* {&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style the body */&lt;br /&gt;
body {&lt;br /&gt;
    font-family: Arial;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header/logo Title */&lt;br /&gt;
.header {&lt;br /&gt;
    padding: 60px;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    background: #1abc9c;&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style the top navigation bar */&lt;br /&gt;
.navbar {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    background-color: #333;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style the navigation bar links */&lt;br /&gt;
.navbar a {&lt;br /&gt;
    color: white;&lt;br /&gt;
    padding: 14px 20px;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Change color on hover */&lt;br /&gt;
.navbar a:hover {&lt;br /&gt;
    background-color: #ddd;&lt;br /&gt;
    color: black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Column container */&lt;br /&gt;
.row {  &lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: wrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Create two unequal columns that sits next to each other */&lt;br /&gt;
/* Sidebar/left column */&lt;br /&gt;
.side {&lt;br /&gt;
    flex: 30%;&lt;br /&gt;
    background-color: #f1f1f1;&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main column */&lt;br /&gt;
.main {&lt;br /&gt;
    flex: 70%;&lt;br /&gt;
    background-color: white;&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fake image, just for this example */&lt;br /&gt;
.fakeimg {&lt;br /&gt;
    background-color: #aaa;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer */&lt;br /&gt;
.footer {&lt;br /&gt;
    padding: 20px;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    background: #ddd;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - when the screen is less than 700px wide, make the two columns stack on top of each other instead of next to each other */&lt;br /&gt;
@media screen and (max-width: 700px) {&lt;br /&gt;
    .row, .navbar {   &lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Note --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:yellow;padding:5px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h4 style=&amp;quot;text-align:center&amp;quot;&amp;gt;Resize the browser window to see the responsive effect.&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;My Website&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;With a &amp;lt;b&amp;gt;flexible&amp;lt;/b&amp;gt; layout.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Navigation Bar --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;navbar&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The flexible grid (content) --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;side&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;About Me&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;h5&amp;gt;Photo of me:&amp;lt;/h5&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:200px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Some text about me in culpa qui officia deserunt mollit anim..&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;More Text&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Lorem ipsum dolor sit ame.&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:60px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:60px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:60px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;TITLE HEADING&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;h5&amp;gt;Title description, Dec 7, 2017&amp;lt;/h5&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:200px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Some text..&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sunt in culpa qui officia deserunt mollit anim id est laborum consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;TITLE HEADING&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;h5&amp;gt;Title description, Sep 2, 2017&amp;lt;/h5&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;fakeimg&amp;quot; style=&amp;quot;height:200px;&amp;quot;&amp;gt;Image&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Some text..&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sunt in culpa qui officia deserunt mollit anim id est laborum consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Footer --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h2&amp;gt;Footer&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Siehe_CSS_-_Flexbox&amp;diff=23246</id>
		<title>Siehe CSS - Flexbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Siehe_CSS_-_Flexbox&amp;diff=23246"/>
		<updated>2018-08-07T21:47:09Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Fotogrid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
https://medium.freecodecamp.org/the-ultimate-guide-to-flexbox-learning-through-examples-8c90248d4676&lt;br /&gt;
 https://www.w3schools.com/css/css3_flexbox.asp&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Before the Flexbox Layout module, there were four layout modes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Block, for sections in a webpage&lt;br /&gt;
Inline, for text&lt;br /&gt;
Table, for two-dimensional table data&lt;br /&gt;
Positioned, for explicit position of an element&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Flexible Box Layout Module, makes it easier to design flexible responsive layout structure without using float or positioning.&lt;br /&gt;
== Properties ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
flex-direction&lt;br /&gt;
flex-wrap&lt;br /&gt;
flex-flow&lt;br /&gt;
justify-content&lt;br /&gt;
align-items&lt;br /&gt;
align-content&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-direction&amp;#039;&amp;#039;&amp;#039; property defines in which &amp;#039;&amp;#039;&amp;#039;direction&amp;#039;&amp;#039;&amp;#039; the container wants to stack the flex items.&lt;br /&gt;
 column&lt;br /&gt;
 row&lt;br /&gt;
 column-reverse&lt;br /&gt;
 row-reverse&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-wrap&amp;#039;&amp;#039;&amp;#039; property specifies whether the flex items should &amp;#039;&amp;#039;&amp;#039;wrap or not&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
 wrap&lt;br /&gt;
 nowrap&lt;br /&gt;
 wrap-reverse&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-flow&amp;#039;&amp;#039;&amp;#039; property is a &amp;#039;&amp;#039;&amp;#039;shorthand&amp;#039;&amp;#039;&amp;#039; property for setting both the flex-direction and flex-wrap properties.&lt;br /&gt;
 row wrap&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;justify-content&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align&amp;#039;&amp;#039;&amp;#039; the flex items:&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
 space-around&lt;br /&gt;
 space-between&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-items&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align&amp;#039;&amp;#039;&amp;#039; the flex items &amp;#039;&amp;#039;&amp;#039;vertically&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
 stretch&lt;br /&gt;
 baseline&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-content&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align the flex lines&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
 space-between&lt;br /&gt;
 space-around&lt;br /&gt;
 stretch&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Child Elements (Items)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;direct child elements&amp;#039;&amp;#039;&amp;#039; of a flex container automatically &amp;#039;&amp;#039;&amp;#039;becomes flexible (flex) items&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;order property&amp;#039;&amp;#039;&amp;#039; specifies the order of the flex items.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 3&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 2&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 4&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt; &lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 1&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-grow&amp;#039;&amp;#039;&amp;#039; property specifies how much a flex item will grow relative to the rest of the flex items.&lt;br /&gt;
&lt;br /&gt;
Make the third flex item grow eight times faster than the other flex items:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 1&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 1&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 8&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-shrink&amp;#039;&amp;#039;&amp;#039; property specifies how much a flex item will shrink relative to the rest of the flex items.&lt;br /&gt;
Do not let the third flex item shrink as much as the other flex items:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-shrink: 0&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-basis&amp;#039;&amp;#039;&amp;#039; property specifies the &amp;#039;&amp;#039;&amp;#039;initial length&amp;#039;&amp;#039;&amp;#039; of a flex item.&lt;br /&gt;
 &amp;lt;div style=&amp;quot;flex-basis: 200px&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex&amp;#039;&amp;#039;&amp;#039; property is a &amp;#039;&amp;#039;&amp;#039;shorthand&amp;#039;&amp;#039;&amp;#039; property for the flex-grow, flex-shrink, and flex-basis properties&lt;br /&gt;
 &amp;lt;div style=&amp;quot;flex: 0 0 200px&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-self&amp;#039;&amp;#039;&amp;#039; property specifies the &amp;#039;&amp;#039;&amp;#039;alignment for the selected item inside the flexible container&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The align-self property overrides the default alignment set by the container&amp;#039;s align-items property.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
=== Fotogrid ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
* {&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    font-family: Arial;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.header {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 32px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: wrap;&lt;br /&gt;
    padding: 0 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Create four equal columns that sits next to each other */&lt;br /&gt;
.column {&lt;br /&gt;
    flex: 25%;&lt;br /&gt;
    max-width: 25%;&lt;br /&gt;
    padding: 0 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.column img {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes a two column-layout instead of four columns */&lt;br /&gt;
@media (max-width: 800px) {&lt;br /&gt;
    .column {&lt;br /&gt;
        flex: 50%;&lt;br /&gt;
        max-width: 50%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes the two columns stack on top of each other instead of next to each other */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .column {&lt;br /&gt;
        flex: 100%;&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Responsive Image Grid&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Resize the browser window to see the responsive effect.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Photo Grid --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/falls2.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/nature.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mist.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/ocean.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mountainskies.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;  &lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/falls2.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/nature.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mist.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/ocean.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mountainskies.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Siehe_CSS_-_Flexbox&amp;diff=23245</id>
		<title>Siehe CSS - Flexbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Siehe_CSS_-_Flexbox&amp;diff=23245"/>
		<updated>2018-08-07T21:46:33Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Beispiele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
https://medium.freecodecamp.org/the-ultimate-guide-to-flexbox-learning-through-examples-8c90248d4676&lt;br /&gt;
 https://www.w3schools.com/css/css3_flexbox.asp&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Before the Flexbox Layout module, there were four layout modes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Block, for sections in a webpage&lt;br /&gt;
Inline, for text&lt;br /&gt;
Table, for two-dimensional table data&lt;br /&gt;
Positioned, for explicit position of an element&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Flexible Box Layout Module, makes it easier to design flexible responsive layout structure without using float or positioning.&lt;br /&gt;
== Properties ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
flex-direction&lt;br /&gt;
flex-wrap&lt;br /&gt;
flex-flow&lt;br /&gt;
justify-content&lt;br /&gt;
align-items&lt;br /&gt;
align-content&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-direction&amp;#039;&amp;#039;&amp;#039; property defines in which &amp;#039;&amp;#039;&amp;#039;direction&amp;#039;&amp;#039;&amp;#039; the container wants to stack the flex items.&lt;br /&gt;
 column&lt;br /&gt;
 row&lt;br /&gt;
 column-reverse&lt;br /&gt;
 row-reverse&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-wrap&amp;#039;&amp;#039;&amp;#039; property specifies whether the flex items should &amp;#039;&amp;#039;&amp;#039;wrap or not&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
 wrap&lt;br /&gt;
 nowrap&lt;br /&gt;
 wrap-reverse&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-flow&amp;#039;&amp;#039;&amp;#039; property is a &amp;#039;&amp;#039;&amp;#039;shorthand&amp;#039;&amp;#039;&amp;#039; property for setting both the flex-direction and flex-wrap properties.&lt;br /&gt;
 row wrap&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;justify-content&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align&amp;#039;&amp;#039;&amp;#039; the flex items:&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
 space-around&lt;br /&gt;
 space-between&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-items&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align&amp;#039;&amp;#039;&amp;#039; the flex items &amp;#039;&amp;#039;&amp;#039;vertically&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
 stretch&lt;br /&gt;
 baseline&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-content&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align the flex lines&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
 space-between&lt;br /&gt;
 space-around&lt;br /&gt;
 stretch&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Child Elements (Items)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;direct child elements&amp;#039;&amp;#039;&amp;#039; of a flex container automatically &amp;#039;&amp;#039;&amp;#039;becomes flexible (flex) items&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;order property&amp;#039;&amp;#039;&amp;#039; specifies the order of the flex items.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 3&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 2&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 4&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt; &lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 1&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-grow&amp;#039;&amp;#039;&amp;#039; property specifies how much a flex item will grow relative to the rest of the flex items.&lt;br /&gt;
&lt;br /&gt;
Make the third flex item grow eight times faster than the other flex items:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 1&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 1&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 8&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-shrink&amp;#039;&amp;#039;&amp;#039; property specifies how much a flex item will shrink relative to the rest of the flex items.&lt;br /&gt;
Do not let the third flex item shrink as much as the other flex items:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-shrink: 0&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-basis&amp;#039;&amp;#039;&amp;#039; property specifies the &amp;#039;&amp;#039;&amp;#039;initial length&amp;#039;&amp;#039;&amp;#039; of a flex item.&lt;br /&gt;
 &amp;lt;div style=&amp;quot;flex-basis: 200px&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex&amp;#039;&amp;#039;&amp;#039; property is a &amp;#039;&amp;#039;&amp;#039;shorthand&amp;#039;&amp;#039;&amp;#039; property for the flex-grow, flex-shrink, and flex-basis properties&lt;br /&gt;
 &amp;lt;div style=&amp;quot;flex: 0 0 200px&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-self&amp;#039;&amp;#039;&amp;#039; property specifies the &amp;#039;&amp;#039;&amp;#039;alignment for the selected item inside the flexible container&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The align-self property overrides the default alignment set by the container&amp;#039;s align-items property.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
=== Fotogrid ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;CSS&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
* {&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    font-family: Arial;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.header {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 32px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: wrap;&lt;br /&gt;
    padding: 0 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Create four equal columns that sits next to each other */&lt;br /&gt;
.column {&lt;br /&gt;
    flex: 25%;&lt;br /&gt;
    max-width: 25%;&lt;br /&gt;
    padding: 0 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.column img {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes a two column-layout instead of four columns */&lt;br /&gt;
@media (max-width: 800px) {&lt;br /&gt;
    .column {&lt;br /&gt;
        flex: 50%;&lt;br /&gt;
        max-width: 50%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes the two columns stack on top of each other instead of next to each other */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .column {&lt;br /&gt;
        flex: 100%;&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Responsive Image Grid&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Resize the browser window to see the responsive effect.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Photo Grid --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/falls2.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/nature.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mist.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/ocean.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mountainskies.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;  &lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/falls2.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/nature.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mist.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/ocean.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mountainskies.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Siehe_CSS_-_Flexbox&amp;diff=23244</id>
		<title>Siehe CSS - Flexbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Siehe_CSS_-_Flexbox&amp;diff=23244"/>
		<updated>2018-08-07T21:46:18Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: Die Seite wurde neu angelegt: „== Links == https://medium.freecodecamp.org/the-ultimate-guide-to-flexbox-learning-through-examples-8c90248d4676  https://www.w3schools.com/css/css3_flexbox.as…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
https://medium.freecodecamp.org/the-ultimate-guide-to-flexbox-learning-through-examples-8c90248d4676&lt;br /&gt;
 https://www.w3schools.com/css/css3_flexbox.asp&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Before the Flexbox Layout module, there were four layout modes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Block, for sections in a webpage&lt;br /&gt;
Inline, for text&lt;br /&gt;
Table, for two-dimensional table data&lt;br /&gt;
Positioned, for explicit position of an element&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Flexible Box Layout Module, makes it easier to design flexible responsive layout structure without using float or positioning.&lt;br /&gt;
== Properties ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
flex-direction&lt;br /&gt;
flex-wrap&lt;br /&gt;
flex-flow&lt;br /&gt;
justify-content&lt;br /&gt;
align-items&lt;br /&gt;
align-content&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-direction&amp;#039;&amp;#039;&amp;#039; property defines in which &amp;#039;&amp;#039;&amp;#039;direction&amp;#039;&amp;#039;&amp;#039; the container wants to stack the flex items.&lt;br /&gt;
 column&lt;br /&gt;
 row&lt;br /&gt;
 column-reverse&lt;br /&gt;
 row-reverse&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-wrap&amp;#039;&amp;#039;&amp;#039; property specifies whether the flex items should &amp;#039;&amp;#039;&amp;#039;wrap or not&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
 wrap&lt;br /&gt;
 nowrap&lt;br /&gt;
 wrap-reverse&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-flow&amp;#039;&amp;#039;&amp;#039; property is a &amp;#039;&amp;#039;&amp;#039;shorthand&amp;#039;&amp;#039;&amp;#039; property for setting both the flex-direction and flex-wrap properties.&lt;br /&gt;
 row wrap&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;justify-content&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align&amp;#039;&amp;#039;&amp;#039; the flex items:&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
 space-around&lt;br /&gt;
 space-between&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-items&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align&amp;#039;&amp;#039;&amp;#039; the flex items &amp;#039;&amp;#039;&amp;#039;vertically&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
 stretch&lt;br /&gt;
 baseline&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-content&amp;#039;&amp;#039;&amp;#039; property is used to &amp;#039;&amp;#039;&amp;#039;align the flex lines&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
 space-between&lt;br /&gt;
 space-around&lt;br /&gt;
 stretch&lt;br /&gt;
 center&lt;br /&gt;
 flex-start&lt;br /&gt;
 flex-end&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Child Elements (Items)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;direct child elements&amp;#039;&amp;#039;&amp;#039; of a flex container automatically &amp;#039;&amp;#039;&amp;#039;becomes flexible (flex) items&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;order property&amp;#039;&amp;#039;&amp;#039; specifies the order of the flex items.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 3&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 2&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 4&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt; &lt;br /&gt;
  &amp;lt;div style=&amp;quot;order: 1&amp;quot;&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-grow&amp;#039;&amp;#039;&amp;#039; property specifies how much a flex item will grow relative to the rest of the flex items.&lt;br /&gt;
&lt;br /&gt;
Make the third flex item grow eight times faster than the other flex items:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 1&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 1&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-grow: 8&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-shrink&amp;#039;&amp;#039;&amp;#039; property specifies how much a flex item will shrink relative to the rest of the flex items.&lt;br /&gt;
Do not let the third flex item shrink as much as the other flex items:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;flex-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;flex-shrink: 0&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;4&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex-basis&amp;#039;&amp;#039;&amp;#039; property specifies the &amp;#039;&amp;#039;&amp;#039;initial length&amp;#039;&amp;#039;&amp;#039; of a flex item.&lt;br /&gt;
 &amp;lt;div style=&amp;quot;flex-basis: 200px&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;flex&amp;#039;&amp;#039;&amp;#039; property is a &amp;#039;&amp;#039;&amp;#039;shorthand&amp;#039;&amp;#039;&amp;#039; property for the flex-grow, flex-shrink, and flex-basis properties&lt;br /&gt;
 &amp;lt;div style=&amp;quot;flex: 0 0 200px&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;align-self&amp;#039;&amp;#039;&amp;#039; property specifies the &amp;#039;&amp;#039;&amp;#039;alignment for the selected item inside the flexible container&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The align-self property overrides the default alignment set by the container&amp;#039;s align-items property.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Fotogrid&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;CSS&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
* {&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    font-family: Arial;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.header {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 32px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: wrap;&lt;br /&gt;
    padding: 0 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Create four equal columns that sits next to each other */&lt;br /&gt;
.column {&lt;br /&gt;
    flex: 25%;&lt;br /&gt;
    max-width: 25%;&lt;br /&gt;
    padding: 0 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.column img {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes a two column-layout instead of four columns */&lt;br /&gt;
@media (max-width: 800px) {&lt;br /&gt;
    .column {&lt;br /&gt;
        flex: 50%;&lt;br /&gt;
        max-width: 50%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes the two columns stack on top of each other instead of next to each other */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .column {&lt;br /&gt;
        flex: 100%;&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Header --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Responsive Image Grid&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Resize the browser window to see the responsive effect.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Photo Grid --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/falls2.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/nature.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mist.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/ocean.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mountainskies.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;  &lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/falls2.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/nature.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mist.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/paris.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;column&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/ocean.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/wedding.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/mountainskies.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/rocks.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/w3images/underwater.jpg&amp;quot; style=&amp;quot;width:100%&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=CSS_-_Flex&amp;diff=23243</id>
		<title>CSS - Flex</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=CSS_-_Flex&amp;diff=23243"/>
		<updated>2018-08-07T21:22:15Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Siehe CSS - Flexbox]]&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=CSS_-_Flex&amp;diff=23242</id>
		<title>CSS - Flex</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=CSS_-_Flex&amp;diff=23242"/>
		<updated>2018-08-07T20:47:53Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: Die Seite wurde neu angelegt: „ https://medium.freecodecamp.org/the-ultimate-guide-to-flexbox-learning-through-examples-8c90248d4676“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://medium.freecodecamp.org/the-ultimate-guide-to-flexbox-learning-through-examples-8c90248d4676&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Rich_Editor_bauen&amp;diff=23241</id>
		<title>JavaScript - Rich Editor bauen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Rich_Editor_bauen&amp;diff=23241"/>
		<updated>2018-08-07T20:19:16Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: Die Seite wurde neu angelegt: „ https://www.youtube.com/watch?v=aRJ_pH-VWdU  https://codepen.io/Unleashed-Design/pen/b6ede128a0b30c972159339f94496acd“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://www.youtube.com/watch?v=aRJ_pH-VWdU&lt;br /&gt;
 https://codepen.io/Unleashed-Design/pen/b6ede128a0b30c972159339f94496acd&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=CSS_-_Grid_vs_Flex&amp;diff=23240</id>
		<title>CSS - Grid vs Flex</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=CSS_-_Grid_vs_Flex&amp;diff=23240"/>
		<updated>2018-08-07T20:01:51Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: Die Seite wurde neu angelegt: „ https://www.youtube.com/watch?v=sB-ooIXFTjg == Grid == Hier geht es eher um das Anordnen von Bereichen im Verhältnis zueinander. Grundlegendes Layout (Footer…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://www.youtube.com/watch?v=sB-ooIXFTjg&lt;br /&gt;
== Grid ==&lt;br /&gt;
Hier geht es eher um das Anordnen von Bereichen im Verhältnis zueinander. Grundlegendes Layout (Footer, Sidebar...)&lt;br /&gt;
* display: gridÜbergeordnetes Grid Container&lt;br /&gt;
* grid-template-wors&lt;br /&gt;
* grid-template-columns&lt;br /&gt;
* grid-gap&lt;br /&gt;
* grid-template-areas&lt;br /&gt;
=== Vorteile ===&lt;br /&gt;
Große Bereiche Positionieren auch vertikal zentriert etc. immer dann wenn der Browser viel übernehmen soll. Positionieren innerhalb der Grid Bereiche&lt;br /&gt;
== Flex ==&lt;br /&gt;
Beispiel&lt;br /&gt;
 display: flex&lt;br /&gt;
 justify-content: space-between&lt;br /&gt;
 align-items: center&lt;br /&gt;
Styling von kleineren Bereichen z.b. Navigation&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=CSS_-_Grid&amp;diff=23239</id>
		<title>CSS - Grid</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=CSS_-_Grid&amp;diff=23239"/>
		<updated>2018-08-07T19:45:22Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch &lt;br /&gt;
 [[CSS - Flex]]&lt;br /&gt;
 [[CSS - Grid vs Flex]]&lt;br /&gt;
 https://css-tricks.com/snippets/css/complete-guide-grid/&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23238</id>
		<title>ProcessWire - Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23238"/>
		<updated>2018-08-03T08:23:24Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Praktisches Beispiel 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;HINWEIS: Bei Änderungen an den Styles unbedingt Modul-Cache löschen (Module &amp;gt; Aktualisieren)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
 https://processwire.com/talk/topic/3023-module-ckeditor/&lt;br /&gt;
 https://processwire.com/talk/topic/14601-solved-ckeditor-custom-stylesclasses/&lt;br /&gt;
 https://processwire.com/talk/topic/19465-ckeditor-styles-dropdown-tips/&lt;br /&gt;
&lt;br /&gt;
== Der CKEditor ==&lt;br /&gt;
Ist der Standard Editor in PW. Es gibt auch Module mit denen man Ihn ersetzen kann. Im Prinzip aber ein mächtiges Werkzeug.&lt;br /&gt;
&lt;br /&gt;
Hinweis: In neueren Versionen von PW (mindestens ab V3) Sind einige der Angaben unten überholt. Zum Teil funktionieren Sie aber ncoh. Als Referenz bleiben Die Tutorials auf dieser Seite unten erhalten&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
=== Buttons ===&lt;br /&gt;
Im Backend anpassen&lt;br /&gt;
=== Format Stile ===&lt;br /&gt;
In der Feldkonfiguration unter&lt;br /&gt;
 Input &amp;gt; Format Tags&lt;br /&gt;
 &lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Styles Dropdown aktivieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Feldkonfiguration unter CK Editor Toolbar&lt;br /&gt;
 Styles&lt;br /&gt;
hinzufügen (am besten hinter Format)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; 2.Styles Datei hinzufügen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Datei unter Eigenes JS Styles Set angeben...&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
und Datei anlegen. Die sieht z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;customstyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hinweis: &amp;#039;&amp;#039;&amp;#039;Nicht mystyles:&amp;#039;&amp;#039;&amp;#039;/site/... Verwenden das führt zu Problemen im Backend. Mal sind die Stile da mal nicht. Also z.B. &amp;#039;&amp;#039;&amp;#039;customstyles in der Pfadangabe UND in der Datei verwenden.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== CKEditor allgemeines Wissen ==&lt;br /&gt;
Ein paar Infos zu CKEditor ohne PW. Viele Dinge sind ähnlich.&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Toolbar ====&lt;br /&gt;
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
Werden normalerweise mit einem Builder implementiert. Das geht bei PW nicht. Aber es gelten zum Teil die Regeln für Manuelle Installation. Manche Schritte z.B. aktivieren der Plugins macht man in PW aber wahlweise über die Feldkonfiguration.&lt;br /&gt;
&lt;br /&gt;
Beispiel Widget Plugin:&lt;br /&gt;
&lt;br /&gt;
If you want to add the plugin manually, you will need to:&lt;br /&gt;
* Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:&lt;br /&gt;
 http://example.com/ckeditor/plugins/widget&lt;br /&gt;
* Enable the plugin by using the extraPlugins configuration setting. Example:&lt;br /&gt;
 config.extraPlugins = &amp;#039;widget&amp;#039;; &lt;br /&gt;
* Download and configure all its &amp;#039;&amp;#039;&amp;#039;dependencies&amp;#039;&amp;#039;&amp;#039;, too.&lt;br /&gt;
In PW&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
=== Praktisches Beispiel 1===&lt;br /&gt;
&lt;br /&gt;
Im Tab Eingabe des Editor Felds kann man verschiedene Dinge Einstellen. Die meisten Felder sind auch recht gut erklärt:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Editor Toolbar einstellen&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Interessant ist hier der &amp;#039;&amp;#039;&amp;#039;Eintrag Styles&amp;#039;&amp;#039;&amp;#039;. Das Formatdialogfeld formatiert einzelne Blockstile wie h1 oder p. Im Styles Dropdown kann man auch Umgebende Blockelemente wie z.B. Divs mit speziellen Klassen nutzen. &lt;br /&gt;
&lt;br /&gt;
Guter Standard mit Tabellen und Styles Dropdown&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tags formatieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier kann man festlegen welche &amp;#039;&amp;#039;&amp;#039;Tags im Format Dropdown&amp;#039;&amp;#039;&amp;#039; ausgewählt werden können. Hier ein Beispiel bei dem wir h1 weglassen. H1 wird oft über das Template selbst ausgegeben und sollte nur einmal pro Seite auftauchen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
p;h2;h3;h4;h5;h6;pre;address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Styles festlegen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Um die oben erwähnten Styles anzupassen wir eine kleine JavaScript Datei. Wo diese liegt legen wir im Abschnitt &amp;#039;&amp;#039;&amp;#039;Eigenes Editor-JS-Style-Set&amp;#039;&amp;#039;&amp;#039; fest. Wir nutzen den bereits vorgeschlagenen Pfad tragen diesen ein und legen die Datei an:&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&lt;br /&gt;
UIkit Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;customstyles&amp;#039;, [&lt;br /&gt;
 /* Blockstyles */&lt;br /&gt;
 { name: &amp;#039;Zweispalter&amp;#039;, element: &amp;#039;div&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-column-1-2@s&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Dreipalter&amp;#039;, element: &amp;#039;div&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-column-1-2@s uk-column-1-3@m&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Vierspalter&amp;#039;, element: &amp;#039;div&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-column-1-2@s uk-column-1-4@m&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Heading Divider&amp;#039;, element: &amp;#039;h3&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-heading-divider&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Heading Line&amp;#039;, element: &amp;#039;h&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-heading-line&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Heading Bullet&amp;#039;, element: &amp;#039;h&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-heading-bullet&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Liste mit Kugel (UIkit)&amp;#039;, element: &amp;#039;ul&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-list uk-list-bullet&amp;#039;}},&lt;br /&gt;
 { name: &amp;#039;Liste mit Linie (UIkit)&amp;#039;, element: &amp;#039;ul&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-list uk-list-divide&amp;#039;}}&lt;br /&gt;
/* Inline Styles */&lt;br /&gt;
{ name: &amp;#039;Klein (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-small&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Groß (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-large&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Kleinbuchstaben (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-lowercase&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Großbuchstaben (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-uppercase&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Kapitälchen (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-capitalize&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Farbe: Muted (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-muted&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Farbe: Primär (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-primary&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Farbe: Erfolg (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-success&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Farbe: Warnung (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-warning&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Farbe: Gefahr (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-danger&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
{ name: &amp;#039;Gel&amp;amp;ouml;scht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
{ name: &amp;#039;Eingefügt&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
{ name: &amp;#039;Zitat&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hinweis: Span Elemente sind oft p Elementen vorzuziehen, da sie Inline angewendet werden können. So ist es möglich einen Muted Text innerhalb eines Absatzes einzusetzen.&lt;br /&gt;
&lt;br /&gt;
Einfaches Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;customstyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Mein Spezialabsatz&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;myParagraphStyle&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Gelöscht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Eingefügt&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Zitat&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Stile im Editor einbinden &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Weiter Forum Beispiele ==&lt;br /&gt;
https://processwire.com/talk/topic/9606-how-to-configure-ckeditortextarea-field-to-enable-color-toolbar/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konfiguration CKEditor in PW (alt)==&lt;br /&gt;
&lt;br /&gt;
 /sites &lt;br /&gt;
ausgelagert und somit auch Updatefähig. Abschauen kann man im original Modul in &lt;br /&gt;
 wire/site/modules/InputfieldCKEditor/&lt;br /&gt;
Dort gibe es diverse Dateien. Allerdings ist nicht alles möglich, was in der CKEditor Doku steht. In PW können scheinbar manche Einstellungen nicht über die Dateien geregelt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wo stellt man was ein ? ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; Nicht alles was hier steht funktioniert auch so. Am besten im Backend in der Feldkonfiguration schauen und dort die Pfade anpassen.&lt;br /&gt;
Ordner:&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
Konfiguration gültig &amp;#039;&amp;#039;&amp;#039;für alle Felder im Backend&amp;#039;&amp;#039;&amp;#039; (hat bei mir bisher nicht ohne die Backendkonfiguration für das Feld funktioniert)&lt;br /&gt;
 config.js&lt;br /&gt;
Konfiguration für ein bestimmtes Feld falls vorhanden&lt;br /&gt;
 config.[fieldname.]js &lt;br /&gt;
 mystyles.js -&amp;gt; ein selbstbenanntes Feld kann im Backend bei der Konfiguration des CKEditor Feldes angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Konfiguration. Z.B. Styles hinzufügen, removeFormatTags, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alles was der Editor beim Eingeben mit &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bearbeitet. Außerdem &amp;#039;&amp;#039;&amp;#039;Style Auswahl anpassen&amp;#039;&amp;#039;&amp;#039; alle Optionen die mit &amp;#039;&amp;#039;&amp;#039;CKEDITOR.&amp;#039;&amp;#039;&amp;#039; anfangen&lt;br /&gt;
 content.css&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile die der Editor bei der Eingabe benutzt. Also quasi die Vorschau für den Benutzer.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 contents-inline.css&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile für die Vorschau beim Inline Editor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Feldkonfiguration im Admin Bereich PW&lt;br /&gt;
&lt;br /&gt;
Hier muß die &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039; eingestellt werden. Über Konfig hat es bisher nicht geklappt. Hier muss auch die &amp;#039;&amp;#039;&amp;#039;CSS Datei für die Inline Styles&amp;#039;&amp;#039;&amp;#039; angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Überschreiben in der config.js&amp;#039;&amp;#039;&amp;#039; hat bei mir nicht funktioniert - in aktueller Version 3.062 klappt es..&lt;br /&gt;
&lt;br /&gt;
 Auch &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039; müssen hier ausgewählt werden, damit sie eingebunden werden. Dies funktioniert also alles nur auf Feld-Ebene und nicht global.&lt;br /&gt;
=== CKEditor Buttons anpassen===&lt;br /&gt;
Wenn man ein Textarea Feld definiert, kann man auch für dieses Feld den CKEditor anpassen. Das geht im Backend in der &amp;#039;&amp;#039;&amp;#039;Feldkonfiguration unter dem Reiter Eingabe.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Beispiel: Hier werden &amp;#039;&amp;#039;&amp;#039;Buttons für die Textausrichtung hinzugefügt.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Einstellungen ===&lt;br /&gt;
Todo: TESTEN ob das wirklich funktioniert&lt;br /&gt;
Kann man im Modulverzeichnis unter site/modules hinterlegen. Achtung nicht im Modulverzeichnis unter wire überschreiben. Das ist beim nächsten Update weg.&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.js -&amp;gt; überschreibt oder ergänzt die Default Einstellung&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.body.js -&amp;gt; überschreibt oder ergänzt das body Feld&lt;br /&gt;
Beispiele:&lt;br /&gt;
 config.startupOutlineBlocks = true;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
	config.justifyClasses = [ &amp;#039;left&amp;#039;, &amp;#039;center&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;justify&amp;#039; ];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider funktionieren viele Einstellungen hier nicht, die im original CKEditor möglich sind.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
Eigene Stile zur Auswahl im &amp;#039;&amp;#039;&amp;#039;Styles&amp;#039;&amp;#039;&amp;#039; Dropdown&lt;br /&gt;
 site-&amp;gt;modules-&amp;gt;InputfieldCKEditor-&amp;gt;mystyles.js&lt;br /&gt;
anpassen.&lt;br /&gt;
Im Backend den Pfad hinzufügen (siehe Beispiel unten)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsbeispiele ===&lt;br /&gt;
Im Adminbereich im content_main Feld:&lt;br /&gt;
&lt;br /&gt;
==== CKEditor Toolbar ====&lt;br /&gt;
Added justify buttons...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Superscript, -,JustifyLeft ,JustifyCenter ,JustifyRight , -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blöcke anzeigen, Smileys&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Underline, Strike, Superscript, Subscript,&lt;br /&gt;
JustifyLeft ,JustifyCenter ,JustifyRight , -,  &lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar, Smiley, ShowBlocks, RemoveFormat,&lt;br /&gt;
PasteText, PasteFromWord,-, Undo, Redo, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor CSS File ====&lt;br /&gt;
Für die &amp;#039;&amp;#039;&amp;#039;im Editor angezeigten Stile&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 site/modules/InputfieldCKEditor/contents.css&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/fa/css/font-awesome.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/bootstrap/css/bootstrap.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/css/main.css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
.cke_editable {&lt;br /&gt;
	font-size: 14px;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_ltr blockquote {&lt;br /&gt;
	padding-left: 20px;&lt;br /&gt;
	padding-right: 8px;&lt;br /&gt;
	border-left-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_rtl blockquote {&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	padding-right: 20px;&lt;br /&gt;
	border-right-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor JS File ====&lt;br /&gt;
&lt;br /&gt;
Für die Auswahlfelder in der &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== config.js ====&lt;br /&gt;
In /site/modules/InputfieldCKEditor/config.js (oder config.feldname.js)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
  config.uiColor = &amp;#039;#AADC6E&amp;#039;;&lt;br /&gt;
  config.coreStyles_italic = { element : &amp;#039;i&amp;#039;, overrides : &amp;#039;em&amp;#039; }; // i nicht durch em überschreiben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Plugins hinzufügen ===&lt;br /&gt;
* https://weekly.pw/issue/13/#1-2 -&amp;gt; Plugins für CK Editor etc.&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23237</id>
		<title>ProcessWire - Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23237"/>
		<updated>2018-08-02T14:44:25Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Praktisches Beispiel 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;HINWEIS: Bei Änderungen an den Styles unbedingt Modul-Cache löschen (Module &amp;gt; Aktualisieren)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
 https://processwire.com/talk/topic/3023-module-ckeditor/&lt;br /&gt;
 https://processwire.com/talk/topic/14601-solved-ckeditor-custom-stylesclasses/&lt;br /&gt;
 https://processwire.com/talk/topic/19465-ckeditor-styles-dropdown-tips/&lt;br /&gt;
&lt;br /&gt;
== Der CKEditor ==&lt;br /&gt;
Ist der Standard Editor in PW. Es gibt auch Module mit denen man Ihn ersetzen kann. Im Prinzip aber ein mächtiges Werkzeug.&lt;br /&gt;
&lt;br /&gt;
Hinweis: In neueren Versionen von PW (mindestens ab V3) Sind einige der Angaben unten überholt. Zum Teil funktionieren Sie aber ncoh. Als Referenz bleiben Die Tutorials auf dieser Seite unten erhalten&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
=== Buttons ===&lt;br /&gt;
Im Backend anpassen&lt;br /&gt;
=== Format Stile ===&lt;br /&gt;
In der Feldkonfiguration unter&lt;br /&gt;
 Input &amp;gt; Format Tags&lt;br /&gt;
 &lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Styles Dropdown aktivieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Feldkonfiguration unter CK Editor Toolbar&lt;br /&gt;
 Styles&lt;br /&gt;
hinzufügen (am besten hinter Format)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; 2.Styles Datei hinzufügen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Datei unter Eigenes JS Styles Set angeben...&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
und Datei anlegen. Die sieht z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;customstyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hinweis: &amp;#039;&amp;#039;&amp;#039;Nicht mystyles:&amp;#039;&amp;#039;&amp;#039;/site/... Verwenden das führt zu Problemen im Backend. Mal sind die Stile da mal nicht. Also z.B. &amp;#039;&amp;#039;&amp;#039;customstyles in der Pfadangabe UND in der Datei verwenden.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== CKEditor allgemeines Wissen ==&lt;br /&gt;
Ein paar Infos zu CKEditor ohne PW. Viele Dinge sind ähnlich.&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Toolbar ====&lt;br /&gt;
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
Werden normalerweise mit einem Builder implementiert. Das geht bei PW nicht. Aber es gelten zum Teil die Regeln für Manuelle Installation. Manche Schritte z.B. aktivieren der Plugins macht man in PW aber wahlweise über die Feldkonfiguration.&lt;br /&gt;
&lt;br /&gt;
Beispiel Widget Plugin:&lt;br /&gt;
&lt;br /&gt;
If you want to add the plugin manually, you will need to:&lt;br /&gt;
* Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:&lt;br /&gt;
 http://example.com/ckeditor/plugins/widget&lt;br /&gt;
* Enable the plugin by using the extraPlugins configuration setting. Example:&lt;br /&gt;
 config.extraPlugins = &amp;#039;widget&amp;#039;; &lt;br /&gt;
* Download and configure all its &amp;#039;&amp;#039;&amp;#039;dependencies&amp;#039;&amp;#039;&amp;#039;, too.&lt;br /&gt;
In PW&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
=== Praktisches Beispiel 1===&lt;br /&gt;
&lt;br /&gt;
Im Tab Eingabe des Editor Felds kann man verschiedene Dinge Einstellen. Die meisten Felder sind auch recht gut erklärt:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Editor Toolbar einstellen&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Interessant ist hier der &amp;#039;&amp;#039;&amp;#039;Eintrag Styles&amp;#039;&amp;#039;&amp;#039;. Das Formatdialogfeld formatiert einzelne Blockstile wie h1 oder p. Im Styles Dropdown kann man auch Umgebende Blockelemente wie z.B. Divs mit speziellen Klassen nutzen. &lt;br /&gt;
&lt;br /&gt;
Guter Standard mit Tabellen und Styles Dropdown&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tags formatieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier kann man festlegen welche &amp;#039;&amp;#039;&amp;#039;Tags im Format Dropdown&amp;#039;&amp;#039;&amp;#039; ausgewählt werden können. Hier ein Beispiel bei dem wir h1 weglassen. H1 wird oft über das Template selbst ausgegeben und sollte nur einmal pro Seite auftauchen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
p;h2;h3;h4;h5;h6;pre;address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Styles festlegen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Um die oben erwähnten Styles anzupassen wir eine kleine JavaScript Datei. Wo diese liegt legen wir im Abschnitt &amp;#039;&amp;#039;&amp;#039;Eigenes Editor-JS-Style-Set&amp;#039;&amp;#039;&amp;#039; fest. Wir nutzen den bereits vorgeschlagenen Pfad tragen diesen ein und legen die Datei an:&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&lt;br /&gt;
UIkit Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;customstyles&amp;#039;, [&lt;br /&gt;
 /* Blockstyles */&lt;br /&gt;
 { name: &amp;#039;Zweispalter&amp;#039;, element: &amp;#039;div&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-column-1-2@s&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Dreipalter&amp;#039;, element: &amp;#039;div&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-column-1-2@s uk-column-1-3@m&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Vierspalter&amp;#039;, element: &amp;#039;div&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-column-1-2@s uk-column-1-4@m&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Heading Divider&amp;#039;, element: &amp;#039;h3&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-heading-divider&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Heading Line&amp;#039;, element: &amp;#039;h&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-heading-line&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Heading Bullet&amp;#039;, element: &amp;#039;h&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-heading-bullet&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Liste mit Kugel (UIkit)&amp;#039;, element: &amp;#039;ul&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-list uk-list-bullet&amp;#039;}},&lt;br /&gt;
 { name: &amp;#039;Liste mit Linie (UIkit)&amp;#039;, element: &amp;#039;ul&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-list uk-list-divide&amp;#039;}}&lt;br /&gt;
/* Inline Styles */&lt;br /&gt;
{ name: &amp;#039;Klein (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-small&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Groß (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-large&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Kleinbuchstaben (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-lowercase&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Großbuchstaben (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-uppercase&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Kapitälchen (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-capitalize&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Farbe: Muted (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-muted&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Farbe: Primär (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-primary&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Farbe: Erfolg (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-success&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Farbe: Warnung (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-warning&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Farbe: Gefahr (UIkit)&amp;#039;, element: &amp;#039;span&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-danger&amp;#039; } },&lt;br /&gt;
{ name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
{ name: &amp;#039;Gel&amp;amp;ouml;scht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
{ name: &amp;#039;Eingefügt&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
{ name: &amp;#039;Zitat&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hinweis: Span Elemente sind oft p Elementen vorzuziehen, da sie Inline angewendet werden können. So ist es möglich einen Muted Text innerhalb eines Absatzes einzusetzen.&lt;br /&gt;
&lt;br /&gt;
Einfaches Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;customstyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Mein Spezialabsatz&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;myParagraphStyle&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Gelöscht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Eingefügt&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Zitat&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiter Forum Beispiele ==&lt;br /&gt;
https://processwire.com/talk/topic/9606-how-to-configure-ckeditortextarea-field-to-enable-color-toolbar/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konfiguration CKEditor in PW (alt)==&lt;br /&gt;
&lt;br /&gt;
 /sites &lt;br /&gt;
ausgelagert und somit auch Updatefähig. Abschauen kann man im original Modul in &lt;br /&gt;
 wire/site/modules/InputfieldCKEditor/&lt;br /&gt;
Dort gibe es diverse Dateien. Allerdings ist nicht alles möglich, was in der CKEditor Doku steht. In PW können scheinbar manche Einstellungen nicht über die Dateien geregelt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wo stellt man was ein ? ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; Nicht alles was hier steht funktioniert auch so. Am besten im Backend in der Feldkonfiguration schauen und dort die Pfade anpassen.&lt;br /&gt;
Ordner:&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
Konfiguration gültig &amp;#039;&amp;#039;&amp;#039;für alle Felder im Backend&amp;#039;&amp;#039;&amp;#039; (hat bei mir bisher nicht ohne die Backendkonfiguration für das Feld funktioniert)&lt;br /&gt;
 config.js&lt;br /&gt;
Konfiguration für ein bestimmtes Feld falls vorhanden&lt;br /&gt;
 config.[fieldname.]js &lt;br /&gt;
 mystyles.js -&amp;gt; ein selbstbenanntes Feld kann im Backend bei der Konfiguration des CKEditor Feldes angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Konfiguration. Z.B. Styles hinzufügen, removeFormatTags, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alles was der Editor beim Eingeben mit &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bearbeitet. Außerdem &amp;#039;&amp;#039;&amp;#039;Style Auswahl anpassen&amp;#039;&amp;#039;&amp;#039; alle Optionen die mit &amp;#039;&amp;#039;&amp;#039;CKEDITOR.&amp;#039;&amp;#039;&amp;#039; anfangen&lt;br /&gt;
 content.css&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile die der Editor bei der Eingabe benutzt. Also quasi die Vorschau für den Benutzer.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 contents-inline.css&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile für die Vorschau beim Inline Editor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Feldkonfiguration im Admin Bereich PW&lt;br /&gt;
&lt;br /&gt;
Hier muß die &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039; eingestellt werden. Über Konfig hat es bisher nicht geklappt. Hier muss auch die &amp;#039;&amp;#039;&amp;#039;CSS Datei für die Inline Styles&amp;#039;&amp;#039;&amp;#039; angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Überschreiben in der config.js&amp;#039;&amp;#039;&amp;#039; hat bei mir nicht funktioniert - in aktueller Version 3.062 klappt es..&lt;br /&gt;
&lt;br /&gt;
 Auch &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039; müssen hier ausgewählt werden, damit sie eingebunden werden. Dies funktioniert also alles nur auf Feld-Ebene und nicht global.&lt;br /&gt;
=== CKEditor Buttons anpassen===&lt;br /&gt;
Wenn man ein Textarea Feld definiert, kann man auch für dieses Feld den CKEditor anpassen. Das geht im Backend in der &amp;#039;&amp;#039;&amp;#039;Feldkonfiguration unter dem Reiter Eingabe.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Beispiel: Hier werden &amp;#039;&amp;#039;&amp;#039;Buttons für die Textausrichtung hinzugefügt.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Einstellungen ===&lt;br /&gt;
Todo: TESTEN ob das wirklich funktioniert&lt;br /&gt;
Kann man im Modulverzeichnis unter site/modules hinterlegen. Achtung nicht im Modulverzeichnis unter wire überschreiben. Das ist beim nächsten Update weg.&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.js -&amp;gt; überschreibt oder ergänzt die Default Einstellung&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.body.js -&amp;gt; überschreibt oder ergänzt das body Feld&lt;br /&gt;
Beispiele:&lt;br /&gt;
 config.startupOutlineBlocks = true;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
	config.justifyClasses = [ &amp;#039;left&amp;#039;, &amp;#039;center&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;justify&amp;#039; ];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider funktionieren viele Einstellungen hier nicht, die im original CKEditor möglich sind.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
Eigene Stile zur Auswahl im &amp;#039;&amp;#039;&amp;#039;Styles&amp;#039;&amp;#039;&amp;#039; Dropdown&lt;br /&gt;
 site-&amp;gt;modules-&amp;gt;InputfieldCKEditor-&amp;gt;mystyles.js&lt;br /&gt;
anpassen.&lt;br /&gt;
Im Backend den Pfad hinzufügen (siehe Beispiel unten)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsbeispiele ===&lt;br /&gt;
Im Adminbereich im content_main Feld:&lt;br /&gt;
&lt;br /&gt;
==== CKEditor Toolbar ====&lt;br /&gt;
Added justify buttons...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Superscript, -,JustifyLeft ,JustifyCenter ,JustifyRight , -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blöcke anzeigen, Smileys&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Underline, Strike, Superscript, Subscript,&lt;br /&gt;
JustifyLeft ,JustifyCenter ,JustifyRight , -,  &lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar, Smiley, ShowBlocks, RemoveFormat,&lt;br /&gt;
PasteText, PasteFromWord,-, Undo, Redo, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor CSS File ====&lt;br /&gt;
Für die &amp;#039;&amp;#039;&amp;#039;im Editor angezeigten Stile&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 site/modules/InputfieldCKEditor/contents.css&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/fa/css/font-awesome.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/bootstrap/css/bootstrap.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/css/main.css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
.cke_editable {&lt;br /&gt;
	font-size: 14px;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_ltr blockquote {&lt;br /&gt;
	padding-left: 20px;&lt;br /&gt;
	padding-right: 8px;&lt;br /&gt;
	border-left-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_rtl blockquote {&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	padding-right: 20px;&lt;br /&gt;
	border-right-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor JS File ====&lt;br /&gt;
&lt;br /&gt;
Für die Auswahlfelder in der &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== config.js ====&lt;br /&gt;
In /site/modules/InputfieldCKEditor/config.js (oder config.feldname.js)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
  config.uiColor = &amp;#039;#AADC6E&amp;#039;;&lt;br /&gt;
  config.coreStyles_italic = { element : &amp;#039;i&amp;#039;, overrides : &amp;#039;em&amp;#039; }; // i nicht durch em überschreiben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Plugins hinzufügen ===&lt;br /&gt;
* https://weekly.pw/issue/13/#1-2 -&amp;gt; Plugins für CK Editor etc.&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23236</id>
		<title>ProcessWire - Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23236"/>
		<updated>2018-08-02T08:41:53Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Praktisches Beispiel 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;HINWEIS: Bei Änderungen an den Styles unbedingt Modul-Cache löschen (Module &amp;gt; Aktualisieren)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
 https://processwire.com/talk/topic/3023-module-ckeditor/&lt;br /&gt;
 https://processwire.com/talk/topic/14601-solved-ckeditor-custom-stylesclasses/&lt;br /&gt;
 https://processwire.com/talk/topic/19465-ckeditor-styles-dropdown-tips/&lt;br /&gt;
&lt;br /&gt;
== Der CKEditor ==&lt;br /&gt;
Ist der Standard Editor in PW. Es gibt auch Module mit denen man Ihn ersetzen kann. Im Prinzip aber ein mächtiges Werkzeug.&lt;br /&gt;
&lt;br /&gt;
Hinweis: In neueren Versionen von PW (mindestens ab V3) Sind einige der Angaben unten überholt. Zum Teil funktionieren Sie aber ncoh. Als Referenz bleiben Die Tutorials auf dieser Seite unten erhalten&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
=== Buttons ===&lt;br /&gt;
Im Backend anpassen&lt;br /&gt;
=== Format Stile ===&lt;br /&gt;
In der Feldkonfiguration unter&lt;br /&gt;
 Input &amp;gt; Format Tags&lt;br /&gt;
 &lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Styles Dropdown aktivieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Feldkonfiguration unter CK Editor Toolbar&lt;br /&gt;
 Styles&lt;br /&gt;
hinzufügen (am besten hinter Format)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; 2.Styles Datei hinzufügen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Datei unter Eigenes JS Styles Set angeben...&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
und Datei anlegen. Die sieht z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;customstyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hinweis: &amp;#039;&amp;#039;&amp;#039;Nicht mystyles:&amp;#039;&amp;#039;&amp;#039;/site/... Verwenden das führt zu Problemen im Backend. Mal sind die Stile da mal nicht. Also z.B. &amp;#039;&amp;#039;&amp;#039;customstyles in der Pfadangabe UND in der Datei verwenden.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== CKEditor allgemeines Wissen ==&lt;br /&gt;
Ein paar Infos zu CKEditor ohne PW. Viele Dinge sind ähnlich.&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Toolbar ====&lt;br /&gt;
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
Werden normalerweise mit einem Builder implementiert. Das geht bei PW nicht. Aber es gelten zum Teil die Regeln für Manuelle Installation. Manche Schritte z.B. aktivieren der Plugins macht man in PW aber wahlweise über die Feldkonfiguration.&lt;br /&gt;
&lt;br /&gt;
Beispiel Widget Plugin:&lt;br /&gt;
&lt;br /&gt;
If you want to add the plugin manually, you will need to:&lt;br /&gt;
* Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:&lt;br /&gt;
 http://example.com/ckeditor/plugins/widget&lt;br /&gt;
* Enable the plugin by using the extraPlugins configuration setting. Example:&lt;br /&gt;
 config.extraPlugins = &amp;#039;widget&amp;#039;; &lt;br /&gt;
* Download and configure all its &amp;#039;&amp;#039;&amp;#039;dependencies&amp;#039;&amp;#039;&amp;#039;, too.&lt;br /&gt;
In PW&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
=== Praktisches Beispiel 1===&lt;br /&gt;
&lt;br /&gt;
Im Tab Eingabe des Editor Felds kann man verschiedene Dinge Einstellen. Die meisten Felder sind auch recht gut erklärt:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Editor Toolbar einstellen&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Interessant ist hier der &amp;#039;&amp;#039;&amp;#039;Eintrag Styles&amp;#039;&amp;#039;&amp;#039;. Das Formatdialogfeld formatiert einzelne Blockstile wie h1 oder p. Im Styles Dropdown kann man auch Umgebende Blockelemente wie z.B. Divs mit speziellen Klassen nutzen. &lt;br /&gt;
&lt;br /&gt;
Guter Standard mit Tabellen und Styles Dropdown&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tags formatieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier kann man festlegen welche &amp;#039;&amp;#039;&amp;#039;Tags im Format Dropdown&amp;#039;&amp;#039;&amp;#039; ausgewählt werden können. Hier ein Beispiel bei dem wir h1 weglassen. H1 wird oft über das Template selbst ausgegeben und sollte nur einmal pro Seite auftauchen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
p;h2;h3;h4;h5;h6;pre;address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Styles festlegen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Um die oben erwähnten Styles anzupassen wir eine kleine JavaScript Datei. Wo diese liegt legen wir im Abschnitt &amp;#039;&amp;#039;&amp;#039;Eigenes Editor-JS-Style-Set&amp;#039;&amp;#039;&amp;#039; fest. Wir nutzen den bereits vorgeschlagenen Pfad tragen diesen ein und legen die Datei an:&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&lt;br /&gt;
Standardbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;customstyles&amp;#039;, [ &lt;br /&gt;
 { name: &amp;#039;Inline Code&amp;#039;, element: &amp;#039;code&amp;#039; }, &lt;br /&gt;
 { name: &amp;#039;Inline Quotation&amp;#039;, element: &amp;#039;q&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Bild links&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_left&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Bild rechts&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_right&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Bild zentriert&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_center&amp;#039; } }, &lt;br /&gt;
 { name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Gelöscht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inserted Text&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Cited Work&amp;#039;, element: &amp;#039;cite&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Highlight&amp;#039;, element: &amp;#039;mark&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Einfügen&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Sample&amp;#039;, element: &amp;#039;samp&amp;#039; },&lt;br /&gt;
 	/* Uikit headlines */&lt;br /&gt;
 { name: &amp;#039;unterstrichen&amp;#039;, element: &amp;#039;h3&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-heading-divider&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Linie in der Mitte&amp;#039;, element: &amp;#039;h&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-heading-line&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Bullet&amp;#039;, element: &amp;#039;h&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-heading-bullet&amp;#039; } },&lt;br /&gt;
 	/* Uikit paragraphs */&lt;br /&gt;
 { name: &amp;#039;Kleine Schrift&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-small&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Große Schrift&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-large&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Kleinbuchstaben&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-lowercase&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Großbuchstaben&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-uppercase&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Erster Buchstabe groß&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-capitalize&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Farbe: ged&amp;amp;auml;mpft&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-muted&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Farbe: Prim&amp;amp;auml;r&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-primary&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Farbe: Erfolg&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-success&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Farbe: Warnung&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-warning&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Farbe: Gefahr&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-danger&amp;#039; } },&lt;br /&gt;
  /* ul classes */&lt;br /&gt;
  { name: &amp;#039;Liste mit Kugel&amp;#039;, element: &amp;#039;ul&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-list uk-list-bullet&amp;#039;}},&lt;br /&gt;
  { name: &amp;#039;Liste mit Linie&amp;#039;, element: &amp;#039;ul&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-list uk-list-divide&amp;#039;}}&lt;br /&gt;
] );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Modifiziertes Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;customstyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Expose-Liste&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;expose&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Gelöscht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Eingefügt&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Zitat&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiter Forum Beispiele ==&lt;br /&gt;
https://processwire.com/talk/topic/9606-how-to-configure-ckeditortextarea-field-to-enable-color-toolbar/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konfiguration CKEditor in PW (alt)==&lt;br /&gt;
&lt;br /&gt;
 /sites &lt;br /&gt;
ausgelagert und somit auch Updatefähig. Abschauen kann man im original Modul in &lt;br /&gt;
 wire/site/modules/InputfieldCKEditor/&lt;br /&gt;
Dort gibe es diverse Dateien. Allerdings ist nicht alles möglich, was in der CKEditor Doku steht. In PW können scheinbar manche Einstellungen nicht über die Dateien geregelt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wo stellt man was ein ? ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; Nicht alles was hier steht funktioniert auch so. Am besten im Backend in der Feldkonfiguration schauen und dort die Pfade anpassen.&lt;br /&gt;
Ordner:&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
Konfiguration gültig &amp;#039;&amp;#039;&amp;#039;für alle Felder im Backend&amp;#039;&amp;#039;&amp;#039; (hat bei mir bisher nicht ohne die Backendkonfiguration für das Feld funktioniert)&lt;br /&gt;
 config.js&lt;br /&gt;
Konfiguration für ein bestimmtes Feld falls vorhanden&lt;br /&gt;
 config.[fieldname.]js &lt;br /&gt;
 mystyles.js -&amp;gt; ein selbstbenanntes Feld kann im Backend bei der Konfiguration des CKEditor Feldes angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Konfiguration. Z.B. Styles hinzufügen, removeFormatTags, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alles was der Editor beim Eingeben mit &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bearbeitet. Außerdem &amp;#039;&amp;#039;&amp;#039;Style Auswahl anpassen&amp;#039;&amp;#039;&amp;#039; alle Optionen die mit &amp;#039;&amp;#039;&amp;#039;CKEDITOR.&amp;#039;&amp;#039;&amp;#039; anfangen&lt;br /&gt;
 content.css&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile die der Editor bei der Eingabe benutzt. Also quasi die Vorschau für den Benutzer.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 contents-inline.css&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile für die Vorschau beim Inline Editor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Feldkonfiguration im Admin Bereich PW&lt;br /&gt;
&lt;br /&gt;
Hier muß die &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039; eingestellt werden. Über Konfig hat es bisher nicht geklappt. Hier muss auch die &amp;#039;&amp;#039;&amp;#039;CSS Datei für die Inline Styles&amp;#039;&amp;#039;&amp;#039; angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Überschreiben in der config.js&amp;#039;&amp;#039;&amp;#039; hat bei mir nicht funktioniert - in aktueller Version 3.062 klappt es..&lt;br /&gt;
&lt;br /&gt;
 Auch &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039; müssen hier ausgewählt werden, damit sie eingebunden werden. Dies funktioniert also alles nur auf Feld-Ebene und nicht global.&lt;br /&gt;
=== CKEditor Buttons anpassen===&lt;br /&gt;
Wenn man ein Textarea Feld definiert, kann man auch für dieses Feld den CKEditor anpassen. Das geht im Backend in der &amp;#039;&amp;#039;&amp;#039;Feldkonfiguration unter dem Reiter Eingabe.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Beispiel: Hier werden &amp;#039;&amp;#039;&amp;#039;Buttons für die Textausrichtung hinzugefügt.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Einstellungen ===&lt;br /&gt;
Todo: TESTEN ob das wirklich funktioniert&lt;br /&gt;
Kann man im Modulverzeichnis unter site/modules hinterlegen. Achtung nicht im Modulverzeichnis unter wire überschreiben. Das ist beim nächsten Update weg.&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.js -&amp;gt; überschreibt oder ergänzt die Default Einstellung&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.body.js -&amp;gt; überschreibt oder ergänzt das body Feld&lt;br /&gt;
Beispiele:&lt;br /&gt;
 config.startupOutlineBlocks = true;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
	config.justifyClasses = [ &amp;#039;left&amp;#039;, &amp;#039;center&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;justify&amp;#039; ];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider funktionieren viele Einstellungen hier nicht, die im original CKEditor möglich sind.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
Eigene Stile zur Auswahl im &amp;#039;&amp;#039;&amp;#039;Styles&amp;#039;&amp;#039;&amp;#039; Dropdown&lt;br /&gt;
 site-&amp;gt;modules-&amp;gt;InputfieldCKEditor-&amp;gt;mystyles.js&lt;br /&gt;
anpassen.&lt;br /&gt;
Im Backend den Pfad hinzufügen (siehe Beispiel unten)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsbeispiele ===&lt;br /&gt;
Im Adminbereich im content_main Feld:&lt;br /&gt;
&lt;br /&gt;
==== CKEditor Toolbar ====&lt;br /&gt;
Added justify buttons...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Superscript, -,JustifyLeft ,JustifyCenter ,JustifyRight , -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blöcke anzeigen, Smileys&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Underline, Strike, Superscript, Subscript,&lt;br /&gt;
JustifyLeft ,JustifyCenter ,JustifyRight , -,  &lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar, Smiley, ShowBlocks, RemoveFormat,&lt;br /&gt;
PasteText, PasteFromWord,-, Undo, Redo, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor CSS File ====&lt;br /&gt;
Für die &amp;#039;&amp;#039;&amp;#039;im Editor angezeigten Stile&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 site/modules/InputfieldCKEditor/contents.css&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/fa/css/font-awesome.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/bootstrap/css/bootstrap.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/css/main.css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
.cke_editable {&lt;br /&gt;
	font-size: 14px;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_ltr blockquote {&lt;br /&gt;
	padding-left: 20px;&lt;br /&gt;
	padding-right: 8px;&lt;br /&gt;
	border-left-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_rtl blockquote {&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	padding-right: 20px;&lt;br /&gt;
	border-right-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor JS File ====&lt;br /&gt;
&lt;br /&gt;
Für die Auswahlfelder in der &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== config.js ====&lt;br /&gt;
In /site/modules/InputfieldCKEditor/config.js (oder config.feldname.js)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
  config.uiColor = &amp;#039;#AADC6E&amp;#039;;&lt;br /&gt;
  config.coreStyles_italic = { element : &amp;#039;i&amp;#039;, overrides : &amp;#039;em&amp;#039; }; // i nicht durch em überschreiben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Plugins hinzufügen ===&lt;br /&gt;
* https://weekly.pw/issue/13/#1-2 -&amp;gt; Plugins für CK Editor etc.&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23235</id>
		<title>ProcessWire - Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23235"/>
		<updated>2018-08-02T08:41:22Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Praktisches Beispiel 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;HINWEIS: Bei Änderungen an den Styles unbedingt Modul-Cache löschen (Module &amp;gt; Aktualisieren)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
 https://processwire.com/talk/topic/3023-module-ckeditor/&lt;br /&gt;
 https://processwire.com/talk/topic/14601-solved-ckeditor-custom-stylesclasses/&lt;br /&gt;
 https://processwire.com/talk/topic/19465-ckeditor-styles-dropdown-tips/&lt;br /&gt;
&lt;br /&gt;
== Der CKEditor ==&lt;br /&gt;
Ist der Standard Editor in PW. Es gibt auch Module mit denen man Ihn ersetzen kann. Im Prinzip aber ein mächtiges Werkzeug.&lt;br /&gt;
&lt;br /&gt;
Hinweis: In neueren Versionen von PW (mindestens ab V3) Sind einige der Angaben unten überholt. Zum Teil funktionieren Sie aber ncoh. Als Referenz bleiben Die Tutorials auf dieser Seite unten erhalten&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
=== Buttons ===&lt;br /&gt;
Im Backend anpassen&lt;br /&gt;
=== Format Stile ===&lt;br /&gt;
In der Feldkonfiguration unter&lt;br /&gt;
 Input &amp;gt; Format Tags&lt;br /&gt;
 &lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Styles Dropdown aktivieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Feldkonfiguration unter CK Editor Toolbar&lt;br /&gt;
 Styles&lt;br /&gt;
hinzufügen (am besten hinter Format)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; 2.Styles Datei hinzufügen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Datei unter Eigenes JS Styles Set angeben...&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
und Datei anlegen. Die sieht z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;customstyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hinweis: &amp;#039;&amp;#039;&amp;#039;Nicht mystyles:&amp;#039;&amp;#039;&amp;#039;/site/... Verwenden das führt zu Problemen im Backend. Mal sind die Stile da mal nicht. Also z.B. &amp;#039;&amp;#039;&amp;#039;customstyles in der Pfadangabe UND in der Datei verwenden.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== CKEditor allgemeines Wissen ==&lt;br /&gt;
Ein paar Infos zu CKEditor ohne PW. Viele Dinge sind ähnlich.&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Toolbar ====&lt;br /&gt;
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
Werden normalerweise mit einem Builder implementiert. Das geht bei PW nicht. Aber es gelten zum Teil die Regeln für Manuelle Installation. Manche Schritte z.B. aktivieren der Plugins macht man in PW aber wahlweise über die Feldkonfiguration.&lt;br /&gt;
&lt;br /&gt;
Beispiel Widget Plugin:&lt;br /&gt;
&lt;br /&gt;
If you want to add the plugin manually, you will need to:&lt;br /&gt;
* Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:&lt;br /&gt;
 http://example.com/ckeditor/plugins/widget&lt;br /&gt;
* Enable the plugin by using the extraPlugins configuration setting. Example:&lt;br /&gt;
 config.extraPlugins = &amp;#039;widget&amp;#039;; &lt;br /&gt;
* Download and configure all its &amp;#039;&amp;#039;&amp;#039;dependencies&amp;#039;&amp;#039;&amp;#039;, too.&lt;br /&gt;
In PW&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
=== Praktisches Beispiel 1===&lt;br /&gt;
&lt;br /&gt;
Im Tab Eingabe des Editor Felds kann man verschiedene Dinge Einstellen. Die meisten Felder sind auch recht gut erklärt:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Editor Toolbar einstellen&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Interessant ist hier der &amp;#039;&amp;#039;&amp;#039;Eintrag Styles&amp;#039;&amp;#039;&amp;#039;. Das Formatdialogfeld formatiert einzelne Blockstile wie h1 oder p. Im Styles Dropdown kann man auch Umgebende Blockelemente wie z.B. Divs mit speziellen Klassen nutzen. &lt;br /&gt;
&lt;br /&gt;
Guter Standard mit Tabellen und Styles Dropdown&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tags formatieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier kann man festlegen welche &amp;#039;&amp;#039;&amp;#039;Tags im Format Dropdown&amp;#039;&amp;#039;&amp;#039; ausgewählt werden können. Hier ein Beispiel bei dem wir h1 weglassen. H1 wird oft über das Template selbst ausgegeben und sollte nur einmal pro Seite auftauchen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
p;h2;h3;h4;h5;h6;pre;address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Styles festlegen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Um die oben erwähnten Styles anzupassen wir eine kleine JavaScript Datei. Wo diese liegt legen wir im Abschnitt &amp;#039;&amp;#039;&amp;#039;Eigenes Editor-JS-Style-Set&amp;#039;&amp;#039;&amp;#039; fest. Wir nutzen den bereits vorgeschlagenen Pfad tragen diesen ein und legen die Datei an:&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&lt;br /&gt;
Standardbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [ &lt;br /&gt;
 { name: &amp;#039;Inline Code&amp;#039;, element: &amp;#039;code&amp;#039; }, &lt;br /&gt;
 { name: &amp;#039;Inline Quotation&amp;#039;, element: &amp;#039;q&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Bild links&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_left&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Bild rechts&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_right&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Bild zentriert&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_center&amp;#039; } }, &lt;br /&gt;
 { name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Gelöscht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inserted Text&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Cited Work&amp;#039;, element: &amp;#039;cite&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Highlight&amp;#039;, element: &amp;#039;mark&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Einfügen&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Sample&amp;#039;, element: &amp;#039;samp&amp;#039; },&lt;br /&gt;
 	/* Uikit headlines */&lt;br /&gt;
 { name: &amp;#039;unterstrichen&amp;#039;, element: &amp;#039;h3&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-heading-divider&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Linie in der Mitte&amp;#039;, element: &amp;#039;h&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-heading-line&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Bullet&amp;#039;, element: &amp;#039;h&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-heading-bullet&amp;#039; } },&lt;br /&gt;
 	/* Uikit paragraphs */&lt;br /&gt;
 { name: &amp;#039;Kleine Schrift&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-small&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Große Schrift&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-large&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Kleinbuchstaben&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-lowercase&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Großbuchstaben&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-uppercase&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Erster Buchstabe groß&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-capitalize&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Farbe: ged&amp;amp;auml;mpft&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-muted&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Farbe: Prim&amp;amp;auml;r&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-primary&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Farbe: Erfolg&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-success&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Farbe: Warnung&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-warning&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Farbe: Gefahr&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-text-danger&amp;#039; } },&lt;br /&gt;
  /* ul classes */&lt;br /&gt;
  { name: &amp;#039;Liste mit Kugel&amp;#039;, element: &amp;#039;ul&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-list uk-list-bullet&amp;#039;}},&lt;br /&gt;
  { name: &amp;#039;Liste mit Linie&amp;#039;, element: &amp;#039;ul&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;uk-list uk-list-divide&amp;#039;}}&lt;br /&gt;
] );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Modifiziertes Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Expose-Liste&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;expose&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Gelöscht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Eingefügt&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Zitat&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiter Forum Beispiele ==&lt;br /&gt;
https://processwire.com/talk/topic/9606-how-to-configure-ckeditortextarea-field-to-enable-color-toolbar/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konfiguration CKEditor in PW (alt)==&lt;br /&gt;
&lt;br /&gt;
 /sites &lt;br /&gt;
ausgelagert und somit auch Updatefähig. Abschauen kann man im original Modul in &lt;br /&gt;
 wire/site/modules/InputfieldCKEditor/&lt;br /&gt;
Dort gibe es diverse Dateien. Allerdings ist nicht alles möglich, was in der CKEditor Doku steht. In PW können scheinbar manche Einstellungen nicht über die Dateien geregelt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wo stellt man was ein ? ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; Nicht alles was hier steht funktioniert auch so. Am besten im Backend in der Feldkonfiguration schauen und dort die Pfade anpassen.&lt;br /&gt;
Ordner:&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
Konfiguration gültig &amp;#039;&amp;#039;&amp;#039;für alle Felder im Backend&amp;#039;&amp;#039;&amp;#039; (hat bei mir bisher nicht ohne die Backendkonfiguration für das Feld funktioniert)&lt;br /&gt;
 config.js&lt;br /&gt;
Konfiguration für ein bestimmtes Feld falls vorhanden&lt;br /&gt;
 config.[fieldname.]js &lt;br /&gt;
 mystyles.js -&amp;gt; ein selbstbenanntes Feld kann im Backend bei der Konfiguration des CKEditor Feldes angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Konfiguration. Z.B. Styles hinzufügen, removeFormatTags, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alles was der Editor beim Eingeben mit &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bearbeitet. Außerdem &amp;#039;&amp;#039;&amp;#039;Style Auswahl anpassen&amp;#039;&amp;#039;&amp;#039; alle Optionen die mit &amp;#039;&amp;#039;&amp;#039;CKEDITOR.&amp;#039;&amp;#039;&amp;#039; anfangen&lt;br /&gt;
 content.css&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile die der Editor bei der Eingabe benutzt. Also quasi die Vorschau für den Benutzer.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 contents-inline.css&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile für die Vorschau beim Inline Editor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Feldkonfiguration im Admin Bereich PW&lt;br /&gt;
&lt;br /&gt;
Hier muß die &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039; eingestellt werden. Über Konfig hat es bisher nicht geklappt. Hier muss auch die &amp;#039;&amp;#039;&amp;#039;CSS Datei für die Inline Styles&amp;#039;&amp;#039;&amp;#039; angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Überschreiben in der config.js&amp;#039;&amp;#039;&amp;#039; hat bei mir nicht funktioniert - in aktueller Version 3.062 klappt es..&lt;br /&gt;
&lt;br /&gt;
 Auch &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039; müssen hier ausgewählt werden, damit sie eingebunden werden. Dies funktioniert also alles nur auf Feld-Ebene und nicht global.&lt;br /&gt;
=== CKEditor Buttons anpassen===&lt;br /&gt;
Wenn man ein Textarea Feld definiert, kann man auch für dieses Feld den CKEditor anpassen. Das geht im Backend in der &amp;#039;&amp;#039;&amp;#039;Feldkonfiguration unter dem Reiter Eingabe.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Beispiel: Hier werden &amp;#039;&amp;#039;&amp;#039;Buttons für die Textausrichtung hinzugefügt.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Einstellungen ===&lt;br /&gt;
Todo: TESTEN ob das wirklich funktioniert&lt;br /&gt;
Kann man im Modulverzeichnis unter site/modules hinterlegen. Achtung nicht im Modulverzeichnis unter wire überschreiben. Das ist beim nächsten Update weg.&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.js -&amp;gt; überschreibt oder ergänzt die Default Einstellung&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.body.js -&amp;gt; überschreibt oder ergänzt das body Feld&lt;br /&gt;
Beispiele:&lt;br /&gt;
 config.startupOutlineBlocks = true;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
	config.justifyClasses = [ &amp;#039;left&amp;#039;, &amp;#039;center&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;justify&amp;#039; ];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider funktionieren viele Einstellungen hier nicht, die im original CKEditor möglich sind.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
Eigene Stile zur Auswahl im &amp;#039;&amp;#039;&amp;#039;Styles&amp;#039;&amp;#039;&amp;#039; Dropdown&lt;br /&gt;
 site-&amp;gt;modules-&amp;gt;InputfieldCKEditor-&amp;gt;mystyles.js&lt;br /&gt;
anpassen.&lt;br /&gt;
Im Backend den Pfad hinzufügen (siehe Beispiel unten)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsbeispiele ===&lt;br /&gt;
Im Adminbereich im content_main Feld:&lt;br /&gt;
&lt;br /&gt;
==== CKEditor Toolbar ====&lt;br /&gt;
Added justify buttons...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Superscript, -,JustifyLeft ,JustifyCenter ,JustifyRight , -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blöcke anzeigen, Smileys&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Underline, Strike, Superscript, Subscript,&lt;br /&gt;
JustifyLeft ,JustifyCenter ,JustifyRight , -,  &lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar, Smiley, ShowBlocks, RemoveFormat,&lt;br /&gt;
PasteText, PasteFromWord,-, Undo, Redo, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor CSS File ====&lt;br /&gt;
Für die &amp;#039;&amp;#039;&amp;#039;im Editor angezeigten Stile&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 site/modules/InputfieldCKEditor/contents.css&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/fa/css/font-awesome.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/bootstrap/css/bootstrap.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/css/main.css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
.cke_editable {&lt;br /&gt;
	font-size: 14px;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_ltr blockquote {&lt;br /&gt;
	padding-left: 20px;&lt;br /&gt;
	padding-right: 8px;&lt;br /&gt;
	border-left-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_rtl blockquote {&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	padding-right: 20px;&lt;br /&gt;
	border-right-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor JS File ====&lt;br /&gt;
&lt;br /&gt;
Für die Auswahlfelder in der &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== config.js ====&lt;br /&gt;
In /site/modules/InputfieldCKEditor/config.js (oder config.feldname.js)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
  config.uiColor = &amp;#039;#AADC6E&amp;#039;;&lt;br /&gt;
  config.coreStyles_italic = { element : &amp;#039;i&amp;#039;, overrides : &amp;#039;em&amp;#039; }; // i nicht durch em überschreiben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Plugins hinzufügen ===&lt;br /&gt;
* https://weekly.pw/issue/13/#1-2 -&amp;gt; Plugins für CK Editor etc.&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23234</id>
		<title>ProcessWire - Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23234"/>
		<updated>2018-08-02T08:31:50Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;HINWEIS: Bei Änderungen an den Styles unbedingt Modul-Cache löschen (Module &amp;gt; Aktualisieren)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
 https://processwire.com/talk/topic/3023-module-ckeditor/&lt;br /&gt;
 https://processwire.com/talk/topic/14601-solved-ckeditor-custom-stylesclasses/&lt;br /&gt;
 https://processwire.com/talk/topic/19465-ckeditor-styles-dropdown-tips/&lt;br /&gt;
&lt;br /&gt;
== Der CKEditor ==&lt;br /&gt;
Ist der Standard Editor in PW. Es gibt auch Module mit denen man Ihn ersetzen kann. Im Prinzip aber ein mächtiges Werkzeug.&lt;br /&gt;
&lt;br /&gt;
Hinweis: In neueren Versionen von PW (mindestens ab V3) Sind einige der Angaben unten überholt. Zum Teil funktionieren Sie aber ncoh. Als Referenz bleiben Die Tutorials auf dieser Seite unten erhalten&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
=== Buttons ===&lt;br /&gt;
Im Backend anpassen&lt;br /&gt;
=== Format Stile ===&lt;br /&gt;
In der Feldkonfiguration unter&lt;br /&gt;
 Input &amp;gt; Format Tags&lt;br /&gt;
 &lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Styles Dropdown aktivieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Feldkonfiguration unter CK Editor Toolbar&lt;br /&gt;
 Styles&lt;br /&gt;
hinzufügen (am besten hinter Format)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; 2.Styles Datei hinzufügen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Datei unter Eigenes JS Styles Set angeben...&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
und Datei anlegen. Die sieht z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;customstyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hinweis: &amp;#039;&amp;#039;&amp;#039;Nicht mystyles:&amp;#039;&amp;#039;&amp;#039;/site/... Verwenden das führt zu Problemen im Backend. Mal sind die Stile da mal nicht. Also z.B. &amp;#039;&amp;#039;&amp;#039;customstyles in der Pfadangabe UND in der Datei verwenden.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== CKEditor allgemeines Wissen ==&lt;br /&gt;
Ein paar Infos zu CKEditor ohne PW. Viele Dinge sind ähnlich.&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Toolbar ====&lt;br /&gt;
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
Werden normalerweise mit einem Builder implementiert. Das geht bei PW nicht. Aber es gelten zum Teil die Regeln für Manuelle Installation. Manche Schritte z.B. aktivieren der Plugins macht man in PW aber wahlweise über die Feldkonfiguration.&lt;br /&gt;
&lt;br /&gt;
Beispiel Widget Plugin:&lt;br /&gt;
&lt;br /&gt;
If you want to add the plugin manually, you will need to:&lt;br /&gt;
* Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:&lt;br /&gt;
 http://example.com/ckeditor/plugins/widget&lt;br /&gt;
* Enable the plugin by using the extraPlugins configuration setting. Example:&lt;br /&gt;
 config.extraPlugins = &amp;#039;widget&amp;#039;; &lt;br /&gt;
* Download and configure all its &amp;#039;&amp;#039;&amp;#039;dependencies&amp;#039;&amp;#039;&amp;#039;, too.&lt;br /&gt;
In PW&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
=== Praktisches Beispiel 1===&lt;br /&gt;
&lt;br /&gt;
Im Tab Eingabe des Editor Felds kann man verschiedene Dinge Einstellen. Die meisten Felder sind auch recht gut erklärt:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Editor Toolbar einstellen&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Interessant ist hier der &amp;#039;&amp;#039;&amp;#039;Eintrag Styles&amp;#039;&amp;#039;&amp;#039;. Das Formatdialogfeld formatiert einzelne Blockstile wie h1 oder p. Im Styles Dropdown kann man auch Umgebende Blockelemente wie z.B. Divs mit speziellen Klassen nutzen. &lt;br /&gt;
&lt;br /&gt;
Guter Standard mit Tabellen und Styles Dropdown&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tags formatieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier kann man festlegen welche &amp;#039;&amp;#039;&amp;#039;Tags im Format Dropdown&amp;#039;&amp;#039;&amp;#039; ausgewählt werden können. Hier ein Beispiel bei dem wir h1 weglassen. H1 wird oft über das Template selbst ausgegeben und sollte nur einmal pro Seite auftauchen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
p;h2;h3;h4;h5;h6;pre;address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Styles festlegen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Um die oben erwähnten Styles anzupassen wir eine kleine JavaScript Datei. Wo diese liegt legen wir im Abschnitt &amp;#039;&amp;#039;&amp;#039;Eigenes Editor-JS-Style-Set&amp;#039;&amp;#039;&amp;#039; fest. Wir nutzen den bereits vorgeschlagenen Pfad tragen diesen ein und legen die Datei an:&lt;br /&gt;
 mystyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&lt;br /&gt;
Standardbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Inline Code&amp;#039;, element: &amp;#039;code&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inline Quotation&amp;#039;, element: &amp;#039;q&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Left Aligned Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_left&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Right Aligned Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_right&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Centered Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_center&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Small&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Deleted Text&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inserted Text&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Cited Work&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Modifiziertes Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Expose-Liste&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;expose&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Gelöscht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Eingefügt&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Zitat&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiter Forum Beispiele ==&lt;br /&gt;
https://processwire.com/talk/topic/9606-how-to-configure-ckeditortextarea-field-to-enable-color-toolbar/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konfiguration CKEditor in PW (alt)==&lt;br /&gt;
&lt;br /&gt;
 /sites &lt;br /&gt;
ausgelagert und somit auch Updatefähig. Abschauen kann man im original Modul in &lt;br /&gt;
 wire/site/modules/InputfieldCKEditor/&lt;br /&gt;
Dort gibe es diverse Dateien. Allerdings ist nicht alles möglich, was in der CKEditor Doku steht. In PW können scheinbar manche Einstellungen nicht über die Dateien geregelt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wo stellt man was ein ? ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; Nicht alles was hier steht funktioniert auch so. Am besten im Backend in der Feldkonfiguration schauen und dort die Pfade anpassen.&lt;br /&gt;
Ordner:&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
Konfiguration gültig &amp;#039;&amp;#039;&amp;#039;für alle Felder im Backend&amp;#039;&amp;#039;&amp;#039; (hat bei mir bisher nicht ohne die Backendkonfiguration für das Feld funktioniert)&lt;br /&gt;
 config.js&lt;br /&gt;
Konfiguration für ein bestimmtes Feld falls vorhanden&lt;br /&gt;
 config.[fieldname.]js &lt;br /&gt;
 mystyles.js -&amp;gt; ein selbstbenanntes Feld kann im Backend bei der Konfiguration des CKEditor Feldes angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Konfiguration. Z.B. Styles hinzufügen, removeFormatTags, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alles was der Editor beim Eingeben mit &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bearbeitet. Außerdem &amp;#039;&amp;#039;&amp;#039;Style Auswahl anpassen&amp;#039;&amp;#039;&amp;#039; alle Optionen die mit &amp;#039;&amp;#039;&amp;#039;CKEDITOR.&amp;#039;&amp;#039;&amp;#039; anfangen&lt;br /&gt;
 content.css&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile die der Editor bei der Eingabe benutzt. Also quasi die Vorschau für den Benutzer.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 contents-inline.css&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile für die Vorschau beim Inline Editor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Feldkonfiguration im Admin Bereich PW&lt;br /&gt;
&lt;br /&gt;
Hier muß die &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039; eingestellt werden. Über Konfig hat es bisher nicht geklappt. Hier muss auch die &amp;#039;&amp;#039;&amp;#039;CSS Datei für die Inline Styles&amp;#039;&amp;#039;&amp;#039; angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Überschreiben in der config.js&amp;#039;&amp;#039;&amp;#039; hat bei mir nicht funktioniert - in aktueller Version 3.062 klappt es..&lt;br /&gt;
&lt;br /&gt;
 Auch &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039; müssen hier ausgewählt werden, damit sie eingebunden werden. Dies funktioniert also alles nur auf Feld-Ebene und nicht global.&lt;br /&gt;
=== CKEditor Buttons anpassen===&lt;br /&gt;
Wenn man ein Textarea Feld definiert, kann man auch für dieses Feld den CKEditor anpassen. Das geht im Backend in der &amp;#039;&amp;#039;&amp;#039;Feldkonfiguration unter dem Reiter Eingabe.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Beispiel: Hier werden &amp;#039;&amp;#039;&amp;#039;Buttons für die Textausrichtung hinzugefügt.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Einstellungen ===&lt;br /&gt;
Todo: TESTEN ob das wirklich funktioniert&lt;br /&gt;
Kann man im Modulverzeichnis unter site/modules hinterlegen. Achtung nicht im Modulverzeichnis unter wire überschreiben. Das ist beim nächsten Update weg.&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.js -&amp;gt; überschreibt oder ergänzt die Default Einstellung&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.body.js -&amp;gt; überschreibt oder ergänzt das body Feld&lt;br /&gt;
Beispiele:&lt;br /&gt;
 config.startupOutlineBlocks = true;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
	config.justifyClasses = [ &amp;#039;left&amp;#039;, &amp;#039;center&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;justify&amp;#039; ];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider funktionieren viele Einstellungen hier nicht, die im original CKEditor möglich sind.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
Eigene Stile zur Auswahl im &amp;#039;&amp;#039;&amp;#039;Styles&amp;#039;&amp;#039;&amp;#039; Dropdown&lt;br /&gt;
 site-&amp;gt;modules-&amp;gt;InputfieldCKEditor-&amp;gt;mystyles.js&lt;br /&gt;
anpassen.&lt;br /&gt;
Im Backend den Pfad hinzufügen (siehe Beispiel unten)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsbeispiele ===&lt;br /&gt;
Im Adminbereich im content_main Feld:&lt;br /&gt;
&lt;br /&gt;
==== CKEditor Toolbar ====&lt;br /&gt;
Added justify buttons...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Superscript, -,JustifyLeft ,JustifyCenter ,JustifyRight , -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blöcke anzeigen, Smileys&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Underline, Strike, Superscript, Subscript,&lt;br /&gt;
JustifyLeft ,JustifyCenter ,JustifyRight , -,  &lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar, Smiley, ShowBlocks, RemoveFormat,&lt;br /&gt;
PasteText, PasteFromWord,-, Undo, Redo, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor CSS File ====&lt;br /&gt;
Für die &amp;#039;&amp;#039;&amp;#039;im Editor angezeigten Stile&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 site/modules/InputfieldCKEditor/contents.css&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/fa/css/font-awesome.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/bootstrap/css/bootstrap.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/css/main.css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
.cke_editable {&lt;br /&gt;
	font-size: 14px;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_ltr blockquote {&lt;br /&gt;
	padding-left: 20px;&lt;br /&gt;
	padding-right: 8px;&lt;br /&gt;
	border-left-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_rtl blockquote {&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	padding-right: 20px;&lt;br /&gt;
	border-right-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor JS File ====&lt;br /&gt;
&lt;br /&gt;
Für die Auswahlfelder in der &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== config.js ====&lt;br /&gt;
In /site/modules/InputfieldCKEditor/config.js (oder config.feldname.js)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
  config.uiColor = &amp;#039;#AADC6E&amp;#039;;&lt;br /&gt;
  config.coreStyles_italic = { element : &amp;#039;i&amp;#039;, overrides : &amp;#039;em&amp;#039; }; // i nicht durch em überschreiben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Plugins hinzufügen ===&lt;br /&gt;
* https://weekly.pw/issue/13/#1-2 -&amp;gt; Plugins für CK Editor etc.&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23233</id>
		<title>ProcessWire - Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23233"/>
		<updated>2018-08-02T08:20:38Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;HINWEIS: Bei Änderungen an den Styles unbedingt Modul-Cache löschen (Module &amp;gt; Aktualisieren)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
 https://processwire.com/talk/topic/3023-module-ckeditor/&lt;br /&gt;
 https://processwire.com/talk/topic/14601-solved-ckeditor-custom-stylesclasses/&lt;br /&gt;
 https://processwire.com/talk/topic/19465-ckeditor-styles-dropdown-tips/&lt;br /&gt;
&lt;br /&gt;
== Der CKEditor ==&lt;br /&gt;
Ist der Standard Editor in PW. Es gibt auch Module mit denen man Ihn ersetzen kann. Im Prinzip aber ein mächtiges Werkzeug.&lt;br /&gt;
&lt;br /&gt;
Hinweis: In neueren Versionen von PW (mindestens ab V3) Sind einige der Angaben unten überholt. Als Referenz bleiben Die Tutorials auf dieser Seite unten erhalten&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CKEditor allgemeines Wissen ==&lt;br /&gt;
Ein paar Infos zu CKEditor ohne PW. Viele Dinge sind ähnlich.&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Toolbar ====&lt;br /&gt;
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
Werden normalerweise mit einem Builder implementiert. Das geht bei PW nicht. Aber es gelten zum Teil die Regeln für Manuelle Installation. Manche Schritte z.B. aktivieren der Plugins macht man in PW aber wahlweise über die Feldkonfiguration.&lt;br /&gt;
&lt;br /&gt;
Beispiel Widget Plugin:&lt;br /&gt;
&lt;br /&gt;
If you want to add the plugin manually, you will need to:&lt;br /&gt;
* Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:&lt;br /&gt;
 http://example.com/ckeditor/plugins/widget&lt;br /&gt;
* Enable the plugin by using the extraPlugins configuration setting. Example:&lt;br /&gt;
 config.extraPlugins = &amp;#039;widget&amp;#039;; &lt;br /&gt;
* Download and configure all its &amp;#039;&amp;#039;&amp;#039;dependencies&amp;#039;&amp;#039;&amp;#039;, too.&lt;br /&gt;
In PW&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
=== Praktisches Beispiel 1===&lt;br /&gt;
&lt;br /&gt;
Im Tab Eingabe des Editor Felds kann man verschiedene Dinge Einstellen. Die meisten Felder sind auch recht gut erklärt:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Editor Toolbar einstellen&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Interessant ist hier der &amp;#039;&amp;#039;&amp;#039;Eintrag Styles&amp;#039;&amp;#039;&amp;#039;. Das Formatdialogfeld formatiert einzelne Blockstile wie h1 oder p. Im Styles Dropdown kann man auch Umgebende Blockelemente wie z.B. Divs mit speziellen Klassen nutzen. &lt;br /&gt;
&lt;br /&gt;
Guter Standard mit Tabellen und Styles Dropdown&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tags formatieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier kann man festlegen welche &amp;#039;&amp;#039;&amp;#039;Tags im Format Dropdown&amp;#039;&amp;#039;&amp;#039; ausgewählt werden können. Hier ein Beispiel bei dem wir h1 weglassen. H1 wird oft über das Template selbst ausgegeben und sollte nur einmal pro Seite auftauchen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
p;h2;h3;h4;h5;h6;pre;address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Styles festlegen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Um die oben erwähnten Styles anzupassen wir eine kleine JavaScript Datei. Wo diese liegt legen wir im Abschnitt &amp;#039;&amp;#039;&amp;#039;Eigenes Editor-JS-Style-Set&amp;#039;&amp;#039;&amp;#039; fest. Wir nutzen den bereits vorgeschlagenen Pfad tragen diesen ein und legen die Datei an:&lt;br /&gt;
 mystyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&lt;br /&gt;
Standardbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Inline Code&amp;#039;, element: &amp;#039;code&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inline Quotation&amp;#039;, element: &amp;#039;q&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Left Aligned Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_left&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Right Aligned Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_right&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Centered Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_center&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Small&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Deleted Text&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inserted Text&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Cited Work&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Modifiziertes Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Expose-Liste&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;expose&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Gelöscht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Eingefügt&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Zitat&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiter Forum Beispiele ==&lt;br /&gt;
https://processwire.com/talk/topic/9606-how-to-configure-ckeditortextarea-field-to-enable-color-toolbar/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konfiguration CKEditor in PW (alt)==&lt;br /&gt;
&lt;br /&gt;
 /sites &lt;br /&gt;
ausgelagert und somit auch Updatefähig. Abschauen kann man im original Modul in &lt;br /&gt;
 wire/site/modules/InputfieldCKEditor/&lt;br /&gt;
Dort gibe es diverse Dateien. Allerdings ist nicht alles möglich, was in der CKEditor Doku steht. In PW können scheinbar manche Einstellungen nicht über die Dateien geregelt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wo stellt man was ein ? ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; Nicht alles was hier steht funktioniert auch so. Am besten im Backend in der Feldkonfiguration schauen und dort die Pfade anpassen.&lt;br /&gt;
Ordner:&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
Konfiguration gültig &amp;#039;&amp;#039;&amp;#039;für alle Felder im Backend&amp;#039;&amp;#039;&amp;#039; (hat bei mir bisher nicht ohne die Backendkonfiguration für das Feld funktioniert)&lt;br /&gt;
 config.js&lt;br /&gt;
Konfiguration für ein bestimmtes Feld falls vorhanden&lt;br /&gt;
 config.[fieldname.]js &lt;br /&gt;
 mystyles.js -&amp;gt; ein selbstbenanntes Feld kann im Backend bei der Konfiguration des CKEditor Feldes angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Konfiguration. Z.B. Styles hinzufügen, removeFormatTags, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alles was der Editor beim Eingeben mit &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bearbeitet. Außerdem &amp;#039;&amp;#039;&amp;#039;Style Auswahl anpassen&amp;#039;&amp;#039;&amp;#039; alle Optionen die mit &amp;#039;&amp;#039;&amp;#039;CKEDITOR.&amp;#039;&amp;#039;&amp;#039; anfangen&lt;br /&gt;
 content.css&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile die der Editor bei der Eingabe benutzt. Also quasi die Vorschau für den Benutzer.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 contents-inline.css&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile für die Vorschau beim Inline Editor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Feldkonfiguration im Admin Bereich PW&lt;br /&gt;
&lt;br /&gt;
Hier muß die &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039; eingestellt werden. Über Konfig hat es bisher nicht geklappt. Hier muss auch die &amp;#039;&amp;#039;&amp;#039;CSS Datei für die Inline Styles&amp;#039;&amp;#039;&amp;#039; angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Überschreiben in der config.js&amp;#039;&amp;#039;&amp;#039; hat bei mir nicht funktioniert - in aktueller Version 3.062 klappt es..&lt;br /&gt;
&lt;br /&gt;
 Auch &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039; müssen hier ausgewählt werden, damit sie eingebunden werden. Dies funktioniert also alles nur auf Feld-Ebene und nicht global.&lt;br /&gt;
=== CKEditor Buttons anpassen===&lt;br /&gt;
Wenn man ein Textarea Feld definiert, kann man auch für dieses Feld den CKEditor anpassen. Das geht im Backend in der &amp;#039;&amp;#039;&amp;#039;Feldkonfiguration unter dem Reiter Eingabe.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Beispiel: Hier werden &amp;#039;&amp;#039;&amp;#039;Buttons für die Textausrichtung hinzugefügt.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Einstellungen ===&lt;br /&gt;
Todo: TESTEN ob das wirklich funktioniert&lt;br /&gt;
Kann man im Modulverzeichnis unter site/modules hinterlegen. Achtung nicht im Modulverzeichnis unter wire überschreiben. Das ist beim nächsten Update weg.&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.js -&amp;gt; überschreibt oder ergänzt die Default Einstellung&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.body.js -&amp;gt; überschreibt oder ergänzt das body Feld&lt;br /&gt;
Beispiele:&lt;br /&gt;
 config.startupOutlineBlocks = true;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
	config.justifyClasses = [ &amp;#039;left&amp;#039;, &amp;#039;center&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;justify&amp;#039; ];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider funktionieren viele Einstellungen hier nicht, die im original CKEditor möglich sind.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
Eigene Stile zur Auswahl im &amp;#039;&amp;#039;&amp;#039;Styles&amp;#039;&amp;#039;&amp;#039; Dropdown&lt;br /&gt;
 site-&amp;gt;modules-&amp;gt;InputfieldCKEditor-&amp;gt;mystyles.js&lt;br /&gt;
anpassen.&lt;br /&gt;
Im Backend den Pfad hinzufügen (siehe Beispiel unten)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsbeispiele ===&lt;br /&gt;
Im Adminbereich im content_main Feld:&lt;br /&gt;
&lt;br /&gt;
==== CKEditor Toolbar ====&lt;br /&gt;
Added justify buttons...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Superscript, -,JustifyLeft ,JustifyCenter ,JustifyRight , -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blöcke anzeigen, Smileys&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Underline, Strike, Superscript, Subscript,&lt;br /&gt;
JustifyLeft ,JustifyCenter ,JustifyRight , -,  &lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar, Smiley, ShowBlocks, RemoveFormat,&lt;br /&gt;
PasteText, PasteFromWord,-, Undo, Redo, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor CSS File ====&lt;br /&gt;
Für die &amp;#039;&amp;#039;&amp;#039;im Editor angezeigten Stile&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 site/modules/InputfieldCKEditor/contents.css&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/fa/css/font-awesome.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/bootstrap/css/bootstrap.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/css/main.css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
.cke_editable {&lt;br /&gt;
	font-size: 14px;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_ltr blockquote {&lt;br /&gt;
	padding-left: 20px;&lt;br /&gt;
	padding-right: 8px;&lt;br /&gt;
	border-left-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_rtl blockquote {&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	padding-right: 20px;&lt;br /&gt;
	border-right-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor JS File ====&lt;br /&gt;
&lt;br /&gt;
Für die Auswahlfelder in der &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 customstyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== config.js ====&lt;br /&gt;
In /site/modules/InputfieldCKEditor/config.js (oder config.feldname.js)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
  config.uiColor = &amp;#039;#AADC6E&amp;#039;;&lt;br /&gt;
  config.coreStyles_italic = { element : &amp;#039;i&amp;#039;, overrides : &amp;#039;em&amp;#039; }; // i nicht durch em überschreiben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Plugins hinzufügen ===&lt;br /&gt;
* https://weekly.pw/issue/13/#1-2 -&amp;gt; Plugins für CK Editor etc.&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23232</id>
		<title>ProcessWire - Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23232"/>
		<updated>2018-08-01T16:55:58Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;HINWEIS: Bei Änderungen an den Styles unbedingt Modul-Cache löschen (Module &amp;gt; Aktualisieren)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
 https://processwire.com/talk/topic/3023-module-ckeditor/&lt;br /&gt;
 https://processwire.com/talk/topic/14601-solved-ckeditor-custom-stylesclasses/&lt;br /&gt;
 https://processwire.com/talk/topic/19465-ckeditor-styles-dropdown-tips/&lt;br /&gt;
&lt;br /&gt;
== Der CKEditor ==&lt;br /&gt;
Ist der Standard Editor in PW. Es gibt auch Module mit denen man Ihn ersetzen kann. Im Prinzip aber ein mächtiges Werkzeug.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration CKEditor in PW==&lt;br /&gt;
Ist inzwischen in &lt;br /&gt;
 /sites &lt;br /&gt;
ausgelagert und somit auch Updatefähig. Abschauen kann man im original Modul in &lt;br /&gt;
 wire/site/modules/InputfieldCKEditor/&lt;br /&gt;
Dort gibe es diverse Dateien. Allerdings ist nicht alles möglich, was in der CKEditor Doku steht. In PW können scheinbar manche Einstellungen nicht über die Dateien geregelt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wo stellt man was ein ? ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; Nicht alles was hier steht funktioniert auch so. Am besten im Backend in der Feldkonfiguration schauen und dort die Pfade anpassen.&lt;br /&gt;
Ordner:&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
Konfiguration gültig &amp;#039;&amp;#039;&amp;#039;für alle Felder im Backend&amp;#039;&amp;#039;&amp;#039; (hat bei mir bisher nicht ohne die Backendkonfiguration für das Feld funktioniert)&lt;br /&gt;
 config.js&lt;br /&gt;
Konfiguration für ein bestimmtes Feld falls vorhanden&lt;br /&gt;
 config.[fieldname.]js &lt;br /&gt;
 mystyles.js -&amp;gt; ein selbstbenanntes Feld kann im Backend bei der Konfiguration des CKEditor Feldes angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Konfiguration. Z.B. Styles hinzufügen, removeFormatTags, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alles was der Editor beim Eingeben mit &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bearbeitet. Außerdem &amp;#039;&amp;#039;&amp;#039;Style Auswahl anpassen&amp;#039;&amp;#039;&amp;#039; alle Optionen die mit &amp;#039;&amp;#039;&amp;#039;CKEDITOR.&amp;#039;&amp;#039;&amp;#039; anfangen&lt;br /&gt;
 content.css&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile die der Editor bei der Eingabe benutzt. Also quasi die Vorschau für den Benutzer.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 contents-inline.css&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile für die Vorschau beim Inline Editor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Feldkonfiguration im Admin Bereich PW&lt;br /&gt;
&lt;br /&gt;
Hier muß die &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039; eingestellt werden. Über Konfig hat es bisher nicht geklappt. Hier muss auch die &amp;#039;&amp;#039;&amp;#039;CSS Datei für die Inline Styles&amp;#039;&amp;#039;&amp;#039; angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Überschreiben in der config.js&amp;#039;&amp;#039;&amp;#039; hat bei mir nicht funktioniert - in aktueller Version 3.062 klappt es..&lt;br /&gt;
&lt;br /&gt;
 Auch &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039; müssen hier ausgewählt werden, damit sie eingebunden werden. Dies funktioniert also alles nur auf Feld-Ebene und nicht global.&lt;br /&gt;
=== CKEditor Buttons anpassen===&lt;br /&gt;
Wenn man ein Textarea Feld definiert, kann man auch für dieses Feld den CKEditor anpassen. Das geht im Backend in der &amp;#039;&amp;#039;&amp;#039;Feldkonfiguration unter dem Reiter Eingabe.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Beispiel: Hier werden &amp;#039;&amp;#039;&amp;#039;Buttons für die Textausrichtung hinzugefügt.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Einstellungen ===&lt;br /&gt;
Todo: TESTEN ob das wirklich funktioniert&lt;br /&gt;
Kann man im Modulverzeichnis unter site/modules hinterlegen. Achtung nicht im Modulverzeichnis unter wire überschreiben. Das ist beim nächsten Update weg.&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.js -&amp;gt; überschreibt oder ergänzt die Default Einstellung&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.body.js -&amp;gt; überschreibt oder ergänzt das body Feld&lt;br /&gt;
Beispiele:&lt;br /&gt;
 config.startupOutlineBlocks = true;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
	config.justifyClasses = [ &amp;#039;left&amp;#039;, &amp;#039;center&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;justify&amp;#039; ];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider funktionieren viele Einstellungen hier nicht, die im original CKEditor möglich sind.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
Eigene Stile zur Auswahl im Styles Dropdown&lt;br /&gt;
 site-&amp;gt;modules-&amp;gt;InputfieldCKEditor-&amp;gt;mystyle.js&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * mystyles.js&lt;br /&gt;
  *&lt;br /&gt;
  * This file may be used when you have &amp;quot;Styles&amp;quot; as one of the items in your toolbar.&lt;br /&gt;
  * add mystyles:/site/modules/InputfieldCKEditor/mystyles.js in&lt;br /&gt;
  * Field Settings &amp;gt; CKEditor Settings &amp;gt; Custom Editor JS Styles Set&lt;br /&gt;
  *&lt;br /&gt;
  * For a more comprehensive example, see the file ./ckeditor-[version]/styles.js&lt;br /&gt;
  *&lt;br /&gt;
  */&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;} },&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsbeispiele ===&lt;br /&gt;
Im Adminbereich im content_main Feld:&lt;br /&gt;
&lt;br /&gt;
==== CKEditor Toolbar ====&lt;br /&gt;
Added justify buttons...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Superscript, -,JustifyLeft ,JustifyCenter ,JustifyRight , -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blöcke anzeigen, Smileys&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Underline, Strike, Superscript, Subscript,&lt;br /&gt;
JustifyLeft ,JustifyCenter ,JustifyRight , -,  &lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar, Smiley, ShowBlocks, RemoveFormat,&lt;br /&gt;
PasteText, PasteFromWord,-, Undo, Redo, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor CSS File ====&lt;br /&gt;
Für die im Editor angezeigten Stile&lt;br /&gt;
 site/modules/InputfieldCKEditor/contents.css&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/fa/css/font-awesome.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/bootstrap/css/bootstrap.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/css/main.css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
.cke_editable {&lt;br /&gt;
	font-size: 14px;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_ltr blockquote {&lt;br /&gt;
	padding-left: 20px;&lt;br /&gt;
	padding-right: 8px;&lt;br /&gt;
	border-left-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_rtl blockquote {&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	padding-right: 20px;&lt;br /&gt;
	border-right-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Custom Editor JS File ====&lt;br /&gt;
Für die Auswahlfelder in der &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 mystyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== config.js ====&lt;br /&gt;
In /site/modules/InputfieldCKEditor/config.js (oder config.feldname.js)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
  config.uiColor = &amp;#039;#AADC6E&amp;#039;;&lt;br /&gt;
  config.coreStyles_italic = { element : &amp;#039;i&amp;#039;, overrides : &amp;#039;em&amp;#039; }; // i nicht durch em überschreiben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Plugins hinzufügen ===&lt;br /&gt;
* https://weekly.pw/issue/13/#1-2 -&amp;gt; Plugins für CK Editor etc.&lt;br /&gt;
&lt;br /&gt;
== CKEditor allgemeines Wissen ==&lt;br /&gt;
Ein paar Infos zu CKEditor ohne PW. Viele Dinge sind ähnlich.&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Toolbar ====&lt;br /&gt;
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
Werden normalerweise mit einem Builder implementiert. Das geht bei PW nicht. Aber es gelten zum Teil die Regeln für Manuelle Installation. Manche Schritte z.B. aktivieren der Plugins macht man in PW aber wahlweise über die Feldkonfiguration.&lt;br /&gt;
&lt;br /&gt;
Beispiel Widget Plugin:&lt;br /&gt;
&lt;br /&gt;
If you want to add the plugin manually, you will need to:&lt;br /&gt;
* Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:&lt;br /&gt;
 http://example.com/ckeditor/plugins/widget&lt;br /&gt;
* Enable the plugin by using the extraPlugins configuration setting. Example:&lt;br /&gt;
 config.extraPlugins = &amp;#039;widget&amp;#039;; &lt;br /&gt;
* Download and configure all its &amp;#039;&amp;#039;&amp;#039;dependencies&amp;#039;&amp;#039;&amp;#039;, too.&lt;br /&gt;
In PW&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
=== Praktisches Beispiel 1===&lt;br /&gt;
&lt;br /&gt;
Im Tab Eingabe des Editor Felds kann man verschiedene Dinge Einstellen. Die meisten Felder sind auch recht gut erklärt:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Editor Toolbar einstellen&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Interessant ist hier der &amp;#039;&amp;#039;&amp;#039;Eintrag Styles&amp;#039;&amp;#039;&amp;#039;. Das Formatdialogfeld formatiert einzelne Blockstile wie h1 oder p. Im Styles Dropdown kann man auch Umgebende Blockelemente wie z.B. Divs mit speziellen Klassen nutzen. &lt;br /&gt;
&lt;br /&gt;
Guter Standard mit Tabellen und Styles Dropdown&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tags formatieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier kann man festlegen welche &amp;#039;&amp;#039;&amp;#039;Tags im Format Dropdown&amp;#039;&amp;#039;&amp;#039; ausgewählt werden können. Hier ein Beispiel bei dem wir h1 weglassen. H1 wird oft über das Template selbst ausgegeben und sollte nur einmal pro Seite auftauchen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
p;h2;h3;h4;h5;h6;pre;address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Styles festlegen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Um die oben erwähnten Styles anzupassen wir eine kleine JavaScript Datei. Wo diese liegt legen wir im Abschnitt &amp;#039;&amp;#039;&amp;#039;Eigenes Editor-JS-Style-Set&amp;#039;&amp;#039;&amp;#039; fest. Wir nutzen den bereits vorgeschlagenen Pfad tragen diesen ein und legen die Datei an:&lt;br /&gt;
 mystyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&lt;br /&gt;
Standardbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Inline Code&amp;#039;, element: &amp;#039;code&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inline Quotation&amp;#039;, element: &amp;#039;q&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Left Aligned Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_left&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Right Aligned Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_right&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Centered Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_center&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Small&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Deleted Text&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inserted Text&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Cited Work&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Modifiziertes Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Expose-Liste&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;expose&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Gelöscht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Eingefügt&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Zitat&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiter Forum Beispiele ==&lt;br /&gt;
https://processwire.com/talk/topic/9606-how-to-configure-ckeditortextarea-field-to-enable-color-toolbar/&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23231</id>
		<title>ProcessWire - Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23231"/>
		<updated>2018-08-01T16:28:31Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
&lt;br /&gt;
 https://processwire.com/talk/topic/3023-module-ckeditor/&lt;br /&gt;
 https://processwire.com/talk/topic/14601-solved-ckeditor-custom-stylesclasses/&lt;br /&gt;
 https://processwire.com/talk/topic/19465-ckeditor-styles-dropdown-tips/&lt;br /&gt;
&lt;br /&gt;
== Der CKEditor ==&lt;br /&gt;
Ist der Standard Editor in PW. Es gibt auch Module mit denen man Ihn ersetzen kann. Im Prinzip aber ein mächtiges Werkzeug.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration CKEditor in PW==&lt;br /&gt;
Ist inzwischen in &lt;br /&gt;
 /sites &lt;br /&gt;
ausgelagert und somit auch Updatefähig. Abschauen kann man im original Modul in &lt;br /&gt;
 wire/site/modules/InputfieldCKEditor/&lt;br /&gt;
Dort gibe es diverse Dateien. Allerdings ist nicht alles möglich, was in der CKEditor Doku steht. In PW können scheinbar manche Einstellungen nicht über die Dateien geregelt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wo stellt man was ein ? ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; Nicht alles was hier steht funktioniert auch so. Am besten im Backend in der Feldkonfiguration schauen und dort die Pfade anpassen.&lt;br /&gt;
Ordner:&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
Konfiguration gültig &amp;#039;&amp;#039;&amp;#039;für alle Felder im Backend&amp;#039;&amp;#039;&amp;#039; (hat bei mir bisher nicht ohne die Backendkonfiguration für das Feld funktioniert)&lt;br /&gt;
 config.js&lt;br /&gt;
Konfiguration für ein bestimmtes Feld falls vorhanden&lt;br /&gt;
 config.[fieldname.]js &lt;br /&gt;
 mystyles.js -&amp;gt; ein selbstbenanntes Feld kann im Backend bei der Konfiguration des CKEditor Feldes angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Konfiguration. Z.B. Styles hinzufügen, removeFormatTags, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alles was der Editor beim Eingeben mit &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bearbeitet. Außerdem &amp;#039;&amp;#039;&amp;#039;Style Auswahl anpassen&amp;#039;&amp;#039;&amp;#039; alle Optionen die mit &amp;#039;&amp;#039;&amp;#039;CKEDITOR.&amp;#039;&amp;#039;&amp;#039; anfangen&lt;br /&gt;
 content.css&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile die der Editor bei der Eingabe benutzt. Also quasi die Vorschau für den Benutzer.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 contents-inline.css&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile für die Vorschau beim Inline Editor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Feldkonfiguration im Admin Bereich PW&lt;br /&gt;
&lt;br /&gt;
Hier muß die &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039; eingestellt werden. Über Konfig hat es bisher nicht geklappt. Hier muss auch die &amp;#039;&amp;#039;&amp;#039;CSS Datei für die Inline Styles&amp;#039;&amp;#039;&amp;#039; angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Überschreiben in der config.js&amp;#039;&amp;#039;&amp;#039; hat bei mir nicht funktioniert - in aktueller Version 3.062 klappt es..&lt;br /&gt;
&lt;br /&gt;
 Auch &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039; müssen hier ausgewählt werden, damit sie eingebunden werden. Dies funktioniert also alles nur auf Feld-Ebene und nicht global.&lt;br /&gt;
=== CKEditor Buttons anpassen===&lt;br /&gt;
Wenn man ein Textarea Feld definiert, kann man auch für dieses Feld den CKEditor anpassen. Das geht im Backend in der &amp;#039;&amp;#039;&amp;#039;Feldkonfiguration unter dem Reiter Eingabe.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Beispiel: Hier werden &amp;#039;&amp;#039;&amp;#039;Buttons für die Textausrichtung hinzugefügt.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Einstellungen ===&lt;br /&gt;
Todo: TESTEN ob das wirklich funktioniert&lt;br /&gt;
Kann man im Modulverzeichnis unter site/modules hinterlegen. Achtung nicht im Modulverzeichnis unter wire überschreiben. Das ist beim nächsten Update weg.&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.js -&amp;gt; überschreibt oder ergänzt die Default Einstellung&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.body.js -&amp;gt; überschreibt oder ergänzt das body Feld&lt;br /&gt;
Beispiele:&lt;br /&gt;
 config.startupOutlineBlocks = true;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
	config.justifyClasses = [ &amp;#039;left&amp;#039;, &amp;#039;center&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;justify&amp;#039; ];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider funktionieren viele Einstellungen hier nicht, die im original CKEditor möglich sind.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
Eigene Stile zur Auswahl im Styles Dropdown&lt;br /&gt;
 site-&amp;gt;modules-&amp;gt;InputfieldCKEditor-&amp;gt;mystyle.js&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * mystyles.js&lt;br /&gt;
  *&lt;br /&gt;
  * This file may be used when you have &amp;quot;Styles&amp;quot; as one of the items in your toolbar.&lt;br /&gt;
  * add mystyles:/site/modules/InputfieldCKEditor/mystyles.js in&lt;br /&gt;
  * Field Settings &amp;gt; CKEditor Settings &amp;gt; Custom Editor JS Styles Set&lt;br /&gt;
  *&lt;br /&gt;
  * For a more comprehensive example, see the file ./ckeditor-[version]/styles.js&lt;br /&gt;
  *&lt;br /&gt;
  */&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;} },&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsbeispiele ===&lt;br /&gt;
Im Adminbereich im content_main Feld:&lt;br /&gt;
&lt;br /&gt;
==== CKEditor Toolbar ====&lt;br /&gt;
Added justify buttons...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Superscript, -,JustifyLeft ,JustifyCenter ,JustifyRight , -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blöcke anzeigen, Smileys&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Underline, Strike, Superscript, Subscript,&lt;br /&gt;
JustifyLeft ,JustifyCenter ,JustifyRight , -,  &lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar, Smiley, ShowBlocks, RemoveFormat,&lt;br /&gt;
PasteText, PasteFromWord,-, Undo, Redo, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor CSS File ====&lt;br /&gt;
Für die im Editor angezeigten Stile&lt;br /&gt;
 site/modules/InputfieldCKEditor/contents.css&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/fa/css/font-awesome.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/bootstrap/css/bootstrap.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/css/main.css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
.cke_editable {&lt;br /&gt;
	font-size: 14px;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_ltr blockquote {&lt;br /&gt;
	padding-left: 20px;&lt;br /&gt;
	padding-right: 8px;&lt;br /&gt;
	border-left-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_rtl blockquote {&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	padding-right: 20px;&lt;br /&gt;
	border-right-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Custom Editor JS File ====&lt;br /&gt;
Für die Auswahlfelder in der &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 mystyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== config.js ====&lt;br /&gt;
In /site/modules/InputfieldCKEditor/config.js (oder config.feldname.js)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
  config.uiColor = &amp;#039;#AADC6E&amp;#039;;&lt;br /&gt;
  config.coreStyles_italic = { element : &amp;#039;i&amp;#039;, overrides : &amp;#039;em&amp;#039; }; // i nicht durch em überschreiben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Plugins hinzufügen ===&lt;br /&gt;
* https://weekly.pw/issue/13/#1-2 -&amp;gt; Plugins für CK Editor etc.&lt;br /&gt;
&lt;br /&gt;
== CKEditor allgemeines Wissen ==&lt;br /&gt;
Ein paar Infos zu CKEditor ohne PW. Viele Dinge sind ähnlich.&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Toolbar ====&lt;br /&gt;
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
Werden normalerweise mit einem Builder implementiert. Das geht bei PW nicht. Aber es gelten zum Teil die Regeln für Manuelle Installation. Manche Schritte z.B. aktivieren der Plugins macht man in PW aber wahlweise über die Feldkonfiguration.&lt;br /&gt;
&lt;br /&gt;
Beispiel Widget Plugin:&lt;br /&gt;
&lt;br /&gt;
If you want to add the plugin manually, you will need to:&lt;br /&gt;
* Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:&lt;br /&gt;
 http://example.com/ckeditor/plugins/widget&lt;br /&gt;
* Enable the plugin by using the extraPlugins configuration setting. Example:&lt;br /&gt;
 config.extraPlugins = &amp;#039;widget&amp;#039;; &lt;br /&gt;
* Download and configure all its &amp;#039;&amp;#039;&amp;#039;dependencies&amp;#039;&amp;#039;&amp;#039;, too.&lt;br /&gt;
In PW&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
=== Praktisches Beispiel 1===&lt;br /&gt;
&lt;br /&gt;
Im Tab Eingabe des Editor Felds kann man verschiedene Dinge Einstellen. Die meisten Felder sind auch recht gut erklärt:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Editor Toolbar einstellen&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Interessant ist hier der &amp;#039;&amp;#039;&amp;#039;Eintrag Styles&amp;#039;&amp;#039;&amp;#039;. Das Formatdialogfeld formatiert einzelne Blockstile wie h1 oder p. Im Styles Dropdown kann man auch Umgebende Blockelemente wie z.B. Divs mit speziellen Klassen nutzen. &lt;br /&gt;
&lt;br /&gt;
Guter Standard mit Tabellen und Styles Dropdown&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tags formatieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier kann man festlegen welche &amp;#039;&amp;#039;&amp;#039;Tags im Format Dropdown&amp;#039;&amp;#039;&amp;#039; ausgewählt werden können. Hier ein Beispiel bei dem wir h1 weglassen. H1 wird oft über das Template selbst ausgegeben und sollte nur einmal pro Seite auftauchen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
p;h2;h3;h4;h5;h6;pre;address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Styles festlegen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Um die oben erwähnten Styles anzupassen wir eine kleine JavaScript Datei. Wo diese liegt legen wir im Abschnitt &amp;#039;&amp;#039;&amp;#039;Eigenes Editor-JS-Style-Set&amp;#039;&amp;#039;&amp;#039; fest. Wir nutzen den bereits vorgeschlagenen Pfad tragen diesen ein und legen die Datei an:&lt;br /&gt;
 mystyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&lt;br /&gt;
Standardbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Inline Code&amp;#039;, element: &amp;#039;code&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inline Quotation&amp;#039;, element: &amp;#039;q&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Left Aligned Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_left&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Right Aligned Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_right&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Centered Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_center&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Small&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Deleted Text&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inserted Text&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Cited Work&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Modifiziertes Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Expose-Liste&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;expose&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Gelöscht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Eingefügt&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Zitat&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiter Forum Beispiele ==&lt;br /&gt;
https://processwire.com/talk/topic/9606-how-to-configure-ckeditortextarea-field-to-enable-color-toolbar/&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23230</id>
		<title>ProcessWire - Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23230"/>
		<updated>2018-08-01T16:05:02Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Snippets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
https://processwire.com/talk/topic/3023-module-ckeditor/&lt;br /&gt;
&lt;br /&gt;
https://processwire.com/talk/topic/14601-solved-ckeditor-custom-stylesclasses/&lt;br /&gt;
&lt;br /&gt;
== Der CKEditor ==&lt;br /&gt;
Ist der Standard Editor in PW. Es gibt auch Module mit denen man Ihn ersetzen kann. Im Prinzip aber ein mächtiges Werkzeug.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration CKEditor in PW==&lt;br /&gt;
Ist inzwischen in &lt;br /&gt;
 /sites &lt;br /&gt;
ausgelagert und somit auch Updatefähig. Abschauen kann man im original Modul in &lt;br /&gt;
 wire/site/modules/InputfieldCKEditor/&lt;br /&gt;
Dort gibe es diverse Dateien. Allerdings ist nicht alles möglich, was in der CKEditor Doku steht. In PW können scheinbar manche Einstellungen nicht über die Dateien geregelt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wo stellt man was ein ? ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; Nicht alles was hier steht funktioniert auch so. Am besten im Backend in der Feldkonfiguration schauen und dort die Pfade anpassen.&lt;br /&gt;
Ordner:&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
Konfiguration gültig &amp;#039;&amp;#039;&amp;#039;für alle Felder im Backend&amp;#039;&amp;#039;&amp;#039; (hat bei mir bisher nicht ohne die Backendkonfiguration für das Feld funktioniert)&lt;br /&gt;
 config.js&lt;br /&gt;
Konfiguration für ein bestimmtes Feld falls vorhanden&lt;br /&gt;
 config.[fieldname.]js &lt;br /&gt;
 mystyles.js -&amp;gt; ein selbstbenanntes Feld kann im Backend bei der Konfiguration des CKEditor Feldes angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Konfiguration. Z.B. Styles hinzufügen, removeFormatTags, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alles was der Editor beim Eingeben mit &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bearbeitet. Außerdem &amp;#039;&amp;#039;&amp;#039;Style Auswahl anpassen&amp;#039;&amp;#039;&amp;#039; alle Optionen die mit &amp;#039;&amp;#039;&amp;#039;CKEDITOR.&amp;#039;&amp;#039;&amp;#039; anfangen&lt;br /&gt;
 content.css&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile die der Editor bei der Eingabe benutzt. Also quasi die Vorschau für den Benutzer.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 contents-inline.css&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile für die Vorschau beim Inline Editor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Feldkonfiguration im Admin Bereich PW&lt;br /&gt;
&lt;br /&gt;
Hier muß die &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039; eingestellt werden. Über Konfig hat es bisher nicht geklappt. Hier muss auch die &amp;#039;&amp;#039;&amp;#039;CSS Datei für die Inline Styles&amp;#039;&amp;#039;&amp;#039; angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Überschreiben in der config.js&amp;#039;&amp;#039;&amp;#039; hat bei mir nicht funktioniert - in aktueller Version 3.062 klappt es..&lt;br /&gt;
&lt;br /&gt;
 Auch &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039; müssen hier ausgewählt werden, damit sie eingebunden werden. Dies funktioniert also alles nur auf Feld-Ebene und nicht global.&lt;br /&gt;
=== CKEditor Buttons anpassen===&lt;br /&gt;
Wenn man ein Textarea Feld definiert, kann man auch für dieses Feld den CKEditor anpassen. Das geht im Backend in der &amp;#039;&amp;#039;&amp;#039;Feldkonfiguration unter dem Reiter Eingabe.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Beispiel: Hier werden &amp;#039;&amp;#039;&amp;#039;Buttons für die Textausrichtung hinzugefügt.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Einstellungen ===&lt;br /&gt;
Todo: TESTEN ob das wirklich funktioniert&lt;br /&gt;
Kann man im Modulverzeichnis unter site/modules hinterlegen. Achtung nicht im Modulverzeichnis unter wire überschreiben. Das ist beim nächsten Update weg.&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.js -&amp;gt; überschreibt oder ergänzt die Default Einstellung&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.body.js -&amp;gt; überschreibt oder ergänzt das body Feld&lt;br /&gt;
Beispiele:&lt;br /&gt;
 config.startupOutlineBlocks = true;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
	config.justifyClasses = [ &amp;#039;left&amp;#039;, &amp;#039;center&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;justify&amp;#039; ];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider funktionieren viele Einstellungen hier nicht, die im original CKEditor möglich sind.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
Eigene Stile zur Auswahl im Styles Dropdown&lt;br /&gt;
 site-&amp;gt;modules-&amp;gt;InputfieldCKEditor-&amp;gt;mystyle.js&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * mystyles.js&lt;br /&gt;
  *&lt;br /&gt;
  * This file may be used when you have &amp;quot;Styles&amp;quot; as one of the items in your toolbar.&lt;br /&gt;
  * add mystyles:/site/modules/InputfieldCKEditor/mystyles.js in&lt;br /&gt;
  * Field Settings &amp;gt; CKEditor Settings &amp;gt; Custom Editor JS Styles Set&lt;br /&gt;
  *&lt;br /&gt;
  * For a more comprehensive example, see the file ./ckeditor-[version]/styles.js&lt;br /&gt;
  *&lt;br /&gt;
  */&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;} },&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsbeispiele ===&lt;br /&gt;
Im Adminbereich im content_main Feld:&lt;br /&gt;
&lt;br /&gt;
==== CKEditor Toolbar ====&lt;br /&gt;
Added justify buttons...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Superscript, -,JustifyLeft ,JustifyCenter ,JustifyRight , -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blöcke anzeigen, Smileys&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Underline, Strike, Superscript, Subscript,&lt;br /&gt;
JustifyLeft ,JustifyCenter ,JustifyRight , -,  &lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar, Smiley, ShowBlocks, RemoveFormat,&lt;br /&gt;
PasteText, PasteFromWord,-, Undo, Redo, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor CSS File ====&lt;br /&gt;
Für die im Editor angezeigten Stile&lt;br /&gt;
 site/modules/InputfieldCKEditor/contents.css&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/fa/css/font-awesome.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/bootstrap/css/bootstrap.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/css/main.css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
.cke_editable {&lt;br /&gt;
	font-size: 14px;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_ltr blockquote {&lt;br /&gt;
	padding-left: 20px;&lt;br /&gt;
	padding-right: 8px;&lt;br /&gt;
	border-left-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_rtl blockquote {&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	padding-right: 20px;&lt;br /&gt;
	border-right-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Custom Editor JS File ====&lt;br /&gt;
Für die Auswahlfelder in der &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 mystyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== config.js ====&lt;br /&gt;
In /site/modules/InputfieldCKEditor/config.js (oder config.feldname.js)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
  config.uiColor = &amp;#039;#AADC6E&amp;#039;;&lt;br /&gt;
  config.coreStyles_italic = { element : &amp;#039;i&amp;#039;, overrides : &amp;#039;em&amp;#039; }; // i nicht durch em überschreiben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Plugins hinzufügen ===&lt;br /&gt;
* https://weekly.pw/issue/13/#1-2 -&amp;gt; Plugins für CK Editor etc.&lt;br /&gt;
&lt;br /&gt;
== CKEditor allgemeines Wissen ==&lt;br /&gt;
Ein paar Infos zu CKEditor ohne PW. Viele Dinge sind ähnlich.&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Toolbar ====&lt;br /&gt;
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
Werden normalerweise mit einem Builder implementiert. Das geht bei PW nicht. Aber es gelten zum Teil die Regeln für Manuelle Installation. Manche Schritte z.B. aktivieren der Plugins macht man in PW aber wahlweise über die Feldkonfiguration.&lt;br /&gt;
&lt;br /&gt;
Beispiel Widget Plugin:&lt;br /&gt;
&lt;br /&gt;
If you want to add the plugin manually, you will need to:&lt;br /&gt;
* Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:&lt;br /&gt;
 http://example.com/ckeditor/plugins/widget&lt;br /&gt;
* Enable the plugin by using the extraPlugins configuration setting. Example:&lt;br /&gt;
 config.extraPlugins = &amp;#039;widget&amp;#039;; &lt;br /&gt;
* Download and configure all its &amp;#039;&amp;#039;&amp;#039;dependencies&amp;#039;&amp;#039;&amp;#039;, too.&lt;br /&gt;
In PW&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
=== Praktisches Beispiel 1===&lt;br /&gt;
&lt;br /&gt;
Im Tab Eingabe des Editor Felds kann man verschiedene Dinge Einstellen. Die meisten Felder sind auch recht gut erklärt:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Editor Toolbar einstellen&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Interessant ist hier der &amp;#039;&amp;#039;&amp;#039;Eintrag Styles&amp;#039;&amp;#039;&amp;#039;. Das Formatdialogfeld formatiert einzelne Blockstile wie h1 oder p. Im Styles Dropdown kann man auch Umgebende Blockelemente wie z.B. Divs mit speziellen Klassen nutzen. &lt;br /&gt;
&lt;br /&gt;
Guter Standard mit Tabellen und Styles Dropdown&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tags formatieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier kann man festlegen welche &amp;#039;&amp;#039;&amp;#039;Tags im Format Dropdown&amp;#039;&amp;#039;&amp;#039; ausgewählt werden können. Hier ein Beispiel bei dem wir h1 weglassen. H1 wird oft über das Template selbst ausgegeben und sollte nur einmal pro Seite auftauchen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
p;h2;h3;h4;h5;h6;pre;address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Styles festlegen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Um die oben erwähnten Styles anzupassen wir eine kleine JavaScript Datei. Wo diese liegt legen wir im Abschnitt &amp;#039;&amp;#039;&amp;#039;Eigenes Editor-JS-Style-Set&amp;#039;&amp;#039;&amp;#039; fest. Wir nutzen den bereits vorgeschlagenen Pfad tragen diesen ein und legen die Datei an:&lt;br /&gt;
 mystyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&lt;br /&gt;
Standardbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Inline Code&amp;#039;, element: &amp;#039;code&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inline Quotation&amp;#039;, element: &amp;#039;q&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Left Aligned Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_left&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Right Aligned Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_right&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Centered Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_center&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Small&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Deleted Text&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inserted Text&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Cited Work&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Modifiziertes Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Expose-Liste&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;expose&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Gelöscht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Eingefügt&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Zitat&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiter Forum Beispiele ==&lt;br /&gt;
https://processwire.com/talk/topic/9606-how-to-configure-ckeditortextarea-field-to-enable-color-toolbar/&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23229</id>
		<title>ProcessWire - Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23229"/>
		<updated>2018-08-01T15:54:17Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
https://processwire.com/talk/topic/3023-module-ckeditor/&lt;br /&gt;
&lt;br /&gt;
https://processwire.com/talk/topic/14601-solved-ckeditor-custom-stylesclasses/&lt;br /&gt;
&lt;br /&gt;
== Der CKEditor ==&lt;br /&gt;
Ist der Standard Editor in PW. Es gibt auch Module mit denen man Ihn ersetzen kann. Im Prinzip aber ein mächtiges Werkzeug.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration CKEditor in PW==&lt;br /&gt;
Ist inzwischen in &lt;br /&gt;
 /sites &lt;br /&gt;
ausgelagert und somit auch Updatefähig. Abschauen kann man im original Modul in &lt;br /&gt;
 wire/site/modules/InputfieldCKEditor/&lt;br /&gt;
Dort gibe es diverse Dateien. Allerdings ist nicht alles möglich, was in der CKEditor Doku steht. In PW können scheinbar manche Einstellungen nicht über die Dateien geregelt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wo stellt man was ein ? ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; Nicht alles was hier steht funktioniert auch so. Am besten im Backend in der Feldkonfiguration schauen und dort die Pfade anpassen.&lt;br /&gt;
Ordner:&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
Konfiguration gültig &amp;#039;&amp;#039;&amp;#039;für alle Felder im Backend&amp;#039;&amp;#039;&amp;#039; (hat bei mir bisher nicht ohne die Backendkonfiguration für das Feld funktioniert)&lt;br /&gt;
 config.js&lt;br /&gt;
Konfiguration für ein bestimmtes Feld falls vorhanden&lt;br /&gt;
 config.[fieldname.]js &lt;br /&gt;
 mystyles.js -&amp;gt; ein selbstbenanntes Feld kann im Backend bei der Konfiguration des CKEditor Feldes angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Konfiguration. Z.B. Styles hinzufügen, removeFormatTags, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alles was der Editor beim Eingeben mit &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bearbeitet. Außerdem &amp;#039;&amp;#039;&amp;#039;Style Auswahl anpassen&amp;#039;&amp;#039;&amp;#039; alle Optionen die mit &amp;#039;&amp;#039;&amp;#039;CKEDITOR.&amp;#039;&amp;#039;&amp;#039; anfangen&lt;br /&gt;
 content.css&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile die der Editor bei der Eingabe benutzt. Also quasi die Vorschau für den Benutzer.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 contents-inline.css&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile für die Vorschau beim Inline Editor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Feldkonfiguration im Admin Bereich PW&lt;br /&gt;
&lt;br /&gt;
Hier muß die &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039; eingestellt werden. Über Konfig hat es bisher nicht geklappt. Hier muss auch die &amp;#039;&amp;#039;&amp;#039;CSS Datei für die Inline Styles&amp;#039;&amp;#039;&amp;#039; angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Überschreiben in der config.js&amp;#039;&amp;#039;&amp;#039; hat bei mir nicht funktioniert - in aktueller Version 3.062 klappt es..&lt;br /&gt;
&lt;br /&gt;
 Auch &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039; müssen hier ausgewählt werden, damit sie eingebunden werden. Dies funktioniert also alles nur auf Feld-Ebene und nicht global.&lt;br /&gt;
=== CKEditor Buttons anpassen===&lt;br /&gt;
Wenn man ein Textarea Feld definiert, kann man auch für dieses Feld den CKEditor anpassen. Das geht im Backend in der &amp;#039;&amp;#039;&amp;#039;Feldkonfiguration unter dem Reiter Eingabe.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Beispiel: Hier werden &amp;#039;&amp;#039;&amp;#039;Buttons für die Textausrichtung hinzugefügt.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Einstellungen ===&lt;br /&gt;
Todo: TESTEN ob das wirklich funktioniert&lt;br /&gt;
Kann man im Modulverzeichnis unter site/modules hinterlegen. Achtung nicht im Modulverzeichnis unter wire überschreiben. Das ist beim nächsten Update weg.&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.js -&amp;gt; überschreibt oder ergänzt die Default Einstellung&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.body.js -&amp;gt; überschreibt oder ergänzt das body Feld&lt;br /&gt;
Beispiele:&lt;br /&gt;
 config.startupOutlineBlocks = true;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
	config.justifyClasses = [ &amp;#039;left&amp;#039;, &amp;#039;center&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;justify&amp;#039; ];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider funktionieren viele Einstellungen hier nicht, die im original CKEditor möglich sind.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
Eigene Stile zur Auswahl im Styles Dropdown&lt;br /&gt;
 site-&amp;gt;modules-&amp;gt;InputfieldCKEditor-&amp;gt;mystyle.js&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * mystyles.js&lt;br /&gt;
  *&lt;br /&gt;
  * This file may be used when you have &amp;quot;Styles&amp;quot; as one of the items in your toolbar.&lt;br /&gt;
  * add mystyles:/site/modules/InputfieldCKEditor/mystyles.js in&lt;br /&gt;
  * Field Settings &amp;gt; CKEditor Settings &amp;gt; Custom Editor JS Styles Set&lt;br /&gt;
  *&lt;br /&gt;
  * For a more comprehensive example, see the file ./ckeditor-[version]/styles.js&lt;br /&gt;
  *&lt;br /&gt;
  */&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;} },&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsbeispiele ===&lt;br /&gt;
Im Adminbereich im content_main Feld:&lt;br /&gt;
&lt;br /&gt;
==== CKEditor Toolbar ====&lt;br /&gt;
Added justify buttons...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Superscript, -,JustifyLeft ,JustifyCenter ,JustifyRight , -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blöcke anzeigen, Smileys&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Underline, Strike, Superscript, Subscript,&lt;br /&gt;
JustifyLeft ,JustifyCenter ,JustifyRight , -,  &lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar, Smiley, ShowBlocks, RemoveFormat,&lt;br /&gt;
PasteText, PasteFromWord,-, Undo, Redo, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor CSS File ====&lt;br /&gt;
Für die im Editor angezeigten Stile&lt;br /&gt;
 site/modules/InputfieldCKEditor/contents.css&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/fa/css/font-awesome.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/bootstrap/css/bootstrap.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/css/main.css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
.cke_editable {&lt;br /&gt;
	font-size: 14px;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_ltr blockquote {&lt;br /&gt;
	padding-left: 20px;&lt;br /&gt;
	padding-right: 8px;&lt;br /&gt;
	border-left-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_rtl blockquote {&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	padding-right: 20px;&lt;br /&gt;
	border-right-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Custom Editor JS File ====&lt;br /&gt;
Für die Auswahlfelder in der &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 mystyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== config.js ====&lt;br /&gt;
In /site/modules/InputfieldCKEditor/config.js (oder config.feldname.js)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
  config.uiColor = &amp;#039;#AADC6E&amp;#039;;&lt;br /&gt;
  config.coreStyles_italic = { element : &amp;#039;i&amp;#039;, overrides : &amp;#039;em&amp;#039; }; // i nicht durch em überschreiben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Plugins hinzufügen ===&lt;br /&gt;
* https://weekly.pw/issue/13/#1-2 -&amp;gt; Plugins für CK Editor etc.&lt;br /&gt;
&lt;br /&gt;
== CKEditor allgemeines Wissen ==&lt;br /&gt;
Ein paar Infos zu CKEditor ohne PW. Viele Dinge sind ähnlich.&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Toolbar ====&lt;br /&gt;
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
Werden normalerweise mit einem Builder implementiert. Das geht bei PW nicht. Aber es gelten zum Teil die Regeln für Manuelle Installation. Manche Schritte z.B. aktivieren der Plugins macht man in PW aber wahlweise über die Feldkonfiguration.&lt;br /&gt;
&lt;br /&gt;
Beispiel Widget Plugin:&lt;br /&gt;
&lt;br /&gt;
If you want to add the plugin manually, you will need to:&lt;br /&gt;
* Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:&lt;br /&gt;
 http://example.com/ckeditor/plugins/widget&lt;br /&gt;
* Enable the plugin by using the extraPlugins configuration setting. Example:&lt;br /&gt;
 config.extraPlugins = &amp;#039;widget&amp;#039;; &lt;br /&gt;
* Download and configure all its &amp;#039;&amp;#039;&amp;#039;dependencies&amp;#039;&amp;#039;&amp;#039;, too.&lt;br /&gt;
In PW&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
=== Praktisches Beispiel 1===&lt;br /&gt;
==== Backend ====&lt;br /&gt;
Im Tab Eingabe des Editor Felds kann man verschiedene Dinge Einstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Editor Toolbar einstellen&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Interessant ist hier der Eintrag Styles. Das Formatdialogfeld formatiert einzelne Blockstile wie h1 oder p. Im Styles Dropdown kann man auch Umgebende Blockelemente wie z.B. Divs mit speziellen Klassen nutzen. Hiermit kann man Stile für kom&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tags formatieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier kann man festlegen welche &amp;#039;&amp;#039;&amp;#039;Tags im Format Dropdown&amp;#039;&amp;#039;&amp;#039; ausgewählt werden können. Hier ein Beispiel bei dem wir h1 weglassen. H1 wird oft über das Template selbst ausgegeben und sollte nur einmal pro Seite auftauchen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
p;h2;h3;h4;h5;h6;pre;address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Styles festlegen &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Um die oben erwähnten Styles anzupassen wir eine kleine JavaScript Datei. Wo diese liegt legen wir im Abschnitt &amp;#039;&amp;#039;&amp;#039;Eigenes Editor-JS-Style-Set&amp;#039;&amp;#039;&amp;#039; fest. Wir nutzen den bereits vorgeschlagenen Pfad tragen diesen ein und legen die Datei an:&lt;br /&gt;
 mystyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&lt;br /&gt;
Standardbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Inline Code&amp;#039;, element: &amp;#039;code&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inline Quotation&amp;#039;, element: &amp;#039;q&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Left Aligned Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_left&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Right Aligned Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_right&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Centered Photo&amp;#039;, element: &amp;#039;img&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;align_center&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Small&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Deleted Text&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Inserted Text&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Cited Work&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Modifiziertes Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
 { name: &amp;#039;Expose-Liste&amp;#039;, element: &amp;#039;p&amp;#039;, attributes: { &amp;#039;class&amp;#039;: &amp;#039;expose&amp;#039; } },&lt;br /&gt;
 { name: &amp;#039;Klein&amp;#039;, element: &amp;#039;small&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Gelöscht&amp;#039;, element: &amp;#039;del&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Eingefügt&amp;#039;, element: &amp;#039;ins&amp;#039; },&lt;br /&gt;
 { name: &amp;#039;Zitat&amp;#039;, element: &amp;#039;cite&amp;#039; }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiter Forum Beispiele ==&lt;br /&gt;
https://processwire.com/talk/topic/9606-how-to-configure-ckeditortextarea-field-to-enable-color-toolbar/&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23228</id>
		<title>ProcessWire - Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23228"/>
		<updated>2018-08-01T15:27:12Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
https://processwire.com/talk/topic/3023-module-ckeditor/&lt;br /&gt;
&lt;br /&gt;
https://processwire.com/talk/topic/14601-solved-ckeditor-custom-stylesclasses/&lt;br /&gt;
&lt;br /&gt;
== Der CKEditor ==&lt;br /&gt;
Ist der Standard Editor in PW. Es gibt auch Module mit denen man Ihn ersetzen kann. Im Prinzip aber ein mächtiges Werkzeug.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration CKEditor in PW==&lt;br /&gt;
Ist inzwischen in &lt;br /&gt;
 /sites &lt;br /&gt;
ausgelagert und somit auch Updatefähig. Abschauen kann man im original Modul in &lt;br /&gt;
 wire/site/modules/InputfieldCKEditor/&lt;br /&gt;
Dort gibe es diverse Dateien. Allerdings ist nicht alles möglich, was in der CKEditor Doku steht. In PW können scheinbar manche Einstellungen nicht über die Dateien geregelt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wo stellt man was ein ? ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; Nicht alles was hier steht funktioniert auch so. Am besten im Backend in der Feldkonfiguration schauen und dort die Pfade anpassen.&lt;br /&gt;
Ordner:&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
Konfiguration gültig &amp;#039;&amp;#039;&amp;#039;für alle Felder im Backend&amp;#039;&amp;#039;&amp;#039; (hat bei mir bisher nicht ohne die Backendkonfiguration für das Feld funktioniert)&lt;br /&gt;
 config.js&lt;br /&gt;
Konfiguration für ein bestimmtes Feld falls vorhanden&lt;br /&gt;
 config.[fieldname.]js &lt;br /&gt;
 mystyles.js -&amp;gt; ein selbstbenanntes Feld kann im Backend bei der Konfiguration des CKEditor Feldes angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Konfiguration. Z.B. Styles hinzufügen, removeFormatTags, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alles was der Editor beim Eingeben mit &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bearbeitet. Außerdem &amp;#039;&amp;#039;&amp;#039;Style Auswahl anpassen&amp;#039;&amp;#039;&amp;#039; alle Optionen die mit &amp;#039;&amp;#039;&amp;#039;CKEDITOR.&amp;#039;&amp;#039;&amp;#039; anfangen&lt;br /&gt;
 content.css&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile die der Editor bei der Eingabe benutzt. Also quasi die Vorschau für den Benutzer.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 contents-inline.css&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile für die Vorschau beim Inline Editor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Feldkonfiguration im Admin Bereich PW&lt;br /&gt;
&lt;br /&gt;
Hier muß die &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039; eingestellt werden. Über Konfig hat es bisher nicht geklappt. Hier muss auch die &amp;#039;&amp;#039;&amp;#039;CSS Datei für die Inline Styles&amp;#039;&amp;#039;&amp;#039; angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Überschreiben in der config.js&amp;#039;&amp;#039;&amp;#039; hat bei mir nicht funktioniert - in aktueller Version 3.062 klappt es..&lt;br /&gt;
&lt;br /&gt;
 Auch &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039; müssen hier ausgewählt werden, damit sie eingebunden werden. Dies funktioniert also alles nur auf Feld-Ebene und nicht global.&lt;br /&gt;
=== CKEditor Buttons anpassen===&lt;br /&gt;
Wenn man ein Textarea Feld definiert, kann man auch für dieses Feld den CKEditor anpassen. Das geht im Backend in der &amp;#039;&amp;#039;&amp;#039;Feldkonfiguration unter dem Reiter Eingabe.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Beispiel: Hier werden &amp;#039;&amp;#039;&amp;#039;Buttons für die Textausrichtung hinzugefügt.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Einstellungen ===&lt;br /&gt;
Todo: TESTEN ob das wirklich funktioniert&lt;br /&gt;
Kann man im Modulverzeichnis unter site/modules hinterlegen. Achtung nicht im Modulverzeichnis unter wire überschreiben. Das ist beim nächsten Update weg.&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.js -&amp;gt; überschreibt oder ergänzt die Default Einstellung&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.body.js -&amp;gt; überschreibt oder ergänzt das body Feld&lt;br /&gt;
Beispiele:&lt;br /&gt;
 config.startupOutlineBlocks = true;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
	config.justifyClasses = [ &amp;#039;left&amp;#039;, &amp;#039;center&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;justify&amp;#039; ];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider funktionieren viele Einstellungen hier nicht, die im original CKEditor möglich sind.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Styles ===&lt;br /&gt;
Eigene Stile zur Auswahl im Styles Dropdown&lt;br /&gt;
 site-&amp;gt;modules-&amp;gt;InputfieldCKEditor-&amp;gt;mystyle.js&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * mystyles.js&lt;br /&gt;
  *&lt;br /&gt;
  * This file may be used when you have &amp;quot;Styles&amp;quot; as one of the items in your toolbar.&lt;br /&gt;
  * add mystyles:/site/modules/InputfieldCKEditor/mystyles.js in&lt;br /&gt;
  * Field Settings &amp;gt; CKEditor Settings &amp;gt; Custom Editor JS Styles Set&lt;br /&gt;
  *&lt;br /&gt;
  * For a more comprehensive example, see the file ./ckeditor-[version]/styles.js&lt;br /&gt;
  *&lt;br /&gt;
  */&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;} },&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsbeispiele ===&lt;br /&gt;
Im Adminbereich im content_main Feld:&lt;br /&gt;
&lt;br /&gt;
==== CKEditor Toolbar ====&lt;br /&gt;
Added justify buttons...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Superscript, -,JustifyLeft ,JustifyCenter ,JustifyRight , -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blöcke anzeigen, Smileys&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Underline, Strike, Superscript, Subscript,&lt;br /&gt;
JustifyLeft ,JustifyCenter ,JustifyRight , -,  &lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar, Smiley, ShowBlocks, RemoveFormat,&lt;br /&gt;
PasteText, PasteFromWord,-, Undo, Redo, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Custom Editor CSS File ====&lt;br /&gt;
Für die im Editor angezeigten Stile&lt;br /&gt;
 site/modules/InputfieldCKEditor/contents.css&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/fa/css/font-awesome.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/bootstrap/css/bootstrap.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/css/main.css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
.cke_editable {&lt;br /&gt;
	font-size: 14px;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_ltr blockquote {&lt;br /&gt;
	padding-left: 20px;&lt;br /&gt;
	padding-right: 8px;&lt;br /&gt;
	border-left-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_rtl blockquote {&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	padding-right: 20px;&lt;br /&gt;
	border-right-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Custom Editor JS File ====&lt;br /&gt;
Für die Auswahlfelder in der &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 mystyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== config.js ====&lt;br /&gt;
In /site/modules/InputfieldCKEditor/config.js (oder config.feldname.js)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
  config.uiColor = &amp;#039;#AADC6E&amp;#039;;&lt;br /&gt;
  config.coreStyles_italic = { element : &amp;#039;i&amp;#039;, overrides : &amp;#039;em&amp;#039; }; // i nicht durch em überschreiben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Plugins hinzufügen ===&lt;br /&gt;
* https://weekly.pw/issue/13/#1-2 -&amp;gt; Plugins für CK Editor etc.&lt;br /&gt;
&lt;br /&gt;
== CKEditor allgemeines Wissen ==&lt;br /&gt;
Ein paar Infos zu CKEditor ohne PW. Viele Dinge sind ähnlich.&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Toolbar ====&lt;br /&gt;
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
Werden normalerweise mit einem Builder implementiert. Das geht bei PW nicht. Aber es gelten zum Teil die Regeln für Manuelle Installation. Manche Schritte z.B. aktivieren der Plugins macht man in PW aber wahlweise über die Feldkonfiguration.&lt;br /&gt;
&lt;br /&gt;
Beispiel Widget Plugin:&lt;br /&gt;
&lt;br /&gt;
If you want to add the plugin manually, you will need to:&lt;br /&gt;
* Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:&lt;br /&gt;
 http://example.com/ckeditor/plugins/widget&lt;br /&gt;
* Enable the plugin by using the extraPlugins configuration setting. Example:&lt;br /&gt;
 config.extraPlugins = &amp;#039;widget&amp;#039;; &lt;br /&gt;
* Download and configure all its &amp;#039;&amp;#039;&amp;#039;dependencies&amp;#039;&amp;#039;&amp;#039;, too.&lt;br /&gt;
In PW&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
== Weiter Forum Beispiele ==&lt;br /&gt;
https://processwire.com/talk/topic/9606-how-to-configure-ckeditortextarea-field-to-enable-color-toolbar/&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23227</id>
		<title>ProcessWire - Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23227"/>
		<updated>2018-08-01T15:24:16Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
https://processwire.com/talk/topic/3023-module-ckeditor/&lt;br /&gt;
&lt;br /&gt;
https://processwire.com/talk/topic/14601-solved-ckeditor-custom-stylesclasses/&lt;br /&gt;
&lt;br /&gt;
== CKEditor ==&lt;br /&gt;
Ist der Standard Editor in PW. Es gibt auch Module mit denen man Ihn ersetzen kann. Im Prinzip aber ein mächtiges Werkzeug.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration CKEditor in PW==&lt;br /&gt;
Ist inzwischen in &lt;br /&gt;
 /sites &lt;br /&gt;
ausgelagert und somit auch Updatefähig. Abschauen kann man im original Modul in &lt;br /&gt;
 wire/site/modules/InputfieldCKEditor/&lt;br /&gt;
Dort gibe es diverse Dateien. Allerdings ist nicht alles möglich, was in der CKEditor Doku steht. In PW können scheinbar manche Einstellungen nicht über die Dateien geregelt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wo stellt man was ein ? ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinweis:&amp;#039;&amp;#039;&amp;#039; Nicht alles was hier steht funktioniert auch so. Am besten im Backend in der Feldkonfiguration schauen und dort die Pfade anpassen.&lt;br /&gt;
Ordner:&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
Konfiguration gültig &amp;#039;&amp;#039;&amp;#039;für alle Felder im Backend&amp;#039;&amp;#039;&amp;#039; (hat bei mir bisher nicht ohne die Backendkonfiguration für das Feld funktioniert)&lt;br /&gt;
 config.js&lt;br /&gt;
Konfiguration für ein bestimmtes Feld falls vorhanden&lt;br /&gt;
 config.[fieldname.]js &lt;br /&gt;
 mystyles.js -&amp;gt; ein selbstbenanntes Feld kann im Backend bei der Konfiguration des CKEditor Feldes angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Konfiguration. Z.B. Styles hinzufügen, removeFormatTags, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alles was der Editor beim Eingeben mit &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bearbeitet. Außerdem &amp;#039;&amp;#039;&amp;#039;Style Auswahl anpassen&amp;#039;&amp;#039;&amp;#039; alle Optionen die mit &amp;#039;&amp;#039;&amp;#039;CKEDITOR.&amp;#039;&amp;#039;&amp;#039; anfangen&lt;br /&gt;
 content.css&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile die der Editor bei der Eingabe benutzt. Also quasi die Vorschau für den Benutzer.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 contents-inline.css&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile für die Vorschau beim Inline Editor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Feldkonfiguration im Admin Bereich PW&lt;br /&gt;
&lt;br /&gt;
Hier muß die &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039; eingestellt werden. Über Konfig hat es bisher nicht geklappt. Hier muss auch die &amp;#039;&amp;#039;&amp;#039;CSS Datei für die Inline Styles&amp;#039;&amp;#039;&amp;#039; angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Überschreiben in der config.js&amp;#039;&amp;#039;&amp;#039; hat bei mir nicht funktioniert - in aktueller Version 3.062 klappt es..&lt;br /&gt;
&lt;br /&gt;
 Auch &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039; müssen hier ausgewählt werden, damit sie eingebunden werden. Dies funktioniert also alles nur auf Feld-Ebene und nicht global.&lt;br /&gt;
==== CKEditor Buttons ====&lt;br /&gt;
Wenn man ein Textarea Feld definiert, kann man auch für dieses Feld den CKEditor anpassen. Das geht unter dem Reiter Eingabe.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Hier werden &amp;#039;&amp;#039;&amp;#039;Buttons für die Textausrichtung hinzugefügt.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Default Einstellungen ====&lt;br /&gt;
Kann man im Modulverzeichnis unter site/modules hinterlegen. Achtung nicht im Modulverzeichnis unter wire überschreiben. Das ist beim nächsten Update weg.&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.js -&amp;gt; überschreibt oder ergänzt die Default Einstellung&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.body.js -&amp;gt; überschreibt oder ergänzt das body Feld&lt;br /&gt;
Beispiele:&lt;br /&gt;
 config.startupOutlineBlocks = true;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
	config.justifyClasses = [ &amp;#039;left&amp;#039;, &amp;#039;center&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;justify&amp;#039; ];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider funktionieren viele Einstellungen hier nicht, die im original CKEditor möglich sind.&lt;br /&gt;
==== Eigene Styles ====&lt;br /&gt;
Eigene Stile zur Auswahl im Styles Dropdown&lt;br /&gt;
 site-&amp;gt;modules-&amp;gt;InputfieldCKEditor-&amp;gt;mystyle.js&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * mystyles.js&lt;br /&gt;
  *&lt;br /&gt;
  * This file may be used when you have &amp;quot;Styles&amp;quot; as one of the items in your toolbar.&lt;br /&gt;
  * add mystyles:/site/modules/InputfieldCKEditor/mystyles.js in&lt;br /&gt;
  * Field Settings &amp;gt; CKEditor Settings &amp;gt; Custom Editor JS Styles Set&lt;br /&gt;
  *&lt;br /&gt;
  * For a more comprehensive example, see the file ./ckeditor-[version]/styles.js&lt;br /&gt;
  *&lt;br /&gt;
  */&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;} },&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet&lt;br /&gt;
&lt;br /&gt;
==== Konfigurationsbeispiele ====&lt;br /&gt;
Im Adminbereich im content_main Feld:&lt;br /&gt;
&lt;br /&gt;
===== CKEditor Toolbar =====&lt;br /&gt;
Added justify buttons...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Superscript, -,JustifyLeft ,JustifyCenter ,JustifyRight , -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blöcke anzeigen, Smileys&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Underline, Strike, Superscript, Subscript,&lt;br /&gt;
JustifyLeft ,JustifyCenter ,JustifyRight , -,  &lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar, Smiley, ShowBlocks, RemoveFormat,&lt;br /&gt;
PasteText, PasteFromWord,-, Undo, Redo, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Custom Editor CSS File =====&lt;br /&gt;
Für die im Editor angezeigten Stile&lt;br /&gt;
 site/modules/InputfieldCKEditor/contents.css&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/fa/css/font-awesome.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/bootstrap/css/bootstrap.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/css/main.css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
.cke_editable {&lt;br /&gt;
	font-size: 14px;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_ltr blockquote {&lt;br /&gt;
	padding-left: 20px;&lt;br /&gt;
	padding-right: 8px;&lt;br /&gt;
	border-left-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_rtl blockquote {&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	padding-right: 20px;&lt;br /&gt;
	border-right-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===== Custom Editor JS File =====&lt;br /&gt;
Für die Auswahlfelder in der &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 mystyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== config.js =====&lt;br /&gt;
In /site/modules/InputfieldCKEditor/config.js (oder config.feldname.js)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
  config.uiColor = &amp;#039;#AADC6E&amp;#039;;&lt;br /&gt;
  config.coreStyles_italic = { element : &amp;#039;i&amp;#039;, overrides : &amp;#039;em&amp;#039; }; // i nicht durch em überschreiben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Plugins hinzufügen ====&lt;br /&gt;
* https://weekly.pw/issue/13/#1-2 -&amp;gt; Plugins für CK Editor etc.&lt;br /&gt;
&lt;br /&gt;
== CKEditor allgemeines Wissen ==&lt;br /&gt;
Ein paar Infos zu CKEditor ohne PW. Viele Dinge sind ähnlich.&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Toolbar ====&lt;br /&gt;
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
Werden normalerweise mit einem Builder implementiert. Das geht bei PW nicht. Aber es gelten zum Teil die Regeln für Manuelle Installation. Manche Schritte z.B. aktivieren der Plugins macht man in PW aber wahlweise über die Feldkonfiguration.&lt;br /&gt;
&lt;br /&gt;
Beispiel Widget Plugin:&lt;br /&gt;
&lt;br /&gt;
If you want to add the plugin manually, you will need to:&lt;br /&gt;
* Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:&lt;br /&gt;
 http://example.com/ckeditor/plugins/widget&lt;br /&gt;
* Enable the plugin by using the extraPlugins configuration setting. Example:&lt;br /&gt;
 config.extraPlugins = &amp;#039;widget&amp;#039;; &lt;br /&gt;
* Download and configure all its &amp;#039;&amp;#039;&amp;#039;dependencies&amp;#039;&amp;#039;&amp;#039;, too.&lt;br /&gt;
In PW&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
== Weiter Forum Beispiele ==&lt;br /&gt;
https://processwire.com/talk/topic/9606-how-to-configure-ckeditortextarea-field-to-enable-color-toolbar/&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23226</id>
		<title>ProcessWire - Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Editor&amp;diff=23226"/>
		<updated>2018-08-01T15:14:43Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: /* Custom Editor JS File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
https://processwire.com/talk/topic/3023-module-ckeditor/&lt;br /&gt;
&lt;br /&gt;
https://processwire.com/talk/topic/14601-solved-ckeditor-custom-stylesclasses/&lt;br /&gt;
&lt;br /&gt;
== CKEditor ==&lt;br /&gt;
Ist der Standard Editor in PW&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration CKEditor in PW===&lt;br /&gt;
Ist inzwischen in /sites ausgelagert und somit auch Updatefähig. Abschauen kann man im original Modul in wire/&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
Dort gibe es diverse Dateien. Allerdings ist nicht alles möglich, was in der CKEditor Doku steht. In PW können scheinbar manche Einstellungen nicht über die Dateien geregelt werden.&lt;br /&gt;
&lt;br /&gt;
==== Wo stellt man was ein ? ====&lt;br /&gt;
 JS Konfiguration von CK Editor Interface und eigene Stile&lt;br /&gt;
 site/modules/InputfieldCKEditor/&lt;br /&gt;
 config.js - Konfigutation für alle Felder&lt;br /&gt;
 config.[fieldname.]js - Konfiguration für ein Feld mit dem Namen fieldname falls vorhanden&lt;br /&gt;
 mystyles.js -&amp;gt; ein selbstbenanntes Feld kann im Backend bei der Konfiguration des CKEditor Feldes angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Konfiguration. Z.B. Styles hinzufügen, removeFormatTags, &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alles was der Editor beim Eingeben mit &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bearbeitet. Außerdem &amp;#039;&amp;#039;&amp;#039;Style Auswahl anpassen&amp;#039;&amp;#039;&amp;#039; alle Optionen die mit &amp;#039;&amp;#039;&amp;#039;CKEDITOR.&amp;#039;&amp;#039;&amp;#039; anfangen&lt;br /&gt;
 content.css&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile die der Editor bei der Eingabe benutzt. Also quasi die Vorschau für den Benutzer.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 contents-inline.css&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stile für die Vorschau beim Inline Editor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Feldkonfiguration im Admin Bereich PW&lt;br /&gt;
&lt;br /&gt;
Hier muß die &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039; eingestellt werden. Über Konfig hat es bisher nicht geklappt. Hier muss auch die &amp;#039;&amp;#039;&amp;#039;CSS Datei für die Inline Styles&amp;#039;&amp;#039;&amp;#039; angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Überschreiben in der config.js&amp;#039;&amp;#039;&amp;#039; hat bei mir nicht funktioniert - in aktueller Version 3.062 klappt es..&lt;br /&gt;
&lt;br /&gt;
 Auch &amp;#039;&amp;#039;&amp;#039;Plugins&amp;#039;&amp;#039;&amp;#039; müssen hier ausgewählt werden, damit sie eingebunden werden. Dies funktioniert also alles nur auf Feld-Ebene und nicht global.&lt;br /&gt;
==== CKEditor Buttons ====&lt;br /&gt;
Wenn man ein Textarea Feld definiert, kann man auch für dieses Feld den CKEditor anpassen. Das geht unter dem Reiter Eingabe.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Hier werden &amp;#039;&amp;#039;&amp;#039;Buttons für die Textausrichtung hinzugefügt.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic,Superscript, -,JustifyLeft,JustifyCenter,JustifyRight,-, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
PWLink, Unlink, Anchor&lt;br /&gt;
&lt;br /&gt;
PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Default Einstellungen ====&lt;br /&gt;
Kann man im Modulverzeichnis unter site/modules hinterlegen. Achtung nicht im Modulverzeichnis unter wire überschreiben. Das ist beim nächsten Update weg.&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.js -&amp;gt; überschreibt oder ergänzt die Default Einstellung&lt;br /&gt;
 /site/modules/InputfieldCKEditor/config.body.js -&amp;gt; überschreibt oder ergänzt das body Feld&lt;br /&gt;
Beispiele:&lt;br /&gt;
 config.startupOutlineBlocks = true;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
	config.justifyClasses = [ &amp;#039;left&amp;#039;, &amp;#039;center&amp;#039;, &amp;#039;right&amp;#039;, &amp;#039;justify&amp;#039; ];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider funktionieren viele Einstellungen hier nicht, die im original CKEditor möglich sind.&lt;br /&gt;
==== Eigene Styles ====&lt;br /&gt;
Eigene Stile zur Auswahl im Styles Dropdown&lt;br /&gt;
 site-&amp;gt;modules-&amp;gt;InputfieldCKEditor-&amp;gt;mystyle.js&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * mystyles.js&lt;br /&gt;
  *&lt;br /&gt;
  * This file may be used when you have &amp;quot;Styles&amp;quot; as one of the items in your toolbar.&lt;br /&gt;
  * add mystyles:/site/modules/InputfieldCKEditor/mystyles.js in&lt;br /&gt;
  * Field Settings &amp;gt; CKEditor Settings &amp;gt; Custom Editor JS Styles Set&lt;br /&gt;
  *&lt;br /&gt;
  * For a more comprehensive example, see the file ./ckeditor-[version]/styles.js&lt;br /&gt;
  *&lt;br /&gt;
  */&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;} },&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet&lt;br /&gt;
&lt;br /&gt;
==== Konfigurationsbeispiele ====&lt;br /&gt;
Im Adminbereich im content_main Feld:&lt;br /&gt;
&lt;br /&gt;
===== CKEditor Toolbar =====&lt;br /&gt;
Added justify buttons...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Superscript, -,JustifyLeft ,JustifyCenter ,JustifyRight , -, RemoveFormat&lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar&lt;br /&gt;
PasteText, PasteFromWord,-,Undo,Redo&lt;br /&gt;
Scayt, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Blöcke anzeigen, Smileys&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Format, Styles, -, Bold, Italic, Underline, Strike, Superscript, Subscript,&lt;br /&gt;
JustifyLeft ,JustifyCenter ,JustifyRight , -,  &lt;br /&gt;
NumberedList, BulletedList, -, Blockquote&lt;br /&gt;
&lt;br /&gt;
PWLink, Unlink, Anchor, PWImage, Table, HorizontalRule, SpecialChar, Smiley, ShowBlocks, RemoveFormat,&lt;br /&gt;
PasteText, PasteFromWord,-, Undo, Redo, -, Sourcedialog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Custom Editor CSS File =====&lt;br /&gt;
Für die im Editor angezeigten Stile&lt;br /&gt;
 site/modules/InputfieldCKEditor/contents.css&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/fa/css/font-awesome.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/vendors/bootstrap/css/bootstrap.min.css&amp;#039;);&lt;br /&gt;
@import url(&amp;#039;../../templates/css/main.css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
.cke_editable {&lt;br /&gt;
	font-size: 14px;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_ltr blockquote {&lt;br /&gt;
	padding-left: 20px;&lt;br /&gt;
	padding-right: 8px;&lt;br /&gt;
	border-left-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cke_contents_rtl blockquote {&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	padding-right: 20px;&lt;br /&gt;
	border-right-width: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===== Custom Editor JS File =====&lt;br /&gt;
Für die Auswahlfelder in der &amp;#039;&amp;#039;&amp;#039;Toolbar&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 mystyles:/site/modules/InputfieldCKEditor/mystyles.js&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  CKEDITOR.stylesSet.add( &amp;#039;mystyles&amp;#039;, [&lt;br /&gt;
   { name: &amp;#039;Home Icon&amp;#039;, element: &amp;#039;i&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;fa fa-home fa-2x&amp;#039;}},&lt;br /&gt;
   { name: &amp;#039;Panel Title&amp;#039;, element: &amp;#039;h4&amp;#039;, attributes: {&amp;#039;class&amp;#039;: &amp;#039;panel-title&amp;#039;} },&lt;br /&gt;
  ]);&lt;br /&gt;
  CKEDITOR.dtd.$removeEmpty[&amp;#039;i&amp;#039;] = false; // leere i Tags erlauben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== config.js =====&lt;br /&gt;
In /site/modules/InputfieldCKEditor/config.js (oder config.feldname.js)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CKEDITOR.editorConfig = function( config ) {&lt;br /&gt;
  config.uiColor = &amp;#039;#AADC6E&amp;#039;;&lt;br /&gt;
  config.coreStyles_italic = { element : &amp;#039;i&amp;#039;, overrides : &amp;#039;em&amp;#039; }; // i nicht durch em überschreiben (für font awesome)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Plugins hinzufügen ====&lt;br /&gt;
* https://weekly.pw/issue/13/#1-2 -&amp;gt; Plugins für CK Editor etc.&lt;br /&gt;
&lt;br /&gt;
== CKEditor allgemeines Wissen ==&lt;br /&gt;
Ein paar Infos zu CKEditor ohne PW. Viele Dinge sind ähnlich.&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
==== Toolbar ====&lt;br /&gt;
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
Werden normalerweise mit einem Builder implementiert. Das geht bei PW nicht. Aber es gelten zum Teil die Regeln für Manuelle Installation. Manche Schritte z.B. aktivieren der Plugins macht man in PW aber wahlweise über die Feldkonfiguration.&lt;br /&gt;
&lt;br /&gt;
Beispiel Widget Plugin:&lt;br /&gt;
&lt;br /&gt;
If you want to add the plugin manually, you will need to:&lt;br /&gt;
* Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:&lt;br /&gt;
 http://example.com/ckeditor/plugins/widget&lt;br /&gt;
* Enable the plugin by using the extraPlugins configuration setting. Example:&lt;br /&gt;
 config.extraPlugins = &amp;#039;widget&amp;#039;; &lt;br /&gt;
* Download and configure all its &amp;#039;&amp;#039;&amp;#039;dependencies&amp;#039;&amp;#039;&amp;#039;, too.&lt;br /&gt;
In PW&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
== Weiter Forum Beispiele ==&lt;br /&gt;
https://processwire.com/talk/topic/9606-how-to-configure-ckeditortextarea-field-to-enable-color-toolbar/&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Processwire_-_Markup_Regions&amp;diff=23225</id>
		<title>Processwire - Markup Regions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Processwire_-_Markup_Regions&amp;diff=23225"/>
		<updated>2018-08-01T14:31:55Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: Die Seite wurde neu angelegt: „Siehe:  ProcessWire - Markup Regions“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe:&lt;br /&gt;
&lt;br /&gt;
[[ProcessWire - Markup Regions]]&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Debugging_Snippets&amp;diff=23224</id>
		<title>ProcessWire - Debugging Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Debugging_Snippets&amp;diff=23224"/>
		<updated>2018-08-01T14:30:17Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Alle Feldnamen einer Seite ausgeben ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//get all the fields:&lt;br /&gt;
$all_fields = $page-&amp;gt;fields;&lt;br /&gt;
foreach($all_fields as $field){&lt;br /&gt;
  $out .= &amp;quot;{$field-&amp;gt;name}, &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Marker Regions Debuggen ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
&lt;br /&gt;
if(config()-&amp;gt;debug &amp;amp;&amp;amp; user()-&amp;gt;isSuperuser()): // display region debugging info ?&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;#039;debug&amp;#039; class=&amp;#039;uk-section uk-section-muted&amp;#039;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;#039;uk-container&amp;#039;&amp;gt;&lt;br /&gt;
		&amp;lt;h4&amp;gt;ProcessWire Region Markup Debugging&amp;lt;/h4&amp;gt;&lt;br /&gt;
		&amp;lt;!--PW-REGION-DEBUG--&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Debugging_Snippets&amp;diff=23223</id>
		<title>ProcessWire - Debugging Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Debugging_Snippets&amp;diff=23223"/>
		<updated>2018-08-01T11:47:27Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Alle Feldnamen einer Seite ausgeben ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//get all the fields:&lt;br /&gt;
$all_fields = $page-&amp;gt;fields;&lt;br /&gt;
foreach($all_fields as $field){&lt;br /&gt;
  $out .= &amp;quot;{$field-&amp;gt;name}, &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Debugging_Snippets&amp;diff=23222</id>
		<title>ProcessWire - Debugging Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Debugging_Snippets&amp;diff=23222"/>
		<updated>2018-08-01T11:47:04Z</updated>

		<summary type="html">&lt;p&gt;37.49.33.174: Die Seite wurde neu angelegt: „&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt; //get all the fields: $all_fields = $page-&amp;gt;fields; foreach($all_fields as $field){   $out .= &amp;quot;{$field-&amp;gt;name}, &amp;quot;; } &amp;lt;/syntaxhighlight&amp;gt;“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//get all the fields:&lt;br /&gt;
$all_fields = $page-&amp;gt;fields;&lt;br /&gt;
foreach($all_fields as $field){&lt;br /&gt;
  $out .= &amp;quot;{$field-&amp;gt;name}, &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.33.174</name></author>
	</entry>
</feed>