Problème pour menu avec onglets sous Symfony2 [Résolu/Fermé]

Signaler
-
 Pépito -
Bonjour,

Je vous explique mon problème. J'ai une entité client pour laquelle j'enregistre dans ma base de données, divers clients. Pour chaque client j'ai créé une page avec un menu composé d'onglets. Chaque onglet représente un client différents et sur chaque page de l'onglet nous avons les infos suivantes relatives au client : Infos perso, comptes, société.

Je génère mes onglets avec une boucle PHP {% for %} :

{% for client in clients %}<li role="presentation"><a href="#tab_clients" rel="nofollow" target="_blank" aria-controls="clients" role="tab" data-toggle="tab">{{ client.name }}</a></li>{% endfor %}


J'ai lié toutes mes infos relatives au client à mon entité client, ce qui fait que pour chaque client, seules les infos relatives au client sélectionné s'affichent. En revanche mon problème survient, lorsque je clique sur chaque onglet. En effet, si j'ai plusieurs clients donc plusieurs onglets, seul le premier onglets donc les infos relatives au premier client s'afficheront et les autres onglets ne seront pas pris en compte.

Je souhaiterais donc savoir comment réalisé ça sous Symfony2 avec soit dans mon controller soit dans la vue, une requête pour que pour chaque onglets les infos s'affichent pour chaque client et que la navigation fonctionne donc correctement.

Merci d'avance

2 réponses

UP ! Quelqu'un aurait-il une réponse ? :/
Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
430
Salut,

Si j'ai bien compris, tu utilises les "togglable tabs" de bootstrap pour afficher les infos des clients dans différents onglets :
https://getbootstrap.com/javascript/#tabs

Si ta boucle fonctionne correctement, ton code ci-dessus doit donc générer les onglets de navigation (<!-- Nav tabs --> dans l'exemple de la doc) permettant d'afficher les contenus des panels (<!-- Tab panes --> dans l'exemple de la doc).
Où est le code responsable de la génération du contenu des panels (une deuxième boucle normalement) ?

Enfin, chaque onglet de navigation doit posséder une balise a dont l'attribut href est égal à l'identifiant du panel correspondant, or pour l'instant tout tes onglets de navigation pointe sur le panel #tab_clients.
Cet attribut devrait être générer dynamiquement avec par exemple l'identifiant de l'utilisateur afin que chaque panel est un identifiant différent.

Bonne journée,
Il faudrait que je place ma boucle à quel niveau du coup ? Parce qu'il me semble pas que j'ai besoin d'une boucle, si ?

Dans mon code généré j'ai que un seul panel qui s'affiche, celui du premier onglet
Je ne vois pas du tout pourquoi seul le premier onglet pris en compte :/
Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
430
Puisque tu n'a qu'un seul panel, seul l'onglet correspondant fonctionne.

Il faut bien que tu crées une deuxième boucle pour créer les différents panels des clients.
Un exemple très simple en reprenant la doc de bootstrap :
<?php 
$clients = array(array('id' => 1, 'nom' => 'toto'), array('id' => 2, 'nom' => 'tata'));
?>

<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
<?php foreach ($clients as $client) : ?>
	<li role="presentation" class=""><a href="#tab_client_<?php echo $client['id']; ?>" role="tab" data-toggle="tab"><?php echo $client['nom']; ?></a></li>
<?php endforeach; ?>
</ul>

<!-- Tab panes -->
<div class="tab-content">
<?php foreach ($clients as $client) : ?>
	<div role="tabpanel" class="tab-pane" id="tab_client_<?php echo $client['id']; ?>"><?php echo $client['nom']; ?></div>
<?php endforeach; ?>
</div>


Enfin il faudrait ajouter une petite condition à l'intérieur de la boucle pour appliquer la classe "active" uniquement sur le premier onglet et sur le premier panel (afin que ceux-ci soient activés par défaut au chargement de la page).
D'accord je vais tester, merci beaucoup en tout cas .. Tu me sors d'une galère .. !
Bon pour l'onglet j'ai réussi à mettre la class en active par défaut par contre pour le panel, je galère mais je passe le sujet en résolu quand même ;) Merci !