[SPIP Zone] #INSERT_HEAD en pied de page et #LOGIN_PUBLIC

Bonjour à tous,

Je cherche à déporter la balise #INSERT_HEAD en fin de squelette juste avant
</body> dans un soucis d'optimisation.

Malheureusement mon squelette utilise la balise #LOGIN_PUBLIC qui a besoin
de JQUERY mais qui ne sera pas charger avant #INSERT_HEAD.

Je cherche pistes et conseils sur ce sujet si quelque'un avait déjà
travailler là dessus.

Merci.

regarde peut-être JQL
http://www.yterium.net/jQl-an-asynchronous-jQuery-Loader

Bonjour,

Le 07/11/2014 16:37, Alexis a écrit :

Je cherche à déporter la balise #INSERT_HEAD en fin de squelette juste avant
</body> dans un soucis d'optimisation.

Excuse-moi mais je ne comprends pas bien où serait l'optimisation. #INSERT_HEAD est faite pour insérer du code entre <head> et </head>, pas entre <body> et </body>...

CM

Fil wrote:

regarde peut-être JQL
jQl an asynchronous jQuery Loader - yterium.net

-- Fil

2014-11-07 16:37 GMT+01:00 Alexis <alexis.pellicier@nds.k12.tr>:

Bonjour à tous,

Je cherche à déporter la balise #INSERT_HEAD en fin de squelette juste
avant
</body> dans un soucis d'optimisation.

Malheureusement mon squelette utilise la balise #LOGIN_PUBLIC qui a
besoin de JQUERY mais qui ne sera pas charger avant #INSERT_HEAD.

Je cherche pistes et conseils sur ce sujet si quelque'un avait déjà
travailler là dessus.

Merci.

Ça m'a l'air prometteur effectivement.
Merci.

2014-11-07 16:59 GMT+01:00 Fil <fil@rezo.net>:

regarde peut-être JQL
jQl an asynchronous jQuery Loader - yterium.net

Pourquoi ce n'est pas présent dans SPIP, tout particulièrement l'interface
privée, qui assemble plein de scripts dans la partie <head> ? Est-ce que
c'est parce que l'interface privée n'a pas été travaillée en ce sens, que
c'est compliqué pour des plugins d'utiliser un tel chargeur, ou bien qu'il
existe des restrictions qui sont apparues depuis la solution de Cédric ?

-- Fil

2014-11-07 16:37 GMT+01:00 Alexis <alexis.pellicier@nds.k12.tr>:

Bonjour à tous,

Je cherche à déporter la balise #INSERT_HEAD en fin de squelette juste
avant
</body> dans un soucis d'optimisation.

Malheureusement mon squelette utilise la balise #LOGIN_PUBLIC qui a besoin
de JQUERY mais qui ne sera pas charger avant #INSERT_HEAD.

Je cherche pistes et conseils sur ce sujet si quelque'un avait déjà
travailler là dessus.

Merci.

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Bonjour,

Par optimisation j'entends améliorer le ressenti des visiteurs du site
notamment ceux qui visitent le site depuis leur téléphone mobile ou leur
tablette avec une connexion pas terrible.

Le problème des javascripts en général et de Jquery en particulier c'est que
pendant que l'explorateur les charge il ne charge rien d'autre d'où
l'intérêt de les mettre après le contenu intéressant, juste avant </body>

Sur l'optimisation web, pas mal d'info ici:
https://developers.google.com/speed/pagespeed/insights/

Bonjour,

Le 07/11/2014 16:37, Alexis a écrit :

Je cherche à déporter la balise #INSERT_HEAD en fin de squelette juste
avant </body> dans un soucis d'optimisation.

Excuse-moi mais je ne comprends pas bien où serait l'optimisation.
#INSERT_HEAD est faite pour insérer du code entre <head> et </head>, pas
entre <body> et </body>...

CM

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Hello,

J'ai pas encore eu le temps de packager ça par défaut dans le plugins-dist/compresseur de SPIP, avec ls options de configuration qui vont bien, mais tu peux avantageusement le mettre en place facilement dans ton squelettes/mes_options.php avec le code suivant (et en mettant le fichier jQl.min.js dans le même dossier) :

