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 : -* {{controler}} : contrôler les contenus postés d’un objet, cf. controler_contenu() dans ecrire/inc/editer -* {{modifier}} : modifier le contenu d’un objet, cf. objet_modifier_champs() dans ecrire/inc/modifier.php -* {{instituer}} : changer le statut d’un objet, cf. objet_instituer() dans ecrire/action/editer_objet.php 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 ?
            '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 :