Personnalisation de la vue des éléments de l'article

Dans FractalCMS, nous pouvons personnaliser la vue qui sera utilisée pour générer le HTML de l'élément dans la partie Gestion des éléments du formulaire de création d'un article.

Propriété "viewItemPath"

La propriété public viewItemPath du module FractalCMS peut-être valorisé dans le fichier de configuration. La propriété est valorisée par défaut par @webapp/views/fractal-cms.

/* fichier de configuration */
/*../..*/
'bootstrap' => [
    'log',
    'fractal-cms',
    'fractal-cms-content',
],
'modules' => [
    'fractal-cms' => [
        'class' =>  \fractalCms\core\Module::class
        'viewItemPath'=> '@webapp/views/fractal-cms'
    ],
    'fractal-cms-content' => [
        'class' =>  \fractalCms\content\Module::class
    ],
],
/*../..*/

Si une vue est détectée dans ce répertoire, c'est elle qui sera utiliser dans le formulaire de création d'un article partie Gestion des éléments.

Règle de nommages des vues

Le nom du fichier doit correspondre à la valeur de la propriété name de la Configuration de l'élément. Les noms comportant des "-" seront automatiquement remplacés par des "_".

Exemple pour l'entête

  1. Nom : entete
  2. Valeur de la propriété name de la configuration : entete
  3. Nom de la vue : entete.php

Exemple pour Image HTML

  1. Nom : image-html
  2. Valeur de la propriété name de la configuration : image-html
  3. Nom de la vue : image_html.php

Exemple du fichier image_html.php

<?php
/**
 * image_html.php
 *
 * PHP Version 8.2+
 *
 * @version XXX
 * @package webapp\views\layouts
 *
 * @var $this yii\web\View
 * @var $model \fractalCms\models\Item
 * @var $target \fractalCms\content\content\models\Content | \fractalCms\content\content\models\Tag
 */

use fractalCms\content\content\helpers\Html;
use yii\helpers\ArrayHelper;
use fractalCms\content\content\helpers\Cms;
?>
<?php
foreach ($model->configItem->configArray as $attribute => $data):?>
    <div class="col form-group p-0 mt-1">
        <?php
        $title = ($data['title']) ?? '';
        $description = ($data['description']) ?? '';
        $options = ($data['options']) ?? null;
        $accept = ($data['accept']) ?? null;
        switch ($data['type']) {
            case Html::CONFIG_TYPE_FILE:
            case Html::CONFIG_TYPE_FILES:
                echo Html::tag('fractal-cms-content-file-upload', '', [
                    'title.bind' => '\''.$title.'\'',
                    'name' => Html::getInputName($target, 'items['.$model->id.']['.$attribute.']'),
                    'value' => $model->$attribute,
                    'upload-file-text' => 'Ajouter une fichier',
                    'file-type' => $accept
                ]);
                break;
            case Html::CONFIG_TYPE_WYSIWYG:
                echo Html::activeLabel($target, 'items['.$model->id.']['.$attribute.']', ['label' => $title, 'class' => 'form-label']);
                echo Html::activeHiddenInput($target, 'items['.$model->id.']['.$attribute.']', ['value' => $model->$attribute, 'class' => 'wysiwygInput']);
                $inputNameId = Html::getInputId($target, 'items['.$model->id.']['.$attribute.']');
                echo Html::tag('div', '',
                    [
                        'cms-wysiwyg-editor' => 'input-id.bind:\''.$inputNameId.'\'',
                    ]);
                break;
        }
        ?>
    </div>

    <?php if (empty($description) === false):?>
        <div class="col p-0">
            <p class="fw-lighter fst-italic">
                <?php echo $description;?>
            </p>
        </div>
    <?php endif;?>
<?php endforeach;?>

Les noms et ids des champs doivent être scrupuleusement respectés.