[php] couper un texte lors de l'affichage

Clori
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 3 Mar 2010

[php] couper un texte lors de l'affichage

Message le Mer Mar 03, 2010 9:40

Bonjour,

je souhaiterai n'afficher qu'une partie de mon texte issu d'une bdd. J'ai trouvé les fonction wordwrap, mais cela ne convient pas et je n'arrive pas à l'appliquer.
Dans l'idéal ce serait de pouvoir couper à 300 mots sans césure au milieu d'un terme.

Code: Tout sélectionner
        <?php
      $sql = ' SELECT * FROM bio WHERE statut=1 ORDER BY bio.date DESC LIMIT 4 ' ;
      // on envoie la requete
      $req = query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
      // on fait une boucle qui va faire un tour pour chaque enregistrement
      while($data = mysql_fetch_assoc($req))
      {
      $urlfriendly= strtolower(strtr($data['nickGB'], "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ", "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn-"));
      // on affiche les informations de l'enregistrement en cours
      echo '<tr><td width=\"60\"><img src="images/avatars/'.$data['image'].'.jpg" width="35" height="35" alt="'.$data['nickFR'].'"></td><td><a href="bio.php?id='.$data['id'].'&bio='.$urlfriendly.'">'.$data['nickFR'].'</a> - modifiée le : '.$data['date'].' </td></tr><tr><td></td><td>'.$data['shortdesc'].'</td></tr>';
      }
      ?>


merci de votre aide.


blman
WRInaute accro
WRInaute accro
 
Messages: 3077
Inscription: 5 Sep 2003

Re: [php] couper un texte lors de l'affichage

Message le Mer Mar 03, 2010 9:49

Alors je verrais bien un truc du style :

Code: Tout sélectionner
function shortdesc($chaine){

   $newChaine=explode(" ",$chaine);   
   $shortDesc='';

   $c=0;
   while(isset($newChaine[$c])){
      if(strlen($shortDesc." ".$newChaine[$c])<=300){
         $shortDesc=$shortDesc." ".$newChaine[$c];
      }
      else break;
      $c++;
   }
   return $shortDesc;
}


et on appelle :

Code: Tout sélectionner
$data['shortdesc']=shortdesc($data['tontexteacouper']);

Clori
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 3 Mar 2010

Re: [php] couper un texte lors de l'affichage

Message le Mer Mar 03, 2010 10:20

