Browse Source

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.
svn/root/tags/v0.10.0
eric@smellup.net 3 years ago
parent
commit
98ba854b1d
  1. 1
      .gitattributes
  2. 0
      capsules/conteneur.html
  3. 22
      conteneur_compiler.html
  4. 6
      inc/ncore_type_noisette.php
  5. 59
      ncore_fonctions.php
  6. 3
      noisettes/conteneur.html
  7. 1
      noisettes/conteneur.yaml
  8. 2
      paquet.xml
  9. 81
      public/noisette_compiler.php
  10. 2
      public/noisette_repertorier.php

1
.gitattributes

@ -1,5 +1,6 @@
* text=auto !eol
/Guide[!!-~]N[!!-~]-[!!-~]Le[!!-~]plugin[!!-~]N-Core.pdf -text
/conteneur_compiler.html -text
/ncore-128.png -text
/ncore-16.png -text
/ncore-24.png -text

0
capsules/conteneur.html

22
compiler_conteneur.html → conteneur_compiler.html

@ -1,26 +1,22 @@
[(#REM) <!-- COMPILER_CONTENEUR
[(#REM) <!-- CONTENEUR_COMPILER
Compile les noisettes d'un conteneur fourni en paramètre de l'inclusion.
Utilise ensuite l'inclusion générique compiler_noisette.html.
Cette inclusion est utilisée pour compiler récursivement une noisette conteneur.
Elle peut être surchargée pour s'adapter au mieux au stockage du plugin utilisateur.
@api
@param string plugin
Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
@param array conteneur
Tableau associatif représentant le conteneur à compiler.
@param string defaut_balise
Valeur à utiliser si la noisette est paramétrée avec la valeur `defaut`.
@param array id_conteneur
Identifiant du conteneur.
@param string stockage
Identifiant du service de stockage à utiliser si précisé. Dans ce cas, ni celui du plugin
ni celui de N-Core ne seront utilisés. En général, cet identifiant est le préfixe d'un plugin
fournissant le service de stockage souhaité.
-->]
#SET{noisettes, #NOISETTE_REPERTORIER{#ENV{plugin}, #ENV{conteneur}, #ENV{stockage}}}
<INCLURE{fond=compiler_noisettes,
plugin=#ENV{plugin},
noisettes=#GET{noisettes},
defaut_balise=#ENV{defaut_balise}
stockage=#ENV{stockage},
env} />
#SET{noisettes, #NOISETTE_REPERTORIER{#ENV{plugin}, #ENV{id_conteneur}, #ENV{stockage}}}
<BOUCLE_noisette_conteneur(DATA) {source table, #ENV{noisettes, #ARRAY}}{plugin}{par rang_noisette}>
[(#NOISETTE_COMPILER{#VALEUR{id_noisette}, #ENV{stockage, ''}})]
</BOUCLE_noisette_conteneur>

6
inc/ncore_type_noisette.php

@ -143,10 +143,10 @@ function type_noisette_charger($plugin, $recharger = false, $stockage = '') {
$description['signature'] = $md5;
// Complétude de la description avec les valeurs par défaut
$description = array_merge($description_defaut, $description);
// Traitement spécifique d'un type de noisette conteneur : son contexte est toujours env et
// l'ajax et l'inclusion dynamique ne sont pas autorisés.
// Traitement spécifique d'un type de noisette conteneur : l'ajax et l'inclusion dynamique
// ne sont pas autorisés et le contexte est défini lors de l'encapsulation.
if ($description['conteneur'] == 'oui') {
$description['contexte'] = array('env');
$description['contexte'] = array();
$description['ajax'] = 'non';
$description['inclusion'] = 'statique';
}

59
ncore_fonctions.php

@ -126,7 +126,7 @@ function type_noisette_dynamiser($plugin, $type_noisette, $stockage = '') {
// On répertorie la configuration d'inclusion de toutes le types noisettes disponibles et on
// détermine si le type demandé est dynamique ou pas.
if ($inclusion_types_noisette = ncore_type_noisette_lister($plugin,'inclusion', $stockage)) {
if ($inclusion_types_noisette = ncore_type_noisette_lister($plugin, 'inclusion', $stockage)) {
foreach ($inclusion_types_noisette as $_type_noisette => $_inclusion) {
$est_dynamique[$plugin][$_type_noisette] = ($_inclusion == 'dynamique') ? true : false;
}
@ -294,22 +294,20 @@ function noisette_contextualiser($plugin, $noisette, $type_noisette, $environnem
* @param string $contenu
* Contenu compilé de la noisette en cours avant encapsulation.
* @param string $encapsulation
* Indicateur d'encapsulation du contenu par un capsule ou pas.
* @param string $css
* Styles à intégrer à la capsule.
* @param mixed $id_noisette
* Identifiant de la noisette.
* @param string $type_noisette
* Identifiant du type de noisette.
* Indicateur d'encapsulation du contenu par un capsule ou par une noisette conteneur. Prend les valeurs
* oui, non, defaut pour une capsule et conteneur pour une noisette conteneur.
* @param string $parametres
* Liste des paramètres de l'encapsulation. Pour une capsule, les index sont limités à type_noisette, id_noisette et
* css. Pour une noisette conteneur cette liste correspond au champ paramètres de la noisette et à son type.
* @param string $stockage
* Identifiant du service de stockage à utiliser si précisé. Dans ce cas, ni celui du plugin
* ni celui de N-Core ne seront utilisés. En général, cet identifiant est le préfixe d'un plugin
* fournissant le service de stockage souhaité.
*
* @return string
* Le contenu de la noisette encapsulé dans du HTML ou tel que fourni en entrée si pas d'encapsulation.
* Le contenu fourni encapsulé dans du HTML ou tel que fourni en entrée si pas d'encapsulation.
*/
function noisette_encapsuler($plugin, $contenu, $encapsulation, $css, $id_noisette, $type_noisette, $stockage = '') {
function noisette_encapsuler($plugin, $contenu, $encapsulation, $parametres, $stockage = '') {
// Initialisation du tableau du HTML des capsules indexé par plugin et nom de capsule.
static $defaut_encapsulation = array();
@ -319,29 +317,44 @@ function noisette_encapsuler($plugin, $contenu, $encapsulation, $css, $id_noiset
$defaut_encapsulation[$plugin] = ncore_noisette_initialiser_encapsulation($plugin);
}
if (($encapsulation != 'non') or (($encapsulation == 'defaut') and ($defaut_encapsulation[$plugin]))) {
// Une noisette conteneur peut être assimilée à une capsule qui englobe non pas une noisette mais un ensemble
// de noisettes. A ce titre, une noisette conteneur n'a jamais de capsule car elle est déjà une capsule.
if (($encapsulation == 'oui')
or ($encapsulation == 'conteneur')
or (($encapsulation == 'defaut') and ($defaut_encapsulation[$plugin]))) {
// Détermination de la capsule à appliquer
// On utilise soit la capsule propre à un type de noisette si elle existe, soit on utilise la capsule
// par défaut qui porte le nom 'dist'.
if (find_in_path("capsules/${type_noisette}.html")) {
$nom_capsule = $type_noisette;
$contexte_capsule = array('id_noisette' => $id_noisette, 'type_noisette' => $type_noisette, 'css' => $css);
if ($encapsulation == 'conteneur') {
// Noisette conteneur:
// La capsule est la noisette elle-même.
$fond_capsule = type_noisette_localiser($plugin, $parametres['type_noisette']);
} else {
$nom_capsule = 'dist';
// Capsule de noisette:
// On utilise soit la capsule propre au type de noisette si elle existe,
// soit on utilise la capsule générique pour toute noisette qui porte le nom 'dist',
// soit on utilise une pseudo-capsule qui englobe la noisette dans un div.
if (find_in_path("capsules/{$parametres['type_noisette']}.html")) {
$fond_capsule = "capsules/{$parametres['type_noisette']}";
} elseif (find_in_path('capsules/dist.html')) {
$fond_capsule = 'dist';
} else {
$fond_capsule = '';
}
}
// Si on veut insérer la capsule dist (cas le plus fréquent), on accélère le processus en évitant de
// faire systématiquement un appel à recuperer_fond(); on calcule la chaine par concaténation.
if ($nom_capsule == 'dist') {
// Si on veut insérer la pseudo-capsule (cas le plus fréquent), on accélère le processus en évitant de
// faire systématiquement un appel à recuperer_fond(): on construit le HTML.
// De fait, le fichier HTML de la pseudo-capsule n'existe pas et n'est donc pas surchargeable.
if (!$fond_capsule) {
$capsule =
'<div class="noisette noisette_' . $type_noisette . ($css ? " $css" : '') . '">
'<div class="noisette noisette_' . $parametres['type_noisette'] . ($parametres['css'] ? " {$parametres['css']}" : '') . '">
<!--noisettes-->
</div>';
} else {
$capsule = recuperer_fond("capsules/${nom_capsule}", $contexte_capsule);
$capsule = recuperer_fond($fond_capsule, $parametres);
}
// On insère le contenu de la noisette dans la capsule qui contient toujours une indication d'insertion explicite.
// On insère le contenu de la noisette dans la capsule ou la noisette conteneur qui contient toujours
// une indication d'insertion explicite.
$contenu = str_replace('<!--noisettes-->', $contenu, $capsule);
}

3
noisettes/conteneur.html

@ -0,0 +1,3 @@
[<(#ENV{balise_conteneur}) class="noisette[ noisette_(#ENV{type_noisette})"][ (#ENV{conteneur_css})"]>]
<!--noisettes-->
[</(#ENV{balise_conteneur})>]

1
noisettes/conteneur.yaml

@ -4,6 +4,7 @@ icon: 'conteneur-24.png'
conteneur: 'oui'
contexte: 'aucun'
ajax: 'non'
inclusion: 'statique'
parametres:
-
saisie: 'selection'

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="ncore"
categorie="outil"
version="0.5.2"
version="0.5.3"
etat="dev"
compatibilite="[3.2.0;3.2.*]"
logo="ncore-32.png"

81
public/noisette_compiler.php

@ -10,7 +10,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
/**
* Compile la balise `#NOISETTE_COMPILER` qui génère l'affichage de la noisette passée en argument.
* La signature de la balise est : `#CONTENEUR_IDENTIFIER{id_noisette[, stockage]}`.
* La signature de la balise est : `#NOISETTE_COMPILER{id_noisette[, stockage]}`.
*
* @balise
*
@ -39,24 +39,54 @@ function balise_NOISETTE_COMPILER_dist($p) {
$type_noisette = champ_sql('type_noisette', $p);
$est_conteneur = champ_sql('est_conteneur', $p);
$parametres = champ_sql('parametres', $p);
$encapsulation = champ_sql('encapsulation', $p);
$css = champ_sql('css', $p);
$plugin = champ_sql('plugin', $p);
// A-t-on demandé un stockage spécifique en paramètre de la balise ?
// Plugin et éventuel stockage spécifique
$plugin = champ_sql('plugin', $p);
$stockage = interprete_argument_balise(2, $p);
$stockage = isset($stockage) ? str_replace('\'', '"', $stockage) : '""';
// On récupère l'environnement
$environnement = "\$Pile[0]";
// Cas d'une noisette conteneur :
// - on ne compile pas la noisette conteneur mais on appelle la compilation des noisettes incluses (récursif),
// - et on applique systématiquement une encapsulation avec comme capsule la noisette conteneur elle-même.
// L'appel du fond conteneur_compiler pour le noisettes incluses est non ajaxé et l'environnement n'est pas fourni
// (seules les variables nécessaires à la détermination des noisettes incluses, à savoir, l'id du conteneur,
// le plugin et le stockage sont passées).
// Seule l'inclusion statique est possible pour l'appel à la compilation des noisettes incluses.
// L'encapsulation se fait en compilant la noisette conteneur avec ses paramètres et sans ajax.
$inclusion_statique_conteneur = "noisette_encapsuler(
$plugin,
recuperer_fond(
'conteneur_compiler',
array(
'plugin'=>$plugin,
'id_conteneur'=>calculer_identifiant_conteneur($plugin, $id_noisette, $type_noisette, $stockage),
'stockage'=>$stockage
),
array()
),
'conteneur',
array_merge(unserialize($parametres), array('type_noisette' => $type_noisette)),
$stockage
)";
// On prépare le code en fonction du type d'inclusion dynamique ou pas
$inclusion_dynamique = "\"<?php echo recuperer_fond(
\".type_noisette_localiser($plugin, $type_noisette).\",
\".var_export(array_merge(unserialize($parametres), noisette_contextualiser($plugin, $noisette, $type_noisette, $environnement, $stockage)),true).\",
\".var_export(array('ajax'=>(type_noisette_ajaxifier($plugin, $type_noisette, $stockage))),true).\"
// Cas d'une noisette 'non conteneur' :
// - on compile la noisette,
// - et on appelle l'encapsulation avec ses paramètres adéquates configurés pour la noisette (encapsulation, css, type)
$environnement = "\$Pile[0]";
$encapsulation = champ_sql('encapsulation', $p);
$css = champ_sql('css', $p);
$inclusion_dynamique_noisette = "\"<?php echo noisette_encapsuler(
\".$plugin.\",
recuperer_fond(
\".type_noisette_localiser($plugin, $type_noisette).\",
\".var_export(array_merge(unserialize($parametres), noisette_contextualiser($plugin, $noisette, $type_noisette, $environnement, $stockage)),true).\",
\".var_export(array('ajax'=>(type_noisette_ajaxifier($plugin, $type_noisette, $stockage))),true).\"
),
\".$encapsulation.\",
\".var_export(array('id_noisette' => $id_noisette, 'type_noisette' => $type_noisette, 'css' => $css)),true).\",
\".$stockage.\",
);?>\"";
$inclusion_statique = "noisette_encapsuler(
$inclusion_statique_noisette = "noisette_encapsuler(
$plugin,
recuperer_fond(
type_noisette_localiser($plugin, $type_noisette),
@ -64,15 +94,32 @@ function balise_NOISETTE_COMPILER_dist($p) {
array('ajax'=>(type_noisette_ajaxifier($plugin, $type_noisette, $stockage)))
),
$encapsulation,
$css,
$id_noisette,
$type_noisette,
array('id_noisette' => $id_noisette, 'type_noisette' => $type_noisette, 'css' => $css),
$stockage
)";
$code = "((type_noisette_dynamiser($plugin, $type_noisette, $stockage)) ? $inclusion_dynamique : $inclusion_statique)";
// Finaliser le code en choisissant le type d'inclusion. La fonction type_noisette_dynamiser() renvoie toujours
// false pour une noisette conteneur.
$code = "($est_conteneur == 'oui'
? $inclusion_statique_conteneur
: (type_noisette_dynamiser($plugin, $type_noisette, $stockage)
? $inclusion_dynamique_noisette
: $inclusion_statique_noisette))";
$p->code = "((!$id_noisette) ? _T('zbug_champ_hors_motif', array('champ'=>'ID_NOISETTE', 'motif'=>'NOISETTES')) : $code)";
$p->interdire_scripts = false;
return $p;
}
function calculer_identifiant_conteneur($plugin, $id_noisette, $type_noisette, $stockage) {
include_spip('ncore/ncore');
$id_conteneur = ncore_conteneur_identifier(
$plugin,
array('type_noisette' => $type_noisette, 'id_noisette' => $id_noisette),
$stockage
);
return $id_conteneur;
}

2
public/noisette_repertorier.php

@ -10,7 +10,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
/**
* Compile la balise `#NOISETTE_REPERTORIER` qui renvoie la liste des noisettes incluses dans un conteneur donné.
* La signature de la balise est : `#CONTENEUR_IDENTIFIER{plugin, conteneur[, stockage]}`.
* La signature de la balise est : `#NOISETTE_REPERTORIER{plugin, conteneur[, stockage]}`.
*
* @package SPIP\NCORE\NOISETTE\BALISE
* @balise

Loading…
Cancel
Save