function compresseur_ecrire_balise_js(&$flux, $pos, $src, $comments = ""){
        if (file_exists($src) AND $t = @filemtime($src))
                $src = "$src?$t";
        if (test_espace_prive()){
                $comments .= "<script type='text/javascript' src='$src'></script>";
        } else {
                lire_fichier(basename(dirname(__FILE__)) . "/jQl.min.js", $jQl);
                $comments .= "<script type='text/javascript'>\n$jQl\njQl.loadjQ('$src')\n</script>";
        }
        $flux = substr_replace($flux, $comments, $pos, 0);
        return $flux;
}

Comme jQl intercepte et met en file les appels du type jQuery(function(){}) et les jQuery.getScript(...,callback), tu peux réussir à gerer à peu près proprement les cas avec du code inline. Notamment le formulaire de login de SPIP fonctionne sans soucis, et pas mal de plugin aussi.

J'utilise jQl sur des sites en Prod sans soucis, mais c'est sur que si on lache ça sur un site dont les webmestres sont suceptibles d'ajouter n'importe quel plugin on ne peut pas garantir à 100% le risque d'un éventuel js inline qui casse.

Cédric

Le 7 nov. 2014 à 19:27, Alexis <alexis.pellicier@nds.k12.tr> a écrit :

Bonjour,

Par optimisation j'entends améliorer le ressenti des visiteurs du site
notamment ceux qui visitent le site depuis leur téléphone mobile ou leur
tablette avec une connexion pas terrible.

Le problème des javascripts en général et de Jquery en particulier c'est que
pendant que l'explorateur les charge il ne charge rien d'autre d'où
l'intérêt de les mettre après le contenu intéressant, juste avant </body>

Sur l'optimisation web, pas mal d'info ici:
https://developers.google.com/speed/pagespeed/insights/
Yahoo fait partie de la famille de marques Yahoo.

Bonjour,

Le 07/11/2014 16:37, Alexis a écrit :

Je cherche à déporter la balise #INSERT_HEAD en fin de squelette juste
avant </body> dans un soucis d'optimisation.

Excuse-moi mais je ne comprends pas bien où serait l'optimisation.
#INSERT_HEAD est faite pour insérer du code entre <head> et </head>, pas
entre <body> et </body>...

CM

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Génial !
Merci Cédric !

Disposant d'un site en 2.1 j'ai adapté le code :

function compacte_ecrire_balise_script($src){
         if (file_exists($src) AND $t = @filemtime($src))
                 $src = "$src?$t";
         if (test_espace_prive()){
      return "<script type='text/javascript' src='$src'></script>";
         } else {
             lire_fichier(basename(dirname(__FILE__)) . "/jQl.min.js", $jQl);
             return "<script type='text/javascript'>\n$jQl\njQl.loadjQ('$src')\n</script>";
         }
         return $flux;
}

Ça semble bien marcher.
JLuc

Le 07/11/2014 19:55, Cédric Morin a écrit :

Hello,

J'ai pas encore eu le temps de packager ça par défaut dans le plugins-dist/compresseur de SPIP, avec ls options de configuration qui vont bien, mais tu peux avantageusement le mettre en place facilement dans ton squelettes/mes_options.php avec le code suivant (et en mettant le fichier jQl.min.js dans le même dossier) :

function compresseur_ecrire_balise_js(&$flux, $pos, $src, $comments = ""){
         if (file_exists($src) AND $t = @filemtime($src))
                 $src = "$src?$t";
         if (test_espace_prive()){
                 $comments .= "<script type='text/javascript' src='$src'></script>";
         } else {
                 lire_fichier(basename(dirname(__FILE__)) . "/jQl.min.js", $jQl);
                 $comments .= "<script type='text/javascript'>\n$jQl\njQl.loadjQ('$src')\n</script>";
         }
         $flux = substr_replace($flux, $comments, $pos, 0);
         return $flux;
}

Comme jQl intercepte et met en file les appels du type jQuery(function(){}) et les jQuery.getScript(...,callback), tu peux réussir à gerer à peu près proprement les cas avec du code inline. Notamment le formulaire de login de SPIP fonctionne sans soucis, et pas mal de plugin aussi.

