Skip to content
Extraits de code Groupes Projets
Valider 82b8a08d rédigé par Fil's avatar Fil
Parcourir les fichiers

changements dans l'appel des modeles depuis le squelette : on ne peut plus...

changements dans l'appel des modeles depuis le squelette : on ne peut plus ecrire #TOTO mais #MODELE{toto} ; #EMBED_DOCUMENT est debuggue : on peut desormais lui appliquer des filtres, car seuls ses filtres contenant des = sont transformes en arguments
parent 1b457e83
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -33,7 +33,8 @@
<p><small>[(#DATE|nom_jour) ][(#DATE|affdate)][, <:par_auteur:> (#LESAUTEURS)]</small></p>
#ARTICLE_TRADUCTIONS
[(#REM) Inclure le modele des liens de traductions ]
#MODELE{article_traductions}
</div>
#DEBUT_SURLIGNE
......@@ -71,7 +72,6 @@
<li>
<div class="spip_doc_titre"><a href="#URL_DOCUMENT" title="<:bouton_telecharger:>" type="#MIME_TYPE">[(#TITRE|sinon{<:info_document:>})]</a> <small>(#TYPE_DOCUMENT[ - (#TAILLE|taille_en_octets)])</small></div>
[<div class="spip_doc_descriptif">(#DESCRIPTIF)</div>]</li>
<br class="nettoyeur" />
</BOUCLE_documents_joints>
</ul>
</div>
......
......@@ -20,10 +20,10 @@ style='[(#ENV{align}|match{^(left|right)$}|?{' '})float:#ENV{align};] (#ENV{alig
][(#EXTENSION|match{^(rm|ram|ra)$}|?{' '})
[(#ENV{controls,''}|?{'',' '})
<div>
[(#EMB{controls=ImageWindow,type=audio/x-pn-realaudio-plugin,console=Console#ID_DOCUMENT,nojava=true})]
[(#MODELE{emb,controls=ImageWindow,type=audio/x-pn-realaudio-plugin,console=Console#ID_DOCUMENT,nojava=true})]
</div>
[(#EMB{controls=PlayButton,type=audio/x-pn-realaudio-plugin,console=Console#ID_DOCUMENT,nojava=true})]
[(#EMB{controls=PositionSlider,type=audio/x-pn-realaudio-plugin,console=Console#ID_DOCUMENT,nojava=true})]
[(#MODELE{emb,controls=PlayButton,type=audio/x-pn-realaudio-plugin,console=Console#ID_DOCUMENT,nojava=true})]
[(#MODELE{emb,controls=PositionSlider,type=audio/x-pn-realaudio-plugin,console=Console#ID_DOCUMENT,nojava=true})]
#SET{done,1}
]
][(#EXTENSION|=={swf}|?{' '})
......
......@@ -462,14 +462,48 @@ function calculer_balise_expose($p, $on, $off)
//
// Inserer directement un document dans le squelette
// devient un alias de #EMB
// devient un alias de #MODELE{emb}
//
// On insere simplement un argument {emb} en debut de liste
//
// Attention la syntaxe est derogatoire : il faut donc attraper
// tous les faux-filtres "|autostart=true" et les transformer
// en arguments "{autostart=true}"
//
// On s'arrete au premier filtre ne contenant pas de =, afin de
// pouvoir filtrer le resultat
//
// http://doc.spip.org/@balise_EMBED_DOCUMENT_dist
function balise_EMBED_DOCUMENT_dist($p) {
balise_distante_interdite($p);
if (!function_exists($f = 'calculer_balise_modele'))
$f = 'calculer_balise_modele_dist';
$p->nom_champ = 'emb';
if (!is_array($p->param))
$p->param=array();
// Produire le premier argument {emb}
$texte = new Texte;
$texte->type='texte';
$texte->texte='emb';
$param = array(0=>NULL, 1=>array(0=>$texte));
array_unshift($p->param, $param);
// Transformer les filtres en arguments
for ($i=1; $i<count($p->param); $i++) {
if ($p->param[$i][0]) {
if (!strstr($p->param[$i][0], '='))
break;# on a rencontre un vrai filtre, c'est fini
$texte = new Texte;
$texte->type='texte';
$texte->texte=$p->param[$i][0];
$param = array(0=>$texte);
$p->param[$i][1] = $param;
$p->param[$i][0] = NULL;
}
}
// Appeler la balise #MODELE{emb}{arguments}
if (!function_exists($f = 'balise_modele'))
$f = 'balise_modele_dist';
return $f($p);
}
......@@ -1234,6 +1268,53 @@ function balise_INCLURE_dist($p) {
return $p;
}
// Inclure un modele : #MODELE{modele, params}
function balise_MODELE_dist($p) {
$contexte = array();
// recupere le premier argument, qui est obligatoirement le nom du modele
if (!is_array($p->param))
die("erreur de compilation #MODELE{nom du modele}");
$modele = array_shift($p->param);
$nom = strtolower($modele[1][0]->texte);
if (!$nom)
die("erreur de compilation #MODELE{nom du modele}");
// Transforme l'ecriture du deuxieme param {truc=chose,machin=chouette} en
// {truc=chose}{machin=chouette}... histoire de simplifier l'ecriture pour
// le webmestre : #MODELE{emb}{autostart=true,truc=1,chose=chouette}
if ($p->param[0]) {
while (count($p->param[0])>2){
$p->param[]=array(0=>NULL,1=>array_pop($p->param[0]));
}
}
$champ = phraser_arguments_inclure($p, true);
// a priori true
// si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise
// si true, les arguments simples (sans truc=chose) vont degager
$code_contexte = argumenter_inclure($champ, $p->descr, $p->boucles, $p->id_boucle, false);
// Si le champ existe dans la pile, on le met dans le contexte
// (a priori c'est du code mort ; il servait pour #LESAUTEURS dans
// le cas spip_syndic_articles)
#$code_contexte[] = "'$nom='.".champ_sql($nom, $p);
// Reserver la cle primaire de la boucle courante
if ($primary = $p->boucles[$p->id_boucle]->primary) {
$id = champ_sql($primary, $p);
$code_contexte[] = "'$primary='.".$id;
}
$p->code = "( ((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))<5)?
recuperer_fond('modeles/".$nom."',
creer_contexte_de_modele(array(".join(',', $code_contexte).",'recurs='.(++\$recurs), \$GLOBALS['spip_lang']))):'')";
$p->interdire_scripts = false; // securite assuree par le squelette
return $p;
}
//
// #SET
// Affecte une variable locale au squelette
......
......@@ -205,6 +205,8 @@ function calculer_balise($nom, $p) {
return $res;
}
/*
// appel direct des modeles, remplace par #MODELE{article_traductions}
// S'agit-t-il d'un modele ?
if (find_in_path('modeles/'.strtolower($nom).'.html')) {
if (!function_exists($f = 'calculer_balise_modele')) $f .= '_dist';
......@@ -212,6 +214,7 @@ function calculer_balise($nom, $p) {
if ($res !== NULL)
return $res;
}
*/
// S'agit-il d'un logo ? Une fonction speciale les traite tous
if (ereg('^LOGO_', $nom)) {
......@@ -251,6 +254,9 @@ function calculer_balise($nom, $p) {
return $p;
}
/*
L'appel direct de #ARTICLE_TRADUCTIONS devient #MODELE{article_traductions}
// fonction speciale d'appel a un modele modeles/truc.html pour la balise #TRUC
// exemples : #TRADUCTIONS, #DOC, #IMG...
......@@ -264,6 +270,7 @@ function calculer_balise_modele_dist($p){
$p->param[]=array($p->param[0][0],array_pop($p->param[0]));
}
}
print_r($p->param);
$champ = phraser_arguments_inclure($p, true);
// a priori true
// si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise
......@@ -288,8 +295,11 @@ function calculer_balise_modele_dist($p){
creer_contexte_de_modele(array(".join(',', $code_contexte).",'recurs='.++\$recurs, \$GLOBALS['spip_lang']))):'')";
$p->interdire_scripts = false; // securite assuree par le squelette
print $p->code."\n<hr/>\n";
return $p;
}
*/
//
// Traduction des balises dynamiques, notamment les "formulaire_*"
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter