IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fil d'ariane en PHP, plusieurs niveaux, un seul répertoire


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Fil d'ariane en PHP, plusieurs niveaux, un seul répertoire
    Bonjour

    Je suis en train de developper un "fil d'ariane" ou "breadcrumb" pour un site php/mySql.

    1 ) Mon site se compose ces pages (rubriques principales) :

    "index.php", "artiste.php", "concert.php", "livres.php", "liens.php", "contact.php".
    2 ) Le site est diponible en anglais & en français (variable lang= dans l'url).

    3 ) Les pages" index.php, livres.php, liens.php, contact.php" ne contiennent qu'un niveau d'arborescence, la langue est le seul paramètre amené à changer.

    4 ) la page "artiste.php" peut etre appellée avec 5 paramètres :

    - var "type" = liste des artistes
    - var "type" = detail d'un artiste
    - var "type" = biographie de l'artiste
    - var "type = liste des albums de l'artiste
    - var "type" = detail d'un album de l'artiste

    Exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    http://www.ledomaineamoi.com/artiste.php?lang=fr&type=liste_artistes
    http://www.ledomaineamoi.com/artiste.php?lang=fr&type=detail_artiste&id_artiste=6
    http://www.ledomaineamoi.com/artiste.php?lang=fr&type=detail_album&id_artiste=6&id_album=3
    5 ) la page "concert.php" peut etre appellée avec 2 paramètres :

    - var "type" = liste des concerts
    - var "type" = detail d'un concert

    Le but est d'implémenter un "fil d'ariane" généré à partir de l'url en fonction de la valeur des variables "type" & "lang" ainsi que
    de l'identifiant des artistes ("id_artiste") et des albums ("id_album") Ce fil d'ariane doit ressembler à ceci :

    Exemples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // code...
    <li><a href="artiste.php?lang=fr&type=liste_artistes title="liste des artistes bla bla">> Artistes</a></li>
    <li><a href="artiste.php?lang=fr&type=detail_artiste&id_artiste=6 title="Mano Negra... bla bla">> La Mano Negra</a></li>
    // code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // code...
    <li><a href="artiste.php?lang=fr&type=liste_artistes title="liste des artistes bla bla">> Artistes</a></li>
    <li><a href="artiste.php?lang=fr&type=detail_artiste&id_artiste=6 title="Mano Negra... bla bla">> La Mano Negra</a></li>
    <li><a href="artiste.php?lang=fr&type=liste_album&id_artiste=6&id_album=2 title="Puta's Fever - artiste : Mano Negra... bla bla">> Puta's Fever</a></li>
    // code...
    6 ) Je me retrouve donc avec un fichier php bien lourd qui extrait les params de l'url, vérifie leur présence,
    leur "validité" (pas de problème avec un valeur exotique remplacée dans l'url par l'internaute du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    http://www.ledomaineamoi.com/artiste.php?lang=fr&type=cassoulet&id_artiste=7
    // ou alors
    http://www.ledomaineamoi.com/artiste.php?lang=fr&type=detail_artiste&id_artiste=785421056
    7 ) J'utilise les variables $_GET pour effectuer la recherche et l'affichage du nom des artistes et des albums via des requetes sur la base MySql.

    Je cherche a utiliser un fichier d'include unique du fil d'ariane pour tout le site.
    Voilà pour l'aspect poétique de la chose.

    8 ) Concernant l'implémentation je suis arrivé à un horrible fichier php de 18 ko avec 460 lignes de code je résume l'esprit de la chose :

    - une clause switch qui renvoie le contenu en fonction du nom de la page (nom du fichier dans l'url)
    - un ensemble de clause if, else if, else imbriquée pour générer le contenu du fil d'ariane suivant la valeur de la variable "type"
    - un switch imbriqué dans les clause conditionnelles pour générer le contenu en fonction de la langue ($_GET ['lang']).

    Cette approche est assez lourde, la taille du fichier conséquente et pour maintenir le code en cas d'ajout de paramètres supplémentaires dans les rubriques
    ça devient assez difficile.

    J'ai effectué pas mal de recherche sur les systèmes de "fil d'ariane" ou "breadcrumb" et ce que j'ai trouvé ce sont des sytèmes fonctionnant sur
    la détection de répertoires imbriqués, ce qui n'est pas mon cas.

    Quelque âme compatissante aurai-t-elle une idée plus judicieuse pour l'implémentation que celle décrite plus haut (voir : paragraphe 8) ?

    Merci d'avance.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    Voilà les quelques améliorations que je te propose, par rapport à ce que tu dis sur l'implémentation :


    - une clause switch qui renvoie le contenu en fonction du nom de la page (nom du fichier dans l'url)
    Ca me parait pas mal
    Je ne sais pas si tu y as pensé, mais tu peux enchainer plusieurs clauses case, du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    switch ($page) {
      case "index.php":
      case "livres.php":
      case "liens.php":
      case "contact.php":
      // etc... Toutes les pages qui ont le même traitement
        /* traitement */
        break;
     
      case "artistes.php":
        /* traitement */
        break;
    }



    - un ensemble de clause if, else if, else imbriquée pour générer le contenu du fil d'ariane suivant la valeur de la variable "type"
    Tu peux factoriser un peu de code ici aussi avec un switch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    switch ($type) {
    case "detail_album":
      /* lien album */
    case "detail_artiste":
      /* lien artiste */
    case "liste_artistes":
      /* lien liste artistes */
    }
    Ainsi "detail_album" affichera les 3 liens, "detail_artiste" seulement 2 liens et "liste_artistes" uniquement le dernier




    - un switch imbriqué dans les clause conditionnelles pour générer le contenu en fonction de la langue ($_GET ['lang']).

    Qu'utilises-tu pour le contenu des pages en elle mêmes ?

    Je pense qu'il existe des bibliothèques d'internationalisation bien concues qui te permettront de traduire tout tes textes facilement. De mémoire je crois que Dotclear utilise un système dans ce genre et qu'il permet aussi bien de traduire des liens que du texte simple.
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Merci pour ta réponse.

    1 ) Effectivement j'ai utilisé un switch pour détecter le nom de la page et le contenu à produire en fonction de celui-ci.

    2 ) Parcontre du coup j'ai optimisé le code suite à ta remarque en imbriquantun switch qui produit le contenu en fonction de la variable "type").

    3 ) Concernant la langue, celà ne m'enchante pas d'imbriquer un switch (trois niveau d'imbrication...) et de répéter la génération du code html de mon fil d'ariane...Mais je n'ai pas pour l'instant de solution plus propre.

    4 ) Je me demande quelle serait la façon la plus propre de détecter :

    - un paramètre langue invalide
    - un paramètre "type" invalide (voir mon post)
    - un paramètre "id_artiste" invalide
    - un paramètre "id_album" invalide

    Pour une page appellée sans les variables dans l'url, j'ai d'abord pensé à quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    if ($_SERVER['QUERY_STRING'] =" ") {
    	$lang ="fr";
    	switch ($curr_page) {
    		case "artiste" :
    		$_GET['lang'] = 'fr';
    		$_GET['type'] = 'liste_artistes';
    // code...
    }
    ?>
    Celà résoud le cas ou la page est appellée sans paramètres, mais je pense aux cas ou l'url serait manipulée et ou un paramètre "id_artiste" ou "id_album" renseigné par l'internaute serait invalide :

    Une requete sur les tables `artistes` et `albums` me permettrais de connaître le dernier`id_artiste` et `id_album` et de le comparer avec la valeur des variables $_GET ['id_artiste'] & $_GET ['id_album'].

    5 ) Pour répondre à ta question concernant l'implémentation du contenu de la page, je fais un autre "include" dans la page, dans lequel il y a une fonction qui génère le contenu de la page, celle-ci étant appellé avec un paramètre "lang" et un paramètre "type" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    //------------------
    // page incluse
    //------------------
    function DisplayContentArtiste ($lang, $type) {
     
    // code...
    }
    ?>
    <?php
    //------------------
    // page artiste
    //------------------
    // code...
    DisplayContentArtiste ($lang, $type);
    ?>
    Là aussi c'est peu être un peu lourd car j'ai pour chaque page :

    un include qui détecte la langue du navigateur et qui renvoie (si elle n'est pas présente dans l'url) un variable "$lang" utilisée en paramètre pour mes fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    // pour le fil d'ariane
    DisplayFil ($lang, $type);
    /* pour les déclaration "doctype", "les meta", l'inclusion  des CSS appropriées, bref le contenu XHTML jusquà la balise fermante"</head>"*/
     
    DisplayHeaderArtiste ($lang, $type);
     
    // pour le contenu de la page proprement dit
     
    DisplayContentArtiste ($lang, $type);
    ?>
    et ceci pour toute mes pages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    DisplayFil ($lang, $type);
    DisplayHeaderConcert ($lang, $type);
    DisplayContentConcert ($lang, $type);
    //etc...
    ?>
    et même chose pour le "footer".

    Mon approche n'est pas DU TOUT optimisée, et à ce stade du projet je n'ai plus le temps de tout refondre en utilisant les classes et l'orienté objet que je n'est pas encore expérimenté avec PHP. Sachant que pour couronner le tout j'optimise un maximum les balises pour le référencement en renseignant tout ce qui faut (title, alt, longdesc, hreflang...), pour les deux langues (français et anglais.

    Donc voilà...

    Si tu as d'autre (sages) conseils n'hésites pas.

    Merci d'avance.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    D'autre part serait-il judicieux d'utiliser les expressions régulières pour tester de façon plus concise les variables présentes dans l'url et leurs valeurs ?

    C'est quelque chose que je n'ai pas manipulé mais dont je comprends les principes...


Discussions similaires

  1. Classe PHP à JSON sur plusieurs niveaux
    Par Spire_ dans le forum Langage
    Réponses: 3
    Dernier message: 14/01/2014, 11h31
  2. Parcours XML à plusieurs niveaux PHP Xmlreader SimpleXMLElement
    Par gyllom dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 20/10/2013, 14h34
  3. Fil d'ariane extra simple en php
    Par Reals10 dans le forum Langage
    Réponses: 16
    Dernier message: 22/01/2013, 13h45
  4. [PHP-JS] fil ariane en php
    Par Maria1505 dans le forum Langage
    Réponses: 1
    Dernier message: 06/05/2007, 16h19
  5. [PHP-JS] créer un fil d'ariane
    Par dionysos73 dans le forum Langage
    Réponses: 9
    Dernier message: 16/10/2006, 14h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo