v4 :: menu avec clas="current"

dans la version précédente de Pluxml j'avais réussi à faire que mon menu (de catégories) avait une class="current" et donc la catégorie sur laquelle on cliquait s'affichait en gras dans le menu. L'utilisateur sait donc dans quelle catégorie il se trouve et en + graphiquement c'est intéressant.

Mais dans la version 4, je ne trouve pas la solution. Quelqu'un sait-il comment faire ?

Merci.

Réponses

  • personne n'est intéressé par un menu avec class="current" pour spécifier, dans le menu, dans quelle catégorie ou page statique nous sommes ?
  • Je te fais ça la semaine prochaine...
  • C'est extremement gentil de ta part. Merci par avance.
  • @marama : sans te presser ni même imaginer que tu n'as que cela à faire, penses tu pouvoir réaliser ma requête pour cette semaine ?

    Cordialement
  • Bien sûr !
  • Quelle question !!! Comment ais-je pu douter !
  • StéphaneStéphane Member, Former PluXml Project Manager
    @marama : j'ai déjà réalisé depuis quelque temps la demande de SapinTremblant pour la liste des menus et la liste des catégories. c'est dans le depot svn de gestion

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • cela signifie -t-il que je puisse récuper le code ou le(s) fichier(s) modifé(s) ?

    Si oui, à quelle adresse ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    Avant de te donner éventuellement le code, il faut que l'on vérifie si le code est compatible avec la beta 4, car les modifications ont été faites sur une version en cours de développement.

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • @Stéphane : je vais regarder tt ça
  • maramamarama Member
    janvier 2009 modifié
    Pour appliquer une classe CSS "active" sur la catégorie et/ou page statique courante, il va falloir modifier deux méthodes de la classe plxShow (core/lib/class.plxShow.php) :
    Remplacer la méthode (fonction) "staticList" par :
    function staticList($extra='') {
    
    		# Si on a la variable extra, on affiche un lien vers la page d'accueil
    		if($extra != '') {
    			$title = htmlspecialchars($this->plxMotor->aConf['title'],ENT_QUOTES,PLX_CHARSET);
    			if($this->plxMotor->mode == 'home' AND $this->plxMotor->cible == '')
    				echo '<li class="active"><a href="./" title="'.$title.'">'.$extra.'</a></li>';
    			else
    				echo '<li><a href="./" title="'.$title.'">'.$extra.'</a></li>';
    		}
    		# On verifie qu'il y a des pages statiques
    		if($this->plxMotor->aStats) {
    			foreach($this->plxMotor->aStats as $k=>$v) {
    				if($v['readable'] == 1 AND $v['active'] == 1) { # La page existe bien et elle est active
    					$name = htmlspecialchars($v['name'],ENT_QUOTES,PLX_CHARSET);
    					$url = './?static'.intval($k).'/'.$v['url'];
    					if($this->plxMotor->mode == 'static' AND $this->plxMotor->cible == $k)
    						echo '<li class="active"><a href="'.$url.'" title="'.$name.'">'.$name.'</a></li>';
    					else
    						echo '<li><a href="'.$url.'" title="'.$name.'">'.$name.'</a></li>';
    				}
    			} # Fin du while
    		}
    	}
    
    Remplacer la méthode (fonction) "catList" par :
    function catList($extra='', $format='#cat_name') {
    
    		# Si on a la variable extra, on affiche un lien vers la page d'accueil (avec $extra comme nom)
    		if($extra != '') {
    			$title = htmlspecialchars($this->plxMotor->aConf['title'],ENT_QUOTES,PLX_CHARSET);
    			if($this->plxMotor->mode == 'home' AND $this->plxMotor->cible == '')
    				echo '<li class="active"><a href="./" title="'.$title.'">'.$extra.'</a></li>';
    			elseif($this->plxMotor->mode == 'article' AND $this->plxMotor->plxRecord_arts->f('categorie') == 'home')
    				echo '<li class="active"><a href="./" title="'.$title.'">'.$extra.'</a></li>';
    			else
    				echo '<li><a href="./" title="'.$title.'">'.$extra.'</a></li>';
    		}
    		# On verifie qu'il y a des categories
    		if($this->plxMotor->aCats) {
    			foreach($this->plxMotor->aCats as $k=>$v) {
    				if($v['articles'] > 0) { # On a des articles
    					$v['name'] = htmlspecialchars($v['name'],ENT_QUOTES,PLX_CHARSET);
    					# On modifie nos motifs
    					$name = str_replace('#cat_id',intval($k),$format);
    					$name = str_replace('#cat_name',$v['name'],$name);
    					$name = str_replace('#art_nb',$v['articles'],$name);
    					# Ok
    					$url = './?categorie'.intval($k).'/'.$v['url'];
    					if($this->plxMotor->mode == 'categorie' AND $this->plxMotor->cible == $k)
    						echo '<li class="active"><a href="'.$url.'" title="'.$v['name'].'">'.$name.'</a></li>';
    					elseif($this->plxMotor->mode == 'article' AND $this->plxMotor->plxRecord_arts->f('categorie') == $k)
    						echo '<li class="active"><a href="'.$url.'" title="'.$v['name'].'">'.$name.'</a></li>';
    					else
    						echo '<li><a href="'.$url.'" title="'.$v['name'].'">'.$name.'</a></li>';
    				}
    			} # Fin du while
    		}
    	}
    
    De cette façon, une classe css "active" sera appliquée sur la balise "li" de la catégorie ou page statique active.

    En test ici : http://blog.flox-arts.net
  • décembre 2008 modifié
    MAGNIFIQUE marama et Stephane

    message lu, code copié/collé, css adaptée, fichiers uploadés et la magie opére....

    merci.
  • décembre 2008 modifié
    un petit truc me chagrinne.
    Lorsque l'on entre dans un article, le menu perd le class="active" de la catégorie de cet article.

    Comment faire pour contourner cela ?
  • Ouch, sans être grand connaisseur en la matière (je viens de découvrir pluxml), je dirai à 1e vue que cela risque d'être compliqué.

    Le détail d'un article donne une url en /?articlexx et ne fait pas apparaître l'appartenance à une catégorie.

    Ce qui me fait émettre une idée sur l'écriture des url :
    à savoir ne pas faire transparaître le mode (static, catégorie ou article) mais le nom.
    ex : http://www.monsite.com/nom_page_statique
    ou http://www.monsite.com/nom_categorie
    et pour un article d'une catégorie :
    http://www.monsite.com/nom_categorie/nom_article
    On aurait ainsi une url "propre".

    Quoiqu'il en soit, lorsque l'on créé un article, il est affilié à une catégorie.
    On doit donc pouvoir retrouver la parenté et appliquer la classe active à celle-ci. Isn't it ?
  • SapinTremblant a écrit:
    un petit truc me chagrinne.
    Lorsque l'on entre dans un article, le menu perd le class="active" de la catégorie de cet article.

    Comment faire pour contourner cela ?
    Salut,

    Je viens de modifier la fonction pour que ça marche également en mode article.
    Avec Pluxml tout est possible ;)
  • @marama : formidable. tout fonctionne à la perfection du coup.

    merci pour cette dernière modification.
  • StéphaneStéphane Member, Former PluXml Project Manager
    marama a écrit:
    SapinTremblant a écrit:
    un petit truc me chagrinne.
    Lorsque l'on entre dans un article, le menu perd le class="active" de la catégorie de cet article.

    Comment faire pour contourner cela ?
    Salut,

    Je viens de modifier la fonction pour que ça marche également en mode article.
    Avec Pluxml tout est possible ;)
    Salut marama

    où as-tu fais la modif ? c'est pour comparer avec le code précédent et voir ce qu'il manquait.

    Merci

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • La modif est faite dans le code plus haut msg #12.

    marama a écrasé la modif précédente.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Ok merci SapinTremblant

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

Connectez-vous ou Inscrivez-vous pour répondre.