Gestion d'onglets en session

Résolu
sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 - 28 avril 2010 à 11:23
sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 - 30 avril 2010 à 21:41
Bonjour!

Bon, je post très rarement sur des forums, trouvant la plupart du temps moi même les solutions à mes problèmes...mais...là...je sèche. (3 jours que je bloc là dessus....)

En fait voilà :
Je monte une classe de gestion d'onglets dont ces derniers, leurs position, celui actif, le dernier ainsi que le pré-actif sont stockés en session.
(l'info actif, pre-actif et dernier sert à la mise en page ultérieur)
Je ne vous livrerais pas toute la classe mais juste la méthode qui coince, en l'occurrence celle qui sert à déclarer actif un onglet donné à partir de son id.
J'ai déjà eu des soucis avec une classe de ce type qui ne restait pas en session (visiblement à cause d'index integer), mais là tout se passe bien à ce niveau, mais quand je var_dump, les clés 'active', 'endTab' etc ne sont pas effacées comme elles le devraient.
Je passe sûrement à côté d'une évidence, mais j'ai beau chercher, je ne trouve pas.
protected function setActiveTab($sIdTab) {

$mPosTab = $this->getPosTab($sIdTab); 
//renvoi la position de l'onglet à activer (sa clé)
$iActiveTab = $this->getActiveTab(); 
//renvoi la position de l'onglet actif (sa clé)
$iCountOfTabs = $this->getCountOfTabs();
//renvoi le nombre d'onglets

if ((!empty($this->aTabs) && (false !== $mPosTab)) && ($iActiveTab !== $mPosTab)) {
//vérification pour éviter un traitement inutile
if (isset($this->aTabs[$iActiveTab]['active']))
unset($this->aTabs[$iActiveTab]['active']);
if (isset($this->aTabs[$iActiveTab-1]['preActive']))
unset($this->aTabs[$iActiveTab-1]["preActive"]);
if (isset($this->aTabs[$iCountOfTabs]["endTab"]))
unset($this->aTabs[$iCountOfTabs]["endTab"]);
//je vire tous les index active, preActive, endTab
foreach($this->aTabs as $key=>$aTab) {
if (in_array($this->sIdTab, $aTab)) {
$this->aTabs[(string)$key]['active'] = true;
if ($key != 0)
$this->aTabs[$key-1]['preActive'] = true;
break;
}
}
$this->aTabs[$iCountOfTabs-1]['endTab'] = true;
// -1 parce que mon tableau par de 0
return $this->updateTabsMemory();
//copie le tableau en session en écrasant l'ancien
}
return false;
//si ça n'a rien fait
}


le var_dump devrait ressembler à quelque chose comme ça :
array(2) {
  [0]=>
  array(5) {
    ["url"]=>
    string(4) "url2"
    ["title"]=>
    string(8) "Onglet 2"
    ["idTab"]=>
    string(1) "2"
    ["preActive"]=>
    bool(true)
  }
  [1]=>
  array(4) {
    ["url"]=>
    string(4) "url3"
    ["title"]=>
    string(16) "Onglet plus long"
    ["idTab"]=>
    string(1) "3"
    ["active"]=>
    bool(true)
    ["endTab"]=>
    bool(true)
  }
}

Si quelqu'un a une idée....
Pour précision, avant que je rajoute les clés "preActive" et "endTab", ça marchait très bien.

D'avance merci à ceux qui prendront le temps de me lire :)

2 réponses

sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 4
30 avril 2010 à 21:41
Bon, bein ça marche.
J'ai galérer pendant une semaine, mais bon, c'est bien fait pour moi.
Ça m'apprendra à mettre des choses dans des méthodes qui n'ont rien à y faire.
(l'info actif, pre-actif et dernier sert à la mise en page ultérieur)

Ben voilà, je n'ai laissé actif pour s'y retrouver, je me débrouille autrement pour le reste, mais à l'étape finale de présentation.
Je n'ai donc pas trouvé la vrai raison du pourquoi mes unset ne se faisaient pas, mais dans tous les cas, j'en tire une bonne leçon.
...et la nouvelle version de cette méthode fait 12 lignes de moins...

Bref, je me réponds à moi même, histoire de mettre ce post en résolu.
3
sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 4
28 avril 2010 à 11:25
désolé pour les couleurs.... c'est pas très lisible là du coup...
0
Rejoignez-nous