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 :

Liens dynamiques: conseil


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut Liens dynamiques: conseil
    Bonjour,

    Je développe actuellement un CMS, mais suis confronté à un petit problème à ce stade.

    Le CMS permet bien entendu de gérer et d'ajouter de multiples pages; sont donc crées de multiples adresses. Afin d'optimiser le référencement, mes URL sont réécrites grâce à un slug, crée à partir du titre de la page. Si un titre de page est modifié, le slug le sera aussi et donc l'URL également.

    Afin d'éviter les liens morts, j'ai crée une petite fonction permettant de gérer dynamiquement les liens (cela me permet également de gérer des pages identiques mais en différente langue). Sur chaque lien interne, j'ai donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="<?php echo generateLink(); ?>">texte</a>
    Mon problème actuel est le suivant: lorsque je souhaite créer un lien interne dans le contenu d'une page (qui est logiquement enregistré en BDD), je ne peux plus utiliser ma fonction PHP puisque le code à déja été traité par le serveur !
    Pour le moment, mes liens sont en dur dans le contenu, mais c'est une grosse source d'erreurs 404, et je perd la gestion multilingue...

    Auriez vous une idée pour dynamiser un lien issu d'un contenu lui même appelé de la BDD (donc déjà traité par le serveur Apache) ?

  2. #2
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Salut,

    Je vois deux solutions à ton problème :

    1. Soit tu ne mets pas les liens en dur dans le texte, mais plutôt l'identifiant de chaque page que tu remplaceras ensuite lors de la génération de tes pages. Par ex : <a href="{identifiant}">Mon Lien</a>. Et lors de la génération, tu utilises la fonction preg_replace pour détecter les identifiant et les remplacer par la bonne valeur (un peu comme spip)

    2. Soit tu gardes ta méthode actuelle, et lors de génération de la page tu utilises preg_match_all pour récupérer tous les liens internes. Une fois récupérés, tu peux vérifier grâce à une requête SQL si les pages existent bien. Si certaines n'existent pas, alors leur lien est mort et tu peux les différencier grâce à une couleur spécifique ou bien les lister pour pouvoir les corriger par la suite. Ex :
    preg_match_all('`href="([-_a-zA-Z0-9]*).html"`',$texte,$match);
    puis requête : SELECT * FROM pages WHERE slug IN ('".implode("','",$match[1])."');

    A++

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Ta méthode des identifiants me semble être une très bonne idée ! D'ailleurs je me demandais comment fonctionnais ce système {identifiant}, tu viens de me donner deux réponses en une !

    Je vais tester ce système et reviendrais ici avec mes résultats.

    Merci !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Bon, la méthode me semble excellente, mais je ne maîtrise pas encore les subtilités du preg_replace.

    Mon opération est la suivante:

    1. Détecter les identifiants de la forme <a href="{ma_page}">
    2. Utiliser ma fonction generateLink avec l'identifiant "ma_page" (i.e: generateLink('ma_page', $lang)
    3. Retourner le lien dans le <a href="mon-lien-dur.html">

    Comment effectuer cela avec preg_replace ? Je pense comprendre comment détecter un schema (et encore...), mais pas comment utiliser l'identifiant compris entre les {}. Un exemple de code ?...

  5. #5
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Avec preg_replace, il te faut créer deux tableaux, l'un contenant les identifiants de tes pages, l'autre les slugs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $liste_id[0]="`\{123\}`";
    $liste_id[1]="`\{524\}`";
    $liste_id[2]="`\{325\}`";
     
    $liste_slug[0]="slug-de-la-page-123";
    $liste_slug[1]="slug-de-la-page-524";
    $liste_slug[2]="slug-de-la-page-325";
    Puis, faire le remplacement des identifiants par les slugs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $texte=preg_replace($liste_id,$liste_slug,$texte);
    Par contre attention car le problème avec cette méthode, c'est que si une page est supprimée, alors le lien sera mort...

    A++

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Merci beaucoup. Concernant le risque des pages supprimés, je peux faire une validation de l'identifiant avant d'afficher le lien et donc notifier si le lien est mort.

    Merci pour ton aide djayp !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    J'ai effectué les modifications dans mon système, tout marche à merveille ! Je vais maintenant préparer une gestion des liens morts.

Discussions similaires

  1. liste deroulante : onselect +lien dynamique
    Par LFC dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/04/2005, 11h32
  2. [DisplayTag] Créer un lien dynamique avec javascript
    Par babylone7 dans le forum Taglibs
    Réponses: 3
    Dernier message: 20/04/2005, 10h23
  3. [Débutant] Pb avec les paramètres dans lien dynamique
    Par hackwell69 dans le forum Struts 1
    Réponses: 2
    Dernier message: 21/02/2005, 11h33
  4. [DisplayTag] Comment créer un lien dynamique
    Par tscoops dans le forum Taglibs
    Réponses: 3
    Dernier message: 17/02/2005, 09h53
  5. [Javascript] Suppression de lien dynamique
    Par Invité4 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/01/2005, 10h36

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