Konfiguration
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!
Für Ungeduldige: Sieh dir den geänderten Programmcode in der Diff-Ansicht[^codeberg.org/astrid/j4examplecode/compare/t8…t9] an und übernimm diese Änderungen in deine Entwicklungsversion.
Schritt für Schritt
Neue Dateien
administrator/components/com_foos/config.xml]
Zu unseren Dateien hinzu kommt die Datei config.xml
. Diese implementiert die Konfigurations-Parameter. In der XML-Datei kannst du wie gewohnt auf alle Standard-Formular-Feldtypen[^docs.joomla.org/form_field/de] zurückgreifen oder analog des bereits erstellten Modalfeldes FieldFoo eigene Typen implementieren.
Wir verwenden ein Auswahlfeld vom Typ type="list"
. Die Übersetzungsarbeit minimieren wir, indem wir die globalen Sprachstrings JNO
und JYES
einsetzten. Alle Texte, die Joomla in der Datei language/en-GB/joomla.ini
übersetzt, sind global verwendbar.
administrator/components/com_foos/config.xml
<!-- https://codeberg.org/astrid/j4examplecode/raw/branch/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 rechts oben die Schaltfäche Optionen
eingefügt wird. So ist die Konfiguration später im Backend unkompliziert erreichbar.
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 korrekt befüllt 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
) erweitertBaseDatabaseModel
(libraries/src/MVC/Model/BaseDatabaseModel.php
), diese wiederum erweitertBaseModel
(libraries/src/MVC/Model/BaseModel.php
). Letztere implementiertStateBehaviorTrait
(libraries/src/MVC/Model/StateBehaviorTrait.php
) in welchem du die Methodeprotected function populateState() {}
findest. Die ist zwar leer und bewirkt so nichts. Aber: Sie ist aufrufbar. Es ist extrem hilfreich immer mal wieder solchen Fragen nachzugehen. So lernt man Joomla kennen.
components/com_foos/src/Model/FooModel.php
return $this->_item[$pk];
}
+
+ 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;
. Wir zeigen das Label nur an, wenn im Status der Parameter auf true
oder 1
gesetzt ist.
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
-
Installiere deine Komponente in Joomla Version 4, um sie zu testen: Kopiere die Dateien im
administrator
Ordner in denadministrator
Ordner deiner Joomla 4 Installation. Kopiere die Dateien imcomponents
Ordner in dencomponents
Ordner deiner Joomla 4 Installation. Eine neue Installation ist nicht erforderlich. Verwende die aus dem vorhergehenden Teil weiter. -
Öffne die Ansicht deiner Komponente im Administrationsbereich und überzeuge dich davon, dass dir rechts oben die Schaltfläche
Options
angezeigt wird.
- Klicke auf
Options
und stelle die Anzeige des Labels nach deinen wünschen ein.
- Öffne zuletzt, die Ansicht im Frontend. Verhält die Anzeige des Labels sich so, wie du das im Administrationsbereich eingestellt hast?