1. ✅ Apprenez une METHODE qui marche pour votre SEO ! Formation à distance avec Olivier Duffez et Fabien Facériès + aide pour prise en charge du financement
    Rejeter la notice

Script PHP : fil d'Ariane

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par u8086, 3 Septembre 2005.

  1. u8086
    u8086 WRInaute passionné
    Inscrit:
    24 Mai 2004
    Messages:
    2 446
    J'aime reçus:
    0
    Bonjour;

    aujourd'hui sur tous mes sites en HTML j'intègre un fil d'Ariane. Un fil d'Ariane c'est le rappel de l'arborescence parcourue :
    "accueil > rubrique 3 > article 2"
    Aujourd'hui, je fais ça à la main sur toutes les pages du site. :cry:

    J'aurais aimé savoir si on pouvait tous ensemble créer une petite fonction PHP pour intégrer ça automatiquement (via un include par exemple).


    Je pensait qu'on pouvait récupérer l'arborescence jusqu'au fichier actuellement utilisé (basename($_SERVER['PHP_SELF']) ???) et s'en servir pour afficher ce résultat.
    Mais voilà, je suis pas développeur PHP... je sais pas faire ça tout seul. Mais si vous voulez, je m'occupe de la CSS !
     
  2. u8086
    u8086 WRInaute passionné
    Inscrit:
    24 Mai 2004
    Messages:
    2 446
    J'aime reçus:
    0
    Le code généré par le script pour une URL : -http://www.lesite.com/rubrique3/article2.php serait :

    Code:
    <span class="ariane"><a href="http://www.lesite.com/index.php">accueil</a> > <a href="http://www.lesite.com/rubrique3/">rubrique 2</a> > <a href="http://www.lesite.com/rubrique3/article2.php">article 2</a></span>
     
  3. Borower
    Borower WRInaute passionné
    Inscrit:
    18 Avril 2005
    Messages:
    1 678
    J'aime reçus:
    0
    Ta fait une petite erreur dans ton code:
    Code:
    <a href="http://www.lesite.com/rubrique3/">rubrique 2</a> >
    ecrie plutot :
    Code:
    <a href="http://www.lesite.com/rubrique2/">rubrique 2</a>
    C'est null ce que je dis, mais en tous cas je suis interressé par ce post.
    Si vous trouvez comment faire c'est genial.
     
  4. le ster
    le ster Nouveau WRInaute
    Inscrit:
    20 Août 2005
    Messages:
    5
    J'aime reçus:
    0
    Je suppose que tu cherches quelque chose comme ca
    Code:
    <?php
    $ndd="http://www.example.com/";
    $niv = $_SERVER['PHP_SELF'];
    $explo = explode("/",$niv);
    echo "<a href=\"".$ndd."\">Accueil</a> &gt; \n";
    echo "<a href=\"".$ndd.$explo[1]."/\">".$explo[1]."</a> &gt; \n";
    echo "<a href=\"".$ndd.$explo[2]."/\">".$explo[2]."</a>\n";
    ?>
    
     
  5. fbparis
    fbparis WRInaute impliqué
    Inscrit:
    1 Février 2005
    Messages:
    520
    J'aime reçus:
    0
    oops

    $explo[1].$explo[2] non pour le deuxieme niveau

    et pas ajouter de / au dernier niveau...

    laissez moi deux minutes sinon, je code un truc comme ca en vitesse
     
  6. le ster
    le ster Nouveau WRInaute
    Inscrit:
    20 Août 2005
    Messages:
    5
    J'aime reçus:
    0
    Autant pour moi je suis allé trop vite et sans verif
    Code:
    <?php
    $ndd="http://www.example.com/";
    $niv = $_SERVER['PHP_SELF'];
    $explo = explode("/",$niv);
    echo "<a href=\"".$ndd."\">Accueil</a> &gt; \n";
    echo "<a href=\"".$ndd.$explo[1]."/\">".$explo[1]."</a> &gt; \n";
    echo "<a href=\"".$ndd.$explo[1]."/".$explo[2]."\">".$explo[2]."</a>\n";
    ?>
    
     
  7. fbparis
    fbparis WRInaute impliqué
    Inscrit:
    1 Février 2005
    Messages:
    520
    J'aime reçus:
    0
    j'ai pas teste, et avec ca tout est en lien, alors qu'on pourrait faire un truc ou l'article courant est pas affiche sous forme de lien, mais bon, ca compliquerait le code pour pas grand chose je trouve..

    Code:
    function fildarianise(&$titres, $separateur=' > ')
    {
    	/*
    	* $titres est un tableau associatif du genre :
    	* $titres = array(0=>'Accueil', 'cat1'=>'Catégorie 1', 'cat2'=>'Categorie 2', 'contact.html'=>'Contact', 'index.html'=>false);
    	*/
    
    	$baseUrl = 'http://' . . $_SERVER['HTTP_HOST'];
    	$retour = "<a href=\"$baseUrl\">" . $titres[0] . '</a>';
    
    	$chemin = explode(substr($_SERVER['PHP_SELF'], 1), '/');
    
    	if (is_array($chemin)) foreach ($chemin as $k=>$v) if ($titres[$v] !== false)
    	{
    		$baseUrl .= "/$v";
    		$titre = isset($titres[$v]) ? $titres[$v] : $v;
    		$retour .= $separateur . "<a href=\"$baseUrl\">$titre</a>";	
    	}
    
    	return $retour;
    }
    
     
  8. Borower
    Borower WRInaute passionné
    Inscrit:
    18 Avril 2005
    Messages:
    1 678
    J'aime reçus:
    0
    Merci j'avais pas pensé a la fonction explode.
    Je regarde ce soir si cela marche merci bien en tous cas.
     
  9. u8086
    u8086 WRInaute passionné
    Inscrit:
    24 Mai 2004
    Messages:
    2 446
    J'aime reçus:
    0
    Oauh ! ça m'a l'air pas mal tout ça ! :D
    La fonction de "le ster" est plus simple à lire pour moi, mais si j'ai bien compris, le nombre de niveaux dans l'URL est limité à 2, non ?

    Je vais tester tout ça.
    Merci en tout cas !!
     
  10. u8086
    u8086 WRInaute passionné
    Inscrit:
    24 Mai 2004
    Messages:
    2 446
    J'aime reçus:
    0
    @fbparis : J'ai quelques soucis avec ta fonction...
    Elle ne me renvoie aucun code et aucun message d'erreur !

    J'ai modifié la syntaxe de base de $retour, mais je pense que c'est correct. Quelqu'un pourrait m'aider à débugger ?

    Code:
    function fildarianise(&$titres, $separateur=' > ')
    {
       /*
       * $titres est un tableau associatif du genre :
       * $titres = array(0=>'Accueil', 'cat1'=>'Catégorie 1', 'cat2'=>'Categorie 2', 'contact.html'=>'Contact', 'index.html'=>false);
       */
    
       $baseUrl = 'http://'.$_SERVER['HTTP_HOST'];
       $retour = '<span class=\"ariane\"><a href=\"'.$baseUrl.'\">'.$titres[0].'</a></span>';
       $chemin = explode(substr($_SERVER['PHP_SELF'], 1), '/');
    
       
       
       if (is_array($chemin)) foreach ($chemin as $k=>$v) if ($titres[$v] !== false)
       {
          $baseUrl .= "/$v";
          $titre = isset($titres[$v]) ? $titres[$v] : $v;
          $retour .= $separateur . "<a href=\"$baseUrl\">$titre</a>";   
       }
    
       return $retour;
    } 
    
     
  11. fbparis
    fbparis WRInaute impliqué
    Inscrit:
    1 Février 2005
    Messages:
    520
    J'aime reçus:
    0
    tu fais bien un

    echo $fildarianise($titres);

    ?

    sinon pourquoi tu fais pas une classe ariane pour les a plutot que de mettre dans un span : <a class="ariane" href="..."> ?

    je vais tester ma fonction en vitesse si tu dis que ca marche pas..
     
  12. u8086
    u8086 WRInaute passionné
    Inscrit:
    24 Mai 2004
    Messages:
    2 446
    J'aime reçus:
    0
    J'ai simplement comme résultat affiché :
    avec un lien vers la racine sur le "/".

    En ce qui concerne la classe sur le span, cela me permet de définir :
    Code:
    .ariane {font-family: Arial;font-size: 0.75em; letter-spacing:0.1em; color: #999999;}
    .ariane A:link, .ariane A:visited {text-decoration: none; color: #999999;}
    .ariane A:hover {text-decoration: underline; color: #333333; }
    
    Et ainsi, même les séparateurs sont mis en forme.
     
  13. CaYuS
    CaYuS WRInaute occasionnel
    Inscrit:
    14 Juillet 2005
    Messages:
    492
    J'aime reçus:
    0
    Bonsoir,

    Intéressante cette petite fonction !
    Je me suis permi d'apporter quelques petites corrections à la version de MagicYoyo afin de la rendre un peu plus ... fonctionnelle ;)
    Merci pour le script fbparis.

    Code:
    <?php
    
    // Fonction fildarianise
    function fildarianise(&$titres, $separateur=' > ')
    {
    	/*
    	* $titres est un tableau associatif du genre :
    	* $titres = array(0=>'Accueil', 'cat1'=>'Catégorie 1', 'cat2'=>'Categorie 2', 'contact.html'=>'Contact', 'index.html'=>false);
    	*/
    
    	$baseUrl = 'http://'.$_SERVER['HTTP_HOST'];
    	$retour = '<span class="ariane"><a href=' . $baseUrl . '>' . $titres[0] . '</a></span>';
    	$chemin = explode("/", substr($_SERVER['PHP_SELF'], 1));
    	
    	if (is_array($chemin)) foreach ($chemin as $k=>$v) if ($titres[$v] !== false)
    	{
    		$baseUrl .= "/$v";
    		$titre = isset($titres[$v]) ? $titres[$v] : $v;
    		$retour .= $separateur . '<a href=' . $baseUrl . '>' . $titre . '</a>';   
    	}
    	
    	return $retour;
    }
    
    // Un essai...
    $titres = array(0=>'Accueil', 'cat1'=>'Catégorie 1', 'cat2'=>'Categorie 2', 'contact.html'=>'Contact', 'index.html'=>false);
    echo fildarianise($titres);
    
    ?>
     
  14. u8086
    u8086 WRInaute passionné
    Inscrit:
    24 Mai 2004
    Messages:
    2 446
    J'aime reçus:
    0
    A mon tour de faire des modifs !

    J'ai enlevé le </span> de la 1ere déclaration de $retour et le rajoute en après la boucle.

    Dans le tableau associatif, j'ai remplacé les extensions .html par .php, puisque on utilise un script PHP.

    Code:
    <?php
    
    // Fonction fildarianise
    function fildarianise(&$titres, $separateur=' > ')
    {
       /*
       * $titres est un tableau associatif du genre :
       * $titres = array(0=>'Accueil', 'cat1'=>'Catégorie 1', 'cat2'=>'Categorie 2', 'contact.html'=>'Contact', 'index.html'=>false);
       */
    
       $baseUrl = 'http://'.$_SERVER['HTTP_HOST'];
       $retour = '<span class="ariane"><a href=' . $baseUrl . '>' . $titres[0] . '</a>';
       $chemin = explode("/", substr($_SERVER['PHP_SELF'], 1));
       
       if (is_array($chemin)) foreach ($chemin as $k=>$v) if ($titres[$v] !== false)
       {
          $baseUrl .= "/$v";
          $titre = isset($titres[$v]) ? $titres[$v] : $v;
          $retour .= $separateur . '<a href=' . $baseUrl . '>' . $titre . '</a>';   
       }
       $retour .= '</span>';
       return $retour;
    }
    
    // Un essai...
    $titres = array(0=>'accueil', 'cat1'=>'Catégorie 1', 'cat2'=>'Categorie 2', 'contact.php'=>'Contact', 'index.php'=>false);
    echo fildarianise($titres);
    
    ?>
     
  15. u8086
    u8086 WRInaute passionné
    Inscrit:
    24 Mai 2004
    Messages:
    2 446
    J'aime reçus:
    0
    Merci à fbParis et à le ster et à Cayus pour leur contribution !
    Je trouve ce script très interessant pour les sites HTML. La définition du tableau $titres est un peu fastidieux, mais c'est vraiment sympa.
     
  16. ratdelabo
    ratdelabo Nouveau WRInaute
    Inscrit:
    4 Février 2008
    Messages:
    22
    J'aime reçus:
    0
    script inopérant avec includes

    Bonjour à tous,
    Débutant en php, je suis très heureux d'avoir lu le fil de votre discussion sur la réalisation d'un chemin de fer (ou fil d'ariane ou breadscrumb).
    J'ai donc essayé d'abord de le comprendre...ca peut aller ^^
    Mais mon site est basé sur un système d'includes de la page centrale. Aussi, je n'arrive pas à faire apparaître correctement le fil d'ariane.
    Voici un extrait de mon fichier include :
    Code:
    <?php
    // Ici on indique les noms de lien associés au titre qui va s'incrire dans la barre du navigateur...
    $titre_pages = array(
    'contact' => 'contactez Meuble en Ligne'
    );
    
    // Ici sont indiqués les noms de liens associés à l'URL relative de chaque fichier correspondant...
    $url_pages = array(
    'contact' => 'contact.html'
    );
    
    if(!empty($_GET['p']))
    {
    	if(array_key_exists($_GET['p'], $url_pages))
    	{
    		$page = $url_pages[$_GET['p']];
    		$titre = $titre_pages[$_GET['p']];
    	}
    	else
    	{
    		$page = 'erreur.html';
    		$titre = 'En cours de réalisation';
    	}
    }
    else
    {
    $page = 'accueil.html';
    $titre = 'Accueil';
    }
    ?>
    
    Et dans mon index.php, je n'ai plus qu'à afficher :
    Code:
    <?php include($page) ?>
    
    Il faudrait donc que je puisse adapter ce script à mon système d'includes, sachant que je peux parfois avoir des pages du style : http://www.example.com/index.php?p=meub ... ntemporain
    Comment récupérer "meubles" et "contemporain"...
    Merci à vous de me guider, sans oublier que je débute ;)
    Cordialement,
    ratdelabo




    edit dd32 : example.com pour les exemples d'url merci ;)
     
  17. Kerlon
    Kerlon Nouveau WRInaute
    Inscrit:
    4 Novembre 2009
    Messages:
    4
    J'aime reçus:
    0
    Bonjour à tous,
    Je sais que ce post est très ancien mais c'est un des meilleur sur les fil d'ariane que j'ai trouvé.

    Voila mon problème. Je suis en train de créer un site internet assez gros pour me faire la main en php.
    J'ai mis en place la fonction fil d'ariane de MagicYoyo comme défini dans les post précédent.

    Code:
    function fildarianise(&$titres, $separateur='&nbsp;&nbsp;&nbsp;>&nbsp;&nbsp;&nbsp;')
    {
       $baseUrl = 'http://'.$_SERVER['HTTP_HOST'];
       $retour = '<span>Vous &ecirc;tes ici :&nbsp;&nbsp;&nbsp;</span><span><a href="' . $baseUrl . '">' . $titres[0] . '</a>';
       $chemin = explode("/", substr($_SERVER['PHP_SELF'], 1));
       
       if (is_array($chemin)) foreach ($chemin as $k=>$v) if ($titres[$v] !== false)
       {
          $baseUrl .= "/$v";
          $titre = isset($titres[$v]) ? $titres[$v] : $v;
          $retour .= $separateur . '<a href="' . $baseUrl . '">' . $titre . '</a>';   
       }
       $retour .= '</span>';
       return $retour;
    }
    
    $titres = array(
    	0=>'<div class="icone_accueil">&nbsp;</div>', 
    	'equipage_pirate_one_piece.php?spoiler=oui'=>'Les pirates oui',
    	'equipage_pirate_one_piece.php?spoiler=non'=>'Les pirates non',
    	'index.php'=>false);
    echo fildarianise($titres);
    ?>
    Le problème c'est que pour certaines de mes pages, j'ai l'url qui va changer en fonction de diverses variables intégrés dans l'url comme par ex "equipage_pirate_one_piece.php?spoiler=oui".
    Et la fonction ne prend pas en compte le changement d'url.
    Je me dit que c'est parce que la variable $titre ne prend pas en compte l'url exacte mais j'en sais trop rien en fait.
    Je fait divers tests de modification de la fonction mais comme ça ne fait pas longtemps que je me suis mis au PHP je teste un peu au hasard.
    Pouvez-vous m'aider à résoudre ce problème svp ?

    Merci d'avance
     
  18. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 364
    J'aime reçus:
    2
    Site internet "assez gros" sans base pour gérer le contenu ?
    La fonction qui a été écrite en 2005 était faite pour des sites html (donc sans base de contenu), il est beaucoup plus simple de partir de la base de données, non ?
     
  19. Kerlon
    Kerlon Nouveau WRInaute
    Inscrit:
    4 Novembre 2009
    Messages:
    4
    J'aime reçus:
    0
    Bien sur que j'ai une base de données.
    Pour un code propre et des mises à jour facile c'est essentiel.
    J'ai pas fait attention que la fonction concernait seulement des sites html sans bdd.

    Après je ne sais pas comment marche un fil d'ariane avec base de données. Je vais regarder dans ce sens.
    Peux-tu juste m'indiquer une direction à prendre ou un point à regarder plus précisément.

    Voila le site en question. http://www.manga-onepiece.com
    Après mon but est d'apprendre. Je me doute qu'il est loin d'être parfait mais je me dois de m'améliorer et faire un site aussi ambitieux (pour moi) est le meilleur moyen de toucher à tout et de m'améliorer.
    J'ai fini mes études il y a 6 mois et mon boulot me demande des connaissances que je ne possède pas encore. Je bosse donc en dehors pour combler mes lacunes.

    Merci de ton aide rapide en tout cas.
     
  20. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 364
    J'aime reçus:
    2
    C'est "simple", ta base de données structure normalement tes contenus, en leur assignant une place dans le menu, non ?
    Donc c'est ces données là qu'il faut reprendre, pour générer ton fil d'ariane. Après tout dépend de la façon dont tu structures ta base
     
  21. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 057
    J'aime reçus:
    294
    Pourtant c'est loin d'être le meilleur, un breadcrumb c'est sémantiquement mieux des <ul><li> imbriqués.

    Code:
    <div id="fil">
    <ul>
        <li class="first">Accueil
        <ul>
            <li>&#187; Produits
            <ul>
                <li>&#187; Ordinateurs
                <ul>
                    <li>&#187; Logiciels</li>
                </ul></li>
            </ul></li>
        </ul></li>
    </ul>
    </div>
    
    
    Source: http://www.pompage.net/pompe/listes/
     
  22. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 364
    J'aime reçus:
    2
    Excuses moi, mais pourquoi imbriquer les ul de cette façon ? Ca me parait totalement injustifié, une simple liste est largement suffisante pour un fil d'ariane, non ?
     
  23. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 057
    J'aime reçus:
    294
    Etant donné que le breadcrumb représente une hierarchie, les listes imbriquées semblent convenir le mieux (cfr. article pompage). Sans le CSS, on voit très bien la hierarchie.
     
  24. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 364
    J'aime reçus:
    2
    Euh... je ne voudrais pas insister lourdement, mais il me semble que c'est une surcharge de marquage totalement inutile. L'article emploie d'ailleurs le conditionnel
    En plus, il n'est pas évident de dire que le fil d'ariane est une hiérarchie. C'est un chemin, et quand on donne un itinéraire de A à B, la première et la deuxième rue ne sont pas hiérarchisée.

    Bref, sur ce coup là, je suis partisane du faire simple ^^
     
  25. Kerlon
    Kerlon Nouveau WRInaute
    Inscrit:
    4 Novembre 2009
    Messages:
    4
    J'aime reçus:
    0
    Je crois qu'il faut que j'améliore ma bdd car ma base de données structure les contenus mais leur assigne pas une place dans le menu automatiquement.
    La hiérarchisation des données se fait par les relations entre les tables. Sur le coup j'ai pas plus approfondi.
    Par exemples un personnages aura comme parent un équipage.

    Donc le but serai d'indiquer dans la bdd la catégorie parente de chaque partie du site si j'ai bien tout compris...?
     
  26. Kerlon
    Kerlon Nouveau WRInaute
    Inscrit:
    4 Novembre 2009
    Messages:
    4
    J'aime reçus:
    0
    J'ai donc fait un nouveau fil d'ariane avec appel de mes pages via base de données.
    J'ai réussi à tout faire afficher mais le pb c'est que ça s'affiche à l'envers. Vu le code c'est normal mais je sais pas comment inverser les données récoltés. Voici mon code

    Code:
    while($numero_page !=1){
    	$req_fil_ariane = "SELECT * FROM fil_ariane WHERE id_page = ".$numero_page;
    	$result_fil_ariane = mysql_query($req_fil_ariane); 
    	$donnee_fil_ariane = mysql_fetch_assoc($result_fil_ariane); ?>
        
    	&nbsp;&nbsp;>&nbsp;&nbsp;<a href="<?php echo $donnee_fil_ariane['url_page'] ?> "><?php echo $donnee_fil_ariane['nom_page'] ?></a> <?php	
    	$numero_page = $donnee_fil_ariane['id_page_parent'];
        
     } 
    $numero_page correspond a la page actuelle défini par cette variable.
    Et la table "fil_ariane" contient 4 champs "id_page", "nom_page", "url_page" et "id_page_parent".

    En clair ca m'affiche : "Catégorie enfant > Catégorie Parent > Index"

    Et il faudrai que ce soit l'inverse. Pouvez-vous m'aidez svp ?
     
  27. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 364
    J'aime reçus:
    2
    Je pense qu'il faut d'abord que tu stockes tes données dans un tableau (et donc toutes tes pages parents), avant de les afficher.
     
Chargement...
Similar Threads - Script PHP fil Forum Date
Title et meta déscription par PHP Référencement Google 20 Décembre 2019
PHP : script pour mettre catalogue xml clickbank dans mysql Développement d'un site Web ou d'une appli mobile 6 Décembre 2017
Créer des graphiques en php - Vers quel script se tourner ? Développement d'un site Web ou d'une appli mobile 19 Octobre 2017
Quel package/script PHP complet de gestion Paypal ? e-commerce 13 Juin 2017
Quel script de consentement <=> tarteaucitron en pur php ? Développement d'un site Web ou d'une appli mobile 19 Août 2016
Script php rotation de bannière ordonné Développement d'un site Web ou d'une appli mobile 4 Avril 2016
Script de crawl en php Développement d'un site Web ou d'une appli mobile 3 Août 2015
Code Javascript s'affiche différemment en php et en html Développement d'un site Web ou d'une appli mobile 8 Décembre 2014
Script php Programme TV en cours Développement d'un site Web ou d'une appli mobile 30 Juillet 2014
envoyer un sms via script php Développement d'un site Web ou d'une appli mobile 25 Octobre 2013