Joomla 4.x-Tutorial - Entwicklung von Erweiterungen - Konfiguration

Ändere diesen Beitrag

Gibt es Dinge, die du konfigurierbar anzubieten planst? Dann ist dieser Teil wichtig für dich. Hier zeige ich dir, wie du eine Konfiguration auf die Joomla typische Art und Weise zu deiner Komponente hinzufügst. Wir erstellen die globale Konfiguration für unsere Komponente!

Joomla Konfiguration

Für Ungeduldige

Sieh dir den geänderten Programmcode in der Diff-Ansichtgithub.com/astridx/boilerplate/compare/t8...t9 an und übernimm diese Änderungen in deine Entwicklungsversion.

Schritt für Schritt

In der nachfolgenden Übersicht sind die neu hinzugekommenen Dateien mit einem Hintergrund versehen und die geänderten umrandet.

Übersicht über die in diesem Kapitel bearbeiteten Dateien

Neue Dateien

administrator/components/com_foos/config.xml

Wir ergänzen die Datei config.xml, die die Parameter der Konfiguration implementiert.

administrator/components/com_foos/config.xml

<!-- https://raw.githubusercontent.com/astridx/boilerplate/t9/src/administrator/components/com_foos/config.xml -->

<?xml version="1.0" encoding="utf-8"?>
<config>
	<fieldset
		name="foo"
		label="COM_FOOS_FIELD_CONFIG_INDIVIDUAL_FOO_DISPLAY"
		description="COM_FOOS_FIELD_CONFIG_INDIVIDUAL_FOO_DESC"
		>
		<field
			name="show_foo_name_label"
			type="list"
			label="COM_FOOS_FIELD_FOO_SHOW_CATEGORY_LABEL"
			default="1"
			>
			<option value="0">JNO</option>
			<option value="1">JYES</option>
		</field>
	</fieldset>
</config>

Geänderte Dateien

administrator/components/com_foos/ foos.xml

Die Ergänzung in der Datei foos.xml stellt sicher, dass die Datei config.xml bei der Installation kopiert wird und Joomla so später auf sie zugreifen kann.

administrator/components/com_foos/ foos.xml

 		</submenu>
 		<files folder="administrator/components/com_foos">
 			<filename>foos.xml</filename>
			<filename>config.xml</filename>
 			<folder>forms</folder>
 			<folder>language</folder>
 			<folder>services</folder>

administrator/components/com_foos/ src/View/Foos/HtmlView.php

Die Zeile $toolbar->preferences('com_foos'); sorgt dafür, dass im Administrationsbereich recht oben die Schaltfäche Optionen eingefügt wird. Nur so ist die Konfiguration später editierbar.

administrator/components/com_foos/ src/View/Foos/HtmlView.php

 		ToolbarHelper::title(Text::_('COM_FOOS_MANAGER_FOOS'), 'address foo');

 		$toolbar->addNew('foo.add');

		$toolbar->preferences('com_foos');
 	}

 }

components/com_foos/ src/Model/FooModel.php

Die populateState-Methode stellt sicher, dass das State-Objekt gefüllt ist und für den gesamten Code zugänglich ist. Wir ergänzen hier für den Site-Bereich den neuen Parameter.

populateState() wird automatisch aufgerufen, wenn wir getState() zum ersten Mal verwenden. Wenn wir etwas Besonderes in der Methode benötigen, überschreiben wir sie im eigenen Modell - so wie im folgenden Code-Beispiel.

Vielleicht fragst du dich, welche populateState()-Methode aufgerufen wird, wenn in der eigenen Erweiterung nichts implementiert ist. Ganz einfach: FooModel (components/com_foos/src/Model/FooModel.php) erweitert BaseDatabaseModel (libraries/src/MVC/Model/BaseDatabaseModel.php), diese wiederum erweitert BaseModel (libraries/src/MVC/Model/BaseModel.php). Letztere implementiert StateBehaviorTrait (libraries/src/MVC/Model/StateBehaviorTrait.php) in welchem du die Methode protected function populateState() {} findest. Die ist zwar leer und bewirkt so nichts. Aber: Sie ist aufrufbar ist.

components/com_foos/ src/Model/FooModel.php

 		return $this->_item[$pk];
 	}

	/**
	 * Method to auto-populate the model state.
	 *
	 * Note. Calling getState in this method will result in recursion.
	 *
	 * @return  void
	 *
	 * @since   __BUMP_VERSION__
	 */
	protected function populateState()
	{
		$app = Factory::getApplication();

		$this->setState('foo.id', $app->input->getInt('id'));
		$this->setState('params', $app->getParams());
	}
 }

components/com_foos/ tmpl/foo/default.php

Zum Schluss ersetzen wir echo Text::_('COM_FOOS_NAME') . $this->item->name; mit dem laut Status korrekten Text.

components/com_foos/ tmpl/foo/default.php

 use Joomla\CMS\Language\Text;

echo Text::_('COM_FOOS_NAME') . $this->item->name;
if ($this->get('State')->get('params')->get('show_foo_name_label'))
{
	echo Text::_('COM_FOOS_NAME');
}

echo $this->item->name;

Teste deine Joomla-Komponente

  1. Installiere deine Komponente in Joomla Version 4, um sie zu testen:

Kopiere die Dateien im administrator Ordner in den administrator Ordner deiner Joomla 4 Installation.
Kopiere die Dateien im components Ordner in den components Ordner deiner Joomla 4 Installation.

Eine neue Installation ist nicht erforderlich. Verwende die aus dem vorhergehenden Teil weiter.

  1. Öffne die Ansicht deiner Komponente im Administrationsbereich und überzeuge dich davon, dass dir rechts oben die Schaltfläche Options angezeigt wird.

Joomla Konfiguration

  1. Klicke auf Options und stelle die Anzeige des Labels nach deinen wünschen ein.

Joomla Konfiguration

  1. Öffne als Letztes, die Ansicht im Frontend. Verhält die Anzeige des Labels sich so, wie du das im Administrationsbereich eingestellt hast?

Joomla Konfiguration

Ändere diesen Beitrag

Comments