AccueilRechercherS'enregistrerConnexion

Forum de graphisme, codage et game design proposant des tutoriels, astuces, libres services et commandes dans les domaines de l'infographie amateur, de l'intégration web (HTML et CSS essentiellement) ainsi que dans la conception de RPG sur forum.


    Affichage des catégories grâce à un jeu d'onglets [MAJ : 01/07/15]

    vic_le_faucheur
    vic_le_faucheur
    MasculinAge : 25Messages : 764

    le Mar 30 Mar 2010 - 9:43

    Rappel du premier message :





    Vic n'est plus présent sur le forum et ne peut plus répondre à vos questions. Postez dans la rubrique "problème en codage" si vous voulez de l'aide.


    1) Présentation :

    Bonjours à tous,
    Dans ce tutoriel, nous allons apprendre à afficher nos catégories à l'aide d'onglets.

    Pour commencer, voici quelques exemples d'application de ce tutoriel, histoire de vous donner quelques idées :
    Voir un résultat sur forumactif.
    Voir un deuxième résultat sur forumactif.
    Voici un résultat plus complexe sur un site .


    Mon but n'est pas uniquement de vous fournir un code à modifier, mais aussi d'essayer de vous faire comprendre comment il fonctionne.
    J'ai donc mis à la disposition de tous les courageux, des explications plus complètes cachées sous des spoiler.


    Pourquoi utiliser un système d'onglets ?

    Quand un utilisateur possède plusieurs contenus, il peut souhaiter en afficher un à la fois. (Pour prendre moins de place par exemple)
    Pour ce faire, il existe plusieurs solutions, dont utiliser des onglets. Ils ont l'avantage d'être faciles à mettre en place et faciles à utiliser.
    C'est pourquoi je les ai choisis pour ce tutoriel.


    Comment fonctionne ce système ?

    Explications:

    Comment fonctionne ce système ?

    Nous allons le voir à l'aide d'un petit exemple.
    Nous possédons 5 contenus les uns au dessus des autres (c'est le cas le plus courant) :


    Contenu 1
    Contenu 2
    Contenu 3
    Contenu 4
    Contenu 5


    Que se passe t'il si nous rendons invisible (propriété CSS "display : none") le contenu 1 et le contenu 4:


    Contenu 2
    Contenu 3
    Contenu 5


    Explications : Quand un contenu est invisible, il ne prend plus de place (c'est un peu comme s'il n'existait plus sur la page).
    Le contenu 1 est invisible, il ne prend plus de place, donc le contenu 2 se retrouve tout en haut.
    Le contenu 3 est toujours derrière le contenu 2.
    Le contenu 4 est aussi invisible, donc le contenu 5 monte derrière le contenu 3.

    Dans ce tutoriel nous souhaitons afficher un seul contenu à la fois. Il faudra donc rendre invisible tous les contenus sauf celui que l'on souhaite voir.

    Si vous avez du mal à visualiser ce qui se passe, voici une manipulation toute simple :
    - Prennez 5 boites (elles représenterons nos 5 contenus)
    - Empilez les 5 boites.


    boite 1
    boite 2
    boite 3
    boite 4
    boite 5


    - Retirez la boite 5 : toutes les boites descendent d'un rang.
    - Retirez la boite 2 : la boite 1 descend d'un rang.




    boite 1
    boite 3
    boite 4


    C'est exactement ce qui se passe quand on rend des contenus invisibles, sauf que dans une page internet les éléments sont attirés vers le haut.





    2) Le HTML :

    Afin de pouvoir mettre en place ce système, il vous faut au préalable choisir de séparer les catégories. Pour cela, vous devez aller à cet endroit :
    Panneau d'administration > Affichage > Page d'accueil > Structure et hiérarchie

    Choisissez l'un des trois formats dans "Séparer les catégories sur l'index"

    Pourquoi est-ce nécessaire ?
    Si l'on utilisait l'un des trois autres formats, les catégories feraient partie d'un même bloc. Elles formeraient donc un unique contenu, ce qui n'est pas ce que nous souhaitons.
    Le format que l'on vient de choisir, nous permet de séparer les catégories. Elles formeront donc chacune un contenu que nous pourrons choisir d'afficher ou non.


    Modifications du template
    Maintenant, nous allons modifier le template des catégories (index_box) afin d'ajouter nos onglets. Pour cela, nous allons aller à cet endroit :
    Panneau d'administration > Affichage > Templates > Général > Index_Box

    Pour vous faciliter la tâche, un générateur d'onglets a été mis au point : Générateur d'onglets (Fait par Onyx pour remplacer celui de Vic qui ne fonctionnait plus).

    Modifications avec le générateur d'onglets :
    Modifications avec le générateur:
    Si votre template est celui de base :
    - Allez sur la page du générateur de code;
    - Choisissez vos options;
    - Validez;
    - Remplacez le contenu de votre template par le code obtenu.


    Mon template à déjà été modifié. Que dois-je faire ?

    Pas de panique, le générateur peut aussi mettre à jour un template déjà modifié ^^ Dans cette situation, suivez ces instructions :
    - Sauvegardez votre template sur votre ordinateur (pour pouvoir le récupérer en cas de problème);
    - Allez sur la page du générateur de code;
    - Choisissez vos options;
    - Insérez votre template dans la zone de saisie "Votre propre template";
    - Validez;
    - Remplacez le contenu de votre template par le code obtenu.

    Si après cette manipulation, vous percevez une quelconque erreur, remmettez votre ancien template et lisez le spoiler ci-dessous.

    Et voilà, vous avez fini la partie HTML ^^

    Modifications manuelles (sans le générateur d'onglets) :
    Modifications manuelles:
    Nous allons décomposer en plusieurs étapes :

    Création des contenus

    Spoiler:

    Dans votre template, suivez ces étapes :

    Tout d'abord, remplacez ceci :
    Code:
    <!-- BEGIN tablehead -->

    Par cela :
    Code:
    <!-- BEGIN tablehead --><div class="categorievo">


    Ensuite, remplacez ceci :

    Code:
    <!-- END tablefoot -->

    Par cela :
    Code:
    </div><!-- END tablefoot -->


    Explications:

    Dans la manip précédente, nous avons séparé les catégories afin qu'elles forment chacune un contenu.
    On aurait très bien pu en rester là, mais pourquoi se compliquer la tâche quand on peu faire beaucoup plus simple ?

    Voici un petit exemple :
    Jusqu'à présent, si l'on avais 5 catégories, le template générait (je schématise):

    tableau
    tableau
    tableau

    Un tableau (catégorie 1)
    Un séparateur
    Un tableau (catégorie 2)
    Un séparateur
    Un tableau (catégorie 3)
    Un séparateur
    Un tableau (catégorie 4)
    Un séparateur
    Un tableau (catégorie 5)
    Un séparateur

    tableau
    tableau
    tableau

    En regardant rapidement, on pourrait se dire : "ça va, ce n'est pas trop compliqué, on peut faire avec".
    Et bien faites ^^.
    Si je vous demande d'ajouter une bordure à chaque catégorie, je pense que ça va prendre un peu de temps pour savoir quel tableau est une catégorie.

    Alors qu'en appliquant les modifications faites ci-dessous, le template va générer (encore une fois je schématise) :

    tableau
    tableau
    tableau

    Une division avec la classe "categorievo"
    Un tableau (catégorie 1)
    Un séparateur
    Fin de la division
    Une division avec la classe "categorievo"
    Un tableau (catégorie 2)
    Un séparateur
    Fin de la division
    Une division avec la classe "categorievo"
    Un tableau (catégorie 3)
    Un séparateur
    Fin de la division
    Une division avec la classe "categorievo"
    Un tableau (catégorie 4)
    Un séparateur
    Fin de la division
    Une division avec la classe "categorievo"
    Un tableau (catégorie 5)
    Un séparateur
    Fin de la division

    tableau
    tableau
    tableau


    Maintenant si je vous pose la même question, vous me répondez : "trop facile, on cible toutes les divisions qui possèdent la classe 'categorievo'".
    C'est quand même un peu plus pratique pour le CSS et le Javascript ^^.

    Création des onglets

    Spoiler:

    Dans votre template, suivez ces étapes :

    Tout d'abord, remplacez ceci :
    Code:
    <!-- BEGIN catrow -->

    Par cela (Si vous souhaitez que les onglets soient les uns à côté des autres) :
    Code:

     <div id="conteneur_ongletsvo">
     <table><tr>
     <td class="ongletvo"><div>Nom onglet 1</div></td>
     <td class="ongletvo"><div>Nom onglet 2</div></td>
     <td class="ongletvo"><div>Nom onglet 3</div></td>
     <td class="ongletvo"><div>Nom onglet 4</div></td>
     <td class="ongletvo"><div>Nom onglet 5</div></td>
     </tr></table>
     </div>

     <!-- BEGIN catrow -->

    Ou par cela (Si vous souhaitez que les onglets soient les uns au dessus des autres) :
    Code:

     <div id="conteneur_ongletsvo">
     <div class="ongletvo">Nom onglet 1</div>
     <div class="ongletvo">Nom onglet 2</div>
     <div class="ongletvo">Nom onglet 3</div>
     <div class="ongletvo">Nom onglet 4</div>
     <div class="ongletvo">Nom onglet 5</div>
     </div>
     
     <!-- BEGIN catrow -->


    Si vous souhaitez ajouter ou supprimer des onglets, il vous suffit de copier / supprimer une ligne possèdant la classe "ongletvo".
    Code:
    <td class="ongletvo"><div>Nom onglet</div></td>
     ou
     <div class="ongletvo">Nom onglet</div>

    Si vous souhaitez remplacer le texte par une image, remplacez les lignes possèdant la class "ongletvo" par :
    Code:
    <td class="ongletvo"><div><img src="URL" /></div></td>
     ou
     <div class="ongletvo"><img src="URL" /></div>

    Explications:

    Nous venons de créer les onglets de façon à ce qu'ils apparaissent au dessus des catégories.
    Je ne pense pas qu'il y ait grand chose à dire la dessus, c'est juste un peu de HTML.


    Création du conteneur des catégories

    Spoiler:
    Dans votre template, suivez ces instructions :

    Tout d'abord, remplacez ceci :
    Code:
    <!-- BEGIN catrow -->

    Par cela :
    Code:
    <div id="conteneur_categoriesvo"><!-- BEGIN catrow -->


    Ensuite, remplacez ceci :
    Code:
    <!-- END catrow -->

    Par cela :
    Code:
    <!-- END catrow --></div>

    Explications:

    On vient de créer un conteneur autour de toutes les catégories, ce qui nous donne :

    tableau
    tableau
    tableau

    Une division avec un id "conteneur_categoriesvo"
    Une division avec la classe "categorievo"
    Une division avec la classe "categorievo"
    Une division avec la classe "categorievo"
    Une division avec la classe "categorievo"
    Une division avec la classe "categorievo"
    Fin de la division

    tableau
    tableau
    tableau

    Mais ça sert à quoi ?
    Pour le moment, on ne sait pas ^^, mais rassurez vous, tout sera expliqué dans la partie Javascript.





    3) Le Javascript :

    Vous allez voir c'est assez rapide. Rendez vous à la page de gestion du Javascript en vous rendant à cet endroit :
    Panneau d'administration > Modules > HTML et Javascript > Gestion des codes Javascript

    - Activez la gestion des codes Javascript (cliquez sur "oui", puis sur "enregistrer");
    - Cliquez sur "créer un nouveau Javascript";
    - Mettez un titre ("Catégorie en onglets" par exemple);
    - Vérifiez bien que seule la case "sur l'index" est cochée;
    - Copiez le code suivant dans la partie "code Javascript".

    Code:
    $('document').ready(function()
     {
      if($('.categorievo').size() > 1)
        {
     $('#conteneur_ongletsvo').css( 'display' , 'block' );
     $('#conteneur_ongletsvo .ongletvo').click(function()
     {
     change_categorie( $('.ongletvo', '#conteneur_ongletsvo').index( this ) )
     });
     
     $('.ongletvo:eq(0)').click();
    }
     });

     function change_categorie( index )
     {
     if( $('.categorievo:eq(' + index + ')').size() != 0 )
     {

     $('.categorievo').css( 'display' , 'none' );
     $('.categorievo:eq(' + index + ')').fadeIn( 500 );
     
     $('.ongletvo.actif').removeClass('actif');
     $('.ongletvo:eq('+ index +')').addClass('actif');
     }
     else alert('Vous ne pouvez pas accéder à cette catégorie');
     }

    Et voilà !

    Explications:

    Je vous ai remis le même code, mais avec un peu plus de commentaires :

    Code:
    /**
     * Fonction qui se déclenche lorsque tous les éléments de la page ont étés créés
     * Comme nous allons effectuer des actions sur les onglets, nous voulons être sûr qu'ils existent
     * Sinon ça ne servirait à rien
     */
    $('document').ready(function()
    {

    /**
     * Condition qui dit que le code est effectué seulement quand
     * Il y a plus que une catégorie.
     */
      if($('.categorievo').size() > 1)
        {

     /**
     * Pour ne pas afficher les onglets dans les sous catégories
     * Et pour ne pas gêner les utilisateurs qui n'activent pas Javascript,
     * Les onglets sont invisibles par défaut.
     * On commence donc par les rendre visibles.
     */
     $('#conteneur_ongletsvo').css( 'display' , 'block' );
     
     /**
     * On indique que l'on change de catégorie lorsque l'on clique sur un onglet
     * Si vous souhaitez changer de catégorie lors du survol (ce que je déconseille)
     * Il vous suffit de remplacer "click" par "hover"
     */
     $('#conteneur_ongletsvo .ongletvo').click(function()
     {

     /**
      * Fonction à exécuter lors du click, ici il s'agit de changer de catégorie.
      * On passe en argument l'index de l'onglet.
      * L'index est le numéro de l'onglet en commençant par 0
      * Pour l'onglet 1, il s'agit du première onglet, l'index vaut 0
      * Pour l'onglet 2, il s'agit du seconde onglet, l'index vaut 1
      * ...
      * Pour l'onglet 5, il s'agit du cinquième onglet, l'index vaut 4
      */
     change_categorie( $('.ongletvo', '#conteneur_ongletsvo').index( this ) )
     });
     
     /**
     * On choisit quelle catégorie afficher en premier.
     * Par défaut, il s'agit de la première (index 0).
     * Si vous souhaitez en afficher une autre, il vous suffit de remplacer le 0
     * par l'index de la catégorie désirée.
     * Si vous voulez toutes les afficher, supprimez cette ligne.
     */
     $('.ongletvo:eq(0)').click();
     }
     });

    /**
     * Fonction qui se déclenche à chaque fois que l'on souhaite changer de catégorie
     */
    function change_categorie( index )
    {

     /**
     * On vérifie que la catégorie demandée existe
     */
     if( $('.categorievo:eq(' + index + ')').size() != 0 )
     {

     /**
     * On masque toutes les catégories
     */
     $('.categorievo').css( 'display' , 'none' );
     
     /**
     * On affiche avec un petit effet la catégorie demandée
     */
     $('.categorievo:eq(' + index + ')').fadeIn( 500 );
     
     /**
     * On enlève la classe "actif" de l'ancien onglet actif
     */
     $('.ongletvo.actif').removeClass('actif');
     
     /**
     * On ajoute la classe "actif" à l'onglet de la catégorie affichée
     */
     $('.ongletvo:eq('+ index +')').addClass('actif');
     }

     /**
     * Si la catégorie n'existe pas, on affiche un message
     */
     else alert('Vous ne pouvez pas accéder à cette catégorie');
    }

    Voilà, je pense que c'est assez parlant comme ça, il n'y a pas besoin d'en rajouter plus ^^





    4) Le CSS :

    Allez, c'est la dernière ligne droite. Pour trouver votre CSS, suivez ce chemin :
    Panneau d'administration > Affichage > Images et couleurs > Couleurs > Feuilles de styles CSS

    Insérez y le code suivant :
    Code:
    /*Conteneur qui contient toutes les catégories */
    #conteneur_categoriesvo {
    }
    /* Conteneur de chaque catégorie */
     .categorievo {
    }
    /* Conteneur de tous les onglets */
    #conteneur_ongletsvo {
      display: none;
    }
    /* Un onglet */
    .ongletvo{
      cursor: pointer;
    }
    /* Onglet actif */
    .actif{
      color: darkred;
    }

    Il ne contient que le strict minimum et la liste de toutes les classes disponibles.
    Il n'y a pas grand chose, mais je pense que vous pourrez trouver tout seul ce que vous souhaitez faire sur ce forum ou sur google.

    N'hésitez pas à demander de l'aide dans la section adéquate ^^

    Voilà, c'est terminé. J'espère que ce tutoriel vous aura aidé ~


    Vos commentaires et remerciements sont toujours bienvenus ^^
    Si vous avez des problèmes avec ce LS, venez poster ici.


    Dernière édition par vic_le_faucheur le Mar 25 Sep 2012 - 9:21, édité 142 fois

    Smikyou
    Smikyou
    FémininAge : 25Messages : 85

    le Dim 20 Mar 2016 - 14:26

    ty
    Marion Navi
    Marion Navi
    FémininAge : 25Messages : 183

    le Dim 27 Mar 2016 - 23:19

    merci
    Ansuz
    Ansuz
    MasculinAge : 29Messages : 55

    le Mer 13 Avr 2016 - 16:26

    Merci ~ ♥
    Litonya
    Litonya
    FémininAge : 18Messages : 149

    le Lun 6 Juin 2016 - 22:15

    Michi !
    Kabrina Lestrange
    Kabrina Lestrange
    FémininAge : 31Messages : 71

    le Lun 13 Juin 2016 - 1:23

    Bonjour!

    J'aurais une petite question. J'ai suivis le tutoriel et il fonctionne à merveille! :)
    Je me demandais s'il est possible de faire afficher les onglets sur toutes les pages? Par exemple lorsque je vais dans un sous-forum les onglets ne sont plus affiché, ce qui empêche de naviguer entre les sections.

    Merci d'avance et bonne journée!
    Bzzzz
    Bzzzz
    FémininAge : 35Messages : 86

    le Dim 19 Juin 2016 - 18:07

    Merci beaucoup
    NanoiHime
    NanoiHime
    FémininAge : 20Messages : 566

    le Lun 15 Aoû 2016 - 1:11

    mercii



    NanoiHime
    NanoiHime
    FémininAge : 20Messages : 566

    le Lun 15 Aoû 2016 - 1:12

    mercii



    P'tite
    P'tite
    FémininAge : 21Messages : 26

    le Ven 2 Sep 2016 - 20:33


    Je l'ai enfin trouver, celui-là ! Je te remercie de ce partage^^
    RozenBreizh
    RozenBreizh
    FémininAge : 28Messages : 1391

    le Dim 23 Oct 2016 - 19:29

    Merci pour ce tuto. :)
    Anonymous
    Invité

    le Dim 30 Oct 2016 - 14:38

    Merci Very Happy je vais essayer cela... curiosité quand tu nous tient :p
    Lorris
    Lorris
    MasculinAge : 21Messages : 32

    le Jeu 15 Déc 2016 - 18:34

    Merci (:
    Nocturne
    Nocturne
    FémininAge : 29Messages : 24

    le Ven 20 Jan 2017 - 12:08

    Merci ! :]
    .sapphire
    .sapphire
    FémininAge : 25Messages : 38

    le Mar 14 Mar 2017 - 1:18

    Merci pour le tuto !
    Heine06
    Heine06
    FémininAge : 39Messages : 56

    le Sam 15 Juil 2017 - 23:48

    merci pour le tuto !
    Kadence
    Kadence
    FémininAge : 38Messages : 57

    le Dim 29 Oct 2017 - 19:45

    Merci Wink
    Chevalier Oignon
    Chevalier Oignon
    MasculinAge : 29Messages : 60

    le Sam 10 Mar 2018 - 1:33

    merci bien !!
    Littleelda
    Littleelda
    FémininAge : 29Messages : 49

    le Sam 22 Déc 2018 - 21:00

    merci =)



    Affichage des catégories grâce à un jeu d'onglets [MAJ : 01/07/15] - Page 5 Elora_10
    Lauranna
    Lauranna
    FémininAge : 30Messages : 21

    le Jeu 18 Avr 2019 - 22:05

    Merci pour ce tutoriel!

    Il y a un ou deux ans, j'avais suivi un tutoriel pour aboutir au même résultat... Mais je sais plus comment, je pouvais différentier les boutons en fonction de s'il y avait un nouveau message dans la catégorie ou non. Est-ce que vous sauriez comment retomber sur ce résultat?

    Je vous remercie pour votre code.
    Cath Graph
    Cath Graph
    FémininAge : 55Messages : 21

    le Dim 23 Juin 2019 - 22:30

    Super, merci
    Contenu sponsorisé


      La date/heure actuelle est Lun 14 Oct 2019 - 20:36