J'utilise jQl sur des sites en Prod sans soucis, mais c'est sur que si on lache ça sur un site dont les webmestres sont suceptibles d'ajouter n'importe quel plugin on ne peut pas garantir à 100% le risque d'un éventuel js inline qui casse.

Cédric

Le 7 nov. 2014 à 19:27, Alexis <alexis.pellicier@nds.k12.tr> a écrit :

Bonjour,

Par optimisation j'entends améliorer le ressenti des visiteurs du site
notamment ceux qui visitent le site depuis leur téléphone mobile ou leur
tablette avec une connexion pas terrible.

Le problème des javascripts en général et de Jquery en particulier c'est que
pendant que l'explorateur les charge il ne charge rien d'autre d'où
l'intérêt de les mettre après le contenu intéressant, juste avant </body>

Sur l'optimisation web, pas mal d'info ici:
https://developers.google.com/speed/pagespeed/insights/
Yahoo fait partie de la famille de marques Yahoo.

Bonjour,

Le 07/11/2014 16:37, Alexis a écrit :

Je cherche à déporter la balise #INSERT_HEAD en fin de squelette juste
avant </body> dans un soucis d'optimisation.

Excuse-moi mais je ne comprends pas bien où serait l'optimisation.
#INSERT_HEAD est faite pour insérer du code entre <head> et </head>, pas
entre <body> et </body>...

CM

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Le return $flux; est inutile ; il reste :

> function compacte_ecrire_balise_script($src){

         if (file_exists($src) AND $t = @filemtime($src))
                 $src = "$src?$t";
         if (test_espace_prive()){
             return "<script type='text/javascript' src='$src'></script>";
         } else {
             lire_fichier(basename(dirname(__FILE__)) . "/jQl.min.js", $jQl);
             return "<script type='text/javascript'>\n$jQl\njQl.loadjQ('$src')\n</script>";
         }
}

Ça semble bien marcher.
JLuc

Le 07/11/2014 19:55, Cédric Morin a écrit :

Hello,

J'ai pas encore eu le temps de packager ça par défaut dans le plugins-dist/compresseur de SPIP, avec ls options de
configuration qui vont bien, mais tu peux avantageusement le mettre en place facilement dans ton
squelettes/mes_options.php avec le code suivant (et en mettant le fichier jQl.min.js dans le même dossier) :

function compresseur_ecrire_balise_js(&$flux, $pos, $src, $comments = ""){
         if (file_exists($src) AND $t = @filemtime($src))
                 $src = "$src?$t";
         if (test_espace_prive()){
                 $comments .= "<script type='text/javascript' src='$src'></script>";
         } else {
                 lire_fichier(basename(dirname(__FILE__)) . "/jQl.min.js", $jQl);
                 $comments .= "<script type='text/javascript'>\n$jQl\njQl.loadjQ('$src')\n</script>";
         }
         $flux = substr_replace($flux, $comments, $pos, 0);
         return $flux;
}

Comme jQl intercepte et met en file les appels du type jQuery(function(){}) et les jQuery.getScript(...,callback), tu
peux réussir à gerer à peu près proprement les cas avec du code inline. Notamment le formulaire de login de SPIP
fonctionne sans soucis, et pas mal de plugin aussi.

J'utilise jQl sur des sites en Prod sans soucis, mais c'est sur que si on lache ça sur un site dont les webmestres
sont suceptibles d'ajouter n'importe quel plugin on ne peut pas garantir à 100% le risque d'un éventuel js inline qui
casse.

Cédric

Le 7 nov. 2014 à 19:27, Alexis <alexis.pellicier@nds.k12.tr> a écrit :

Bonjour,

Par optimisation j'entends améliorer le ressenti des visiteurs du site
notamment ceux qui visitent le site depuis leur téléphone mobile ou leur
tablette avec une connexion pas terrible.

Le problème des javascripts en général et de Jquery en particulier c'est que
pendant que l'explorateur les charge il ne charge rien d'autre d'où
l'intérêt de les mettre après le contenu intéressant, juste avant </body>

