Konfiguration

Die konfiguration ist ein mächtiges Werkzeug im Sitekit. Es können mit ihrer Hilfe unterschiedliche Aufgaben erledigt werden, wie z.B. Überschreiben von Modellen, Komponenten und Renderer, beeinflusst die Darstellung der Ausgabe, Konfiguration der Session, hinzufügen, entfernen und austauschen von Komponenten, …

Für unterschiedliche Aufgaben gibt es auch unterschiedliche Konfigurationen:

  • ContainerRenderer
  • Formulare
  • TypeMapping
  • RenderPartial
  • ReferenceResolver
  • Teaser

Die Konfiguration kann immer von anderen Modulen wieder überschieben werden. Dafür ist die Reihenfolge, in der die Module geladen werden wichtig. (siehe WEB-IES/context.php im Key config -> bootstrap).

Wo liegt die Konfiguration

// …

Struktur der Konfiguration

// …

Arten der Konfiguration

// Welche Keys können in welchem Bereich verwendet werden? TypeMapping vs Teaser vs Formulare vs TypeMapping vs ….

Formulare

Um Formulare anzupassen, sollte das Formular an sich und auch alle enthaltenen Elemente einen configKey definiert haben. Dies ist ein eindeutiger Schlüssel, der im Formular definiert wird. Im folgenden Beispiel für ein fieldset. Es kann aber auf alle Elemente analog übertragen werden.

	private function getRawTermsAndConditionsConfirmFieldSet(): array {

		return [
			'type' => 'fieldset',
			'configKey' => 'shopTermsAndConditions',
			'items' => [
				// ...
			],
		];
	}

Der Key kann dann in der Datei renderer/html/arvedui/content/form/form.php hinterlegt werden:

<?php declare(strict_types=1);

return [
	'configKeys' => [
		'shopTermsAndConditions' => [
			'classes' => [
				'base' => 'SP-Field__annotation'
			]
		]
	]
];

Diese Konfiguration fügt dem Base Html Tag die CSS Klasse SP-Field__annotation hinzu.

Achtung: In der Konfigurationsdatei wird immer der configKeys (Mehrzahl) und in der Komponente configKey (Einzahl) verwendet.

// Kann mit einem ConfigKey auch auf Elemente innerhalb eines Containers/Fieldset zugegriffen werden? Ist dass sinnvoll? Order soll // dafür ein eigener Key angelegt werden? Was ist der präferierte weg?

Partial Renderer

Mit dem Partial Renderer können Models in einem Renderer gerendert werden:

// Ergebnis zurückliefern
	$table = new \SP\SiteKit\Model\Table\Table();
	return $this->renderPartialAsString('cartTable', $table);

// Oder direkt ausgeben
	/** @var \SP\SiteKit\Model\Content\Link\Link $link */
	$link = $this->createModelByType(Link::TYPE);
	$link->setUrl('https://sitepark.com');
	$link->setLabel('Sitepark');
	$this->renderPartial('company', $link);

Wichtig für die Konfiguration ist der erste Parameter der renderPartialAsString und renderPartial Methoden. Dieser muss in der Konfiguration unter dem Namespace des Renderers abgelegt werden um zu greifen. Das bedeutet für den Renderer mt dem Namespace SP\Shop\Renderer\CartBasket muss im config Ordner die Datei renderer/shop/cartBasket.php erstellt werden. In der Datei muss der Key aus dem renderPartialAsString bzw. renderPartial Aufruf hinterlegt werden:

<?php declare(strict_types=1);

return [
	'cartTable' => [
		'classes' => [
			'base' => ['SP-Table--cart'],
		],
	],
];

Konfiguration Keys

Renderer

Alle Konfigurationen wirken sich immer auf die Komponente (1) aus die aus ein oder mehreren HTML Elementen bestehen. Die erste Ebene definiert, was (2) konfiguriert werden soll und die nächste Ebene, welches HTML Element(3).

return [
	'cartTable' => [ // (1) Komponente die Konfiguriert wird
		'classes' => [ // (2) Was soll konfiguriert werden
			'base' => [ // (3) HTML Element
				'SP-Table--cart'
			],
		],
	],
];

