pre_edition

Ce pipeline permet d’agir lors de l’édition d’un élément éditorial, lorsque l’utilisateur édite les champs ou change le statut de l’objet. Il est appelé juste avant l’enregistrement des données.
On peut s’en servir pour contrôler ou modifier les contenus postés, ajouter des valeurs, etc.

Plusieurs informations sont transmises dans un tableau comportant 2 clés :

  • data contient les champs et leurs valeurs.
  • args contient des informations sur la table, l’objet édité, et l’action effectuée.

Voici une liste des actions effectuées dans le core :

Exemple d’appel dans objet_modifier_champs() :

$champs = pipeline('pre_edition',
    array(
        'args' => array(
            'table' => $spip_table_objet, // compatibilite
            'table_objet' => $table_objet,
            'spip_table_objet' => $spip_table_objet,
            'type' => $objet,
            'id_objet' => $id_objet,
            'champs' => isset($options['champs']) ? $options['champs'] : array(), // [doc] c'est quoi ?
            'champs_anciens' => $row,
            'serveur' => $serveur,
            'action' => isset($options['action']) ? $options['action'] : 'modifier'
        ),
        'data' => $champs
    )
);

Exemple

Le plugin « pages uniques » s’en sert entre autre pour modifier l’identifiant de la rubrique et du secteur des articles considérés comme des pages :

function pages_pre_edition_ajouter_page($flux) {
    if (is_array($flux) and isset($flux['args']['type']) && $flux['args']['type'] == 'article') {
        if ((($page = _request('champ_page')) != '') AND ($page != 'article')) {
            /**
             * On ajoute le "champ_page" du formulaire qui deviendra "page" dans la table
             * On force l'id_rubrique à -1
             */
            $flux['data']['page'] = $page;
            $flux['data']['id_rubrique'] = '-1';
            $flux['data']['id_secteur'] = '0';
        }
        /**
         * si l'id_parent est supérieur à 0 on que l'on ne récupère pas de champ_page,
         * on pense à vider le champ "page", pour pouvoir revenir après coup en page
         */
        if (!_request('champ_page') && (_request('id_parent') > 0)){
            $flux['data']['page'] = '';
        }
    }
    return $flux;
}

Auteur tcharlss Publié le : Mis à jour : 07/08/23