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;
}