Sur l'optimisation web, pas mal d'info ici:
https://developers.google.com/speed/pagespeed/insights/
Yahoo fait partie de la famille de marques Yahoo.

Bonjour,

Le 07/11/2014 16:37, Alexis a écrit :

Je cherche à déporter la balise #INSERT_HEAD en fin de squelette juste
avant </body> dans un soucis d'optimisation.

Excuse-moi mais je ne comprends pas bien où serait l'optimisation.
#INSERT_HEAD est faite pour insérer du code entre <head> et </head>, pas
entre <body> et </body>...

CM

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Bonjour Cédric,

J'ai installé cette fonction mais #LOGIN_PUBLIC me pose toujours problème.

J'utilise jQuery 1.7.2 livré avec SPIP 3.0.17 [21515]
et jQl.min.js v1.2.0 jQl/jQl.min.js at master · Cerdic/jQl · GitHub

J'avais ce message d'erreur avant l'installation de la fonction
compresseur_ecrire_balise_js:

ReferenceError: jQuery is not defined

J'ai maintenant mes scripts externes chargés comme ceci:
<script type='text/javascript'>
var jQl={...};
jQl.loadjQ('local/cache-js/ab7170fbf89b82bb348dab05f60222b2.js?1415609147')
</script>

Mais pour le jQuery inline de #LOGIN_PUBLIC apparait dorénavant cette
erreur:
TypeError: $(...).after is not a function
$('#password')

Comme tu précises bien que le formulaire de login spip marche avec ce
système je me demandais si tu n'avais pas fait un truc en plus.

Cédric Morin wrote:

Hello,

J'ai pas encore eu le temps de packager ça par défaut dans le
plugins-dist/compresseur de SPIP, avec ls options de configuration qui
vont bien, mais tu peux avantageusement le mettre en place facilement dans
ton squelettes/mes_options.php avec le code suivant (et en mettant le
fichier jQl.min.js dans le même dossier) :

function compresseur_ecrire_balise_js(&$flux, $pos, $src, $comments = ""){
        if (file_exists($src) AND $t = @filemtime($src))
                $src = "$src?$t";
        if (test_espace_prive()){
                $comments .= "<script type='text/javascript'
                src='$src'></script>";
        } else {
                lire_fichier(basename(dirname(__FILE__)) . "/jQl.min.js",
                $jQl); $comments .= "<script
                

type='text/javascript'>\n$jQl\njQl.loadjQ('$src')\n</script>";

        }
        $flux = substr_replace($flux, $comments, $pos, 0);
        return $flux;
}

Comme jQl intercepte et met en file les appels du type
jQuery(function(){}) et les jQuery.getScript(...,callback), tu peux
réussir à gerer à peu près proprement les cas avec du code inline.
Notamment le formulaire de login de SPIP fonctionne sans soucis, et pas
mal de plugin aussi.

J'utilise jQl sur des sites en Prod sans soucis, mais c'est sur que si on
lache ça sur un site dont les webmestres sont suceptibles d'ajouter
n'importe quel plugin on ne peut pas garantir à 100% le risque d'un
éventuel js inline qui casse.

Cédric

Le 7 nov. 2014 à 19:27, Alexis <alexis.pellicier@nds.k12.tr> a écrit :

Bonjour,

Par optimisation j'entends améliorer le ressenti des visiteurs du site
notamment ceux qui visitent le site depuis leur téléphone mobile ou leur
tablette avec une connexion pas terrible.

Le problème des javascripts en général et de Jquery en particulier c'est
que pendant que l'explorateur les charge il ne charge rien d'autre d'où
l'intérêt de les mettre après le contenu intéressant, juste avant </body>

Sur l'optimisation web, pas mal d'info ici:
https://developers.google.com/speed/pagespeed/insights/
Yahoo fait partie de la famille de marques Yahoo.

Bonjour,

Le 07/11/2014 16:37, Alexis a écrit :

Je cherche à déporter la balise #INSERT_HEAD en fin de squelette juste
avant </body> dans un soucis d'optimisation.

Excuse-moi mais je ne comprends pas bien où serait l'optimisation.
#INSERT_HEAD est faite pour insérer du code entre <head> et </head>, pas
entre <body> et </body>...

