Jump to content

Recommended Posts

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

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 by coeos.pro (see edit history)
Link to comment
Share on other sites

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

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

  • 3 weeks later...

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 by u_ny (see edit history)
Link to comment
Share on other sites

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 by J. Danse (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 3 months later...

@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

@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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...