Bonjour
J'avais ouvert un post ici: http://forum.joomla.fr/showthread.ph...fer-javascript
Depuis j'ai fais mes migrations et suis arrivé à fusionner et différer l'exécution des scripts que ce soit sur les pages joomla 3 ou virtuemart 3.
Je refais donc un post au propre dans la section joomla 3, je pense que ca pourra servir à quelques uns.
J'y ai passé pas mal d'heures, j'ai eu ma dose d'informatique là je fais faire une bonne pause, je suis un agriculteur moi...lol
Attention ce qui va suivre doit être adapté au cas par cas en fonction des fonctionnalités, plugins, extentions et donc styles/scripts/fonctions utilisés...
-Fusionner les javascripts implique :
-D'avoir deux templates, un "normal" et un "fusionné" installé, si il y a un blême on rebascule sur le normal
-De maintenir le code des librairies dans les scripts maitres, du simple copié collé après les MAJ
-Après chaque MAJ de faire les modifs qui n'ont pu être faites par override (5mn chrono)
-D'impérativement tout noter dans un bloc note, en détails, genre "tuto à la neuneu" pour savoir exactement ce que l'on a modifié et où.
-De se créer un autre bloc note "modifs à faire à chaque MAJ"
-Faire tourner firebug à fond
-Beaucoup de café....
Ce qui va permettre de réaliser ca c'est l'appel avec des conditions php en fonction des "views" (Pour joomla :article,blog,login,reset,remind,registration,etc. ..)(Pour virtuemart:virtuemart,category,productdetails,user ,vendor,cart,vmplg,etc....) ainsi que les ID et les Itemid.
Ca permet de faire des appels aux petits oignons, de diviser par parfois plus de dix le nombre de requettes http, de diminuer le poids des pages, etc...et se rapprocher d'un site fait main...
Première partie, le plus facile, la fusion des feuilles de style css et l'optimisation des appels.
On examine les éléments avec firebug, un par un, de haut en bas pour ne rien oublier et on note tout à la suite. Puis pour éviter la "verbosité" on regroupe le code css par propriétés. On fait des feuilles de style différentes pour chaque page/view/id/itemid où il y a des éléments en plus/différents.
Bien tester le site à fond pour être sûr de n'avoir rien oublié.
Une fois que les feuilles de style sont prêtes :
Dans le index.php on supprime tout appel de feuilles de style et on déclare le fichier logic.php en haut :
Dans le fichier logic.php (s'en créer un si vous n'en avez pas) on désamorce l'appel de toutes les feuilles de style css natives et on appeles les notres:
Et voilà.
Maintenant les scripts..
-Il y a d'une part les frameworks/librairies, et d'autres part les fonctions qui sont insérées dans le code source via des appels dans les fichiers php de joomla ou virtuemart.
-Pour qu'une fonction puisse fonctionner il faut que la/les librairies aient été chargées avant...
-De part ce fait l'utilisation de plugins proposant de merger les scripts et les différer ne peut marcher que dans très peu de cas....
Joomla, de base, c'est comme une énorme caisse à outils, et si tu fais un chantier de plomberie t'as les outils d'electricien, de macon, etc...c'est sûr il ne peut rien t'arriver...
L'idée c'est de voyager léger, de ne prendre que les outils dont on a besoin, dans une seule caisse à outils a taille adaptée.
J'ai placé en bas de page et différé les scripts pour les pages cruciales comme les articles, page d'accueil/categrories/produits virtuemart
Pour les pages moins importantes comme login/reset/remind/user/cart/vmplg/vendor/etc... je ne me suis pas pris la tête j'ai également fait un script maitre mais je ne l'ai pas mis en bas de page et pas différé, il est inclus dans le head ce qui fait que les fonctions non désactivées sont fonctionnelles. (je ne vois pas trop l'interet de se prendre la tete pour des pages comme ca, un seul script c'est déjà beau, car ca fait faire beaucoup de modifs pour désactiver toutes les fonctions sur ces pages)
Donc
Faire tourner firebug à fond
Dans le logic.php, on désactive un part un les appels, et on verifie sur chaque page ce qui fonctionne/ne fonctionne plus grace à "unset"
Ca va permettre de savoir/comprendre quelle(s) fonction(s) a besoin de quelle(s) librairie(s) et également de supprimer des librairies inutiles sur telle ou telle page ou sur tout le site, dans mon cas par exemple bootstrap, caption sont inutiles sur toutes les pages et mootools-core et core utile seulement sur trois views.
Puis on décortique le code source de chaque page, on note minutieusement l'appel des librairies et leur ordre d'appel, pareil pour les fonctions, l'ordre est très important.
On construit en même temps les scripts maitres.
Dans mon cas (et uniquement pour mon cas !) :
************************************************** *
Script maitre article id 72 (ma page d'accueil) :
librairies :
jquery.min.js
jquery.noconflict
script slider
update cart.js
template.js
fonctions :
slider, keepalive virtuemart, panier, template
Appel en bas de page avant </body> et en defer dans index.php
************************************************** *
Script maitre article != id 72 (les autres articles) :
librairies :
jquery.min.js
jquery.noconflict
update cart.js
template.js
fonctions :
keepalive virtuemart, panier, template
Appel en bas de page avant </body> et en defer dans index.php
************************************************** *
Script maitre "virtuemart" :
librairies :
jquery.min.js
update cart.js
template.js
fonctions :
keepalive virtuemart, panier, template
Appel en bas de page avant </body> et en defer dans index.php
************************************************** *
Script maitre "productdetails" :
librairies :
jquery.min.js
jquery-migrate.min.js
jquery-ui.min.js
jquery.ui.autocomplete.html.js
jquery.noconflict
vmsite.js
dynupdate.js
vmprices.js
jquery.fancybox-1.3.4.pack.js
update cart.js
template.js
fonctions :
keepalive virtuemart, tabcontents, fancybox, dynupdate, js-recalculate, panier, template
Appel en bas de page avant </body> et en defer dans index.php
************************************************** *
Script maitre category :
librairies :
jquery.min.js
jquery-migrate.min.js
jquery-ui.min.js
jquery.ui.autocomplete.html.js
jquery.noconflict
vmsite.js
vmprices.js
update cart.js
template.js
fonctions :
keepalive virtuemart, orderlist, js-recalculate, panier, template
Appel en bas de page avant </body> et en defer dans index.php
************************************************** *
Script maitre user :
librairies :
jquery.min.js
jquery-migrate.min.js
media/system/mootools-core.js
media/system/core.js
media/system/punycode.js
media/system/validate.js
vmtabs.js
update cart.js
template.js
fonctions :
template.js/panier/keepalive
Appel dans le head via logic.php
************************************************** *
Script maitre orders :
librairies :
jquery.min.js
jquery-migrate.min.js
media/system/mootools-core.js
media/system/core.js
media/system/punycode.js
media/system/validate.js
jquery-ui.min.js
jquery.ui.autocomplete.html.js
jquery.noconflict
vmsite.js
vmtabs.js
update cart.js
template.js
fonctions :
template.js/panier/keepalive
Appel dans le head via logic.php
************************************************** *
Script maitre cart ou vmplg :
librairies :
jquery.min.js
jquery-migrate.min.js
media/system/mootools-core.js
media/system/core.js
media/system/punycode.js
media/system/validate.js
jquery-ui.min.js
jquery.ui.autocomplete.html.js
jquery.noconflict
vmsite.js
jquery.fancybox-1.3.4.pack.js
update cart.js
template.js
fonctions :
template.js/panier/keepalive
Appel dans le head via logic.php
************************************************** *
Script maitre remind ou reset :
librairies :
core.js
jquery.min.js
jquery-migrate.min.js
media/system/punycode.js
media/system/validate.js
html5fallback.js
update cart.js
template.js
fonctions :
template.js/panier/keepalive
Appel dans le head via logic.php
************************************************** *
Script maitre login :
librairies :
core.js
jquery.min.js
jquery-migrate.min.js
html5fallback.js
update cart.js
template.js
fonctions :
template.js/panier/keepalive
Appel dans le head via logic.php
************************************************** *
Maintenant c'est l'aventure il faut retrouver les fichiers php où sont insérés les scripts des fonctions, ainsi que parfois où sont insérées des librairies si le unset ne fonctionne pas.
Dans la majorité des cas ce sont des overrides, donc les modifs resteront après MAJ, mais il y a quelques trucs qui doivent se faire en direct. Donc à refaire à chaque MAJ, mais vu que tout est noté ca va vite. Cepandant je suis tombé sur cet article : http://community.joomla.org/blogs/co...-for-html.html donc il y a moyen de bidouiller, me suis pas encore penché dessus.
Quelques modifs dans mon cas (et uniquement pour mon cas...)
************************************************** *********************
Virer bootstrap :
Dans librairies/cms/html/bootstrap.php
Modifier ligne 239 :
************************************************** ***********************
Virer script bootstrap/tooltip :
Dans librairie/cms/html/bootstrap.php
Commenter ligne 506
************************************************** *****************************
Virer JCaption code
Dans : /libraries/cms/html/behavior.php
Commenter :
************************************************** ************
Virer keepalive lors du login (pas d'edition front end)
Dans librairies/cms/html/behavior.php
Commenter ligne 658 :
************************************************** *******************
productdetails
on désamorce la fonction fancybox
Dans template/html/com_virtuemart/views/productsdetails/default_images.php
Commenter ligne 100 :
Puis ajouter la fonction à la fin du script maitre
************************************************** ******************
productdetails
Virer fonction reminder (vous ne pouvez acheter ce produit que comme multiple de X article)
Dans templates/montemplate/html/com_virtuemart/productdetails/default_addtocart.php
Supprimer ligne 78 :
Puis ajouter la fonction à la fin du script maitre
************************************************** *********************
productdetails
Virer les quatre fonctions en bas de page :
Dans modules/mod_virtuemart_cart/mod_virtuemart_cart.php
Ligne 60 commenter :
Puis ajouter les fonctions à la fin du script maitre
************************************************** ****************
category
Virer modal .js
templates/montemplate/html/com_virtuemart/category/default.php
Ligne 25 commenter :
************************************************** *******************
category
Virer fonction orderlist
templates/montemplate/html/com_virtuemart/category/default.php
commenter ligne 32 :
Puis ajouter la fonction à la fin du script maitre
************************************************** *********************
category
Ajouter les trois fonctions dans le script maitre
(qui ont été désactivés Dans modules/mod_virtuemart_cart/mod_virtuemart_cart.php
Ligne 60 commenter :
************************************************** ************************
Virtuemart
virer popup.js
Creer dans template override de sublayouts/askrecomjs.php en enlevant else{facebox blabla}
************************************************** *********************
Maintenant que les scripts maitre sont prets, on supprime les appels de toutes les librairies dans le index.php et le logic.php, et on les insère soi même aux bons endroits en fonction des views/id/itemid.
Puis dans l'admin virtuemart/configuration/templates/Activation des style CSS & Javascripts on désactive tout.
Ce qui donne au final pour mon cas :
Logic.php :
Index.php
Et ca envoie du paté sévère...
J'avais ouvert un post ici: http://forum.joomla.fr/showthread.ph...fer-javascript
Depuis j'ai fais mes migrations et suis arrivé à fusionner et différer l'exécution des scripts que ce soit sur les pages joomla 3 ou virtuemart 3.
Je refais donc un post au propre dans la section joomla 3, je pense que ca pourra servir à quelques uns.
J'y ai passé pas mal d'heures, j'ai eu ma dose d'informatique là je fais faire une bonne pause, je suis un agriculteur moi...lol
Attention ce qui va suivre doit être adapté au cas par cas en fonction des fonctionnalités, plugins, extentions et donc styles/scripts/fonctions utilisés...
-Fusionner les javascripts implique :
-D'avoir deux templates, un "normal" et un "fusionné" installé, si il y a un blême on rebascule sur le normal
-De maintenir le code des librairies dans les scripts maitres, du simple copié collé après les MAJ
-Après chaque MAJ de faire les modifs qui n'ont pu être faites par override (5mn chrono)
-D'impérativement tout noter dans un bloc note, en détails, genre "tuto à la neuneu" pour savoir exactement ce que l'on a modifié et où.
-De se créer un autre bloc note "modifs à faire à chaque MAJ"
-Faire tourner firebug à fond
-Beaucoup de café....
Ce qui va permettre de réaliser ca c'est l'appel avec des conditions php en fonction des "views" (Pour joomla :article,blog,login,reset,remind,registration,etc. ..)(Pour virtuemart:virtuemart,category,productdetails,user ,vendor,cart,vmplg,etc....) ainsi que les ID et les Itemid.
Ca permet de faire des appels aux petits oignons, de diviser par parfois plus de dix le nombre de requettes http, de diminuer le poids des pages, etc...et se rapprocher d'un site fait main...
Première partie, le plus facile, la fusion des feuilles de style css et l'optimisation des appels.
On examine les éléments avec firebug, un par un, de haut en bas pour ne rien oublier et on note tout à la suite. Puis pour éviter la "verbosité" on regroupe le code css par propriétés. On fait des feuilles de style différentes pour chaque page/view/id/itemid où il y a des éléments en plus/différents.
Bien tester le site à fond pour être sûr de n'avoir rien oublié.
Une fois que les feuilles de style sont prêtes :
Dans le index.php on supprime tout appel de feuilles de style et on déclare le fichier logic.php en haut :
Code PHP:
//On déclare que le logic.php est demandé à l’accueil
<?php
defined('_JEXEC') or die;
require_once JPATH_THEMES.'/'.$this->template.'/logic.php';
?>
<!DOCTYPE html>
<html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>" >
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, user-scalable=yes">
<jdoc:include type="head" />
//IL faut virer tous les appels css
</head>
Code PHP:
<?php
defined('_JEXEC') or die;
$app = JFactory::getApplication();
$doc = JFactory::getDocument();
$params = $app->getParams();
$view = JRequest::getCmd('view');
$id = JRequest::getVar('id');
$Itemid = JRequest::getVar('Itemid');
$tpath = $this->baseurl.'/templates/'.$this->template;
$links = $this->params->get('links');
$buttons = $this->params->get('buttons');
$hfonts = $this->params->get('hfonts');
$bfonts = $this->params->get('bfonts');
$background = $this->params->get('background');
$container = $this->params->get('container');
unset($doc->_styleSheets[JURI::root(true) . '/components/com_virtuemart/assets/css/jquery.fancybox-1.3.4.css?vmver=8847']);
unset($doc->_styleSheets[JURI::root(true) . '/components/com_virtuemart/assets/css/vmpanels.css']);
unset($doc->_styleSheets[JURI::root(true) . '/components/com_virtuemart/assets/css/validationEngine.template.css?vmver=8847']);
unset($doc->_styleSheets[JURI::root(true) . '/components/com_virtuemart/assets/css/validationEngine.jquery.css?vmver=8847']);
unset($doc->_styleSheets[JURI::root(true) . '/components/com_virtuemart/assets/css/facebox.css?vmver=8847']);
unset($doc->_styleSheets[JURI::root(true) . '/media/system/css/modal.css']);
unset($doc->_styleSheets[JURI::root(true) . '/templates/system/css/general.css']);
$menu = $app->getMenu();
$active = $app->getMenu()->getActive();
$pageclass = $params->get('pageclass_sfx');
$this->setGenerator(null);
$head = $doc->getHeadData();
unset($head['metaTags']['http-equiv']);
$doc->setHeadData($head);
if ($view == 'article' && $id == '72') {
$doc->addStyleSheet(''.$tpath.'/css/master-accueil.css');
}
if (($view == 'article' && $id != '72') || $view == 'orders' || $view == 'remind' || $view == 'reset' || $view == 'login') {
$doc->addStyleSheet(''.$tpath.'/css/master-article-or-orders.css');
}
if ($view == 'virtuemart' || $view == 'cart' || $view == 'vmplg') {
$doc->addStyleSheet(''.$tpath.'/css/master-virtuemart-or-cart.css');
}
if ($view == 'category') {
$doc->addStyleSheet(''.$tpath.'/css/master-category.css');
}
if ($view == 'productdetails') {
$doc->addStyleSheet(''.$tpath.'/css/master-productdetails.css');
}
if ($view == 'user' || $view == 'form') {
$doc->addStyleSheet(''.$tpath.'/css/master-user.css');
}
if ($view == 'vendor') {
$doc->addStyleSheet(''.$tpath.'/css/master-vendor.css');
}
?>
Maintenant les scripts..
-Il y a d'une part les frameworks/librairies, et d'autres part les fonctions qui sont insérées dans le code source via des appels dans les fichiers php de joomla ou virtuemart.
-Pour qu'une fonction puisse fonctionner il faut que la/les librairies aient été chargées avant...
-De part ce fait l'utilisation de plugins proposant de merger les scripts et les différer ne peut marcher que dans très peu de cas....
Joomla, de base, c'est comme une énorme caisse à outils, et si tu fais un chantier de plomberie t'as les outils d'electricien, de macon, etc...c'est sûr il ne peut rien t'arriver...
L'idée c'est de voyager léger, de ne prendre que les outils dont on a besoin, dans une seule caisse à outils a taille adaptée.
J'ai placé en bas de page et différé les scripts pour les pages cruciales comme les articles, page d'accueil/categrories/produits virtuemart
Pour les pages moins importantes comme login/reset/remind/user/cart/vmplg/vendor/etc... je ne me suis pas pris la tête j'ai également fait un script maitre mais je ne l'ai pas mis en bas de page et pas différé, il est inclus dans le head ce qui fait que les fonctions non désactivées sont fonctionnelles. (je ne vois pas trop l'interet de se prendre la tete pour des pages comme ca, un seul script c'est déjà beau, car ca fait faire beaucoup de modifs pour désactiver toutes les fonctions sur ces pages)
Donc
Faire tourner firebug à fond
Dans le logic.php, on désactive un part un les appels, et on verifie sur chaque page ce qui fonctionne/ne fonctionne plus grace à "unset"
Ca va permettre de savoir/comprendre quelle(s) fonction(s) a besoin de quelle(s) librairie(s) et également de supprimer des librairies inutiles sur telle ou telle page ou sur tout le site, dans mon cas par exemple bootstrap, caption sont inutiles sur toutes les pages et mootools-core et core utile seulement sur trois views.
Puis on décortique le code source de chaque page, on note minutieusement l'appel des librairies et leur ordre d'appel, pareil pour les fonctions, l'ordre est très important.
On construit en même temps les scripts maitres.
Dans mon cas (et uniquement pour mon cas !) :
************************************************** *
Script maitre article id 72 (ma page d'accueil) :
librairies :
jquery.min.js
jquery.noconflict
script slider
update cart.js
template.js
fonctions :
slider, keepalive virtuemart, panier, template
Appel en bas de page avant </body> et en defer dans index.php
************************************************** *
Script maitre article != id 72 (les autres articles) :
librairies :
jquery.min.js
jquery.noconflict
update cart.js
template.js
fonctions :
keepalive virtuemart, panier, template
Appel en bas de page avant </body> et en defer dans index.php
************************************************** *
Script maitre "virtuemart" :
librairies :
jquery.min.js
update cart.js
template.js
fonctions :
keepalive virtuemart, panier, template
Appel en bas de page avant </body> et en defer dans index.php
************************************************** *
Script maitre "productdetails" :
librairies :
jquery.min.js
jquery-migrate.min.js
jquery-ui.min.js
jquery.ui.autocomplete.html.js
jquery.noconflict
vmsite.js
dynupdate.js
vmprices.js
jquery.fancybox-1.3.4.pack.js
update cart.js
template.js
fonctions :
keepalive virtuemart, tabcontents, fancybox, dynupdate, js-recalculate, panier, template
Appel en bas de page avant </body> et en defer dans index.php
************************************************** *
Script maitre category :
librairies :
jquery.min.js
jquery-migrate.min.js
jquery-ui.min.js
jquery.ui.autocomplete.html.js
jquery.noconflict
vmsite.js
vmprices.js
update cart.js
template.js
fonctions :
keepalive virtuemart, orderlist, js-recalculate, panier, template
Appel en bas de page avant </body> et en defer dans index.php
************************************************** *
Script maitre user :
librairies :
jquery.min.js
jquery-migrate.min.js
media/system/mootools-core.js
media/system/core.js
media/system/punycode.js
media/system/validate.js
vmtabs.js
update cart.js
template.js
fonctions :
template.js/panier/keepalive
Appel dans le head via logic.php
************************************************** *
Script maitre orders :
librairies :
jquery.min.js
jquery-migrate.min.js
media/system/mootools-core.js
media/system/core.js
media/system/punycode.js
media/system/validate.js
jquery-ui.min.js
jquery.ui.autocomplete.html.js
jquery.noconflict
vmsite.js
vmtabs.js
update cart.js
template.js
fonctions :
template.js/panier/keepalive
Appel dans le head via logic.php
************************************************** *
Script maitre cart ou vmplg :
librairies :
jquery.min.js
jquery-migrate.min.js
media/system/mootools-core.js
media/system/core.js
media/system/punycode.js
media/system/validate.js
jquery-ui.min.js
jquery.ui.autocomplete.html.js
jquery.noconflict
vmsite.js
jquery.fancybox-1.3.4.pack.js
update cart.js
template.js
fonctions :
template.js/panier/keepalive
Appel dans le head via logic.php
************************************************** *
Script maitre remind ou reset :
librairies :
core.js
jquery.min.js
jquery-migrate.min.js
media/system/punycode.js
media/system/validate.js
html5fallback.js
update cart.js
template.js
fonctions :
template.js/panier/keepalive
Appel dans le head via logic.php
************************************************** *
Script maitre login :
librairies :
core.js
jquery.min.js
jquery-migrate.min.js
html5fallback.js
update cart.js
template.js
fonctions :
template.js/panier/keepalive
Appel dans le head via logic.php
************************************************** *
Maintenant c'est l'aventure il faut retrouver les fichiers php où sont insérés les scripts des fonctions, ainsi que parfois où sont insérées des librairies si le unset ne fonctionne pas.
Dans la majorité des cas ce sont des overrides, donc les modifs resteront après MAJ, mais il y a quelques trucs qui doivent se faire en direct. Donc à refaire à chaque MAJ, mais vu que tout est noté ca va vite. Cepandant je suis tombé sur cet article : http://community.joomla.org/blogs/co...-for-html.html donc il y a moyen de bidouiller, me suis pas encore penché dessus.
Quelques modifs dans mon cas (et uniquement pour mon cas...)
************************************************** *********************
Virer bootstrap :
Dans librairies/cms/html/bootstrap.php
Modifier ligne 239 :
Code PHP:
//JHtml::_('script', 'jui/bootstrap.min.js', false, true, false, false, $debug);
if (JPATH_BASE == JPATH_ADMINISTRATOR) {JHtml::_('script', 'jui/bootstrap.min.js', false, true, false, false, $debug);}
//le template admin utilise bootstrap il faut lui laisser
Virer script bootstrap/tooltip :
Dans librairie/cms/html/bootstrap.php
Commenter ligne 506
************************************************** *****************************
Virer JCaption code
Dans : /libraries/cms/html/behavior.php
Commenter :
Code PHP:
//JHtml::_('script', 'system/caption.js', true, true);
// Attach caption to document
/*JFactory::getDocument()->addScriptDeclaration(
"jQuery(window).on('load', function() {
new JCaption('" . $selector . "');
});"
);*/
Virer keepalive lors du login (pas d'edition front end)
Dans librairies/cms/html/behavior.php
Commenter ligne 658 :
Code PHP:
//$document->addScriptDeclaration($script);
productdetails
on désamorce la fonction fancybox
Dans template/html/com_virtuemart/views/productsdetails/default_images.php
Commenter ligne 100 :
Code PHP:
//if(VmConfig::get('usefancy',1)){
//vmJsApi::js( 'fancybox/jquery.fancybox-1.3.4.pack');
//vmJsApi::css('jquery.fancybox-1.3.4');
/*$document = JFactory::getDocument ();
$imageJS = '
jQuery(document).ready(function() {
jQuery("a[rel=vm-additional-images]").fancybox({
"titlePosition" : "inside",
"transitionIn" : "elastic",
"transitionOut" : "elastic"
});
jQuery(".additional-images a.product-image.image-0").removeAttr("rel");
jQuery(".additional-images img.product-image").click(function() {
jQuery(".additional-images a.product-image").attr("rel","vm-additional-images" );
jQuery(this).parent().children("a.product-image").removeAttr("rel");
var src = jQuery(this).parent().children("a.product-image").attr("href");
jQuery(".main-image img").attr("src",src);
jQuery(".main-image img").attr("alt",this.alt );
jQuery(".main-image a").attr("href",src );
jQuery(".main-image a").attr("title",this.alt );
jQuery(".main-image .vm-img-desc").html(this.alt);
});
});
';;*/
//}
//$document->addScriptDeclaration ($imageJS);
************************************************** ******************
productdetails
Virer fonction reminder (vous ne pouvez acheter ce produit que comme multiple de X article)
Dans templates/montemplate/html/com_virtuemart/productdetails/default_addtocart.php
Supprimer ligne 78 :
Code PHP:
<script type="text/javascript">
function check(obj) {
// use the modulus operator '%' to see if there is a remainder
remainder=obj.value % <?php echo $step?>;
quantity=obj.value;
if (remainder != 0) {
alert('<?php echo $alert?>!');
obj.value = quantity-remainder;
return false;
}
return true;
}
</script>
************************************************** *********************
productdetails
Virer les quatre fonctions en bas de page :
Code PHP:
<script id="updDynamicListeners_js" type="text/javascript">//<![CDATA[
jQuery(document).ready(function() { // GALT: Start listening for dynamic content update.
// If template is aware of dynamic update and provided a variable let's
// set-up the event listeners.
if (Virtuemart.container)
Virtuemart.updateDynamicUpdateListeners();
}); //]]>
</script>
<script id="jsVars_js" type="text/javascript">//<![CDATA[
vmSiteurl = 'http://dev.brundubonsai.fr:8080/' ;
vmLang = '&lang=fr' ; //]]>
</script>
<script id="ready.vmprices_js" type="text/javascript">//<![CDATA[
jQuery(document).ready(function($) {
Virtuemart.product(jQuery("form.product"));
/*$("form.js-recalculate").each(function(){
if ($(this).find(".product-fields").length && !$(this).find(".no-vm-bind").length) {
var id= $(this).find('input[name="virtuemart_product_id[]"]').val();
Virtuemart.setproducttype($(this),id);
}
});*/
}); //]]>
</script>
<script id="vm.CartModule.UpdateModule_js" type="text/javascript">//<![CDATA[
jQuery(document).ready(function(){
jQuery("body").live("updateVirtueMartCartModule", function(e) {
jQuery("#vmCartModule").updateVirtueMartCartModule();
});
}); //]]>
</script>
Ligne 60 commenter :
Code PHP:
//echo vmJsApi::writeJS();
************************************************** ****************
category
Virer modal .js
templates/montemplate/html/com_virtuemart/category/default.php
Ligne 25 commenter :
Code PHP:
//JHTML::_ ('behavior.modal');
category
Virer fonction orderlist
templates/montemplate/html/com_virtuemart/category/default.php
commenter ligne 32 :
Code PHP:
/*$js = "
jQuery(document).ready(function () {
jQuery('.orderlistcontainer').hover(
function() { jQuery(this).find('.orderlist').stop().show()},
function() { jQuery(this).find('.orderlist').stop().hide()}
)
});
";*/
$document = JFactory::getDocument ();
//$document->addScriptDeclaration ($js);
************************************************** *********************
category
Ajouter les trois fonctions dans le script maitre
(qui ont été désactivés Dans modules/mod_virtuemart_cart/mod_virtuemart_cart.php
Ligne 60 commenter :
Code PHP:
//echo vmJsApi::writeJS();)
Code PHP:
/**/
vmSiteurl = 'http://dev.brundubonsai.fr:8080/' ;
vmLang = '&lang=fr' ;
/*js-recalculate*/
jQuery(document).ready(function($) {
Virtuemart.product(jQuery("form.product"));
/*$("form.js-recalculate").each(function(){
if ($(this).find(".product-fields").length && !$(this).find(".no-vm-bind").length) {
var id= $(this).find('input[name="virtuemart_product_id[]"]').val();
Virtuemart.setproducttype($(this),id);
}
});*/
});
/*fonction panier*/
jQuery(document).ready(function(){
jQuery("body").live("updateVirtueMartCartModule", function(e) {
jQuery("#vmCartModule").updateVirtueMartCartModule();
});
});
Virtuemart
virer popup.js
Creer dans template override de sublayouts/askrecomjs.php en enlevant else{facebox blabla}
************************************************** *********************
Maintenant que les scripts maitre sont prets, on supprime les appels de toutes les librairies dans le index.php et le logic.php, et on les insère soi même aux bons endroits en fonction des views/id/itemid.
Puis dans l'admin virtuemart/configuration/templates/Activation des style CSS & Javascripts on désactive tout.
Ce qui donne au final pour mon cas :
Logic.php :
Code PHP:
<?php
defined('_JEXEC') or die;
$app = JFactory::getApplication();
$doc = JFactory::getDocument();
$params = $app->getParams();
$view = JRequest::getCmd('view');
$id = JRequest::getVar('id');
$Itemid = JRequest::getVar('Itemid');
$tpath = $this->baseurl.'/templates/'.$this->template;
$links = $this->params->get('links');
$buttons = $this->params->get('buttons');
$hfonts = $this->params->get('hfonts');
$bfonts = $this->params->get('bfonts');
$background = $this->params->get('background');
$container = $this->params->get('container');
unset($doc->_styleSheets[JURI::root(true) . '/components/com_virtuemart/assets/css/jquery.fancybox-1.3.4.css?vmver=8847']);
unset($doc->_styleSheets[JURI::root(true) . '/components/com_virtuemart/assets/css/vmpanels.css']);
unset($doc->_styleSheets[JURI::root(true) . '/components/com_virtuemart/assets/css/validationEngine.template.css?vmver=8847']);
unset($doc->_styleSheets[JURI::root(true) . '/components/com_virtuemart/assets/css/validationEngine.jquery.css?vmver=8847']);
unset($doc->_styleSheets[JURI::root(true) . '/components/com_virtuemart/assets/css/facebox.css?vmver=8847']);
unset($doc->_styleSheets[JURI::root(true) . '/media/system/css/modal.css']);
unset($doc->_styleSheets[JURI::root(true) . '/templates/system/css/general.css']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/bootstrap.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/mootools-core.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/core.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-noconflict.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-migrate.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/mootools-core.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/core.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/caption.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/punycode.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/validate.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/html5fallback.js']);
unset($doc->_scripts[JURI::root(true) . '/components/com_virtuemart/assets/js/vmtabs.js?vmver=8847']);
unset($doc->_scripts[JURI::root(true) . '/components/com_virtuemart/assets/js/facebox.js?vmver=8847']);
$menu = $app->getMenu();
$active = $app->getMenu()->getActive();
$pageclass = $params->get('pageclass_sfx');
$this->setGenerator(null);
$head = $doc->getHeadData();
unset($head['metaTags']['http-equiv']);
$doc->setHeadData($head);
if ($view == 'article' && $id == '72') {
$doc->addStyleSheet(''.$tpath.'/css/master-accueil.css');
}
if (($view == 'article' && $id != '72') || $view == 'orders' || $view == 'remind' || $view == 'reset' || $view == 'login') {
$doc->addStyleSheet(''.$tpath.'/css/master-article-or-orders.css');
}
if ($view == 'virtuemart' || $view == 'cart' || $view == 'vmplg') {
$doc->addStyleSheet(''.$tpath.'/css/master-virtuemart-or-cart.css');
}
if ($view == 'category') {
$doc->addStyleSheet(''.$tpath.'/css/master-category.css');
}
if ($view == 'productdetails') {
$doc->addStyleSheet(''.$tpath.'/css/master-productdetails.css');
}
if ($view == 'user' || $view == 'form') {
$doc->addStyleSheet(''.$tpath.'/css/master-user.css');
}
if ($view == 'vendor') {
$doc->addStyleSheet(''.$tpath.'/css/master-vendor.css');
}
if(JFactory::getApplication()->get('jquery') == false) {JFactory::getApplication()->set('jquery', true);}
//On appelle ici les scripts que l'on ne va pas différer
if ($view == 'user') {
$doc->addScript(''.$tpath.'/js/master-user.js','text/javascript');
}
if ($view == 'cart' || $view == 'vmplg') {
$doc->addScript(''.$tpath.'/js/master-cart-or-vmplg.js','text/javascript');
}
if ($view == 'vendor' && ($Itemid == '481' || $Itemid == '482')) {
$doc->addScript(''.$tpath.'/js/master-cgvml.js','text/javascript');
}
if ($view == 'vendor' && $Itemid == '479') {
$doc->addScript(''.$tpath.'/js/master-contact.js','text/javascript');
}
if ($view == 'orders') {
$doc->addScript(''.$tpath.'/js/master-orders.js','text/javascript');
}
if ($view == 'remind' || $view == 'reset') {
$doc->addScript(''.$tpath.'/js/master-remind-or-reset.js','text/javascript');
}
if ($view == 'login') {
$doc->addScript(''.$tpath.'/js/master-login.js','text/javascript');
}
?>
Code PHP:
<?php
defined('_JEXEC') or die;
require_once JPATH_THEMES.'/'.$this->template.'/logic.php';
?>
<!DOCTYPE html>
<html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>" >
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, user-scalable=yes">
<jdoc:include type="head" />
//Aucun appels css ou javascript ici
</head>
<body>
blablabla...
...
//On appelle ici les scripts maitres que l'on va différer
<!-- Javascript -->
<?php if (JRequest::getCmd('view') == 'article' && JRequest::getVar('id') == '72') : ?><script src="<?php echo $tpath ?>/js/master-accueil.js" defer="defer"></script><?php endif; ?>
<?php if (JRequest::getCmd('view') == 'article' && JRequest::getVar('id') != '72') : ?><script src="<?php echo $tpath ?>/js/master-article.js" async="async"></script><?php endif; ?>
<?php if (JRequest::getCmd('view') == 'virtuemart') : ?><script src="<?php echo $tpath ?>/js/master-virtuemart.js" defer="defer"></script><?php endif; ?>
<?php if (JRequest::getCmd('view') == 'productdetails') : ?><script src="<?php echo $tpath ?>/js/master-productdetails.js" defer="defer"></script><?php endif; ?>
<?php if (JRequest::getCmd('view') == 'category') : ?><script src="<?php echo $tpath ?>/js/master-category.js" defer="defer"></script><?php endif; ?>
</body>
</html>
Et ca envoie du paté sévère...