Tronquer un texte dans un tableau

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Tronquer un texte dans un tableau

par Elisa » 29 sept. 2005, 13:13

Ca y est, j'ai trouvé: je n'avais pas modifié l'erreur que j'ai signalée en nota. Merci pour tout. :P

par Elisa » 29 sept. 2005, 12:25

Non en fait, en y regardant de plus près, c'est toujours le dernier "mot" qu'il fasse 7 lettres ou qu'il en fasse 25 (comme une adresse URL par exemple).

par Tho » 29 sept. 2005, 12:16

c'est toujours une dizaine exactement ? as-tu des accents convertis en html ?
Par exemple un é s'écrit é et prend 7 caractères au lieu d'un.

par Elisa » 29 sept. 2005, 12:08

Même si je reprends le script initial, que je paramètre à 50 par défaut, il me coupe une dizaine de caractères au lieu de m'en afficher 50. :(

par Cyrano » 29 sept. 2005, 11:59

Tu pourrais effectivement définir la paramètre par défaut à 50 directement dans la fonction. Mais ce que j,ai rajouté te permet de traiter encore plus rapidement en mettant un paramètre à 0 lors de l'appel de fonction pour qu'il n'y ait pas de troncature... auquel cas, il est vrai que tu n'auras pas besoin de la fonction du tout. Donc tu peux effectivement reprendre ta premiere version avec le second paramètre à 50 par défaut.

par Elisa » 29 sept. 2005, 11:54

Attention à un détail. La variable définie avant la fonction n'est pas prise en compte DANS la fonction. Pour qu'elle le soit, il faudrait qu'elle soit globale avec l'instruction global
C'est donc pour cela que [$max_caracteres=50;] n'était pas pris en compte?

Mais est-ce que je ne peux pas me contenter d'écrire:
function tronc_texte($texte,$max_caracteres = 50) 
Ainsi par défaut, j'aurai 50 caractères et seulement 50 caractères max., dans la totalité de mon tableau.

Lorsque je lis ceci:
 $longueur = $max_caracteres == 0 ? strlen($texte) : $max_caracteres; 
J'ai l'impression qu'il y a répétition: la longueur, c'est le nombre de caractères max., à savoir 0?


Nota: J'ai fait une erreur dans le script précédent: il faut remplacer $requete par $texte.

par Cyrano » 29 sept. 2005, 11:16

Alors deux choses: j'ai mis dans l'exemple 0 par défaut, mais tu peux définir une autre valeur.

L'autre problème, si ça ne change rien quel que soit la valeur du second paramètre, c'est qu'il y a un problème dans la logique des instructions qui suivent. Reprenons ta fonction avec une modification : Si par défaut la valeur du second paramètre est à 0, il n'y aura pas de troncature, on va donc définir les instructions comme suit:
<?php
//Nbre max de caractere
$max_caracteres=50;

//Fonction à appliquer lors de l'affichage//
function tronc_texte($texte,$max_caracteres = 0)
{
    /* Définissons une valeur de longueur maxi */
    $longueur = $max_caracteres == 0 ? strlen($texte) : $max_caracteres;
    // Test si la longueur du texte dépasse la limite
    if (strlen($texte) >= $max_caracteres && $longueur != strlen($texte))
    {
        // Sélection du maximum de caractères
        $requete = substr($texte, 0, $longueur);
        // Récupération de la position du dernier espace (afin déviter de tronquer un mot)
        $position_espace = strrpos($texte, " ");
        $troncature = substr($texte, 0, $position_espace)."...";
    }
    return $troncature;
}
?>
Attention à un détail. La variable définie avant la fonction n'est pas prise en compte DANS la fonction. Pour qu'elle le soit, il faudrait qu'elle soit globale avec l'instruction global

par Elisa » 29 sept. 2005, 11:06

Si je comprends bien, lorsque j'écris
function tronc_texte($texte,$max_caracteres = 0) 
le 0 indique qu'il n'y a pas de caractères maximum par défaut?

Ce que j'ai du mal à comprendre, c'est que j'ai déjà prédéfini le nombre maximal de caractères (50): ce chiffre ne doit-il pas être le nombre maximal de caractères par défaut?

Par ailleurs, lorsque je modifiais le second paramètre obligatoire, ça ne changeait rien à l'affichage. Est-ce que c'est normal?

par Cyrano » 29 sept. 2005, 10:39

Tu obtiendras une erreur si tu retires le second paramètre parce que ta fonction en comporte deux obligatoires.

Mais tu peux en rendre un(ou les deux) factultatifs. Supposons que tu veuilles rendre le second facultatif : pour celà, il te suffit de définir une valeur par défaut qui sera prise en compte si rien n'est envoyé en second paramètre. Ça modifie ta fonction comme suit:
<?php
//Nbre max de caractere
$max_caracteres=50;

//Fonction à appliquer lors de l'affichage//
function tronc_texte($texte,$max_caracteres = 0)
{
// Test si la longueur du texte dépasse la limite
    if (strlen($texte)>=$max_caracteres)
    {
        // Sélection du maximum de caractères
        $requete = substr($texte, 0, $max_caracteres);
        // Récupération de la position du dernier espace (afin déviter de tronquer un mot)
        $position_espace = strrpos($texte, " ");
        $troncature = substr($texte, 0, $position_espace)."...";
    }
    return $troncature;
}
?>
Si le second paramètre n'est pas précisé dans l'appel de fonction, alors la valeur par défaut utilisée sera 0. Mais si tu envoies une autre valeur, alors cette valeur aura priorité sur la valeur par défaut.

