Bonjour, je débute avec avec cakephp et bootstrap et j'ai un souci de liens avec les nav-tab. Dans mon espace membre, j'ai un sous menu par onglet géré avec les nav-tab de bootstrap. quand on clic ça change bien les onglet, mais c'est tout le reste qui ne fonctionne pas, réécriture d'url, historique et ciblage distant.

monsite/espacemembre/idmembre#mon_Onglet_Actif

souci 1 : la réécriture d'url : quand je passe d'un onglet à l'autre, j'aimerai que l'id de l'onglet apparaisse dans l'url

souci 2 : l'history : quand je remonte dans l'historique, la reconnaissance auto du hash fonctionne mais pas le tab.(show)
du coup on reviens pas sur l'onglet voulu

souci 3 : le router connect : je parviens pas à récupérer les paramètres du moment qu'il y a un #

j'ai testé plusieur scripts mais aucun ne passe, cakephp doit me bloquer quelquepart mais je trouve pas ou, mais impossible de retoucher l'url...

2 réponses


j'ai trouvé ce script intéréssant, mais il bug encore pas mal.
au premier load de la vue, tout marche, mais si on change de vue et qu'on revient, ça ne marche plus... pourquoi ?

<?= $this->Html->scriptStart(); ?>

$(document).ready(function() {
  /* Automagically jump on good tab based on anchor; for page reloads or links */
  if(location.hash) {
    $('a[href=' + location.hash + ']').tab('show');
  }

  /* Update hash based on tab, basically restores browser default behavior to fix bootstrap tabs */
  $(document.body).on("click", "a[data-toggle]", function(event) {
    location.hash = this.getAttribute("href");
  });
});

/* on history back activate the tab of the location hash if exists or the default tab if no hash exists */
$(window).on('popstate', function() {
  var anchor = location.hash || $("a[data-toggle=tab]").first().attr("href");
  $('a[href=' + anchor + ']').tab('show');
});

<?= $this->Html->scriptEnd(); ?>

en plus le ciblage d'une tab depuis une autre vue ne fonctionne pas non plus, impossible de récupérer le hash dans le conntroller via le router connect

//route.php
Router::connect(
        '/association/:id#:tab', 
        array('controller' => 'espacemembres', 'action' => 'index'),
        array('pass'=>array('id','tab'),array('id'=>'[0-9/-]+','tab'=>'[a-z0-9/#]+'))
    );

 //espacemembresController.php
 public function index($id = null,$tab = null){
        debug($tab);
        $profil = $this->User->find('all',array(
            'fields'     => array(...),
            'conditions' => array('User.id'=>$id)
        ));

        $this->set(compact('profil','tab'));

    }

rien ne passe c'est forcement null