Browse Source

Rendre les saisies selecteur_article et selecteur_rubrique un peu plus souples : on peut passer une valeur simple en entrée, par ex. `10` ou `array(10,20)`, et celle-ci sera convertie dans le bon format pour le picker ajax : `array('article|10', 'article|20')`. Cela évite d'avoir à faire ça à chaque fois dans le charger des formulaires.

pull/39/head
tcharlss 2 years ago
parent
commit
863065c95c
  1. 25
      saisies/selecteur_article.html
  2. 20
      saisies/selecteur_rubrique.html
  3. 22
      saisies/selecteur_rubrique_article.html
  4. 43
      saisies_fonctions.php

25
saisies/selecteur_article.html

@ -1,13 +1,16 @@
[(#REM)
### /!\ selecteur (spip Bonux) ###
Attention, ce qui est retourne est un tableau :
_request($name) = array('article|3', 'article|9', 'rubrique|10');
Une fonction de SPIP Bonux permet de récupérer un tableau d'identifiants par type d'objet :
[(#CHAMP|picker_selected{article})]
Cette fonction peut etre pratique dans une boucle en utilisant le critere IN
(picker_selected est dans prive/formulaires/selecteur/generique_fonctions.php de SPIP 3)
[(#REM)
Affiche un navigateur de sélection d’articles par le biais du sélecteur générique de Spip.
### /!\ Format des données ###
Attention, le picker ajax du sélecteur générique retourne toujours un tableau :
_request($name) = array('article|3', 'article|9', 'rubrique|10');
Une fonction de SPIP 3 permet de récupérer un tableau d'identifiants par type d'objet :
[(#CHAMP|picker_selected{article})]
Cette fonction peut être pratique dans une boucle en utilisant le critere IN
(picker_selected est dans prive/formulaires/selecteur/generique_fonctions.php de SPIP 3)
La valeur en entrée peut être un simple id ou un tableau d'ids, elle sera convertie au bon format.
Parametres :
- multiple : si oui, on peut selectionner plusieurs articles
- afficher_langue : si oui, on affiche la langue de l'objet selectionne
@ -20,7 +23,7 @@
[(#SAISIE{selecteur_article,id_article,
label=<:plugin:article_en_une:>})]
]
[(#SET{val,#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}})]
[(#SET{val,#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}|saisies_picker_preselect_objet{article}})]
[(#SET{filtrer_langue_article,[(#ENV{afficher_art_dans_langue_interface,0}|oui) #ENV{lang}]})]

20
saisies/selecteur_rubrique.html

@ -1,12 +1,15 @@
[(#REM)
### /!\ selecteur (spip Bonux) ###
Attention, ce qui est retourne est un tableau :
_request($name) = array('article|3', 'article|9', 'rubrique|10');
Une fonction de SPIP Bonux permet de récupérer un tableau d'identifiants par type d'objet :
[(#CHAMP|picker_selected{rubrique})]
Cette fonction peut etre pratique dans une boucle en utilisant le critere IN
(picker_selected est dans prive/formulaires/selecteur/generique_fonctions.php de SPIP 3)
Affiche un navigateur de sélection de rubriques par le biais du sélecteur générique de Spip.
### /!\ Format des données ###
Attention, le picker ajax du sélecteur générique retourne toujours un tableau :
_request($name) = array('article|3', 'article|9', 'rubrique|10');
Une fonction de SPIP 3 permet de récupérer un tableau d'identifiants par type d'objet :
[(#CHAMP|picker_selected{rubrique})]
Cette fonction peut être pratique dans une boucle en utilisant le critere IN
(picker_selected est dans prive/formulaires/selecteur/generique_fonctions.php de SPIP 3)
La valeur en entrée peut être un simple id ou un tableau d'ids, elle sera convertie au bon format.
Parametres :
- multiple : si oui, on peut selectionner plusieurs rubriques
@ -21,8 +24,7 @@
multiple=oui,
label=<:plugin:article_en_une:>})]
]
[(#SET{val,#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}})]
[(#SET{val,#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}|saisies_picker_preselect_objet{rubrique}})]
[(#SET{filtrer_langue_rubrique,[(#ENV{afficher_rub_dans_langue_interface,0}|oui) #ENV{lang}]})]

22
saisies/selecteur_rubrique_article.html

@ -1,13 +1,15 @@
[(#REM)
### /!\ selecteur (spip Bonux) ###
Attention, ce qui est retourne est un tableau :
_request($name) = array('article|3', 'article|9', 'rubrique|10');
Une fonction de SPIP Bonux permet de récupérer un tableau d'identifiants par type d'objet :
[(#CHAMP|picker_selected{article})]
Cette fonction peut etre pratique dans une boucle en utilisant le critere IN
(picker_selected est dans prive/formulaires/selecteur/generique_fonctions.php de SPIP 3)
[(#REM)
Affiche un navigateur de sélection d’articles ou de rubriques par le biais du sélecteur générique de Spip.
### /!\ Format des données ###
Attention, le sélecteur générique retourne toujours un tableau :
_request($name) = array('article|3', 'article|9', 'rubrique|10');
Une fonction de SPIP 3 permet de récupérer un tableau d'identifiants par type d'objet :
[(#CHAMP|picker_selected{article})]
Cette fonction peut être pratique dans une boucle en utilisant le critere IN
(picker_selected est dans prive/formulaires/selecteur/generique_fonctions.php de SPIP 3)
Parametres :
- multiple : si oui, on peut selectionner plusieurs rubriques
- afficher_langue : si oui, on affiche la langue de l'objet selectionne

43
saisies_fonctions.php

@ -354,3 +354,46 @@ function saisies_statut_titre($statut, $objet = '') {
$titre = statut_titre($objet, $statut);
return $titre ? $titre : $statut;
}
/**
* Convertit si nécessaire une valeur au format du picker ajax du sélecteur générique
* quand on sait que la valeur ne concerne qu'un seul type d'objet.
*
* Fait en quelque sorte l'inverse de picker_selected().
* Cela évite d'avoir à modifier le charger des formulaires quand on traite des cas simples :
* juste un plusieurs ids d'un seul type d'objet.
*
* @example
* - Entrée : 10, sortie : array('article|10')
* - Entrée : array(10,20), sortie : array('article|10', 'article|20')
*
* @see picker_selected()
*
* @param array|string|int $valeur
* - Soit un tableau issu du sélecteur (dans ce cas on ne fait rien) : `array('article|1', 'article|2')`
* - Soit l'id d'un objet : 1
* - Soit un tableau d'ids : array(1,2)
* @param string $objet
* @return array
* Tableau au format du sélecteur générique
*/
function saisies_picker_preselect_objet($valeur, $objet) {
// Nb : évitons des preg_match si possible
$is_objet_unique = is_numeric($valeur); // ex. : 10
$is_objet_multiple = (is_array($valeur) and is_numeric($valeur[0])); // ex. : array(10,20)
if (
$is_objet_unique
or $is_objet_multiple
) {
if ($is_objet_unique) {
$valeur = array($valeur);
}
foreach ($valeur as $k => $id_objet) {
$valeur[$k] = "$objet|$id_objet";
}
}
return $valeur;
}

Loading…
Cancel
Save