par Invité » 29 sept. 2005, 10:12

Bonjour,

Grâce à vos aides et explications, j'ai défini ma fonction ainsi
<?php 
//Nbre max de caractere
$max_caracteres=50;

//Fonction à appliquer lors de l'affichage//
function tronc_texte($texte,$max_caracteres)
{
// Test si la longueur du texte dépasse la limite
	if (strlen($texte)>=$max_caracteres)
	{
		// Sélection du maximum de caractères
		$requete = substr($texte, 0, $max_caracteres);
		// Récupération de la position du dernier espace (afin déviter de tronquer un mot)
		$position_espace = strrpos($texte, " ");
		$troncature = substr($texte, 0, $position_espace)."...";
	}
	return $troncature;
}
?>
Et je l'applique à l'affichage ainsi:
<td> <?php $texte = $val["Presentation"];
			$texte = tronc_texte($texte, 0);
			echo nl2br ($texte);?> </td>
Lorsque je remplace le 0 de cette partie du code [$texte = tronc_texte($texte, 0);], rien ne change. Lorsque je le retire, en revanche, il m'affiche une erreur. Du coup je ne comprends pas bien à quoi ça sert.

Par ailleurs, la troncature se fait sur les deux-trois derniers mots du texte affiché au lieu de m'afficher une cinquantaine de caractères. Si vous avez une explication à ce nouveau mystère du PHP, je suis preneuse. :)
c'est quoi une bibliographie douteuse ?
Une bibliographie formellement douteuse est une bibligographie dont la présentation laisse fortement à désirer (lettres alphabétiques inversées, références bibliographiques incomplètes). :wink:

par ouckileou » 28 sept. 2005, 17:26

ce message était-il réellement utile ?

deux personnes ont expliqué le principe, et je vois ceci :
Bon, je vais potasser ça tranquillement pour demain.
donc ça me semblait bon... elle pouvait développer ça elle-même et revenir poser des questions précises si besoin

je vais passer pour un désagréable, mais je trouve ça agaçant quand on essaye d'expliquer un principe, pour permettre aux gens de le mettre en oeuvre eux-mêmes et de le comprendre, et que quelqu'un passe après la bataille pour balancer du code tout cuit :roll:

je crois que le principe de ce forum est avant tout d'apprendre, et non pas de monter une société de service en code PHP ;)

par Tho » 28 sept. 2005, 17:06

Voilà ma version de la fonction en question. Mets-la dans un fichier contenant les fonctions utiles, par exemple util.php
function textemax($texte,$max){
	if(strlen($texte) > $max)
		return substr($texte,0,$max-3)."...";
	else 
		return $texte;
}
Pour l'utiliser :
require_once 'util.php'; // inclut le fichier
$montexte = "toto titi";
echo textemax($montexte,4);

par ouckileou » 28 sept. 2005, 16:51

là c'est simple, tu as toutes les explications qu'il faut ;)

tu mets ton code qui sert à tronquer un texte dans une fonction, qui prend en paramètre la variable texte à traiter, et qui te renvoie une variable avec le texte tronqué (ou non s'il n'y avait pas besoin)

et tu appelles cette fonction avec chaque echo de tes cellules de tableau
et si un jour par exemple tu veux changer le nombre de caractères limite (de 50 à 40), tu n'auras à le faire qu'une seule fois, dans la fonction

c'est quoi une bibliographie douteuse ?

par Elisa » 28 sept. 2005, 16:44

Bon, je vais potasser ça tranquillement pour demain. En fait c'est un peu comme une inclusion (à part que ça se fait dans le même fichier alors que l'inclusion fait appel à un fichier extérieur)?

P.S.: J'aurai les résultats la semaine prochaine mais je suis confiante. On m'a essentiellement reproché une bibliographie formellement douteuse...

par Cyrano » 28 sept. 2005, 16:44

Une fonction : Il s'agit d'une série d'instruction qui seront exécutées chaque fois qu'on fera appel à la fonction. La structure d'une fonction en PHP est la suivante:
<?php
/* On initialise avec le mot clé "function" et son nom suivi de parenthèses */
function mafonction()
{
    /* Ici viendront les instructions à exécuter */
}
?>
On utilisera une fonction afin de pouvoir utiliser souvent les mêmes instructions dans plusieurs endroits du code sans devoir ré-écrire à chaque fois toutes les instructions.

On peut envoyer des paramètres à une fonction, c'est à dire des données dont les valeurs pourront être traitées et éventuellement, la fonction retournera un résultat:
<?php
/* On initialise avec le mot clé "function" et son nom suivi de parenthèses */
function mafonction($param1)
{
    /* Ici viendront les instructions à exécuter */
    $resultat = $param1 * 2;
    /* La fonction retourne un résultat : */
    return $resultat;
}
?>
On peut donc modifier une valeur en faisant appel à la fonction :
<?php
/* On a une première valeur */
$ma_variable = 2;
/* On veut modifier cette valeur pour initialiser une autre variable: 
    on fait appel à la fonction en lui envoyant la première valeur en paramètre */
$ma_nouvelle_variable = mafonction($ma_variable);
/* Affichage du résultat obtenu */
echo("<p>Ma nouvelle valeur après traitement : ". $ma_nouvelle_variable ."</p>\n");
?>
Ceci va faire afficher :
Ma nouvelle valeur après traitement : 4
Voilà, c'est très sommaire bien entendu, je ne saurais trop te recommander d'acheter un bouquin, ce genre de sujet est toujours trité de façon beaucoup plus complète.