! [spip-dev] Inclure avec tout le contexte : critère {env}

New Revision: 8825

introduction de la notation <INCLURE{fond=truc}{env}> qui passe tout
l'environnement de la page incluante a la page incluse ; au passage j'ai
nettoye plusieurs facilites dans le debugueur, la pagination etc, qui
devenaient des bugs si on creusait un peu (notamment : avec #INCLURE le
contexte affiche par le debugueur etait celui de la page incluante)

Ca fonctionne aussi avec #INCLURE.

Si on précise des variables, ça les prend de préférence à celles du contexte
par défaut ; par exemple

        <INCLURE{fond=gribouille/rubrique}{env}{lang=en}>

incluera gribouille/rubrique en lui passant les {id_rubrique} et
{debut_pages} du contexte incluant (de l'URL, autrement dit), mais en
forçant la langue anglaise même si l'url a un ?lang=fr.

-- Fil

introduction de la notation <INCLURE{fond=truc}{env}> qui passe tout
l'environnement de la page incluante a la page incluse ;

Y compris la pile de doublons, par exemple ?

-Nicolas

> introduction de la notation <INCLURE{fond=truc}{env}> qui passe tout
> l'environnement de la page incluante a la page incluse ;

Y compris la pile de doublons, par exemple ?

Non, ça ne transmet que ce qui est dans le #ENV de la page incluante (son
$Pile[0]).

-- Fil

Y compris la pile de doublons, par exemple ?

Non, ça ne transmet que ce qui est dans le #ENV de la page incluante (son
$Pile[0]).

OK, merci.

-Nicolas

> introduction de la notation <INCLURE{fond=truc}{env}> qui
passe tout
> l'environnement de la page incluante a la page incluse ;

Et le cache du squelette inclus est généré pour chaque tableau de paramètres
?

Y compris la pile de doublons, par exemple ?

9a serait catastrophique, mais on pourrait envisager une écriture
<INCLURE{fond=truc}{env}{articles:doublons [nomme]}> ? Articles permet
d'indiquer de quel type de contenu on se passe le doublons.

> > introduction de la notation <INCLURE{fond=truc}{env}> qui passe tout
> > l'environnement de la page incluante a la page incluse ;

Et le cache du squelette inclus est généré pour chaque tableau de paramètres ?

Pour <INCLURE{env}> bien sûr, c'est le prix à payer ; pour Gribouille
j'utilise #INCLURE{env} : jje mets dans squelettes/ deux fichiers :