Je ne comprends pas : shortdesc($data['tontexteacouper' car je suis sensé appeler un champ (shortdesc) de ma table. comment puisje afficher un "tontexteacouper"?

Clo


blman
WRInaute accro
WRInaute accro
 
Messages: 3077
Inscription: 5 Sep 2003

Re: [php] couper un texte lors de l'affichage

Message le Mer Mar 03, 2010 10:40

Ah ok, tu a déjà une description courte dans ta bdd

Code: Tout sélectionner
$data['shortdesc']=shortdesc($data['shortdesc']);


Et j'avais mal lu ton truc, vu que ma fonction doit coupé à 300 caractères et pas à 300 mots, donc, ça serait plutôt un truc du style :

Code: Tout sélectionner

function shortdesc($chaine){

   $newChaine=explode(" ",$chaine);   
   $shortDesc='';

   $c=0;
   while(isset($newChaine[$c]) && $c<300){
         $shortDesc=$shortDesc." ".$newChaine[$c];
         $c++;
   }
   return $shortDesc;
}



Bon après, y'a surement mieux comme solution, moi je code à l'arrache là...


forty
WRInaute passionné
WRInaute passionné
 
Messages: 1701
Inscription: 30 Oct 2008

Re: [php] couper un texte lors de l'affichage

Message le Mer Mar 03, 2010 10:50


Clori
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 3 Mar 2010

Re: [php] couper un texte lors de l'affichage

Message le Mer Mar 03, 2010 10:55

Je l'avais vu et regardé avec attention, mais je n'ai pas vu/su comment l'installer par rapport à ma problématique en fait.

clo


abouvard
WRInaute impliqué
WRInaute impliqué
 
Messages: 517
Inscription: 17 Aoû 2004

Re: [php] couper un texte lors de l'affichage

Message le Mer Mar 03, 2010 11:28

Hello :
Moi j'utilise ça :

Code: Tout sélectionner
$txt = strip_tags($data['shortdesc']);
$lg_max = 300; //nombre de caractères

if (strlen($txt) > $lg_max)
    {
    $txt = substr($txt, 0, $lg_max);
    $last_space = strrpos($txt, " ");
    $txt= substr($txt, 0, $last_space)."...";
    }


EDIT : ah pardon, je n'avais pas vu ton besoin de césure à 300 mots et non 300 caractères


Mountain Magazin
WRInaute impliqué
WRInaute impliqué
 
Messages: 598
Inscription: 1 Oct 2004

Re: [php] couper un texte lors de l'affichage

Message le Mer Mar 03, 2010 12:24

Voici la fonction que tu cherches :

Code: Tout sélectionner
function Tronquer_Texte ( $texte, $nbchar ) {
   return (strlen($texte) > $nbchar ? substr(substr($texte,0,$nbchar),0,strrpos(substr($texte,0,$nbchar)," "))."..." : $texte);
}

Elle est écrite sur une ligne.

En premier paramètre, tu passe le texte à traiter, et en second le nombre de caractères où tu veux tronquer.

La fonction te rajoute trois petits points à la fin de ta chaine (etc), mais tu peux mettre ce que tu veux, par exemple un lien lire la suite, auquel cas tu peux ajouter un troisième paramètre à la fonction.


milkiway
WRInaute accro
WRInaute accro
 
Messages: 4910
Inscription: 3 Fév 2004

Re: [php] couper un texte lors de l'affichage

Message le Mer Mar 03, 2010 12:24

Amusant j'ai le meme code et pourtant je l'ai fait moi même... !
Code: Tout sélectionner
// TRONQUER TEXTE
function Tronquer_Texte($texte, $longeur_max)
{
    if (strlen($texte) > $longeur_max)
    {
    $texte = substr($texte, 0, $longeur_max);
    $dernier_espace = strrpos($texte," ");
    $texte = substr($texte, 0, $dernier_espace)."...";
    }

    return $texte;
}


Pour tronquer en nombre de mots, utilise explode() ;)


Mountain Magazin
WRInaute impliqué
WRInaute impliqué
 
Messages: 598
Inscription: 1 Oct 2004

Re: [php] couper un texte lors de l'affichage

Message le Mer Mar 03, 2010 12:33

Le code que j'utilise n'est pas de moi, j'ai du le modifier un peu (je sais plus), ce qui explique peut être certaines similitudes. Peut être que tu t'es inspiré de codes existants, il y en a des tas pour faire ça.

En tout cas c'est ce que j'ai trouvé de mieux pour gérer le tronquage d'un texte proprement.


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19592
Inscription: 8 Aoû 2004

Re: [php] couper un texte lors de l'affichage

Message le Jeu Mar 11, 2010 0:00

en faisant attention à ne pas couper au milieu de balises, genre <a>, <div>, ... ou entre l'ouvrante et la fermante


stopher
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 16
Inscription: 10 Mar 2010

Re: [php] couper un texte lors de l'affichage

Message le Jeu Mar 11, 2010 8:49

Salut ,
voici une alternative si ça vous intéresse :

Code: Tout sélectionner
//la chaine de plus de 300 mots
$machaine ="bonjour a tous bla bla bla .. ";
//on la coupe au niveau des espace , on recupére dans un tableau
$tmots = explode(' ',$machaine);
//ou coupe notre tableau afin de n'avoir que 300 valeurs
$tnewChaine = array_slice($tmots, 0, 300);
//on recolle la chaine
$newChaine = implode( ' ',$newChaine);


Good luck ,

Ch.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 0 invités