Changeset 108231 in spip-zone


Ignore:
Timestamp:
Dec 29, 2017, 9:17:44 AM (18 months ago)
Author:
p@…
Message:

Nouvelle fonctionnalité de la balise #COLONNES: des colonnes calculée.

Lorsque l'on veux créer une grille de 4 objets mais qu'il n'y en a que 3 de publiés, la balise va automatiquement adapter le nombre de colonne.
Cette option s'active en ajoutant une étoile au nombre de colonne. Exemple :

`
<article class="#COLONNES{#ARRAY{large, 4*}}">
`

Il faut bien entendu être dans une boucle pour utiliser cette option.

Location:
_plugins_/foundation_6/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/foundation_6/trunk/foundation_6_fonctions.php

    r105856 r108231  
    6464        $type = interprete_argument_balise(2, $p);
    6565
     66        // Dans le cas ou on ce trouve dans une boucle SPIP, on va passer le total
     67        // de la boucle à la fonction class_grid_foundation.
     68        $b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
     69        if ($b !== '') {
     70                $total_boucle = "\$Numrows['$b']['total']";
     71                $p->boucles[$b]->numrows = true;
     72        } else {
     73                $total_boucle = 'null';
     74        }
     75
    6676        // On met une valeur par défaut à type.
    6777        if (!$type) {
     
    7080
    7181        // On calcule la class
    72         $p->code = "class_grid_foundation($nombre_colonnes, $type).'columns'";
     82        $p->code = "class_grid_foundation($nombre_colonnes, $type, $total_boucle).'columns'";
    7383        $p->interdire_scripts = false;
    7484
     
    187197        }
    188198}
     199
     200function balise_CALCULER_COLONNES($p) {
     201        // Nombre maximum de colonne
     202        $max = interprete_argument_balise(1, $p);
     203
     204        $b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
     205        if ($b === '' || !isset($p->boucles[$b])) {
     206                $msg = array(
     207                        'zbug_champ_hors_boucle',
     208                        array('champ' => "#$b" . 'CALCULER_COLONNES')
     209                );
     210                erreur_squelette($msg, $p);
     211        } else {
     212                $p->code = "calculer_colonnes($max, \$Numrows['$b']['total'])";
     213                $p->boucles[$b]->numrows = true;
     214                $p->interdire_scripts = false;
     215        }
     216
     217        return $p;
     218}
  • _plugins_/foundation_6/trunk/inc/foundation.php

    r108229 r108231  
    4141 * Cette fonction va créer la class foundation de la balise #COLONNES
    4242 *
    43  * @param  int|array $nombre_colonnes Nombre de colonne désiré
     43 * @param int|array|string $nombre_colonnes Nombre de colonne désiré. Un étoile
     44 * (ex: 4*) activera les colonnes calculée
    4445 * @param  string $type type de colonne: large, medium ou small
    4546 * @return string $class foundation applicable directement.
    4647 */
    47 function class_grid_foundation($nombre_colonnes, $type) {
    48 
     48function class_grid_foundation($nombre_colonnes, $type, $total_boucle = null) {
    4949        // Si la première variable est un tableau, on va le convertir en class
    5050        if (is_array($nombre_colonnes)) {
    5151                $class= '';
    5252                foreach ($nombre_colonnes as $key => $value) {
     53                        // On va traiter le nombre de colonne avant de créer la class css
     54                        if (strpos($value, '*')) {
     55                                $calculer_colonnes = true; // L'étoile est détectée, on active les colonnes calculée
     56                                $value = str_replace('*', '', $value); // Supprimer l'étoile
     57                        }
     58
    5359                        // Utiliser un tableau large => 4
    5460                        if (is_numeric($value)) {
     61                                if (!is_null($total_boucle) and $calculer_colonnes) {
     62                                        $value = calculer_colonnes($value, $total_boucle);
     63                                }
     64
    5565                                $class .= $key.'-'.$value.' ';
    5666                        }
     
    5969        } else {
    6070                return $type.'-'.$nombre_colonnes.' ';
     71        }
     72}
     73
     74/**
     75 * Cette fonction va calculer le nombre de colonne et les limiter à $max
     76 *
     77 * @param int $max nombre maximum de colonne
     78 * @param int $total_boucle nombre d'élément dans la boucle
     79 * @access public
     80 * @return int
     81 */
     82function calculer_colonnes($max, $total_boucle) {
     83        if ($total_boucle >= $max) {
     84                return $max;
     85        } else {
     86                return 12/$total_boucle;
    6187        }
    6288}
     
    83109                        include_spip('inc/compresseur_minifier');
    84110
    85                         // traitement des fichiers, on concatène et minifie le tout
     111                // traitement des fichiers, on concatène et minifie le tout
    86112                        $foundation_js = concatener_fichiers($files);
    87113                        $foundation_js = minifier($foundation_js[0]);
Note: See TracChangeset for help on using the changeset viewer.