Anwendung von Feldern / Overrides
From Joomla! Documentation
Einsatz von Eigenen Feldern in Overrides
Articles in this Series
- Introduction
- Parameters for all Custom Fields
- Calendar Field
- Checkboxes Field
- Color Field
- Editor Field
- Integer Field
- List Field
- List of Images Field
- Media Field
- Radio Field
- Repeatable Field
- Sql Field
- Text Field
- Textarea Field
- Url Field
- User Field
- Usergroup Field
- How can you group custom fields
- What components are supporting custom fields
- Implementation into your component
- Use custom fields in your overrides
Wie man Eigene Felder in Overrides verwendet
Einleitung
Die wahre Stärke der Eigenen 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 Einenen Feldes in einem Override
Grundsätzlich stehen alle Eigenen 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.