Changeset 45481 in spip-zone


Ignore:
Timestamp:
Mar 17, 2011, 8:28:53 AM (9 years ago)
Author:
marcimat@…
Message:

Pourvoir dire qu'une saisie s'affiche ou non dans une liste de descriptions de saisies. on utilise 'editable'=>quelquechose.

Peut être faudrait il renommer cette option en 'affichable'=>qqc ?

Le cas -1 permet de dire que la saisie ne s'affiche que si le champ contient déjà du contenu, comme le fait SPIP pour ses «soustitres» lorsqu'ils sont désactivés.

Exemple d'une saisie qui ne s'affiche QUE s'il y a du contenu dans le champ :

'soustitre' => array(
	'saisie' => 'input',
	'editable' => (lire_config('articles_soustitre')=='non') ? -1 : true,
	'options' => array(
		'nom' => 'soustitre',
		'label' => '<:texte_sous_titre:>'
	)
),
File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/saisies/inc/saisies.php

    r45478 r45481  
    505505}
    506506
     507
     508/**
     509 * Retourne si une saisie peut être affichée.
     510 * On s'appuie sur l'éventuelle clé "editable" du $champ.
     511 * Si editable vaut :
     512 *  absent : le champ est éditable
     513 *  1, le champ est éditable
     514 *  0, le champ n'est pas éditable
     515 * -1, le champ est éditable s'il y a du contenu dans le champ (l'environnement)
     516 *     ou dans un de ses enfants (fieldsets)
     517 *
     518 * @param $champ tableau de description de la saisie
     519 * @param $env environnement transmis à la saisie, certainement l'environnement du formulaire
     520 * @param $utiliser_editable false pour juste tester le cas -1
     521 *
     522 * @return bool la saisie est-elle éditable ?
     523**/
     524function saisie_editable($champ, $env, $utiliser_editable=true) {
     525        if ($utiliser_editable) {
     526                // si le champ n'est pas éditable, on sort.
     527                if (!isset($champ['editable'])) {
     528                        return true;
     529                }
     530                $editable = $champ['editable'];
     531
     532                if ($editable > 0) {
     533                        return true;
     534                }
     535                if ($editable == 0) {
     536                        return false;
     537                }
     538        }
     539
     540        // cas -1
     541        // name de la saisie
     542        if (isset($champ['options']['nom'])) {
     543                // si on a le name dans l'environnement, on le teste
     544                $nom = $champ['options']['nom'];
     545                if (isset($env[$nom])) {
     546                        return $env[$nom] ? true : false ;
     547                }
     548        }
     549        // sinon, si on a des sous saisies
     550        if (isset($champ['saisies']) and is_array($champ['saisies'])) {
     551                foreach($champ['saisies'] as $saisie) {
     552                        if (saisie_editable($saisie, $env, false)) {
     553                                return true;
     554                        }
     555                }
     556        }
     557       
     558        // aucun des paramètres demandés n'avait de contenu
     559        return false;
     560       
     561}
     562
     563
    507564/*
    508565 * Génère une saisie à partir d'un tableau la décrivant et de l'environnement
     
    522579        if (!is_array($champ))
    523580                return '';
     581
     582        // Si la saisie n'est pas editable, on sort aussi.
     583        if (!saisie_editable($champ, $env)) {
     584                return '';
     585        }
    524586       
    525587        $contexte = array();
     
    530592        // Peut-être des transformations à faire sur les options textuelles
    531593        $options = $champ['options'];
     594
     595       
    532596        foreach ($options as $option => $valeur){
    533597                $options[$option] = _T_ou_typo($valeur, 'multi');
Note: See TracChangeset for help on using the changeset viewer.