article-607.html
        [(#INCLURE{fond=gribouille/article}{env})]

rubrique-607.html
        [(#INCLURE{fond=gribouille/rubrique}{env})]

et le répertoire gribouille doit se trouver dans le chemin (par exemple
nstallé comme sous-répertoire de squelettes/ )

> Y compris la pile de doublons, par exemple ?

9a serait catastrophique, mais on pourrait envisager une écriture
<INCLURE{fond=truc}{env}{articles:doublons [nomme]}> ? Articles permet
d'indiquer de quel type de contenu on se passe le doublons.

Les doublons et l'INCLURE c'est une autre affaire, à traiter séparément. Y
a-t-il un ticket ?

-- Fil

Fil a écrit :

New Revision: 8825

introduction de la notation <INCLURE{fond=truc}{env}> qui passe tout
l'environnement de la page incluante a la page incluse ; au passage j'ai
nettoye plusieurs facilites dans le debugueur, la pagination etc, qui
devenaient des bugs si on creusait un peu (notamment : avec #INCLURE le
contexte affiche par le debugueur etait celui de la page incluante)

Ca fonctionne aussi avec #INCLURE.
  

Par contre une boucle paginée dans un squelette inclus fonctionnait sans difficulté en faisant simplement
<INCLURE{fond=..}{self=#SELF}>
ou même simplement sans cache

Ce qui ne sera plus le cas, il faudra explicitement passer {debut_xx} ou {env} dans le INCLURE.
D'où une cassure de compatibilité des squelettes existant.
C'est anecdotique quand on a une seule boucle paginée, moins quand on a des inclusions en cascades et des boucles paginées au 2eme ou 3eme niveau d'inclusion.
Cedric

Par contre une boucle paginée dans un squelette inclus fonctionnait sans
difficulté en faisant simplement
<INCLURE{fond=..}{self=#SELF}>
ou même simplement sans cache

C'est {self=#SELF} qui est obsolète ; on pourrait le mapper sur {env} pour
restaurer cette compatibilité ascendante.

des inclusions en cascades et des boucles paginées au 2eme ou 3eme
niveau d'inclusion.

Il est fou :slight_smile:

-- Fil

Fil a écrit :

New Revision: 8825

introduction de la notation <INCLURE{fond=truc}{env}> qui passe tout
l'environnement de la page incluante a la page incluse ; au passage j'ai
nettoye plusieurs facilites dans le debugueur, la pagination etc, qui
devenaient des bugs si on creusait un peu (notamment : avec #INCLURE le
contexte affiche par le debugueur etait celui de la page incluante)
  

cool !

Est-il prevu que ca redescende en branche 1.9.2 ou non ?

merci.

@++

Fil a écrit :

Par contre une boucle paginée dans un squelette inclus fonctionnait sans difficulté en faisant simplement
<INCLURE{fond=..}{self=#SELF}>
ou même simplement sans cache
    
C'est {self=#SELF} qui est obsolète ; on pourrait le mapper sur {env} pour
restaurer cette compatibilité ascendante.
  

ah oui ça serait bien je pense, ça sauverais les squelettes.

des inclusions en cascades et des boucles paginées au 2eme ou 3eme niveau d'inclusion.
    
Il est fou :slight_smile:
  

heu ... quoi ? il est compliqué mon squelette ?
Cédric

Oui , il est compliqué :slight_smile:

Fil a écrit :

Par contre une boucle paginée dans un squelette inclus fonctionnait sans
difficulté en faisant simplement
<INCLURE{fond=..}{self=#SELF}>
ou même simplement sans cache

C'est {self=#SELF} qui est obsolète ; on pourrait le mapper sur {env} pour
restaurer cette compatibilité ascendante.

ah oui ça serait bien je pense, ça sauverais les squelettes.

des inclusions en cascades et des boucles paginées au 2eme ou 3eme
niveau d'inclusion.

Il est fou :slight_smile:

heu ... quoi ? il est compliqué mon squelette ?
Cédric

izo a écrit :

Oui , il est compliqué :slight_smile:

Fil a écrit :

Par contre une boucle paginée dans un squelette inclus fonctionnait sans
difficulté en faisant simplement
<INCLURE{fond=..}{self=#SELF}>
ou même simplement sans cache

C'est {self=#SELF} qui est obsolète ; on pourrait le mapper sur {env} pour
restaurer cette compatibilité ascendante.

ah oui ça serait bien je pense, ça sauverais les squelettes.

des inclusions en cascades et des boucles paginées au 2eme ou 3eme
niveau d'inclusion.

Il est fou :slight_smile:

heu ... quoi ? il est compliqué mon squelette ?
Cédric

Aaah! ç'est déjà beaucoup mieux !
Mais dîtes moi, j'ai dut passer des critères par mes_fonctions pour gérer un modele qui est multi criteres et qui du coup fait des gros SET [(#SET{mode,[(#ENV|mode|sinon{#ENV{mode,gauche}})]})] qui passent.
Mais comment fait on pour mettre en cache un #INSERT_HEAD avec une css dynamique mais qui reste du coup statique sauf quand je recalcule...
Mais je mélange peut être les pinceaux...
merci de vos éclaircissements!
touti

Mais dîtes moi, j'ai dut passer des critères par mes_fonctions pour
gérer un modele qui est multi criteres et qui du coup fait des gros SET
[(#SET{mode,[(#ENV|mode|sinon{#ENV{mode,gauche}})]})] qui passent.
Mais comment fait on pour mettre en cache un #INSERT_HEAD avec une css
dynamique mais qui reste du coup statique sauf quand je recalcule...
Mais je mélange peut être les pinceaux...

S'il est dynamique, évite de le mettre dans un inclure partagé, ou donne à
cet inclure un #CACHE{0} ?

-- Fil

Fil a écrit :

Mais dîtes moi, j'ai dut passer des critères par mes_fonctions pour gérer un modele qui est multi criteres et qui du coup fait des gros SET [(#SET{mode,[(#ENV|mode|sinon{#ENV{mode,gauche}})]})] qui passent.
Mais comment fait on pour mettre en cache un #INSERT_HEAD avec une css dynamique mais qui reste du coup statique sauf quand je recalcule...
Mais je mélange peut être les pinceaux...

S'il est dynamique, évite de le mettre dans un inclure partagé, ou donne à
cet inclure un #CACHE{0} ?

Voui, en fait ma question était incomplète,
je souhaite me servir d'une css dynamique via le pipeline insert_head. Or, je ne peux me servir que du php

$flux .=
if (isset($_GET['mode'])) $mode="&amp;mode=".$_GET['mode'];
$flux .= "<link rel='stylesheet' href='".generer_url_public('walmacss')."".$mode."

mais ça reste statique, sauf au recalcul, aussi comment mettre le cache à zéro là dessus? est ce seulement envisageable?

'rci bien
touti

>> Mais dîtes moi, j'ai dut passer des critères par mes_fonctions pour
>> gérer un modele qui est multi criteres et qui du coup fait des gros SET
>> [(#SET{mode,[(#ENV|mode|sinon{#ENV{mode,gauche}})]})] qui passent.
>> Mais comment fait on pour mettre en cache un #INSERT_HEAD avec une css
>> dynamique mais qui reste du coup statique sauf quand je recalcule...
>> Mais je mélange peut être les pinceaux...
>
> S'il est dynamique, évite de le mettre dans un inclure partagé, ou donne à
> cet inclure un #CACHE{0} ?

Voui, en fait ma question était incomplète,
je souhaite me servir d'une css dynamique via le pipeline insert_head.

Si celui-ci ne te convient pas, il faut peut-être changer de pipeline :slight_smile:

Il y en un (affichage_final) qui intervient tout à la fin, quand la page
est terminée, prête à être envoyée ;tu peux te brancher là, comme ça pas de
cache, ton php tourne à chaque hit.

C'est là que les crayons s'installent, par exemple ; il est fortement
recommandé de ne pas trop surcharger ce pipeline, notamment éviter d'y
mettre de gros preg_replace ou des accès à la base ; mais des trucs rapides
c'est ok.

-- Fil

Fil a écrit :

Mais dîtes moi, j'ai dut passer des critères par mes_fonctions pour gérer un modele qui est multi criteres et qui du coup fait des gros SET [(#SET{mode,[(#ENV|mode|sinon{#ENV{mode,gauche}})]})] qui passent.
Mais comment fait on pour mettre en cache un #INSERT_HEAD avec une css dynamique mais qui reste du coup statique sauf quand je recalcule...
Mais je mélange peut être les pinceaux...

S'il est dynamique, évite de le mettre dans un inclure partagé, ou donne à
cet inclure un #CACHE{0} ?

Voui, en fait ma question était incomplète,
je souhaite me servir d'une css dynamique via le pipeline insert_head.

Si celui-ci ne te convient pas, il faut peut-être changer de pipeline :slight_smile:

Il y en un (affichage_final) qui intervient tout à la fin, quand la page
est terminée, prête à être envoyée ;tu peux te brancher là, comme ça pas de
cache, ton php tourne à chaque hit.

yep, ça marche mais ç'est tellement final, que c'est après </html> !
donc autant que je le mette en dur dans mon modele dans ce cas, au mieux ce serait avant le </head>
Je vais chercher sur les autres plugins, si une idée merci de me dire

yep, ça marche mais ç'est tellement final, que c'est après </html> !

tu as le droit de faire quelque chose comme :
         str_replace('</head>', 'tontruc'.'</head>', $flux)

(pas obligée d'ajouter ton code "à la fin").

-- Fil

Fil a écrit :

yep, ça marche mais ç'est tellement final, que c'est après </html> !

tu as le droit de faire quelque chose comme :
         str_replace('</head>', 'tontruc'.'</head>', $flux)

(pas obligée d'ajouter ton code "à la fin").

-- Fil

nickel

$flux .= str_replace("</head>", montruc()."</head>", $flux);
  return $flux;

$flux .= str_replace("</head>", montruc()."</head>", $flux);
  return $flux;

Attention, le ".=" au lieu d'un simple "=" fait que tu doubles le flux !

-Nicolas

Nicolas Hoizey a écrit :

$flux .= str_replace("</head>", montruc()."</head>", $flux);
  return $flux;

Attention, le ".=" au lieu d'un simple "=" fait que tu doubles le flux !

-Nicolas

Arf, oui bien sur! merci ça m'a évité de chercher trop longtemps! et ça marche très bien

Bon bon, ça avance lentement mon affaire,
maintenant je souhaiterais récupérer les arguments du modele qui sont inclus dans le texte de l'article pour modifier mon appel,

par exemple le mode
<galerie48|walma|mode=vignettes>

il y a bien le global $contexte qui me renvoie l'id_article, mais celui de la page (id_article=77), pas du modele bien sur
je ne sais vraiment pas trop quelle méthode appliquer pour analyser le modele inclus et en sortir les parametres...
merci de vos idées!
touti