Page 1 sur 1

Afficher tous les mots contenus dans 22 caractères

Posté : 07 févr. 2014, 03:56
par Abracadaboum
Bonsoir, ou bonjour, c'est selon!

J'essaie de limiter le nombre de mots dans le titre des extrait d'articles d'un thème wordpress.

Voila, je m'explique. actuellement j'utilise le code suivant qui me permet de limiter le nombre de caractères à 22 affichés dans le titre:

Code : Tout sélectionner

<h2 class="loop-title"> <a href="<?php the_permalink(); ?>"> <?php $reductitle = get_the_title(); echo substr($reductitle, 0, 22); ?>...</a></h2>
... mais ce n'est pas très satisfaisant car les mots peuvent être coupés de façon pas très belle selon le titre de l'article.

Ce que je souhaite faire mais que je n'arrive pas à exprimer en code c'est compter le nombre de mots contenu dans le titre.
Si la somme du nombre de mots contenu dans le titre est inférieure ou égale à 22 caractères alors afficher le titre en entier.
Sinon afficher uniquement les 1er mots qui tiennent en entier dans une chaine de 22 caractères et ajouter 3 points de suspension...

Je crois comprendre que dans l'idée le code serait quelque chose comme:
<?php
$titre = get_the_title();
if ($titre <= 0, 22) 
{
  echo "$titre";
}
else
{
  str_word_count($titre, 1, 'àáãç3');
  echo ???????????? // code pour afficher tous les mots contenus en entier dans la chaine de 22 caractères + ajout de 3 points de suspension
}
?>
Bon, c'est sans doute un peu ridicule mais il parait que ce dernier ne tue pas! :roll:

Merci beaucoup pour votre aide!

Re: Afficher tous les mots contenus dans 22 caractères

Posté : 07 févr. 2014, 10:22
par mere-teresa
Je pense que tu cherches la fonction wordwrap() de PHP.

Re: Afficher tous les mots contenus dans 22 caractères

Posté : 07 févr. 2014, 10:33
par sirakawa
Tu peux essayer ça:
<?php
$string = "This is\tan example\nstring";
//le deuxième paramètre est la liste des séparateurs de mots : ici espace nouvelle ligne et tabulation
$tok = strtok($string, "  \n\t");
$longueur = 0;
$extrait = "";
while (($tok !== false) and ($longueur < 22)) {
    echo "Word=$tok<br />";
    $tok = strtok(" \n\t");
    $extrait .= $tok
    $longueur += strlen($tok);
}
?>
à titre indicatif : afficher tous les mots fait 23 ou 24 (je ne sais pas compter sur mes doigts)

Re: Afficher tous les mots contenus dans 22 caractères

Posté : 08 févr. 2014, 02:15
par Abracadaboum
Bonsoir mere-teresa,
Merci pour ton indication... je ne suis pas certain de saisir comment employer cette fonction dans le cadre du résultat escompté en ce sens que le 1er code permet déjà de couper la chaine au 22ème caractère et n'affiche rien derrière. Veux-tu dire que la fonction wordwrap permet elle aussi de ne rien afficher derrière l'endroit ou la scission est effectuée auquel cas comment puis-je exploiter cette fonction de façon plus profitable que dans ledit 1er code?

Code : Tout sélectionner

<?php $reductitle = get_the_title(); echo substr($reductitle, 0, 22); ?>...</a></h2>


l'intérêt de la fonction wordwrap n'est-elle pas de faire un retour à la ligne à compter du énième caractère de la chaine?

En tous les cas merci pour ton aide!

*** EDIT ***

Je comprends maintenant l'intérêt de wordwrap avec le code ci-dessous :)

Code : Tout sélectionner

<?php $contenu = "Lorem Elsass ipsum amet dui jetz gehts los leverwurscht non porta ac baeckeoffe ac bredele"; $text = wordwrap($contenu, 22, "***", true); // insertion de marqueurs *** $tcut = explode("***", $text); // on créé un tableau à partir des marqueurs *** $part1 = $tcut[0]; // la partie à mettre en exergue $part2 = ''; for($i=1; $i<count($tcut); $i++) { $part2 .= $tcut[$i].' '; } $part2 = trim($part2); //suppression du dernier espace dans la partie de texte restante echo "<strong>".$part1."</strong> ".$part2; ?>

Je pense que tu cherches la fonction wordwrap() de PHP.

Re: Afficher tous les mots contenus dans 22 caractères

Posté : 08 févr. 2014, 03:00
par Abracadaboum
Bonsoir sirakawa,
Merci pour ton aide!
J'ai essayé d'exécuter le code que tu m'as communiqué mais sans succès : page blanche.
Si j'affiche le code source de la page générée je n'ai qu'une ligne vide ---> 1.
Ai-je manqué de faire quelque chose?
Merci!



