Breadcrumb
Breadcrumb: fil d'ariane
Container uikit pour breadcrumb, l'injection du fil d'ariane est traité par JS
Uikit
/**
* Cette boucle est utile pour déterminer la hiérarchie actuelle de la page en fonction de l'URL et des mappings définis dans urlMappings.
* Elle permet de construire le fil d'Ariane en identifiant où se trouve actuellement l'utilisateur dans la structure de navigation de la page.
* @param {*} currentUrl url où l'on se trouve
* @param {*} urlMappings l'objet maps contenant les url à vérifier et les Label à utilisés
* @returns
*/
function getCurrentHierarchy(currentUrl, urlMappings) {
let hierarchy = [];
// on parcours l'objet js à la recherche de l'url (currentUrl)
// parmis les clés de l'objet
for (let url in urlMappings) {
// la méthode startsWith de l'objet String permet de vérifier
// si une chaîne de caractères commence par une sous-chaîne donnée
// ex: string.startsWith(searchString)
if (currentUrl.startsWith(url)) {
// Si c'est le cas une nouvelle entrée est ajoutée à la hiérarchie
// avec le libellé correspondant extrait du tableau urlMappings
hierarchy.push({
label: urlMappings[url],
url: url
});
}
}
// on retourne la hiérarchie
return hierarchy;
}
/**
*
* @param {*} currentUrl L'URL actuelle de la page
* @param {*} urlMappings Un objet contenant les correspondances entre les URL et les libellés des pages dans la hiérarchie du fil d'Ariane
* @returns le fil d'ariane
*/
function generateBreadcrumb(currentUrl, urlMappings) {
// breadcrumb stockera les éléments du fil d'Ariane sous forme de chaînes HTML.
let breadcrumb = [];
// pour obtenir la hiérarchie actuelle basée sur l'URL actuelle et les correspondances URL dans urlMappings
let currentHierarchy = getCurrentHierarchy(currentUrl, urlMappings);
// Un lien vers la page d'accueil est ajouté en premier dans le fil d'Ariane.
breadcrumb.push('Accueil');
// Vérifier si "Breadcrumb" est présent dans la hiérarchie
let breadcrumbFound = false;
for (let i = 0; i < currentHierarchy.length; i++) {
if (currentHierarchy[i].label === 'Breadcrumb') {
breadcrumbFound = true;
breadcrumb.push('Breadcrumb');
break;
}
}
// Ajouter chaque niveau de la hiérarchie au fil d'Ariane
for (let i = 0; i < currentHierarchy.length; i++) {
let item = currentHierarchy[i];
// Exclure "Breadcrumb" de la deuxième itération
if (breadcrumbFound && item.label === 'Breadcrumb') {
continue;
}
breadcrumb.push('' + item.label + '');
}
return breadcrumb.join(' > '); // Utilisez ">" pour le symbole ">"
}
document.addEventListener("DOMContentLoaded", function () {
// Définition des URL et de leurs libellés correspondants
// objet javascript
let urlMappings = {
'./': 'Accueil',
'/index.php?ctrl=home&action=breadcrumb&anchor=html': 'Breadcrumb HTML',
'/index.php?ctrl=home&action=breadcrumb&anchor=css': 'Breadcrumb CSS',
'/index.php?ctrl=home&action=breadcrumb&anchor=js': 'Breadcrumb JS',
'/index.php?ctrl=home&action=breadcrumb': 'Breadcrumb',
'/index.php?ctrl=home&action=navbar&anchor=html': 'Navbar HTML',
'/index.php?ctrl=home&action=navbar&anchor=css': 'Navbar CSS',
'/index.php?ctrl=home&action=navbar&anchor=js': 'Navbar JS',
'/index.php?ctrl=home&action=navbar': 'Navbar',
'/index.php?ctrl=home&action=sitemap&anchor=html': 'Sitemap HTML',
'/index.php?ctrl=home&action=sitemap&anchor=css': 'Sitemap CSS',
'/index.php?ctrl=home&action=sitemap&anchor=js': 'Sitemap JS',
'/index.php?ctrl=home&action=sitemap': 'Sitemap',
};
let currentUrl = window.location.href; // Utilisation de window.location.href pour obtenir l'URL complète
let pathAfterIndex = currentUrl.substr(currentUrl.indexOf('/index.php')); // Récupérer le chemin après "index.php"
// Générer le fil d'Ariane
let breadcrumb = generateBreadcrumb(pathAfterIndex, urlMappings);
console.log('Breadcrumb:', breadcrumb);
let navBreadcrumb = document.getElementById('nav-breadcrumb');
// Insérer le fil d'Ariane généré dans l'élément avec l'ID 'nav-breadcrumb'
if (navBreadcrumb) {
navBreadcrumb.innerHTML = breadcrumb;
}
});