Skip to content
Extraits de code Groupes Projets
Valider 3dd6f1b6 rédigé par esj's avatar esj
Parcourir les fichiers

Multibase: #716 ayant prémonitoirement demandé le multi-squelette suggéré dans...

Multibase: #716 ayant prémonitoirement demandé le multi-squelette suggéré dans [10113], le présent dépot (aidé de [10133] et [10138]) le réalise en deux coups de cuillère à Post. A présent, si on appelle une page avec un variable d'URL nommé '''connect''', SPIP considèrera qu'il doit utiliser non pas la base principale, mais celle indiquée par par l'entrée du tableau '''connexions''' indexée par la valeur du paramètre '''connect'''. Rappelons que tout fichier '''config/connect'''X'''.php''' garni l'entrée X du tableau '''connexions'''. Dans cette situation, les boucles des squelettes utilisés pour produire la page seront implicitement préfixées par la connexion demandée: {{{<BOUCLE(T) ...}}} sera vue comme {{{<BOUCLE(X:T) ...}}} quand l'URL comporte {{{&connect=X}}}.

Aspects techniques

La compilation d'un squelette produira autant de fichier dans tmp/cache/skel que d'application à des bases différentes. Il y aurait moyen de faire un plus compact, mais avec une petite chute de performances. On sacrifie donc l'espace au temps, ça ne semble pas un problème vu la taille usuelle d'un squelette compilé.

Les différences entre les compilations d'un même squelettes proviennent des balises #URL_* et assimilées. Il y aura peut-etre une petite réorganisation des fonctions sur les balises et les critères à opérer pour gérer ça plus astucieusement.
parent 6a02a850
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -672,9 +672,8 @@ function code_boucle(&$boucles, $id, $nom)
// En cas d'erreur, elle retourne un tableau des 2 premiers elements seulement
// http://doc.spip.org/@public_compiler_dist
function public_compiler_dist($squelette, $nom, $gram, $sourcefile) {
global $table_des_tables, $tables_des_serveurs_sql, $tables_principales, $tables_auxiliaires,
$tables_jointures;
function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect=''){
global $table_des_tables, $tables_des_serveurs_sql, $tables_principales, $tables_auxiliaires, $tables_jointures;
// Pre-traitement : reperer le charset du squelette, et le convertir
// Bonus : supprime le BOM
......@@ -703,6 +702,8 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile) {
foreach($boucles as $id => $boucle) {
$type = $boucle->type_requete;
if ($type != 'boucle') {
if (!$boucles[$id]->sql_serveur AND $connect)
$boucles[$id]->sql_serveur = $connect;
$show = trouver_table($type, $boucles[$id]);
if ($show) {
$nom_table = $show['table'];
......@@ -805,7 +806,8 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile) {
$code . '
//
// Fonction principale du squelette ' . $sourcefile ."
// Fonction principale du squelette ' . $sourcefile .
($connect ? " pour $connect" : '') . ".
//
function " . $nom . '($Cache, $Pile, $doublons=array(), $Numrows=array(), $SP=0) {
$page = ' .
......
......@@ -29,9 +29,10 @@ include_spip('public/debug'); # toujours prevoir le pire
# Toutefois pour 2. et 3. preferer la technique de la surcharge
// http://doc.spip.org/@public_composer_dist
function public_composer_dist($squelette, $mime_type, $gram, $sourcefile) {
function public_composer_dist($squelette, $mime_type, $gram, $source) {
$nom = $mime_type . '_' . md5($squelette);
$connect = _request('connect');
$nom = $mime_type . ($connect ? "_$connect" : '') . '_' . md5($squelette);
// si squelette est deja en memoire (INCLURE a repetition)
if (function_exists($nom))
......@@ -40,7 +41,7 @@ function public_composer_dist($squelette, $mime_type, $gram, $sourcefile) {
$phpfile = sous_repertoire(_DIR_SKELS,'',false,true) . $nom . '.php';
// si squelette est deja compile et perenne, le charger
if (!squelette_obsolete($phpfile, $sourcefile)
if (!squelette_obsolete($phpfile, $source)
AND lire_fichier ($phpfile, $contenu,
array('critique' => 'oui', 'phpcheck' => 'oui')))
eval('?'.'>'.$contenu);
......@@ -55,9 +56,9 @@ function public_composer_dist($squelette, $mime_type, $gram, $sourcefile) {
if (function_exists($nom)) return $nom;
// charger le source, si possible, et compiler
if (lire_fichier ($sourcefile, $skel)) {
if (lire_fichier ($source, $skel)) {
$compiler = charger_fonction('compiler', 'public');
$skel_code = $compiler($skel, $nom, $gram, $sourcefile);
$skel_code = $compiler($skel, $nom, $gram, $source, $connect);
}
// Tester si le compilateur renvoie une erreur
......@@ -72,7 +73,7 @@ function public_composer_dist($squelette, $mime_type, $gram, $sourcefile) {
ecrire_fichier ($phpfile, $skel_code);
return $nom;
} else {
erreur_squelette(_T('zbug_erreur_compilation'), $sourcefile);
erreur_squelette(_T('zbug_erreur_compilation'), $source);
}
}
}
......
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