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 :

[str_replace]: Remplacer une expression par une fonction.


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Points : 19
    Points
    19
    Par défaut [str_replace]: Remplacer une expression par une fonction.
    Bonsoir,

    J'ai développé un petit cms qui permet de créer des pages ainsi qu'un portfolio.
    Lorsque je rentre une expression dans une page, j'aimerai que ça la remplace par le portfolio.

    Je m'explique:

    Le fichier principal se constitue dans un premier temps d'une fonction qui regroupe un certain nombre d'éléments pour afficher le portfolio.
    Ensuite, plus loin, je m'occupe de récupérer le contenu de la page dans la base de données.
    Et si la page contient l'expression "[%portfolio%]", j'aimerai que cette "expression" se supprime et soit remplacé par la fonction qui permet d'afficher le portfolio.

    Je me suis donc tourné vers "str_replace" mais ça n'a pas pu faire l'affaire.
    Voici le code pour plus de compréhension:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $req2 = mysql_query("SELECT content FROM `pages` WHERE id = '$id' ORDER BY `order`");
    while ($dnn2 = mysql_fetch_array($req2))
    {
    $content = $dnn2['content']; //Je récupère le contenu des pages
    $content = str_replace('[%portfolio%]', portfolio(), $content); //J'aimerai remplacer ici l'expression par la fonction qui affiche le portfolio
    echo $content; //J'affiche le contenu final
    }
    Avec ce code, l'expression "[%portfolio%]" se supprime bien mais la fonction est déclaré sur le contenu de toutes les pages.
    Faut-il que j'utilise une autre fonction que "str_replace" ? Y-a-t-il une méthode pour faire ce que je souhaite?

    Merci d'avance pour vote aide.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    On ne peut pas mettre une fonction dans un echo.

    Par contre tu peux chercher '[%portfolio%]' dans ta chaine de caractères et si oui tu efface cette expression et tu lance la fonction portfolio, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $content = $dnn2['content'];
     
    if(strpos($content,'[%portfolio%]') !== false)
    {
        $content = str_replace('[%portfolio%]', '', $content);
        echo $content;
        echo portfolio();
    }
    else
    {
        echo $content;
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Merci, ça fonctionne parfaitement.
    Par contre, il y a tout de même un petit souci: Si je rentre dans ma page:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Hey, regardez mon portfolio !
    [%portfolio%]
    Pas mal non ?
    Le php générera le portfolio après le contenu comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Hey, regardez mon portfolio !
    Pas mal non ?
    fonction portfolio
    Il faudrait que le portfolio apparaisse entre les deux phrases comme il a été dit lors de la saisie.
    Peut-on résoudre ce petit problème ? Si oui, comment ?
    Au passage, petite question sur le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strpos($content,'[%portfolio%]') !== false)
    Pourquoi mettre "!== false" et pas directement "== true" ?

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Tu peux couper ta chaine de caractère sur '[%portfolio%]' puis insérer ta fonction entre les affichages de ta chaine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $content = $dnn2['content'];
     
    $tab_content = explode('[%portfolio%]',$content);
     
    $count_tab = count($tab_content);
     
    foreach($tab_content as $key => $value)
        {
            echo $value;
            if (($key+1) < $count_tab)  echo portfolio();
        }

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par robinowned Voir le message
    Au passage, petite question sur le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strpos($content,'[%portfolio%]') !== false)
    Pourquoi mettre "!== false" et pas directement "== true" ?
    Parce que strpos retourne soit false soit la position numérique du motif dans la chaine. Si le motif que tu cherche se trouve en début de chaine alors strpos retournera 0. Et si tu fais une vérification avec 0 == true alors ta condition renverra faux alors que le motif était en position 0.
    C'est pour faire comprendre cela qu'il y a des exemples dans ce sens dans la documentation de cette fonction

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Okay, merci beaucoup, ça marche très bien !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 30/06/2010, 15h23
  2. Remplacer un mot ou une expression par un autre via XSLT?
    Par poisson03 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 03/06/2009, 01h55
  3. [Toutes versions] Remplacer "#N/A" par une valeur par défaut
    Par canary dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/05/2009, 11h23
  4. [RegEx] Remplacer dernière occurence d'une chaine par une autre
    Par webjoujou dans le forum Langage
    Réponses: 3
    Dernier message: 12/11/2008, 17h58
  5. [RegEx] Restreindre une saisie par une expression régulière
    Par persia dans le forum Langage
    Réponses: 2
    Dernier message: 19/11/2007, 23h52

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