Salut à tous,
j'ai écris un petit plugin permettant d'insérer des google map avec plusieurs
marqueurs d'adresses, en ajoutant quelque comme ce qui suit dans un article:
[gmap]
Chez Dédé (art6) : 37, rue des cerises 75011 Paris ;
Chez Momo (art2) : 48, rue des pommes 75011 Paris ;
etc...
[/gmap]
Ca marche impec, mais j'ai un problème d'optimisation. Mon plugin utilise le
pipeline insert_head pour ajouter les fichiers js et css nécessaires. Mais ces
fichiers sont inclus sur toutes les pages, même celle qui ne contiennent pas de
google map. C'est lourd car ça charge notamment l'api google.
Au début, j'ai essayé de résoudre de problème en utilisant une variable globale
discrète, positionnée sur true indiquant à ma fonction insert_head que les
dépendences js et css doivent être incluses.
Lorsque cette variable est positionnée sur true :
- dans mon pipeline post_typo, rien ne se passe, mon pileline insert_head ne
voit jamais true
- dans mon pipeline pre_typo, ça marche uniquement lorsque je recalcule la page,
mais une fois recalculée, insert_head ne voit plus true
Comment faire pour n'inclure ces fichiers js et css que lorsque c'est nécessaire?
--
Olivier
Olivier Guilyardi wrote:
Salut à tous,
j'ai écris un petit plugin permettant d'insérer des google map avec plusieurs
marqueurs d'adresses, en ajoutant quelque comme ce qui suit dans un article:
[gmap]
Chez Dédé (art6) : 37, rue des cerises 75011 Paris ;
Chez Momo (art2) : 48, rue des pommes 75011 Paris ;
etc...
[/gmap]
Ca marche impec, mais j'ai un problème d'optimisation. Mon plugin utilise le
pipeline insert_head pour ajouter les fichiers js et css nécessaires. Mais ces
fichiers sont inclus sur toutes les pages, même celle qui ne contiennent pas de
google map. C'est lourd car ça charge notamment l'api google.
Au début, j'ai essayé de résoudre de problème en utilisant une variable globale
discrète, positionnée sur true indiquant à ma fonction insert_head que les
dépendences js et css doivent être incluses.
Lorsque cette variable est positionnée sur true :
- dans mon pipeline post_typo, rien ne se passe, mon pileline insert_head ne
voit jamais true
- dans mon pipeline pre_typo, ça marche uniquement lorsque je recalcule la page,
mais une fois recalculée, insert_head ne voit plus true
Le paragraphe ci-dessus n'est peut-être pas très clair, je le clarifie :
Lorsque cette variable est positionnée sur true dans mon pipeline post_typo,
rien ne se passe, mon pileline insert_head ne voit jamais true.
Lorsque cette variable est positionnée sur true dans mon pipeline pre_typo, ça
marche uniquement lorsque je recalcule la page, mais une fois recalculée,
insert_head ne voit plus true.
Comment faire pour n'inclure ces fichiers js et css que lorsque c'est nécessaire?
Pour info, j'utilise SPIP 1.9.2e.
Un indice ?
--
Olivier
Olivier Guilyardi wrote:
Olivier Guilyardi wrote:
Salut à tous,
j'ai écris un petit plugin permettant d'insérer des google map avec plusieurs
marqueurs d'adresses, en ajoutant quelque comme ce qui suit dans un article:
[gmap]
Chez Dédé (art6) : 37, rue des cerises 75011 Paris ;
Chez Momo (art2) : 48, rue des pommes 75011 Paris ;
etc...
[/gmap]
Ca marche impec, mais j'ai un problème d'optimisation. Mon plugin utilise le
pipeline insert_head pour ajouter les fichiers js et css nécessaires. Mais ces
fichiers sont inclus sur toutes les pages, même celle qui ne contiennent pas de
google map. C'est lourd car ça charge notamment l'api google.
Au début, j'ai essayé de résoudre de problème en utilisant une variable globale
discrète, positionnée sur true indiquant à ma fonction insert_head que les
dépendences js et css doivent être incluses.
Lorsque cette variable est positionnée sur true :
- dans mon pipeline post_typo, rien ne se passe, mon pileline insert_head ne
voit jamais true
- dans mon pipeline pre_typo, ça marche uniquement lorsque je recalcule la page,
mais une fois recalculée, insert_head ne voit plus true
Le paragraphe ci-dessus n'est peut-être pas très clair, je le clarifie :
Lorsque cette variable est positionnée sur true dans mon pipeline post_typo,
rien ne se passe, mon pileline insert_head ne voit jamais true.
Lorsque cette variable est positionnée sur true dans mon pipeline pre_typo, ça
marche uniquement lorsque je recalcule la page, mais une fois recalculée,
insert_head ne voit plus true.
Comment faire pour n'inclure ces fichiers js et css que lorsque c'est nécessaire?
Pour info, j'utilise SPIP 1.9.2e.
Un indice ?
Visiblement ma question ne vous parle pas. Bon, au cas où quelqu'un
rencontrerait ce même problème, je l'ai finalement résolu, avec le pipeline
insert_head ci-dessous.
Remarques : $GLOBALS['__gmap_insert_head'] est positionnée sur true par mon
pipeline post_typo lorsque le contenu de l'article contient une gmap, auquel cas
le code html permettant de construire une carte est inséré dans un div avec la
classe gmap-instance.
function gmap_insert_head($head)
{
if ($GLOBALS['__gmap_insert_head'] or !$GLOBALS['exec']) {
$key = $GLOBALS['gmap_key'];
$dir = _DIR_PLUGIN_GMAP;
$deps =
"<link rel=\"stylesheet\" href=\"{$dir}gmap.css\" type=\"text/css\"
media=\"all\" />\n".
"<script src=\"http://www.google.com/jsapi?key=$key\\"\\n"\.
" type=\"text/javascript\"></script>\n".
"<script src=\"{$dir}gmap.js\" type=\"text/javascript\"></script>\n".
"<script type=\"text/javascript\">\ngmap_init('$dir');\n</script>";
if (!$GLOBALS['exec']) {
$head .= "\n<?php if (ereg('class *= *\"[^\"]*gmap-instance',
\$page['texte'])):?>\n".
"$deps\n<?php endif;?>\n";
} else {
$head .= "\n$deps\n";
}
}
return $head;
}
--
Olivier
J'avoue que ça m'impressionne!
Richard
Le 23 janv. 2009, à 06:51, Olivier Guilyardi a écrit :
Olivier Guilyardi wrote:
Olivier Guilyardi wrote:
Salut à tous,
j'ai écris un petit plugin permettant d'insérer des google map avec plusieurs
marqueurs d'adresses, en ajoutant quelque comme ce qui suit dans un article:
[gmap]
Chez Dédé (art6) : 37, rue des cerises 75011 Paris ;
Chez Momo (art2) : 48, rue des pommes 75011 Paris ;
etc...
[/gmap]
Ca marche impec, mais j'ai un problème d'optimisation. Mon plugin utilise le
pipeline insert_head pour ajouter les fichiers js et css nécessaires. Mais ces
fichiers sont inclus sur toutes les pages, même celle qui ne contiennent pas de
google map. C'est lourd car ça charge notamment l'api google.
Au début, j'ai essayé de résoudre de problème en utilisant une variable globale
discrète, positionnée sur true indiquant à ma fonction insert_head que les
dépendences js et css doivent être incluses.
Lorsque cette variable est positionnée sur true :
- dans mon pipeline post_typo, rien ne se passe, mon pileline insert_head ne
voit jamais true
- dans mon pipeline pre_typo, ça marche uniquement lorsque je recalcule la page,
mais une fois recalculée, insert_head ne voit plus true
Le paragraphe ci-dessus n'est peut-être pas très clair, je le clarifie :
Lorsque cette variable est positionnée sur true dans mon pipeline post_typo,
rien ne se passe, mon pileline insert_head ne voit jamais true.
Lorsque cette variable est positionnée sur true dans mon pipeline pre_typo, ça
marche uniquement lorsque je recalcule la page, mais une fois recalculée,
insert_head ne voit plus true.
Comment faire pour n'inclure ces fichiers js et css que lorsque c'est nécessaire?
Pour info, j'utilise SPIP 1.9.2e.
Un indice ?
Visiblement ma question ne vous parle pas. Bon, au cas où quelqu'un
rencontrerait ce même problème, je l'ai finalement résolu, avec le pipeline
insert_head ci-dessous.
Remarques : $GLOBALS['__gmap_insert_head'] est positionnée sur true par mon
pipeline post_typo lorsque le contenu de l'article contient une gmap, auquel cas
le code html permettant de construire une carte est inséré dans un div avec la
classe gmap-instance.
function gmap_insert_head($head)
{
if ($GLOBALS['__gmap_insert_head'] or !$GLOBALS['exec']) {
$key = $GLOBALS['gmap_key'];
$dir = _DIR_PLUGIN_GMAP;
$deps =
"<link rel=\"stylesheet\" href=\"{$dir}gmap.css\" type=\"text/css\"
media=\"all\" />\n".
"<script src=\"http://www.google.com/jsapi?key=$key\\"\\n"\.
" type=\"text/javascript\"></script>\n".
"<script src=\"{$dir}gmap.js\" type=\"text/javascript\"></script>\n".
"<script type=\"text/javascript\">\ngmap_init('$dir');\n</script>";
if (!$GLOBALS['exec']) {
$head .= "\n<?php if (ereg('class *= *\"[^\"]*gmap-instance',
\$page['texte'])):?>\n".
"$deps\n<?php endif;?>\n";
} else {
$head .= "\n$deps\n";
}
}
return $head;
}
--
Olivier
_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip ou http://embed.mibbit.com/?server=irc.freenode.net&channel=%23spip
Comment faire pour n'inclure ces fichiers js et css que lorsque c'est nécessaire?
Pour info, j'utilise SPIP 1.9.2e.
Un indice ?
Visiblement ma question ne vous parle pas. Bon, au cas où quelqu'un
rencontrerait ce même problème, je l'ai finalement résolu, avec le pipeline
insert_head ci-dessous.
ben si mais mieux vaut poster sur la bonne liste : ( tout ce qui est en relation avec les plugins
) Tu pourrais encore mieux faire
en jouant sur le pipeline affichage final qui te permettrait de profiter du cache et de pas faire une REGEX sur tout ton html dans la page a chaque chargement de ta page… en gros et simplement , tu reprend ton code : et tu le place dans le pipeline affichage final, et via regex (ou un simple str_replace sur « » ) tu va ajouter ton code html/css/js qui correspond a ton plugin … et la c’est plus optimisé quelques exemple si je ne me trompe pas dans le couteau suisse et thickbox .