CM

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Bon j'ai finis par m'en sortir en modifiant l'appelle du jquery inline du
formulaire dans la fonction auth_spip_formulaire_login de
ecrire/auth/spip.php:

(function($){$('#password').after ....}(jQuery))

remplacé par:

$(function(){$('#password').after ....}

Je n'aime pas trop modifier les fichiers du corps mais en attendant de
comprendre mieux...

Merci en tout cas pour votre aide.

Alexis wrote:

Bonjour Cédric,

J'ai installé cette fonction mais #LOGIN_PUBLIC me pose toujours problème.

J'utilise jQuery 1.7.2 livré avec SPIP 3.0.17 [21515]
et jQl.min.js v1.2.0 jQl/jQl.min.js at master · Cerdic/jQl · GitHub

J'avais ce message d'erreur avant l'installation de la fonction
compresseur_ecrire_balise_js:

ReferenceError: jQuery is not defined

J'ai maintenant mes scripts externes chargés comme ceci:
<script type='text/javascript'>
var jQl={...};
jQl.loadjQ('local/cache-js/ab7170fbf89b82bb348dab05f60222b2.js?

1415609147')

</script>

Mais pour le jQuery inline de #LOGIN_PUBLIC apparait dorénavant cette
erreur:
TypeError: $(...).after is not a function
$('#password')

Comme tu précises bien que le formulaire de login spip marche avec ce
système je me demandais si tu n'avais pas fait un truc en plus.

En effet, il m'avait echappé !
http://core.spip.org/projects/spip/repository/revisions/21794 corrige ça, merci :slight_smile:

--
Cédric

Alexis a écrit :

Bon j'ai finis par m'en sortir en modifiant l'appelle du jquery inline du
formulaire dans la fonction auth_spip_formulaire_login de
ecrire/auth/spip.php:

(function($){$('#password').after ....}(jQuery))

remplacé par:

$(function(){$('#password').after ....}

Je n'aime pas trop modifier les fichiers du corps mais en attendant de
comprendre mieux...

Merci en tout cas pour votre aide.

Alexis wrote:

Bonjour Cédric,

J'ai installé cette fonction mais #LOGIN_PUBLIC me pose toujours problème.

J'utilise jQuery 1.7.2 livré avec SPIP 3.0.17 [21515]
et jQl.min.js v1.2.0 jQl/jQl.min.js at master · Cerdic/jQl · GitHub

J'avais ce message d'erreur avant l'installation de la fonction
compresseur_ecrire_balise_js:

ReferenceError: jQuery is not defined

J'ai maintenant mes scripts externes chargés comme ceci:
<script type='text/javascript'>
var jQl={...};
jQl.loadjQ('local/cache-js/ab7170fbf89b82bb348dab05f60222b2.js?

1415609147')

</script>

Mais pour le jQuery inline de #LOGIN_PUBLIC apparait dorénavant cette
erreur:
TypeError: $(...).after is not a function
$('#password')

Comme tu précises bien que le formulaire de login spip marche avec ce
système je me demandais si tu n'avais pas fait un truc en plus.

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Désolé malgrès le correctif j'ai toujours l'erreur quand je veux utiliser
jQl pour charger jQuery et du coup plus de cryptage du mot de passe.

TypeError: $(...).after is not a function
$('#password')

Désolé en utilisant la notation (function($){...}(jQuery)) jQl ne s'en sort
pas:
TypeError: $(...).after is not a function
$('#password')

Un problème de portée des variables? J'avoue que je nage un peu.

En effet !
http://core.spip.org/projects/spip/repository/revisions/21798
resout cela cette fois en attendant de trouver une parade plus robuste

--
Cédric

Alexis a écrit :

Désolé en utilisant la notation (function($){...}(jQuery)) jQl ne s'en sort
pas:
TypeError: $(...).after is not a function
$('#password')

Un problème de portée des variables? J'avoue que je nage un peu.

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Merci!!

Cédric Morin wrote:

En effet !
http://core.spip.org/projects/spip/repository/revisions/21798
resout cela cette fois en attendant de trouver une parade plus robuste