Caméléon: un thème différent par catégorie/page statique

Bonjour à tous,
J'ai fait un plug in pour Cyrille qui voulait faire du multisite sans gérer plusieurs instances de pluXML.
Il suffit de créer un dossier de thème pour chaque catégorie ou page statique qu'on souhaite distinguer des autres.
On peut ainsi changer radicalement la mise en page, les «widgets», les sidebars et leur contenu...

Il y a un descriptif pluscomplet là http://warriordudimanche.net/article0486/cameleon-changer-de-theme-en-fonction-des-categories-et-pages-statiques

et pour le téléchargement c'est là : http://repo.warriordudimanche.net/ZIPFILES/Cameleon.zip

Si ça peut servir à quelqu'un ;-)

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut Bronco

    J'ai vu dans les sources de ton plugin que tu utilises l'instruction php glob.
    Pour info, il me semble que glob est blacklisté par free.fr.
    Donc pour ceux qui voudrait utiliser ce plugin sur leur hébergement free, il y a de forte chance que le plugin ne fonctionne pas

    tu peux à la place utiliser ce genre de code qui fonctionne partout pour les lister les themes dispos et valides dans le dossier themes.
            $dossier = 'themes/';
    	$files = plxGlob::getInstance($dossier, true);
    		if($styles = $files->query("/[a-z0-9-_\.\(\)]+/i", "", "sort")) {
    			foreach($styles as $k=>$v) {
    				if(is_file($dossier.$v.'/infos.xml')) {
    			              .....
    				}
    			}
    		}
    

    Ici le dossier theme est codé en dur, ce qui est maladroit car le chemin est configurable dans les parametres de PluXml.
    Il faudrait donc faire référence à la valeur au paramètres racine_themes stocké dans le fichier renvoyé par path('XMLFILE_PARAMETERS')

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • broncobronco Member
    février 2017 modifié
    Oui, en effet, ces modifications sont tout-à-fait pertinentes (en particulier le chemin vers themes que je m'étais promis d'améliorer plus tard ;-)
    Merci !

    [EDIT] j'ai fait une modif en ce sens ;-) merci encore
  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut Bronco

    Encore quelques remarques :p

    1) cette ligne qui ne semble plus servir, elle peux être supprimée
    $theme_folders=glob('themes/*');
    

    2) dans le fichier infos.xml, enlève les entités html, tu peux laisser les caractères avec accent
    Exemple: th&egraveme => thème
    Sinon dans l'admin sur l'écran de gestion des plugins on lit th&egraveme et pas thème

    3) c'est peut etre volontaire mais dans le fichier infos.xlm tu as écris httpwarriordudimanche.net au lieu de http://warriordudimanche.net

    4) j'ai ce warning dans l'admin

    ( ! ) Warning: Invalid argument supplied for foreach() in \PluXml\plugins\Cameleon\Cameleon.php on line 25

    toujours tester avant un foreach si le tableau utilisé est renseigné, sinon il y a toujours un risque d'avoir ce genre warning
    if($theme_folders) {
      foreach($theme_folders as $t=>$nb){
        ...
      }
    }
    

    5) remplace la ligne
    $files = plxGlob::getInstance($this->theme_path, true);
    

    par
    $files = plxGlob::getInstance(PLX_ROOT.$this->theme_path, true);
    

    explication:

    $this->theme_path renvoie le chemin "themes/", or ce dossier n'est pas accessible à partir de l'admin si tu ne précises pas devant PLX_ROOT.

    donc l'instruction suivante ne renverra rien
    $theme_folders = $files->query("/[a-z0-9-_\.\(\)]+/i", "", "sort");
    

    donc array_flip va planter car cette instruction attend un tableau comme paramètre (paramètre vide ici car aucun dossier présent dans $files)

    du coup tu auras cette erreur: Warning: array_flip() expects parameter 1 to be array, boolean given in \PluXml\plugins\Cameleon\Cameleon.php on line 22

    en utilisant PLX_ROOT ça retournera à partir de l'admin "../../themes/" et "./themes/" coté visiteur. ça fonctionnera du coup dans les 2 contextes


    Merci pour ce plugin. Testé, il fait super bien le job

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Mea culpa: quand on fait un truc vite fait à la pelle de chantier en étant appelé toutes les 47 secondes par un membre de la famille, voilà ce que ça donne: un bout de code plein d'approximations !
    Merci à nouveau pour ces corrections ! j'ai modifié.
  • en y réfléchissant, ça me fait penser à http://wiki.pluxml.org/index.php?page=Installer+un+s%C3%A9lecteur+de+th%C3%A8mes.
    ça pourrait être intéressant d'avoir ce genre de plugin pour faire une démo avec plusieurs thèmes.

    par contre, si on se base sur la catégorie, qu'est ce qui se passe quand on en utilise plusieurs catégories ?
  • Justement: chaque catégorie qui possède un dossier theme à son nom provoque le changement de thème... sinon, le thème par défaut est utilisé
  • Oui, mais si tu as deux catégories et deux dossiers theme avec les mêmes noms ?
  • Ben tu cherches les ennuis ^^
    Si tu as deux catégories du même nom, à part le fait que ça semble con au premier abord ^^, elles pointeront vers le même dossier...
    :lol:
  • T'es con :D

    Je reprends mon explication : plouf plouf.

    Si tu as un article dans la catégorie A et dans la catégorie B (c'est possible avec PluXml) ET que tu as deux dossiers dans ton dossier themes qui s'appellerio categorie_a et categorie_b, c'est quel thème qui va s'afficher ? Celui par défaut ou un mix des deux thèmes ? Si c'est ça, je brûle un cierge chaque matin pour glorifier ton nom (ça je le fais déjà mais faut pas le dire).
  • StéphaneStéphane Member, Former PluXml Project Manager
    Moi je parie sur Jerry :cool:

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • :D
    En fait, le soucis semble être que la catégorie de $plxShow->catId() en mode article soit "home" quand l'article est multi catégorie... Je réfléchis pour voir...
  • Bon, j'ai modifié le plugin en conséquence, à la scie sauteuse et dans les interruptions intempestives: si un article est multiclassé, c'est la première catégorie disposant d'un dossier thème qui sera utilisée.
  • Ben voilà quand tu veux ]:D
  • On dirait Cyrille :D
  • C'est presque pareil sans "le" à la fin (comprenne qui pourra) ! :D
  • Hinhinhin ^^ Voilà un LE qui fait toute la différence :D
  • bon je reviens de Barcelone, tu te demandes vraiment pourquoi y a des profs d'espagnol, y a que des français là bas. C'est où la nouvelle version ?
  • :D Je dis la même chose aux élèves...
    Je serais bien tenté de te répondre «dans ton cul» mais ça ne ferait pas avancer le bouzin ^^
    Sinon, c'est la même adresse...
  • StéphaneStéphane Member, Former PluXml Project Manager
    :D :D :D
    excellent !!!
    m'avez bien faire rire sur ce coup :p

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • cyrille a écrit:
    bon je reviens de Barcelone, tu te demandes vraiment pourquoi y a des profs d'espagnol, y a que des français là bas. C'est où la nouvelle version ?

    Moi je suis à Valence (la 3ème plus grande ville d'Espagne), il y a déjà beaucoup moins de français qu'à Barcelone ;)
    Je suis allé visiter Barcelone en été 2015, je me suis fait un peu la même réflexion que toi, je n'arrêtais pas d'entendre parler français autour de moi dans la rue, ici et là, quand on a l'habitude d'entendre parler espagnol autour de soi, cela surprend...
  • Stéphane a écrit:
    :D :D :D
    excellent !!!
    m'avez bien faire rire sur ce coup :p

    et le jour où on diffuse nos logs jabber on aura certainement des textes complets à faire étudier aux développeurs sur les relations entre la MOA et la MOE.
  • bronco a écrit:
    :D Je dis la même chose aux élèves...
    Je serais bien tenté de te répondre «dans ton cul» mais ça ne ferait pas avancer le bouzin ^^
    Sinon, c'est la même adresse...

    bon ben je vais faire avancer le bouzin pour voir ce que les nouvelles corrections de monsieur ont réussi à casser
  • Bonsoir,
    J'ai pour l'instant simplement installé votre plugin mais avec le thème w3css http://wendling.xyz/ la page d'accueil et les page faq carte de site et contact sont décolorées. Auriez-vous une solution?
Connectez-vous ou Inscrivez-vous pour répondre.