Utiliser des variables de manière non redondante

Petit nouveau ! | 2 Messages

25 janv. 2012, 18:37

Bonjour,

Je viens vers vous pour une problématique sur laquelle je bloque bêtement...
Je suis en train de créer un menu déroulant.
Ce menu est généré automatiquement via un appel de rubriques sous php (wordpress).
Je souhaite ajouter une classe à mes sous-menus.
Ces classes de sous-menus devront être numérotées de 1 à X (selon le nombre de sous-menus créés).

Actuellement, j'ai ce code là :

Code : Tout sélectionner

function start_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); for ($numero = 0; $numero < 10 ; $numero++){ $output .= '<ul class="sub-menu" class="'. $numero . '">'; }; }
Ce code m'ajoute bien la classe souhaitée dans mon code.
Mais pour le premier sous-menu par exemple, au lieu de me créer un <ul class="sub-menu" class="1">, il me créé <ul class="sub-menu" class="1"> <ul class="sub-menu" class="2"> <ul class="sub-menu" class="3"> ... <ul class="sub-menu" class="10">.
Je souhaite donc savoir comment "exclure", au fur et à mesure, les numéros de classes déjà utilisés.

Si je résumé : je souhaite créer des classes numérotées de manière unique et croissante.
Mon premier sous-menu sera donc <ul class="sub-menu" class="1">, mon deuxième sous-menu <ul class="sub-menu" class="2">, etc !

En espérant avoir été clair, et en espérant que vous m'apporterez une solution !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 janv. 2012, 19:14

Salut,

Il me semble que l'attribut class est unique tu ne peu donc pas faire ainsi.
Par contre class="sub-class 1" est possible.
Après il faut que tu utilise une variable globale que tu incrémente à chaque fois Ue tu créer un nouveau ul, en gros le compteur de ta fonction doit être globale.
Ceci dit objet peu être plus "clair" à utiliser qu'une variable globale.
Par exemple
Class compteur{
private $cpt;
Public __construct(){
$this->cpt =0;
}

public getCpt(){
this->cpt ++;
return $his->cpt;
}
}
À chaque appel de getCpt() tu garde la même valeur. Tu peux même imaginer faire une classe statique si tu veux.


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 2 Messages

26 janv. 2012, 10:16

Merci pour ton apport, j'ai pu résoudre mon problème :)

J'ai réutilisé ton code
var $cpt;
	function __construct(){
	$this->cpt =0;
	}	
	function getCpt(){
	$this->cpt++;
	return $this->cpt++;
	}
que j'appelle comme cela
	function start_lvl(&$output, $depth) {
		$indent = str_repeat("\t", $depth);
		$output .= '<ul class="sub-menu' . $this->cpt++ . '">';
	}
Le tout situé dans une même class.

Maintenant tout est bon, merci encore !