Changeset 112777 in spip-zone


Ignore:
Timestamp:
Dec 13, 2018, 5:02:42 PM (5 weeks ago)
Author:
root
Message:

Sauvegarde intermédiaire ne pas faire d'upgrade pour le moment !!!
Cette version intègre la mise en place de l'encapsulation avec dist et div de base ainsi que l'intégration de la compilation des noisettes conteneur dans la balise et non plus dans la boucle d'appel.
Forçage de l'ajax à non et de l'inclusion à statique pour les noisettes conteneur.
Cela reste à tester avec une prochaine mise à jour du noiZetier.

Location:
_plugins_/n-core/trunk
Files:
1 added
2 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/n-core/trunk/inc/ncore_type_noisette.php

    r112626 r112777  
    144144                                // Complétude de la description avec les valeurs par défaut
    145145                                $description = array_merge($description_defaut, $description);
    146                                 // Traitement spécifique d'un type de noisette conteneur : son contexte est toujours env et
    147                                 // l'ajax et l'inclusion dynamique ne sont pas autorisés.
     146                                // Traitement spécifique d'un type de noisette conteneur : l'ajax et l'inclusion dynamique
     147                                // ne sont pas autorisés et le contexte est défini lors de l'encapsulation.
    148148                                if ($description['conteneur'] == 'oui') {
    149                                         $description['contexte'] = array('env');
     149                                        $description['contexte'] = array();
    150150                                        $description['ajax'] = 'non';
    151151                                        $description['inclusion'] = 'statique';
  • _plugins_/n-core/trunk/ncore_fonctions.php

    r112732 r112777  
    127127                        // On répertorie la configuration d'inclusion de toutes le types noisettes disponibles et on
    128128                        // détermine si le type demandé est dynamique ou pas.
    129                         if ($inclusion_types_noisette = ncore_type_noisette_lister($plugin,'inclusion', $stockage)) {
     129                        if ($inclusion_types_noisette = ncore_type_noisette_lister($plugin, 'inclusion', $stockage)) {
    130130                                foreach ($inclusion_types_noisette as $_type_noisette => $_inclusion) {
    131131                                        $est_dynamique[$plugin][$_type_noisette] = ($_inclusion == 'dynamique') ? true : false;
     
    295295 *        Contenu compilé de la noisette en cours avant encapsulation.
    296296 * @param string $encapsulation
    297  *            Indicateur d'encapsulation du contenu par un capsule ou pas.
    298  * @param string $css
    299  *            Styles à intégrer à la capsule.
    300  * @param mixed  $id_noisette
    301  *            Identifiant de la noisette.
    302  * @param string $type_noisette
    303  *            Identifiant du type de noisette.
     297 *            Indicateur d'encapsulation du contenu par un capsule ou par une noisette conteneur. Prend les valeurs
     298 *        oui, non, defaut pour une capsule et conteneur pour une noisette conteneur.
     299 * @param string $parametres
     300 *            Liste des paramètres de l'encapsulation. Pour une capsule, les index sont limités à type_noisette, id_noisette et
     301 *        css. Pour une noisette conteneur cette liste correspond au champ paramètres de la noisette et à son type.
    304302 * @param string $stockage
    305303 *        Identifiant du service de stockage à utiliser si précisé. Dans ce cas, ni celui du plugin
     
    308306 *
    309307 * @return string
    310  *              Le contenu de la noisette encapsulé dans du HTML ou tel que fourni en entrée si pas d'encapsulation.
    311  */
    312 function noisette_encapsuler($plugin, $contenu, $encapsulation, $css, $id_noisette, $type_noisette, $stockage = '') {
     308 *              Le contenu fourni encapsulé dans du HTML ou tel que fourni en entrée si pas d'encapsulation.
     309 */
     310function noisette_encapsuler($plugin, $contenu, $encapsulation, $parametres, $stockage = '') {
    313311
    314312        // Initialisation du tableau du HTML des capsules indexé par plugin et nom de capsule.
     
    320318        }
    321319
    322         if (($encapsulation != 'non') or (($encapsulation == 'defaut') and ($defaut_encapsulation[$plugin]))) {
     320        // Une noisette conteneur peut être assimilée à une capsule qui englobe non pas une noisette mais un ensemble
     321        // de noisettes. A ce titre, une noisette conteneur n'a jamais de capsule car elle est déjà une capsule.
     322        if (($encapsulation == 'oui')
     323        or ($encapsulation == 'conteneur')
     324        or (($encapsulation == 'defaut') and ($defaut_encapsulation[$plugin]))) {
    323325                // Détermination de la capsule à appliquer
    324                 // On utilise soit la capsule propre à un type de noisette si elle existe, soit on utilise la capsule
    325                 // par défaut qui porte le nom 'dist'.
    326                 if (find_in_path("capsules/${type_noisette}.html")) {
    327                         $nom_capsule = $type_noisette;
    328                         $contexte_capsule = array('id_noisette' => $id_noisette, 'type_noisette' => $type_noisette, 'css' => $css);
     326                if ($encapsulation == 'conteneur') {
     327                        // Noisette conteneur:
     328                        // La capsule est la noisette elle-même.
     329                        $fond_capsule = type_noisette_localiser($plugin, $parametres['type_noisette']);
    329330                } else {
    330                         $nom_capsule = 'dist';
    331                 }
    332 
    333                 // Si on veut insérer la capsule dist (cas le plus fréquent), on accélère le processus en évitant de
    334                 // faire systématiquement un appel à recuperer_fond(); on calcule la chaine par concaténation.
    335                 if ($nom_capsule == 'dist') {
     331                        // Capsule de noisette:
     332                        // On utilise soit la capsule propre au type de noisette si elle existe,
     333                        // soit on utilise la capsule générique pour toute noisette qui porte le nom 'dist',
     334                        // soit on utilise une pseudo-capsule qui englobe la noisette dans un div.
     335                        if (find_in_path("capsules/{$parametres['type_noisette']}.html")) {
     336                                $fond_capsule = "capsules/{$parametres['type_noisette']}";                             
     337                        } elseif (find_in_path('capsules/dist.html')) {
     338                                $fond_capsule = 'dist';                         
     339                        } else {
     340                                $fond_capsule = '';
     341                        }
     342                }
     343
     344                // Si on veut insérer la pseudo-capsule (cas le plus fréquent), on accélère le processus en évitant de
     345                // faire systématiquement un appel à recuperer_fond(): on construit le HTML.
     346                // De fait, le fichier HTML de la pseudo-capsule n'existe pas et n'est donc pas surchargeable.
     347                if (!$fond_capsule) {
    336348                        $capsule =
    337 '<div class="noisette noisette_' . $type_noisette . ($css ? " $css" : '') . '">
     349'<div class="noisette noisette_' . $parametres['type_noisette'] . ($parametres['css'] ? " {$parametres['css']}" : '') . '">
    338350        <!--noisettes-->
    339351</div>';
    340352                } else {
    341                         $capsule = recuperer_fond("capsules/${nom_capsule}", $contexte_capsule);
    342                 }
    343 
    344                 // On insère le contenu de la noisette dans la capsule qui contient toujours une indication d'insertion explicite.
     353                        $capsule = recuperer_fond($fond_capsule, $parametres);
     354                }
     355
     356                // On insère le contenu de la noisette dans la capsule ou la noisette conteneur qui contient toujours
     357                // une indication d'insertion explicite.
    345358                $contenu = str_replace('<!--noisettes-->', $contenu, $capsule);
    346359        }
  • _plugins_/n-core/trunk/noisettes/conteneur.html

    r110217 r112777  
     1[<(#ENV{balise_conteneur}) class="noisette[ noisette_(#ENV{type_noisette})"][ (#ENV{conteneur_css})"]>]
     2        <!--noisettes-->
     3[</(#ENV{balise_conteneur})>]
  • _plugins_/n-core/trunk/noisettes/conteneur.yaml

    r109993 r112777  
    55contexte: 'aucun'
    66ajax: 'non'
     7inclusion: 'statique'
    78parametres:
    89  -
  • _plugins_/n-core/trunk/paquet.xml

    r112732 r112777  
    22        prefix="ncore"
    33        categorie="outil"
    4         version="0.5.2"
     4        version="0.5.3"
    55        etat="dev"
    66        compatibilite="[3.2.0;3.2.*]"
  • _plugins_/n-core/trunk/public/noisette_compiler.php

    r112725 r112777  
    1111/**
    1212 * Compile la balise `#NOISETTE_COMPILER` qui génère l'affichage de la noisette passée en argument.
    13  * La signature de la balise est : `#CONTENEUR_IDENTIFIER{id_noisette[, stockage]}`.
     13 * La signature de la balise est : `#NOISETTE_COMPILER{id_noisette[, stockage]}`.
    1414 *
    1515 * @balise
     
    4040        $est_conteneur = champ_sql('est_conteneur', $p);
    4141        $parametres = champ_sql('parametres', $p);
    42         $encapsulation = champ_sql('encapsulation', $p);
    43         $css = champ_sql('css', $p);
     42
     43        // Plugin et éventuel stockage spécifique
    4444        $plugin = champ_sql('plugin', $p);
    45 
    46         // A-t-on demandé un stockage spécifique en paramètre de la balise ?
    4745        $stockage = interprete_argument_balise(2, $p);
    4846        $stockage = isset($stockage) ? str_replace('\'', '"', $stockage) : '""';
    4947
    50         // On récupère l'environnement
     48        // Cas d'une noisette conteneur :
     49        // - on ne compile pas la noisette conteneur mais on appelle la compilation des noisettes incluses (récursif),
     50        // - et on applique systématiquement une encapsulation avec comme capsule la noisette conteneur elle-même.
     51        // L'appel du fond conteneur_compiler pour le noisettes incluses est non ajaxé et l'environnement n'est pas fourni
     52        // (seules les variables nécessaires à la détermination des noisettes incluses, à savoir, l'id du conteneur,
     53        // le plugin et le stockage sont passées).
     54        // Seule l'inclusion statique est possible pour l'appel à la compilation des noisettes incluses.
     55        // L'encapsulation se fait en compilant la noisette conteneur avec ses paramètres et sans ajax.
     56        $inclusion_statique_conteneur = "noisette_encapsuler(
     57                $plugin,
     58                recuperer_fond(
     59                        'conteneur_compiler',
     60                        array(
     61                                'plugin'=>$plugin,
     62                                'id_conteneur'=>calculer_identifiant_conteneur($plugin, $id_noisette, $type_noisette, $stockage),
     63                                'stockage'=>$stockage
     64                        ),
     65                        array()
     66                ),
     67                'conteneur',
     68                array_merge(unserialize($parametres), array('type_noisette' => $type_noisette)),
     69                $stockage
     70        )";
     71
     72        // Cas d'une noisette 'non conteneur' :
     73        // - on compile la noisette,
     74        // - et on appelle l'encapsulation avec ses paramètres adéquates configurés pour la noisette (encapsulation, css, type)
    5175        $environnement = "\$Pile[0]";
    52 
    53         // On prépare le code en fonction du type d'inclusion dynamique ou pas
    54         $inclusion_dynamique = "\"<?php echo recuperer_fond(
    55                 \".type_noisette_localiser($plugin, $type_noisette).\",
    56                 \".var_export(array_merge(unserialize($parametres), noisette_contextualiser($plugin, $noisette, $type_noisette, $environnement, $stockage)),true).\",
    57                 \".var_export(array('ajax'=>(type_noisette_ajaxifier($plugin, $type_noisette, $stockage))),true).\"
     76        $encapsulation = champ_sql('encapsulation', $p);
     77        $css = champ_sql('css', $p);
     78        $inclusion_dynamique_noisette = "\"<?php echo noisette_encapsuler(
     79                \".$plugin.\",
     80                recuperer_fond(
     81                        \".type_noisette_localiser($plugin, $type_noisette).\",
     82                        \".var_export(array_merge(unserialize($parametres), noisette_contextualiser($plugin, $noisette, $type_noisette, $environnement, $stockage)),true).\",
     83                        \".var_export(array('ajax'=>(type_noisette_ajaxifier($plugin, $type_noisette, $stockage))),true).\"
     84                ),
     85                \".$encapsulation.\",
     86                \".var_export(array('id_noisette' => $id_noisette, 'type_noisette' => $type_noisette, 'css' => $css)),true).\",
     87                \".$stockage.\",
    5888        );?>\"";
    59         $inclusion_statique = "noisette_encapsuler(
     89        $inclusion_statique_noisette = "noisette_encapsuler(
    6090                $plugin,
    6191                recuperer_fond(
     
    6595                ),
    6696                $encapsulation,
    67                 $css,
    68                 $id_noisette,
    69                 $type_noisette,
     97                array('id_noisette' => $id_noisette, 'type_noisette' => $type_noisette, 'css' => $css),
    7098                $stockage
    7199        )";
    72         $code = "((type_noisette_dynamiser($plugin, $type_noisette, $stockage)) ? $inclusion_dynamique : $inclusion_statique)";
    73100
     101        // Finaliser le code en choisissant le type d'inclusion. La fonction type_noisette_dynamiser() renvoie toujours
     102        // false pour une noisette conteneur.
     103        $code = "($est_conteneur == 'oui'
     104                ? $inclusion_statique_conteneur
     105                : (type_noisette_dynamiser($plugin, $type_noisette, $stockage)
     106                        ? $inclusion_dynamique_noisette
     107                        : $inclusion_statique_noisette))";
    74108        $p->code = "((!$id_noisette) ? _T('zbug_champ_hors_motif', array('champ'=>'ID_NOISETTE', 'motif'=>'NOISETTES')) : $code)";
    75109        $p->interdire_scripts = false;
     
    77111        return $p;
    78112}
     113
     114
     115function calculer_identifiant_conteneur($plugin, $id_noisette, $type_noisette, $stockage) {
     116
     117        include_spip('ncore/ncore');
     118        $id_conteneur = ncore_conteneur_identifier(
     119                $plugin,
     120                array('type_noisette' => $type_noisette, 'id_noisette' => $id_noisette),
     121                $stockage
     122        );
     123
     124        return $id_conteneur;
     125}
  • _plugins_/n-core/trunk/public/noisette_repertorier.php

    r110859 r112777  
    1111/**
    1212 * Compile la balise `#NOISETTE_REPERTORIER` qui renvoie la liste des noisettes incluses dans un conteneur donné.
    13  * La signature de la balise est : `#CONTENEUR_IDENTIFIER{plugin, conteneur[, stockage]}`.
     13 * La signature de la balise est : `#NOISETTE_REPERTORIER{plugin, conteneur[, stockage]}`.
    1414 *
    1515 * @package SPIP\NCORE\NOISETTE\BALISE
Note: See TracChangeset for help on using the changeset viewer.