Forum Clubic

Cherche script de resumé , reduction

salut bon enfaite je suis sur le point de publier un site xoopsé , mais j ai un soucis …
Je galere un a trouver un script du genre

ici le nombre de lettre a regler pour le resumé

En faite je voudrais trouver un moyen de reduire le nombre de lettre automatiquement dans des articles …

je crois que je dit des conneries mais je pense que vous m avait compris !

Je sait que sait possible mais je trouve pas le script …? si quelqu un peut me donner un tuyau !!
Edité le 06/07/2007 à 07:43

Suis le guide : www.clubic.com…

(et change le tag php pour javascript :))


<?php
$nb_caracteres = 20;
$texte = substr(stripslashes($texte),0,$nb_caracteres);
?>

Enleve 20 caractères au texte à partir de la fin.

edit : tu peux virer le stripslashes si besoin est
Edité le 17/07/2007 à 15:06

Ton code permet surtout de ne garder que les 20 premiers caractères.


<?php
$nb_caracteres = 20;
$texte = substr(stripslashes($texte),0,-$nb_caracteres);
?>

Ne surtout pas oublier le signe - (moins) !

Le signe moins, si je ne m’abuse, est de php5.

La fonction substr a toujours fonctionné de la même façon, et je ne bosse que très rarement en PHP5, je suis le plus souvent en PHP4.

EDIT: Pour définir un nombre de caractères A GARDER depuis le début, c’est effectivement la solution de Thomas_R, mais dans ce cas, on ne garde que les 20 premiers caractères, et non “on en supprime 20 à la fin”
Edité le 23/07/2007 à 19:05

Alors je ne m’abuse. Je dois confondre avec une autre regex, mais laquelle?

substr n’est en aucun cas une expression régulière, et le “-” ici présent est défini pour obtenir l’opposé du nombre donné. Tu confonds peut-être avec une quelconque utilisation ?
En fait, ici, le travail de substr est simple, il prend les caractères de TEXT depuis le caractère A jusqu’au caractère B, 0 étant la position AVANT LE PREMIER T de TEXT. En plaçant une valeur négative pour B, on part en arrière, et en supposant qu’il y a deux occurences de TEXT et que la position initiale pour B est entre les deux, on obtiendrait le curseur ici à la base:

TEXT|TEXT

Et avec B=-2:

TE|XTTEXT

Ce qui devient logique que A=0 et B=-2 donne TE, ou que A=1 et B=-1 donne EX.
Si tu as besoin de plus d’explications, demande ^^

EDIT PS: “je ne m’abuse” est mal employé ici :p, quand on dit “si je ne m’abuse”, on entend “si je ne me trompe pas”, si on se trompe, on dit “je me suis trompé”, de même on dira “je me suis abusé” :wink:
Edité le 23/07/2007 à 19:38

bonsoir :slight_smile:
désolé je m’incruste mais le sujet m’interesse aussi
le code fonctionne bien mais ça coupe les mots
comment faire pour eviter ça ?

La fonction substr() peut être utilisée pour limiter les caractères ou couper un mot.
Explique moi ce que tu veux exactement, et je pourrai t’orienter.
Edité le 23/07/2007 à 20:38

Dans le temps j’avais fait ça :

function str_cleanTruncate($chaine,$longueur,$suffixe='') {
	if(strlen($chaine) >= $longueur) { // Si la chaine a besoin d'être tronquée
		$troncated = substr($chaine, 0, strpos(substr($chaine, $longueur), ' ')+$longueur); // On coupe après le premier espace qui suit le xème caractère
		$troncated .= $suffixe; // Rajout du Suffixe eventuel
	}
	else { // Sinon, le retour est la chaîne elle-même
		$troncated = $chaine;
	}
	return $troncated;
}

Pardon, je suis perfectionniste, je n’aime pas l’idée de >=, et le suffixe peut être génant.
Mettons qu’on prend “…” pour suffixe, la tronque peut donner une chaine plus longue que celle d’avant si elle fait UN CARACTERE de plus que le maximum, il faut donc modifier ton code, je le verrais plutôt ainsi:

function str_cleanTruncate($chaine,$longueur,$suffixe='') {
	if(strlen($chaine) > $longueur) { // Si la chaine a besoin d'être tronquée
		$troncated = substr($chaine, 0, strrpos(substr($chaine, 0, $longueur-strlen($suffixe)), ' ')); // On coupe après le premier espace PRECEDENT (c'est mieux si on a limite à une taille, il est mieux que ça soit plus court que trop long) le Xème caractère
		$troncated .= $suffixe; // Rajout du Suffixe eventuel
	}
	else { // Sinon, le retour est la chaîne elle-même
		$troncated = $chaine;
	}
	return $troncated;
}

Si tu ne t’abuses, tu sembles dire la vérité.

a vrai dire je veux faire à peu pres comme djmick007 mais pour l’instant j’y suis pas encore je suis tombé sur le topic au hasard d’une recherche j’en est profité
j’avais plutot pensé à compter les “mots” comme l’exemple ici
mais compter les espaces vide j’y avais pas pensé du tout
merci pour l’exemple ça va bien me servir :slight_smile:

XaF > Comme je disais, j’avais fait ça dans le temps (premiers scripts) :wink:
Et tes corrections ne relèvent pas d’une volonté de perfection mais de de correction de bug :super:
Edité le 23/07/2007 à 21:20

C’est bien ce que je disais, mais pas ce que tu as dis :stuck_out_tongue: “Alors je ne m’abuse” sous entendrait que tu ne t’étais pas trompé, m’enfin, je chipotte là :wink:

Pour compter les mots tu peux te renseigner sur la fonction explode(), ça peut t’être utile, et personnellement je la préfère à str_word_count(), bien que ce ne soit pas exactement la même chose et que tu doives toi adapter explode() …

Il n’y avait pas de bug à ta fonction, j’y ai juste apporté les modifications qui, si je devais utiliser cette fonction, m’auraient intéressées, après c’est à chacun de voir et d’adapter à ce qu’il veut, c’est le but de la programmation :wink:

Si, le >= était un sombre bug honteux.
En tout cas, je la garde ta version car elle est bien.

Amuse toi bien avec, alors :super: xD
Edité le 24/07/2007 à 09:00

je le met pour djmick007 et pour ceux qui chercherai au cas ou
j’ai trouvé ça par hasard sur ALL HTML
le code fonctionne et donne un bon exemple


function tronque($chaine,$max=100) { // tronquature à 100 caractère par defaut
// on recherche le 1er <br />
$cherche_saut_de_ligne = "<br />";
$recherche = strrpos($chaine, "<br />");
if ($recherche === false){
if(strlen($chaine)>=$max){
$chaine=substr($chaine,0,$max); 
$espace=strrpos($chaine," "); 
$chaine=substr($chaine,0,$espace)."..."; 
} 
}
else {
$debut_chaine = explode ("<br />",$chaine);
$chaine = $debut_chaine[0]."...";
}
return $chaine;
}

// utilisation 
$NouveauTexteTronque = tronque($VotreTexteATronquer , NombreDeCaratère);