From 428896941ffa18be1a2838e54157f7aec7417e1c Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Thu, 24 Apr 2008 14:06:33 +0000 Subject: [PATCH] support d'ajax avec les ecritures #MODELE{truc,ajax} <truc|ajax> Au passage, les parametres a valeur implicite sont acceptes dans les modeles : par exemple : <embxx|autostart> est equivalent a <embxx|autostart=autostart> --- ecrire/public/assembler.php | 13 +++++++++++-- ecrire/public/balises.php | 9 ++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php index 73550b72b6..96e978d0bc 100644 --- a/ecrire/public/assembler.php +++ b/ecrire/public/assembler.php @@ -658,6 +658,8 @@ function creer_contexte_de_modele($args) { $args = explode('=', $val); if (count($args)>=2) // Flashvars=arg1=machin&arg2=truc genere plus de deux args $contexte[trim($args[0])] = substr($val,strlen($args[0])+1); + else // notation abregee + $contexte[trim($val)] = trim($val); } } else @@ -682,7 +684,7 @@ function inclure_modele($type, $id, $params, $lien, $connect='') { list(,$soustype) = each($params); $soustype = strtolower($soustype); if (in_array($soustype, - array('left', 'right', 'center'))) { + array('left', 'right', 'center', 'ajax'))) { list(,$soustype) = each($params); $soustype = strtolower($soustype); } @@ -693,6 +695,8 @@ function inclure_modele($type, $id, $params, $lien, $connect='') { $fond = 'modeles/'.$type; $class = $soustype; } + // enlever le sous type des params + $params = array_diff($params,array($soustype)); } } @@ -739,6 +743,11 @@ function inclure_modele($type, $id, $params, $lien, $connect='') { // Traiter les parametres // par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en> $arg_list = creer_contexte_de_modele($params); + if (isset($arg_list['ajax']) && $arg_list['ajax']=='ajax'){ + $contexte['fond_ajax']=$contexte['fond']; + $contexte['fond']='fond/ajax'; + unset($arg_list['ajax']); + } $contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args $contexte = array_merge($contexte,$arg_list); @@ -752,7 +761,7 @@ function inclure_modele($type, $id, $params, $lien, $connect='') { $GLOBALS['compt_note'] = 0; // Appliquer le modele avec le contexte - $page = evaluer_fond($fond, $contexte, array(), $connect); + $page = evaluer_fond($contexte['fond'], $contexte, array(), $connect); $retour = trim($page['texte']); // Lever un drapeau (global) si le modele utilise #SESSION diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php index 0f083ee81a..e92464df55 100644 --- a/ecrire/public/balises.php +++ b/ecrire/public/balises.php @@ -1127,12 +1127,19 @@ function balise_MODELE_dist($p) { if (!$nom) die("erreur de compilation #MODELE{nom du modele}"); + $nom = "modeles/".$nom; $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); + // Gerer ajax + if (isset($code_contexte['ajax'])){ + $code_contexte['fond_ajax'] = "'fond_ajax' => '$nom'"; + $nom = 'fond/ajax_stat'; + unset($_contexte['ajax']); + } // 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 @@ -1150,7 +1157,7 @@ function balise_MODELE_dist($p) { $connect = $p->boucles[$p->id_boucle]->sql_serveur; $p->code = "( ((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))<5)? - recuperer_fond('modeles/".$nom."', + recuperer_fond('$nom', creer_contexte_de_modele(array(".join(',', $code_contexte).",'recurs='.(++\$recurs), \$GLOBALS['spip_lang'])), true, " . sql_quote($connect) . "):'')"; $p->interdire_scripts = false; // securite assuree par le squelette -- GitLab