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é ~
Dernière édition par vic_le_faucheur le Mar 25 Sep 2012 - 9:21, édité 142 fois