Lien accueil vs catégorie

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.
$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 ???

Réponses

  • Jerry WhamJerry Wham Member
    juillet 2014 modifié
    En regardant un peu mieux, ce n'est pas la méthode catList qui pose problème mais catId qui retourne systématiquement home si l'article est classé en page d'accueil et dans une autre catégorie.
    /**
    	 * 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.
Connectez-vous ou Inscrivez-vous pour répondre.