Tu peux essayer ça:
<?php
$string = "This is\tan example\nstring";
//le deuxième paramètre est la liste des séparateurs de mots : ici espace nouvelle ligne et tabulation
$tok = strtok($string, "  \n\t");
$longueur = 0;
$extrait = "";
while (($tok !== false) and ($longueur < 22)) {
    echo "Word=$tok<br />";
    $tok = strtok(" \n\t");
    $extrait .= $tok
    $longueur += strlen($tok);
}
?>
à titre indicatif : afficher tous les mots fait 23 ou 24 (je ne sais pas compter sur mes doigts)

Re: Afficher tous les mots contenus dans 22 caractères

Posté : 08 févr. 2014, 03:06
par Abracadaboum
J'ai trouvé le code approprié qui permet d'obtenir ce que je souhaitais, je le poste ici afin qu'il puisse aider toute personne à la recherche de cette information:
http://www.creativejuiz.fr/blog/tutorie ... per-un-mot
Merci à vous qui avez pris le temps de répondre à mon post!!

Re: Afficher tous les mots contenus dans 22 caractères

Posté : 08 févr. 2014, 04:08
par Abracadaboum
Autre solution qui fonctionne très bien! :P

source

Code : Tout sélectionner

http://www.dimension-internet.com/blog/index.php/post/2007/01/24/61-comment-decouper-une-chaine-de-caracteres-sans-couper-un-mot

Code : Tout sélectionner

<?php /* $chaine représente la chaîne à découper Si 'debut' est positif, la chaîne retournée commencera au caractère numéro 'debut', dans la chaîne 'chaine'. Le premier caractère est numéroté zéro. Si 'debut' est négatif, la chaîne retournée commencera au caractère numéro 'debut' à compter de la fin de la chaîne 'chaine'. Si 'max' est fourni et est positif, la chaîne retournée contiendra au plus 'max' caractères, en commençant à partir du caractère 'debut' (en fonction de la taille de la chaîne 'chaine'). Si 'chaine' est plus petite que 'debut', substr() retournera FALSE. Si 'max' est fourni et négatif, alors le même nombre de caractères sera omis, en partant de la fin de la chaîne 'chaine'. Si 'debut' représente une position hors de la chaîne, une chaîne vide sera retournée. $ponct représente le bout de chaîne [...], mais vous pouvez mettre ce qui vous plaira $url représente le lien de la chaîne [...], en général il s'agit du lien de l'article complet. */ // Début de la fonction function truncate($chaine,$debut,$max,$url,$ponct=' [...]') { if (strlen($chaine) >= $max) { $chaine = substr($chaine, $debut, $max); $espace = strrpos($chaine, " "); $chaine = substr($chaine, $debut, $espace).' <a href="'.$url.'"> '.$ponct.'</a>'; } return $chaine; } // Exemple avec un bout de texte $texte = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent id urna. Ut at odio. Suspendisse sed lacus. Suspendisse nulla lectus, malesuada gravida, auctor et, dictum sit amet, nisl. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In nisi nunc, suscipit ac, dictum vitae, vestibulum et, nunc. Pellentesque dapibus ante a ante. Morbi dui magna, tincidunt in, pulvinar pellentesque, accumsan malesuada, dolor. Vestibulum tempor nibh in justo. Vestibulum ante justo, posuere quis, suscipit id, tristique id, diam. Curabitur cursus rutrum sem."; // Affichage par exemple du texte en commencant au premier caractère, jusqu'à l'emplacement du caractère 70 echo truncate($texte, 0, 70, "http://www.adresse.com"); ?>

Re: Afficher tous les mots contenus dans 22 caractères

Posté : 08 févr. 2014, 10:34
par sirakawa
Naïf, j'avais pensé que tu ajouterais un print:
Avec un ou deux ajouts pour améliorer:
<?php
$string = "This is\tan example string";
//le deuxième paramètre est la liste des séparateurs de mots : ici espace nouvelle ligne et tabulation
$tok = strtok($string, "  \n\t");
$longueur = 0;
$extrait = "";
while (($tok !== false) and ($longueur < 22)) {
     echo "Word=$tok<br />";
     $tok = strtok(" \n\t");
     $extrait .= " ".$tok;
     $longueur += strlen($tok);
}
print "$extrait";
car tu peux faire ce que tu nveux de $extrait....
?>

Re: Afficher tous les mots contenus dans 22 caractères

Posté : 08 févr. 2014, 14:39
par Abracadaboum
Merci sirakawa, c'est moi qui aurait du avoir ce réflex :oops:

Naïf, j'avais pensé que tu ajouterais un print:
Avec un ou deux ajouts pour améliorer:
<?php
$string = "This is\tan example string";
//le deuxième paramètre est la liste des séparateurs de mots : ici espace nouvelle ligne et tabulation
$tok = strtok($string, "  \n\t");
$longueur = 0;
$extrait = "";
while (($tok !== false) and ($longueur < 22)) {
     echo "Word=$tok<br />";
     $tok = strtok(" \n\t");
     $extrait .= " ".$tok;
     $longueur += strlen($tok);
}
print "$extrait";
car tu peux faire ce que tu nveux de $extrait....
?>