J3.x

Anwendung von Feldern / Overrides

From Joomla! Documentation


Einsatz von Eigenen Feldern in 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.