[spip-dev] Catégories vos saisies

Salut,

et voilà, après moult débat, le version 3.48.0 du plugin saisies catégorise enfin les saisies.

Il est donc temps d'affecter, si tel est votre souhait, des catégories aux saisies des plugins que vous maintenez (je me suis permis de le faire pour les saisies du plugin agenda et du plugin CVT-Upload).

Voici comment faire (note : cela est documenté dans l'article, non encore publié pour cause d'il faut finir un plugin qui sert d'exemple, suivant : SPIP-Contrib).

## D'abord, la liste des catégories

Clé informatique|Libellé humain|Exemple de saisie concernée|
libre>Champ libre|input
choix>Choix restreint|radio|
structure>Structure>fieldset>
objet>Contenu éditorial|selecteur_article|
defaut>Divers>hidden>

## Ensuite l'affectation
La saisie <code>email</code> possède les entrées suivantes dans son <code>.yaml</code> :

<code class='yaml'>
categorie:
   type: 'libre'
   rang: 10
</code>

En revanche la saisie <code>input</code> possède les entrées suivantes dans son <code>.yaml</code> :

<code class='yaml'>
categorie:
   type: 'libre'
</code>

La saisie <code>input</code> de range <code>0</code> (par défaut) apparaît avant la saisie <code>email</code> au sein de la catégorie <code>libre</code>.

## Créer ses propres catégories

Le pipeline <code>saisies_lister_categories</code> permet d'ajouter (ou le cas échéant, de modifier ou supprimer) une ou plusieurs catégories de saisie.

Par exemple l'association Planète Sciences ajouter une catégorie pour les saisies propres à ses activités, avant toutes les autres catégories

<code class="php">
/**
  * Ajout d'une catégorie de saisies plasci
  * @param array $flux
  * @return $flux modifié
**/
function plasci_saisies_lister_categories($flux) {
  $plasci = array(
    'plasci' => array(
      'nom' => _T('plasci:plasci')
    )
  );
  $flux = array_merge($plasci, $flux);//Mettre plasci en premier
  return $flux;
}
</code>

Nous avons ajouté une catégorie dont la clé est <code>plasci</code> et dont le nom humain est <code>_T('plasci:plasci')</code>. Pour l'instant, les catégories n'ont comme seule propriété que leur nom, mais cela pourrait changer à l'avenir.

À noter qu'une sécurité est appliquée, afin de s'assurer que la catégorie <code>defaut</code> se trouve systématiquement à la fin.

## Réaffecter des catégories

Pour vos besoins perso, pas pour les plugins communautaires !

Il est parfois utile de modifier la liste des saisies proposés, soit pour réaffecter des catégories, soit pour supprimer certaines saisies. Pour ce faire, on peut utiliser le pipeline <code>saisies_lister_disponibles</code>.

Par exemple, pour alléger son interface, Planète Sciences affecte la saisie <code>evenements</code> du plugin agenda à la catégorie <code>plasci</code>, et supprime toutes les saisies de catégorie <code>objet</code>.

<code class="php">
/**
  * Met la saisie evenements dans la catégorie plasci
  * Supprime toute les saisies objets
  * @param array $flux
  * @return $flux
**/
function plasci_saisies_lister_disponibles($flux) {
  foreach ($flux as $saisie => &$description) {
    if ($saisie == 'evenements') {
      $description['categorie']['type'] = 'plasci';
      $description['categorie']['rang'] = -10;
    } elseif (isset($description['categorie']['type']) and $description['categorie']['type'] == 'objet') {
      unset($flux[$saisie]);
    }
  }
  return $flux;
}
</code>

## PS

Si vous utilisez l'un ou l'autre des 2 pipelines ci-dessus dans un pipeline communautaire, je suis preneur, pour éviter de donner du code de Planète Sciences dans l'article de doc.

Maïeul