Viele Komponenten stellen zur Konfiguration der HTML Elemente folgende Eigenschaften zur Verfügung:

  • header
  • base
  • content
  • footer
  • inner

Manche stellen aber auch spezielle Eigenschaften bereit wie z.B. headline, list und item in der SP\SiteKit\Renderer\Html\Arvedui\CommonList. Andere wiederum haben auch dynamische Eigenschaften wie z.B. bodyCellLevel4 um die vierte Zelle im Inhalt der SP\SiteKit\Renderer\Html\Arvedui\Html\Table zu konfigurieren.

Mögliche Keys die zum Konfigurieren eines Items zur Verfügung stehen:

Key Beschreibung
attributes Ist eine Map mit der HTML Attribute an eine HTML Tag geschrieben werden können.
classes Kann an die HTML Tags der Komponente Klassen hinzufügen. Typische Bereiche sind base, header, footer. Wird aber von jeden Komponente definiert.
innerWrapper Definiert den HTML Tag für das innere HTML Element.
itemConfig
stateAttributes
stateClasses Hat die gleichen Möglichkeiten wie classes. Enthält auf der ersten Ebene einen Key der den Zustand definiert. Wird der State aktiviert werden die Klassen hinzugefügt.
statePrefixes
stateStyles
stateTag Wenn die Komponente in einem bestimmten State ist, wird diese HTML Element verwendet
tag Erlaubt das überschreiben des Tags. Es kann in der Ausgabe anstatt eines div ein section ausgegeben werden.

Jeder Key enthält erst das HTML Element, auf welches sich die Konfiguration bezieht und dann die eigentliche Konfiguration.

Hinweis: Es ist möglich, dass ein Item weitere Möglichkeiten zum Konfigurieren bereitstellt.

attributes

<?php declare(strict_types=1);

return [
	// ...
	'attributes' => [
		'base' => [
			'role' => 'doc-toc'
		],
		'list' => [
			'role' => 'directory'
		]
	]
	// ...
];

classes

<?php declare(strict_types=1);

return [
	// ...
	'htmlLabel' => [
		'link' => [
			'classes' => [
				'base' => ['SP-Link'],
				'text' => ['SP-Link__text'],
				'icon' => ['SP-Link__icon'],
			],
		],
	],
	// ...
];

innerWrapper

<?php declare(strict_types=1);

return [
	// ...
	'innerWrapper' => [
		'base' => 'p'
	]
	// ...
];

itemConfig

<?php declare(strict_types=1);

return [
	// ...
	'itemConfig' => [
		'field.annotation' => [
			'classes' => [
				'base' => ['SP-Annotation','SP-Paragraph','SP-Annotation--mandatoryFields']
			]
		]
	]
	// ...
];

stateAttributes

<?php declare(strict_types=1);

return [
	// ...
	'stateAttributes' => [
		'completed' => [
			'true' => [
				'button' => [
					'disabled' => true
				]
			]
		]
	]
	// ...
];

stateClasses

<?php declare(strict_types=1);

return [
	// ...
	'stateClasses' => [
		'hasImage' => [
			'true' => [
				'base' => ['SP-BusinessCircle--illustrated', 'SP-Grid__full']
			],
			'false' => [
				'base' => ['SP-BusinessCircle--hasText']
			]
		]
	],
	// ...
];

statePrefixes

<?php declare(strict_types=1);

return [
	// ...
	'statePrefixes' => [
		'visibility' => 'SP-Separator--'
	],
	// ...
];

stateStyles

// Deprecated? Wird nur im Bonn Modul verwendet. Kann mit Sicherheit auch anders gelöst werden. SourceGraph

<?php declare(strict_types=1);

return [
	// ...
	'stateStyles' => [
		'color' => [
			'*' => [
				'content' => [
					'background-color' => '${state}'
				]
			]
		]
	],
	// ...
];

stateTag

<?php declare(strict_types=1);

return [
	// ...
	'stateTag' => [
		'isIllustrated' => [
			'true' => [
				'fixedSizeHeadline' => 'div',
				'fixedSizeRaiser' => 'div',
				'fixedSizeContent' => 'div'
			]
		]
	],
	// ...
];

tag

<?php declare(strict_types=1);

return [
	// ...
	'tag' => [
		'base' => 'section'
	],
	// ...
];