Changeset 113295 in spip-zone for _plugins_/polyhierarchie


Ignore:
Timestamp:
Jan 8, 2019, 9:55:27 PM (6 weeks ago)
Author:
tcharlss@…
Message:

Extension du critère {enfants} afin de le rendre optionnel si on veut, sur le même modèle que {branche}. On peut donc écrire {enfants?#ENV{enfants}} et le critère ne sera opérant que s'il y a 'enfants' dans l'env. Reste à implémenter le NOT, éventuellement.

Location:
_plugins_/polyhierarchie/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/polyhierarchie/trunk/paquet.xml

    r112949 r113295  
    22        prefix="polyhier"
    33        categorie="navigation"
    4         version="3.6.12"
     4        version="3.6.13"
    55        etat="test"
    66        compatibilite="[3.0.0;3.2.*]"
  • _plugins_/polyhierarchie/trunk/polyhier_fonctions.php

    r112017 r113295  
    1010
    1111/**
    12  * {enfants} ou {enfants #ID_RUBRIQUE}
    13  * renvoit tous les enfants d'une rubrique ou article
    14  * directs (liens descendants) ou indirects (liens transverses)
     12 * {enfants} renvoie les enfants d'une rubrique ou d'un article,
     13 * directs (liens descendants) et/ou indirects (liens transverses)
     14 *
     15 * Critères :
     16 *
     17 * {enfants}           : renvoie tous les enfants, directs ET indirects
     18 * {enfants_directs}   : ne renvoie que les enfants directs
     19 * {enfants_indirects} : ne renvoie que les enfants indirects
     20 *
     21 * Syntaxe :
     22 *
     23 * {enfants}                     : rubrique du contexte
     24 * {enfants #ID_RUBRIQUE}        : rubrique passée en paramètre
     25 * {enfants #LISTE{1,2,3}}       : rubriques passées en paramètre
     26 * {enfants?#ENV{id_rubrique,0}} : rubrique passée en paramètre, mais rend le critère optionnel
    1527 *
    1628 * @global <type> $exceptions_des_tables
     
    2335        global $exceptions_des_tables;
    2436        $boucle = &$boucles[$idb];
     37        $not = $crit->not;
    2538
    2639        if (isset($crit->param[0])) {
     
    4356        $where = array();
    4457
     58        // Si c'est tout ou que directs, on ajoute le critère principal
    4559        if ($tous!=='indirects') {
    4660                $where[] = "is_array(\$r=$arg)?sql_in('$mparent',\$r):array('=', '$mparent', \$r)";
    4761        }
    4862
     63        // Si c'est tout ou que indirects, on ajoute le critère secondaire, avec la table de liens
    4964        if ($tous !== 'directs'
    5065          AND in_array(table_objet_sql($boucle->type_requete),array_keys(lister_tables_objets_sql()))){
     
    5570        }
    5671       
     72        // S'il y a les deux critères, c'est l'un ou l'autre
    5773        if (count($where) == 2) {
    58                 $where = array("'OR'", $where[0], $where[1]);
     74                $where = "array('OR'," . $where[0] . "," . $where[1] . ")";
    5975        }
    6076        else {
     
    6278        }
    6379
    64         $boucle->where[]= $where;
     80        $boucle->where[] = !$crit->cond ?
     81                $where :
     82                ("($arg ? $where : '1=1')");
    6583}
    6684
Note: See TracChangeset for help on using the changeset viewer.