Joomla! Programmierung/Programmierung/XML Parameter Elemente/Eigene Parameter
orig.: http://docs.joomla.org/Creating_custom_template_parameter_types - Zusammenfassung
Inhaltsverzeichnis |
[Bearbeiten] Die standard Parameter Typen
[Bearbeiten] Einen eigenen Parametertyp definieren
Um einen benutzerdefinierten Parametertyp zu erstellen, müssen Sie zuerst einen Namen für ihn wählen. Nennen wir ihn nafuparam.
Sie erstellen dann eine neue Datei mit Namen nafuparam.php, welche eine einzelne Klasse mit Namen JElementNafuparam enthält, die JElement erweitert.
Der Code für diesen neuen Parameter kann sich praktisch überall befinden, sollte jedoch immer separat in einem Unterverzeichnis oder zusammen mit anderen beutzerdefinerten Parametern gespeichert werden.
[Bearbeiten] Änderungen an der XML Datei
Sie müssen jetzt die XML Datei ändern, um dem Joomla! Framework mitzuteilen, dass Sie einen neuen Parametertyp hinzugefügt haben, und wo sich der Code befindet, um ihn darzustellen. Fügen Sie also ein addpath Argument in den <params> Tag ein und geben Sie den Pfad an:
<params addpath="[path]/elements"> ...... Liste der <param> Elemente ...... </params>
In unserem Beispiel könnten wir dann unseren neuen Parameter einsetzen:
<params addpath="[path]/elements"> <param type="nafuparam" name="setting1" default="4711" /> </params>
[Bearbeiten] PHP Code des Parametertyps
Die einfachste Möglichkeit einen eigenen Parametertyp zu beginnen ist sich aus den bereits bestehenden Parametertypen einen zu suchen der so ähnlich ist wie der den Sie erstellen wollen. Die Stammklasse JElement beinhaltet das meiste was Sie benötigen und für die meisten Parametertypen reicht es lediglich die Methode fetchElement in Ihrer erweiternden Klasse zu überschreiben.
[Bearbeiten] fetchElement()
Die Methode fetchElement gibt den zur Darstellung benötigten HTML Code zurück, der später zur Eingabe des Parameterwertes genutzt wird.
fetchElement( $name, $value, &$node, $control_name )
| $name | Der eindeutige Name des Parameters aus dem name argument. |
| $value | Der aktuelle Wert des Parameters. |
| $node | Ein JSimpleXMLElement Objekt welches das <param> Element enthält. |
| $control_name | Der Parametertyp aus dem type Argument (z.B. 'category' oder 'nafuparam') |
Um den Wert eines der Argumente des <param> Elements zu erhalten nutzen sie die Methode attributes() des Objekts JSimpleXMLElement welches in $node übergeben wurde. Um zum Beispiel den Wert des Arguments class zu erhalten schreiben Sie
$class = $node->attributes('class');
Hier sehen Sie zum Beispiel die Methode fetch Element für eine einfache Version des Parametertyps text (Die tatsächliche Version ist etwas anspruchsvoller)
function fetchElement( $name, $value, &$node, $control_name ) { $class = ($node->attributes('class')) ? $node->attributes('class') : 'text_area'; $return = '<input type="text"' . 'name="' . $control_name . '[' . $name . ']"' . 'id="' . $control_name . '[' . $name . ']"' . 'value="' . $value . '"' . 'class="' . $class . '" />'; return $return; }
Beachten Sie, dass das Parameterfeld ein id Attribut besitzen muss, damit die <label> HTML Elemente dit durch die Methode fetchTooltip generiert werden übereinstimmen.
[Bearbeiten] fetchTooltip()
Eine andere Methode die Sie möglicherweise auch noch überschreiben möchten ist die Methode fetchTooltip. Diese Methode generiert den HTML Code um einen Tooltip für das Feld darzustellen.
fetchTooltip( $label, $description, &$node, [$control_name=''],[$name=''] )
| $label | Der String der im label Argument der <param> Definition übergeben wurde. |
| $description | Der String der im description Argument der <param> Definition übergeben wurde. |
| $node | Ein JSimpleXMLElement Objekt welches das <param> Element beinhaltet. |
| $control_name | Der Parametertyp aus dem type Argument (z.B. 'category' oder 'nafuparam') |
| $name | Der eindeutige Name des Parameters aus dem name argument. |
[Bearbeiten] Beispiele
- nafuspacer Ein Spacer mit Style.
- nafucheckbox Eine Checkbox.
- nafusize Dimensionen, z.B. für Bilder (width X height)
Wenn Sie auch ein nützliches Beispiel für ein benutzerdefiniertes Parameterelement haben, dürfen Sie es gerne hier eintragen.