Lien accueil vs catégorie
Jerry Wham
Member
dans Entraide
Bonjour,
J'ai un article qui est classé dans la catégorie 001 ainsi que dans la catégorie "page d'accueil" afin que l'article apparaisse sur l'accueil du site.
Jusque là tout va bien.
Le problème est lorsque j'ouvre l'article, la catégorie activée dans le menu est l'accueil et non la catégorie 001. Ceci est toujours le cas, quelle que soit la catégorie à laquelle appartient l'article.
J'ai regardé le code de la méthode catList de plxShow.
N'y a-t-il pas moyen de paramétrer ce comportement ou est-ce que j'ai mal utilisé les fonctions existantes ???
J'ai un article qui est classé dans la catégorie 001 ainsi que dans la catégorie "page d'accueil" afin que l'article apparaisse sur l'accueil du site.
Jusque là tout va bien.
Le problème est lorsque j'ouvre l'article, la catégorie activée dans le menu est l'accueil et non la catégorie 001. Ceci est toujours le cas, quelle que soit la catégorie à laquelle appartient l'article.
J'ai regardé le code de la méthode catList de plxShow.
$name = str_replace('#cat_status',($this->catId()=='home'?'active':'noactive'), $name);
prendra toujours le pas sur
$name = str_replace('#cat_status',($this->catId()==intval($k)?'active':'noactive'), $name);
car il est déclaré avant dans le code.N'y a-t-il pas moyen de paramétrer ce comportement ou est-ce que j'ai mal utilisé les fonctions existantes ???
0
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
/** * Méthode qui retourne l'id de la catégorie en question (sans les 0 supplémentaires) * * @return int ou string * @scope home,categorie,article,tags,archives * @author Florent MONTHEL **/ public function catId() { # On va verifier que la categorie existe en mode categorie if($this->plxMotor->mode == 'categorie' AND isset($this->plxMotor->aCats[ $this->plxMotor->cible ])) return intval($this->plxMotor->cible); # On va verifier que la categorie existe en mode article if($this->plxMotor->mode == 'article') AND isset($this->plxMotor->aCats[ $this->plxMotor->plxRecord_arts->f('categorie') ])) return intval($this->plxMotor->plxRecord_arts->f('categorie')); # On va vérifier si c'est la catégorie home if($this->plxMotor->mode == 'categorie' OR $this->plxMotor->mode == 'home' OR $this->plxMotor->mode == 'article') return 'home'; }Cela vient du contrôle effectué si on est en mode article :# On va verifier que la categorie existe en mode article if($this->plxMotor->mode == 'article' AND isset($this->plxMotor->aCats[ $this->plxMotor->plxRecord_arts->f('categorie') ])) return intval($this->plxMotor->plxRecord_arts->f('categorie'));$this->plxMotor->plxRecord_arts->f('categorie')étant égal à "home,001", le contrôle sera toujours faux et c'est donc home qui sera toujours retourné.Je propose à la place de faire ceci comme test :
/** * Méthode qui retourne l'id de la catégorie en question (sans les 0 supplémentaires) * * @return int ou string * @scope home,categorie,article,tags,archives * @author Florent MONTHEL **/ public function catId() { # On va verifier que la categorie existe en mode categorie if($this->plxMotor->mode == 'categorie' AND isset($this->plxMotor->aCats[ $this->plxMotor->cible ])) return intval($this->plxMotor->cible); # On va verifier que la categorie existe en mode article if($this->plxMotor->mode == 'article') { $cat = explode(',',$this->plxMotor->plxRecord_arts->f('categorie')); foreach ($cat as $key => $id) { if(isset($this->plxMotor->aCats[ $id ])) return intval($id); } } # On va vérifier si c'est la catégorie home if($this->plxMotor->mode == 'categorie' OR $this->plxMotor->mode == 'home' OR $this->plxMotor->mode == 'article') return 'home'; }Si on est sur la page d'accueil, c'est bien "home" qui sera retourné et donc le menu accueil qui sera activé.Par contre si on est sur la page article, c'est la première catégorie active qui sera retournée. Si l'article appartient à plusieurs catégorie, c'est la première catégorie (celle dont l'id est le plus petit) qui sera retournée et activée dans le menu.
Si Stéphane est d'accord, je posterai la modif sur github.