Anwendung von Feldern / Overrides
From Joomla! Documentation
Einsatz von Feldern in Overrides
Artikel in dieser Serie
- Einführung
- Parameter für alle Eigenen Felder
- Kalender-Feld
- Kontrollkästchen-Feld
- Farbe Feld
- Editor Feld
- Zahlen Feld
- Listen Feld
- Bilder-Listen Feld
- Medien Feld
- Optionsfeld (radio)
- Wiederholbares Feld
- Sql Feld
- Textfeld
- Textbereich Feld
- URL Feld
- Benutzer Feld
- Benutzergruppe Feld
- Wie man die Eigenen Felder gruppiert
- Welche Komponenten unterstützen die Eigenen Felder
- Implementierung in der eigenen Komponente
- Eigene Felder in Overrides anwenden
Wie man Felder in Overrides verwendet
Einleitung
Die wahre Stärke der Felder besteht in der Möglichkeit, diese in eigenen Overrides beliebig einsetzen zu können. Hier folgt ein Beispiel wie das erfolgen kann.
Aufruf eines Feldes in einem Override
Grundsätzlich stehen alle Felder die dem aktuellen Element zugehören zur Verfügung. Der Aufruf erfolgt über eine neue Eigenschaft der Variable $ item
mit dem Namen jcfields.
Die $item->jcfields Eigenschaft ist ein Array, das die folgenden Daten pro Feld enthält, wobei das Feld wie in diesem Beispiel aussieht:
Array
(
[4] => stdClass Object
(
[id] => 4
[title] => article-editor
[name] => article-editor
[checked_out] => 0
[checked_out_time] => 0000-00-00 00:00:00
[note] =>
[state] => 1
[access] => 1
[created_time] => 2017-04-07 12:08:59
[created_user_id] => 856
[ordering] => 0
[language] => *
[fieldparams] => Joomla\Registry\Registry Object
(
[data:protected] => stdClass Object
(
[buttons] =>
[width] =>
[height] =>
[filter] =>
)
[initialized:protected] => 1
[separator] => .
)
[params] => Joomla\Registry\Registry Object
(
[data:protected] => stdClass Object
(
[hint] =>
[render_class] =>
[class] =>
[showlabel] => 1
[disabled] => 0
[readonly] => 0
[show_on] =>
[display] => 2
)
[initialized:protected] => 1
[separator] => .
)
[type] => editor
[default_value] =>
[context] => com_content.article
[group_id] => 0
[label] => article-editor
[description] =>
[required] => 0
[language_title] =>
[language_image] =>
[editor] =>
[access_level] => Public
[author_name] => Super User
[group_title] =>
[group_access] =>
[group_state] =>
[value] => Bar
[rawvalue] => Bar
)
)
Das Feld rendern mit Einsatz des FieldsHelper
Um das Feld zu rendern, kann FieldsHelper::render()
eingesetzt werden, indem die benötigten Werte übergeben werden.
/**
* Renders the layout file and data on the context and does a fall back to
* Fields afterwards.
*
* @param string $context The context of the content passed to the helper
* @param string $layoutFile layoutFile
* @param array $displayData displayData
*
* @return NULL|string
*
* @since 3.7.0
*/
public static function render($context, $layoutFile, $displayData)
Beispiel Code für das Override mit Einsatz von FieldsHelper
// Load the FieldsHelper
<?php JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php'); ?>
<?php foreach ($this->item->jcfields as $field) : ?>
// Render the field using the fields render method
<?php echo FieldsHelper::render($field->context, 'field.render', array('field' => $field)); ?>
<?php endforeach ?>
Beispiel Code für ein einfaches Override
<?php foreach ($this->item->jcfields as $field) : ?>
// Render the field using the fields render method
<?php echo $field->label . ':' . $field->value; ?>
<?php endforeach ?>
$item->jcfields enthält nicht die benötigten Felder
Die jcfields Eigenschaft wird mit dem Plugin Event Code onContentPrepare generiert, indem der Kontext der Felder übergeben wird. Das Feld Plugin liest die Felder aus der Datenbank aus und fügt die Werte der jcfields Eigenschaft hinzu.
Vergewissere Dich, dass die im Override eingesetzte Komponente auch das Ereignis onContentPrepare
mit dem Kontext implementiert ist, der für die Felder verwendet wird.
Bei Einsatz einer Joomla! Kernkomponente, sollte das automatisch funktionieren.
Individuelle Felder laden
Um einzelne Felder zum Inhalt hinzuzufügen, wähle zunächst spezifische Namen für die benutzerdefinierten Felder aus, indem der Feldname des Feldes eingesetzt wird, welcher verwendet wird um das Feld direkt im Override-Code zu referenzieren. Wähle im Optionen Tab Automatische Anzeige das Feld Nein, um zu verhindern, dass es automatisch an einer der Standardpositionen angezeigt wird.
Füge den folgenden Code am Anfang der Datei ein, um den direkten Zugriff nach Namen auf Felder in den Overrides zu aktivieren. Dies sollte für jede überschriebene PHP-Datei erfolgen, in der einzelne Felder eingefügt werden sollen.
<?php foreach($item->jcfields as $jcfield)
{
$item->jcFields[$jcfield->name] = $jcfield;
}
?>
Und schließlich sollte der Platzierungscode des Feldes an der Stelle eingefügt werden, an der die Feldbezeichnung oder der Feld-Wert angezeigt werden soll.
Um das Bezeichnung des Feldes zum Override hinzuzufügen, gebe den unten stehenden Code ein und ersetze name-of-field durch den Namen des Feldes.
<?php echo $item->jcFields['name-of-field']->label; ?>
Um den Wert des Feldes zum Override hinzuzufügen, den unten stehenden Code eingeben und name of-field durch den Namen des Feldes ersetzen. Vorsicht: In der 3.x Serie ist value in der Tat das rawvalue. Siehe hierzu: https://github.com/joomla/joomla-cms/issues/20216 (en)
<?php echo $item->jcFields['name-of-field']->rawvalue; ?>
Dieser Code kann zu jedem Teil des Overrides hinzugefügt werden. Beispiele: Der Inhalt eines div, der src-String in einem img
tag, innerhalb eines CSS Klassenattributs, etc.