u_ny Posted August 1, 2012 Share Posted August 1, 2012 Il est possible d'ajouter des fichiers css (ou js, peu importe) grâce à l'override, j'aimerais savoir s'il est possible de supprimer un fichier css. Par exemple, dans frontController, supprimer global.css. Possible ou pas ? (Il y a bien addCSS(), pas de delCSS() ? ) Link to comment Share on other sites More sharing options...
coeos.pro Posted August 1, 2012 Share Posted August 1, 2012 Possible ou pas ? pas à ma connaissance en tout cas Link to comment Share on other sites More sharing options...
u_ny Posted August 2, 2012 Author Share Posted August 2, 2012 Mazette. Merci de ta réponse, même si je suis un peu déçu Hum, si quelqu'un a une idée, ou une piste... Link to comment Share on other sites More sharing options...
coeos.pro Posted August 2, 2012 Share Posted August 2, 2012 (edited) en fait tu peux essayer de faire un override de FrontController en mettant : class FrontController extends FrontControllerCore { public function setMedia() { if(Tools::getValue('controller', 'index') != 'ta_page') $this->addCSS(_THEME_CSS_DIR_.'global.css', 'all'); $this->addjquery(); $this->addjqueryPlugin('easing'); $this->addJS(_PS_JS_DIR_.'tools.js'); if (Tools::isSubmit('live_edit') && Tools::getValue('ad') && (Tools::getValue('liveToken') == sha1(Tools::getValue('ad')._COOKIE_KEY_))) { $this->addJqueryUI('ui.sortable'); $this->addjqueryPlugin('fancybox'); $this->addJS(_PS_JS_DIR_.'hookLiveEdit.js'); $this->addCSS(_PS_CSS_DIR_.'jquery.fancybox-1.3.4.css', 'all'); // @TODO } if ($this->context->language->is_rtl) $this->addCSS(_THEME_CSS_DIR_.'rtl.css'); // Execute Hook FrontController SetMedia Hook::exec('actionFrontControllerSetMedia', array()); } } exemple fonctionnant sous 1.5 (non testé) Edited August 2, 2012 by coeos.pro (see edit history) Link to comment Share on other sites More sharing options...
olea Posted August 3, 2012 Share Posted August 3, 2012 Quel est l'intérêt de supprimer ? Le addCSS() permet d'ajout un fichier CSS dans le rendu HTML. Plutôt que de le supprimer, il faut tester s'il est utile ou pas pour décider de l'insérer ou pas. Il faut donc surcherger la partie qui fait le addCSS() Link to comment Share on other sites More sharing options...
coeos.pro Posted August 3, 2012 Share Posted August 3, 2012 (edited) oui c'est ce que je mettais dans mon code : if(Tools::getValue('controller', 'index') != 'ta_page') $this->addCSS(_THEME_CSS_DIR_.'global.css', 'all'); Edited August 3, 2012 by coeos.pro (see edit history) Link to comment Share on other sites More sharing options...
J. Danse Posted August 4, 2012 Share Posted August 4, 2012 Cependant, pour revenir sur ce qui a été avancé plus haut: il est tout à fait possible de faire une suppression de CSS. Il faut savoir que la méthode addCSS() rajoute une entrée dans un tableau (css_files) de la classe Controller. Ce n'est qu'au moment du displayHeader que les css sont intégrés au thème. Il est donc possible de retirer une entrée du tableau avant. Link to comment Share on other sites More sharing options...
u_ny Posted August 20, 2012 Author Share Posted August 20, 2012 (edited) Merci pour vos réponses, je viens de relire le topic et je me rends compte que j'ai pris un très mauvais exemple. Prenons-en un autre plus concret: dans ProductController : public function setMedia() { parent::setMedia(); $this->addCSS(_THEME_CSS_DIR_.'product.css'); $this->addCSS(_PS_CSS_DIR_.'jquery.fancybox-1.3.4.css', 'screen'); $this->addJqueryPlugin(array('fancybox', 'idTabs', 'scrollTo', 'serialScroll')); $this->addJS(array( _THEME_JS_DIR_.'tools.js', _THEME_JS_DIR_.'product.js' )); if (Configuration::get('PS_DISPLAY_JQZOOM') == 1) $this->addJqueryPlugin('jqzoom'); } Si on override setMedia(), parent::setMedia() appelle quand même les css et js du productController parent. On peut donc avec l'override ajouter facilement des css et js, mais ce qui m'intéresse, et ce que je ne comprends pas, c'est de savoir comment supprimer un des appels du fichier parent. Par exemple dans ce cas, jquery.fancybox-1.3.4.css ou le plugin jQuery serialScroll. Edited August 20, 2012 by u_ny (see edit history) Link to comment Share on other sites More sharing options...
Dev On Web Posted August 20, 2012 Share Posted August 20, 2012 Bonjour, Tu peux parfaitement copier intégralement la fonction dans ton override et supprimer l'appel au parent ! Supprimer entre guillemet, le parent à appeler sera celui du FrontController et non celui de ProductController dans ton cas. Link to comment Share on other sites More sharing options...
J. Danse Posted August 20, 2012 Share Posted August 20, 2012 (edited) Bonjour, La classe Controller est celle qui regroupe la liste des fichiers CSS (ou JS) à implémenter dans le header. La propriété css_files est celle qui nous intéresse. En voici son affichage lorsque j'ouvre mon site (outil de debug utilisé): Array ( [/site/themes/tbimmo/css/global.css] => all [/site/modules/blockpermanentlinks/blockpermanentlinks.css] => all [/site/modules/blocksocial/blocksocial.css] => all [/site/modules/blockcategories/blockcategories.css] => all [/site/modules/blockcms/blockcms.css] => all [/site/modules/blocktags/blocktags.css] => all [/site/js/jquery/plugins/autocomplete/jquery.autocomplete.css] => all [/site/themes/tbimmo/css/product_list.css] => all [/site/modules/blockcontactinfos/blockcontactinfos.css] => all [/site/modules/favoriteproducts/favoriteproducts.css] => all [/site/modules/homefeatured/homefeatured.css] => all [/site/modules/blocknewsletter/blocknewsletter.css] => all [/site/modules/blocktopmenu/css/superfish-modified.css] => all [/site/modules/homeslider2/bx_styles.css] => all ) Si je fais ceci: unset($this->css_files['/site/themes/tbimmo/css/global.css']); le fichier css n'est pas inclus. C'est ce que j'illustrais plus haut... Edited August 20, 2012 by J. Danse (see edit history) 1 Link to comment Share on other sites More sharing options...
Aldi M Posted December 14, 2012 Share Posted December 14, 2012 @J. Danse: Où dois-je mettre la position 'unset' commande? Pourriez-vous nous dire plus précisément, s'il vous plaît. Merci. Link to comment Share on other sites More sharing options...
DevNet Posted December 14, 2012 Share Posted December 14, 2012 @J. Danse: Où dois-je mettre la position 'unset' commande? Pourriez-vous nous dire plus précisément, s'il vous plaît. Merci. Bonjour, Dans votre nouveau controller de page. La méthode de J. Danse est la plus pratique pour ce que vous voulez faire. Les css sont ajoutés grâce à addCSS() au fur et à mesure du traitement en pré compilation de smarty. Ce qui signifie que tant que smarty n'a pas sortie l'entête http, vous êtes en mesure de changer le contenu du tableau css_files . A+ Link to comment Share on other sites More sharing options...
Aldi M Posted December 14, 2012 Share Posted December 14, 2012 @DevNet: Super! Il fonctionne! Je vous remercie! Juste à noter, pour la méthode Javascript est un peu différente, car l'URL est la 'value', par opposition à la 'key' comme le CSS. Array ( [0] => [/site/themes/tbimmo/js/script-name.js]... etc Donc, pour désactiver un fichier JS, vous pouvez faire quelque chose comme ceci: $val = _PS_JS_DIR_.'jquery/plugins/plugin-name/jquery.plugin-name.js'; $array = $this->js_files; $key = array_search($val, $array); if($key !== false) { unset ($this->js_files[$key]); } Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now