Changeset 119116 in spip-zone


Ignore:
Timestamp:
Dec 18, 2019, 1:04:58 PM (4 months ago)
Author:
marcimat@…
Message:

Le comportement de la balise #COULEUR ne me parle pas tant que ça, notamment parce qu’on
ne peut pas lui transmettre les paramètres objet/id_objet désirés.

On introduit #COULEUR_OBJET et #COULEUR_OBJET_HIERARCHIE qui fonctionnent un peu de la même manière,
mais qui acceptent 2 paramètres : objet et id_objet ; et peuvent donc être utilisés hors boucle

  • #COULEUR_OBJET{rubrique,3} retourne la couleur de la rubrique 3
  • #COULEUR_OBJET_HIERARCHIE{rubrique,3} avec le plugin déclarer parent, retourne la couleur de la rubrique 3, sinon de sa parente, sinon de sa parente, sinon de sa parente, sinon... :)

On peut les utiliser directement dans des boucles, sans paramètres

  • `<BOUCLE_a(RUBRIQUES){racine}{' - '}>#COULEUR_OBJET</BOUCLE_a>

Une page approximative ?page=demo/couleur_objet permet de vérifier le comportement des différentes balises ;
bon, juste avec des tests sur les boucles rubriques.

On en profite pour réécrire le code de la balise #COULEUR qui avait quelques lacunes :

  • On génère une erreur de squelette si la balise est utilisée hors boucle,
  • On permet d’utiliser des noms de boucle (ie: #toto:COULEUR).
Location:
_plugins_/couleur_objet/trunk
Files:
3 added
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/couleur_objet/trunk/couleur_objet_fonctions.php

    r119104 r119116  
    22
    33/**
    4  * Compile la balise #COULEUR
     4 * Compile la balise `#COULEUR`
    55 *
    6  * Renvoie la couleur associée à un objet
     6 * Renvoie la couleur associée à un objet, dans une boucle
     7 * - `#COULEUR`
    78 *
    8  * Elle accepte 2 paramètres :
    9  * - #COULEUR{parent} pour prendre la couleur du parent en fallback
    10  * - #COULEUR{parent,recursif} même chose, mais cherche le parent récursivement
    11  * Attention, ne fonctionne que s'il y a l'API de déclaration des parents.
     9 * Avec l'API de déclaration des parents (plugin declarer_parent)
     10 * Elle permet de demander la couleur du/des parents en fallback :
     11 * - `#COULEUR{parent}` pour prendre la couleur du parent en fallback
     12 * - `#COULEUR{parent,recursif}` même chose, mais cherche le parent récursivement
    1213 *
    13  * @see
    14  * https://programmer.spip.net/Recuperer-objet-et-id_objet
     14 * @see balise_COULEUR_OBJET_dist()
     15 * @see balise_COULEUR_OBJET_HIERARCHIE_dist()
     16 * @see https://programmer.spip.net/Recuperer-objet-et-id_objet
    1517 *
    1618 * @param Champ $p
     
    2022 */
    2123function balise_COULEUR($p) {
     24        $b = index_boucle($p);
     25        if ($b === '') {
     26                $msg = array(
     27                        'zbug_champ_hors_boucle',
     28                        array('champ' => '#' . $p->nom_champ)
     29                );
     30                erreur_squelette($msg, $p);
     31                return $p;
     32        }
    2233
    23         // On prend nom de la clé primaire de l'objet pour calculer sa valeur
    24         $_id_objet = $p->boucles[$p->id_boucle]->primary;
    25         $id_objet  = champ_sql($_id_objet, $p);
    26         $objet     = $p->boucles[$p->id_boucle]->id_table;
     34        $boucle = &$p->boucles[$b];
     35        $_objet    = "'$boucle->id_table'";
     36        $_id_objet  = champ_sql($boucle->primary, $p);
     37
    2738        // 1er paramètre : prendre le parent en fallback
    2839        // On vérifie juste si le texte est présent, peu importe la valeur
     
    3849        }
    3950
    40         $p->code = "objet_couleur('$objet', $id_objet, $_parent, $_recursif)";
     51        $p->code = "objet_couleur($_objet, $_id_objet, $_parent, $_recursif)";
    4152
    4253        return $p;
     54}
     55
     56
     57/**
     58 * Compile la balise `#COULEUR_OBJET`
     59 *
     60 * Renvoie la couleur associée à un objet dont on transmet le type et identifiant
     61 *
     62 * Dans une boucle, par exemple ARTICLES, prendra la couleur défini pour l’article,
     63 * sinon sur sa rubrique, sinon sur la rubrique parente, etc. :
     64 *  - `#COULEUR_OBJET_HIERARCHIE`
     65 *
     66 * Elle accepte 2 paramètres :
     67 * - `#COULEUR_OBJET{rubrique, 3}`
     68 * - `#COULEUR_OBJET{article, 8}`
     69 *
     70 * @see balise_COULEUR_OBJET_HIERARCHIE_dist()
     71 *
     72 * @param Champ $p
     73 *     Pile au niveau de la balise
     74 * @param array $options
     75 *     - bool 'hierarchie' (false) : Remonter la hiérarchie si pas de couleur à l’objet ?
     76 * @return Champ
     77 *     Pile complétée par le code à générer
     78 */
     79function balise_COULEUR_OBJET_dist($p, $options = array()) {
     80
     81        $options = $options + array(
     82                'hierarchie' => false,
     83        );
     84
     85        // Recherche des paramètres objet et id_objet
     86        $_objet = interprete_argument_balise(1, $p);
     87        $_id_objet = interprete_argument_balise(2, $p);
     88
     89        // Sinon, on utilise la boucle courante
     90        if ($_objet === null and $_id_objet === null) {
     91                $b = index_boucle($p);
     92                if ($b === '') {
     93                        $msg = array(
     94                                'zbug_champ_hors_boucle',
     95                                array('champ' => '#' . $p->nom_champ)
     96                        );
     97                        erreur_squelette($msg, $p);
     98                        return $p;
     99                }
     100                $boucle = &$p->boucles[$b];
     101                $_objet     = "'$boucle->id_table'";
     102                $_id_objet  = champ_sql($boucle->primary, $p);
     103        }
     104
     105        $_parent = $_recursif = "false";
     106        if ($options['hierarchie']) {
     107                $_parent = $_recursif = "true";
     108        }
     109
     110        $p->code = "objet_couleur($_objet, $_id_objet, $_parent, $_recursif)";
     111
     112        return $p;
     113}
     114
     115/**
     116 * Compile la balise `#COULEUR_OBJET_HIERARCHIE`
     117 *
     118 * Renvoie la couleur associée à un objet, en remontant la hiérarchie de ses parents
     119 * jusqu’à trouver une couleur définie.
     120 * Nécessite l'API de déclaration des parents (plugin declarer_parent)
     121 *
     122 * Dans une boucle, par exemple ARTICLES, prendra la couleur défini pour l’article,
     123 * sinon sur sa rubrique, sinon sur la rubrique parente, etc. :
     124 *  - `#COULEUR_OBJET_HIERARCHIE`
     125 *
     126 * On peut transmettre le type et identifiant, pour cibler un élément spécifique :
     127 * - `#COULEUR_OBJET_HIERARCHIE{rubrique, 3}`
     128 * - `#COULEUR_OBJET_HIERARCHIE{article, 8}`
     129 *
     130 * @uses balise_COULEUR_OBJET_dist()
     131 *
     132 * @param Champ $p
     133 *     Pile au niveau de la balise
     134 * @return Champ
     135 *     Pile complétée par le code à générer
     136 */
     137function balise_COULEUR_OBJET_HIERARCHIE_dist($p) {
     138        return balise_COULEUR_OBJET_dist($p, array('hierarchie' => true));
    43139}
    44140
  • _plugins_/couleur_objet/trunk/formulaires/configurer_couleur_objet.html

    r114104 r119116  
    1414        <form method="post" action="#ENV{action}">
    1515                <div>
    16                         #ACTION_FORMULAIRE{#ENV{action}}
     16                        #ACTION_FORMULAIRE
    1717                        [(#SET{co,couleur_objet})]
    1818                        <ul>
  • _plugins_/couleur_objet/trunk/formulaires/couleur_objet.html

    r117544 r119116  
    1111
    1212        Particularités :
    13                 Si plugin Palette activé et si #COULEUR_OBJET n'existe pas, il faut un code hexadécimal pour initialiser la saisie,
    14                 c'est pourquoi value=#FFFFFF
     13                Si plugin Palette activé et si #ENV{couleur_objet} n'existe pas, il faut un code hexadécimal pour initialiser la saisie,
     14                c'est pourquoi value=#ffffff
    1515
    1616]<div class="formulaire_spip formulaire_config formulaire_#FORM">
     
    2424        [(#ENV{editable}|oui)
    2525        <form method="post" action="#ENV{action}">
    26                 #ACTION_FORMULAIRE{#ENV{action}}
     26                #ACTION_FORMULAIRE
    2727                [<input type='hidden' name='objet' value='(#ENV{objet})' />]
    2828                [<input type='hidden' name='id_objet' value='(#ENV{id_objet})' />]
     
    3232                        [<[(#DIV|sinon{li})] class="editer">
    3333                                <label><:couleur_objet:couleur_actuelle:></label>
    34                                 <div class="couleur_objet_actuelle" style="padding:0.5em;text-align:center;text-transform:uppercase;background:[(#COULEUR_OBJET)];color:[#(#COULEUR_OBJET|couleur_extreme|couleur_inverser)];border:1px solid;"
    35                                 >(#COULEUR_OBJET)</div>
     34                                <div class="couleur_objet_actuelle" style="padding:0.5em;text-align:center;text-transform:uppercase;background:#ENV{couleur_objet};color:[#(#ENV{couleur_objet}|couleur_extreme|couleur_inverser)];border:1px solid;"
     35                                >(#ENV{couleur_objet})</div>
    3636                        </[(#DIV|sinon{li})]>]
    3737
     
    3939                                <label for="couleur_objet"><:couleur_objet:choisir_une_nouvelle_couleur:></label>[
    4040                                <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{couleur_objet})</span>
    41                                 ]<input type="color" class="palette" id='couleur_objet' name='couleur_objet'[ (#PLUGIN{palette}|?{
    42                                         [(#COULEUR_OBJET|?{value="#COULEUR_OBJET",value="#FFFFFF"})]
    43                                 ,
    44                                         value="#COULEUR_OBJET"
    45                                 })] style="width:100%;text-transform:uppercase;" />
     41                                ]<input type="color" class="palette" id='couleur_objet'
     42                                        name='couleur_objet'
     43                                        value="[(#PLUGIN{palette}|?{#ENV{couleur_objet, #ffffff},#ENV{couleur_objet}})]"
     44                                        style="width:100%;text-transform:uppercase;"
     45                                />
    4646                        </[(#DIV|sinon{li})]>
    4747
     
    5050                <div class="boutons clearfix">
    5151                        <input type="submit" class="submit" value="<:bouton_enregistrer|attribut_html:>" style="float:right;" />
    52                         [(#COULEUR_OBJET|oui) <input type="submit" class="submit" name="supprimer" value="<:couleur_objet:bouton_supprimer|attribut_html:>" style="float:left;" />]
     52                        [(#ENV{couleur_objet}|oui) <input type="submit" class="submit" name="supprimer" value="<:couleur_objet:bouton_supprimer|attribut_html:>" style="float:left;" />]
    5353                </div>
    5454        </form>
     
    5757                [<p class="clearfix">
    5858                        <label><:couleur_objet:couleur_actuelle:></label>
    59                         <div class="couleur_objet_actuelle" style="margin:0 0 2px 2px;text-align:center;text-transform:uppercase;background:[(#COULEUR_OBJET)];color:[#(#COULEUR_OBJET|couleur_extreme|couleur_inverser)];border:1px solid;"
    60                         >(#COULEUR_OBJET)</div>
     59                        <div class="couleur_objet_actuelle" style="margin:0 0 2px 2px;text-align:center;text-transform:uppercase;background:#ENV{couleur_objet};color:[#(#ENV{couleur_objet}|couleur_extreme|couleur_inverser)];border:1px solid;"
     60                        >(#ENV{couleur_objet})</div>
    6161                </p>]
    6262        ]
  • _plugins_/couleur_objet/trunk/inc-couleur-objet.html

    r107920 r119116  
    1 <BOUCLE_couleur_objet(spip_couleur_objet_liens){objet}{id_objet}>#COULEUR_OBJET</BOUCLE_couleur_objet>
     1<BOUCLE_couleur_objet(spip_couleur_objet_liens){objet}{id_objet}>#CHAMP_SQL{couleur_objet}</BOUCLE_couleur_objet>
  • _plugins_/couleur_objet/trunk/paquet.xml

    r119104 r119116  
    22        prefix="couleur_objet"
    33        categorie="outil"
    4         version="0.5.2"
     4        version="0.6.0"
    55        schema="1.0.0"
    66        etat="stable"
Note: See TracChangeset for help on using the changeset viewer.