Fonction Cleancut

Fermé
Hurricane - 7 janv. 2013 à 20:12
Hurricane7 Messages postés 3 Date d'inscription lundi 7 janvier 2013 Statut Membre Dernière intervention 14 janvier 2013 - 14 janv. 2013 à 19:37
Bonjour,

Je souhaite couper un texte pour qu'il soit affiché au complet dans une autre page à l'aide d'un lien et, pour le moment, j'utilise la fonction Cleancut mais cela ne fonctionne pas dans le sens où mon texte n'est pas coupé après le nombre de caractères que je demande.
Pourtant, quand je lui demande d'afficher le nombre de caractères total avec <?php echo strlen($contenu); ?>, le nombre est bien supérieur à celui que je demande.

Voici le code que j'ai mis :
<?php
$id = $donnees['id'];
$text = $contenu;
$size = 150;
$link = 'http://www.javierdelgadocaballero.com/news.php?id=<?php echo $id; ?>';

function cleanCut($text, $size, $link){
if(strlen($text)>=$size){
$text = substr($text,0,$size);
$espace = strrpos($text," ");
$text = substr($text,0,$espace).'... <a href="'.$link.'" title="Lire la suite" >(...)</a>';
}
return $text;
}
?>

Si quelqu'un pouvait m'expliquer mon erreur, ça serait super parce que là je sèche...

12 réponses

Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
7 janv. 2013 à 20:34
Hum, tu n'aurais pas oublié d'appeler la fonction ?
En plus, tu as deux balise php imbriqué, essaye donc ceci :

<?php 
$id = $donnees['id']; 
$text = $contenu; 
$size = 150; 
$link = 'http://www.javierdelgadocaballero.com/news.php?id='.$id; 
$text=cleanCut($text, $size, $link);

function cleanCut($text, $size, $link){ 
if(strlen($text)>=$size){ 
$text = substr($text,0,$size); 
$espace = strrpos($text," "); 
$text = substr($text,0,$espace).'... <a href="'.$link.'" title="Lire la suite" >(...)</a>'; 
} 
return $text; 
} 
?>  
0
Hurricane7 Messages postés 3 Date d'inscription lundi 7 janvier 2013 Statut Membre Dernière intervention 14 janvier 2013
7 janv. 2013 à 20:52
Avec ce code, il me renvoit le message : Fatal error: Call to undefined function cleanCut() in ...
Si je déplace la ligne $text=cleanCut($text, $size, $link); sous le paragraphe de function, je n'ai plus de message d'erreur mais il m'affiche à nouveau la page comme avec mon code.

Je ne sais pas si le lien comme je l'avais mis fonctionnait ou pas puisque de toute façon, le découpage ne fonctionne pas.
0
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
8 janv. 2013 à 08:40
Logiquement, tu est censé trouvé ton texte long dans $contenu et le texte court dans $text
0
Hurricane7 Messages postés 3 Date d'inscription lundi 7 janvier 2013 Statut Membre Dernière intervention 14 janvier 2013
8 janv. 2013 à 08:45
Donc si je te comprends bien, c'est faux de ma part de mettre $text = $contenu puisque l'un est court et l'autre long, il ne peuvent donc pas être égaux. Non ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
Modifié par Nhay le 8/01/2013 à 08:52
Quand tu fais $text=$contenu, les deux variables sont identique, mais ensuite, tu doit appeler la fonction qui modifie la variable $text, si tu n'a pas besoin de deux variables, tu peut toujours faire la fonction raccourcit directement sur $contenu comme ceci :
$contenu=cleanCut($contenu, $size, $link);
0
J'ai fini par réussir à couper mon texte et à créer le lien avec un mélange de la fonction que j'avais mis au début et le code fourni sur le site phpsource, et ça donne ça :
<?php // Nombre de caractère
$max = 150;
$id = $donnees['id'];
$link = 'http://www.monsite.com/news.php?id=<?php echo $id; ?>';
if(strlen($contenu)>=$max)
{
// Met la portion de chaine dans $chaine
$contenu=substr($contenu,0,$max);
// position du dernier espace
$espace=strrpos($contenu," ");
// test si il y a un espace
if($espace)
// si il y a 1 espace, coupe de nouveau la chaine
$contenu=substr($contenu,0,$espace);
// Ajoute ... à la chaine
$contenu .= '<a href="'.$link.'" title="Lire la suite" >(...)</a>';
}
?>

Par contre, tu avais raison Nhay, l'imbrication de php de l'adresse du lien dans le code php de la fonction ne fonctionne pas. Et ça ne fonctionne pas non plus avec le code que tu m'avais donné ($link = 'http://www.monsite.com/news.php?id='.$id;) donc il faut que je cherche encore pour ça.
0
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
10 janv. 2013 à 12:54
Quand tu dit que ça ne fonctionne pas, tu veux dire que ça provoque une erreur, qu'il manque le paramètre, que l'adresse est totalement absente ?

Si il manque l'id, vérifie bien que ta variables $donnees['id'] existe bien.
0
Oui, pardon. Quand je dis que ça ne fonctionne pas, je veux dire que ma page news.php s'affiche bien avec la mise en forme souhaitée mais l'article dont j'avais le début dans la page source ne s'affiche pas du tout dans la page cible.

Pour ce qui est de l'id, il n'apparaît pas clairement sous forme de chiffre dans ma page source parce que je ne l'appelle pas, mais il est sou-entendu puisque plus haut, j'ai une requête sous cette forme : $retour = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 5') or exit(mysql_error());
while ($donnees = mysql_fetch_array($retour))
0
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
10 janv. 2013 à 15:31
Donc le liens est bon en faite, c'est plutôt que tu ne le traite pas ensuite, c'est ça ?
Tu as indiqué sur ta page que si un ID était fournit, il fallait n'afficher que lui, et en grand ?
0
Effectivement, il se peut que le problème vienne du traitement.

Donc, dans ma page source j'ai ce lien : $link = 'http://www.monsite.com/news.php?id=<?php echo $id; ?>'; qui me renvoit ma page cible sans erreur mais sans l'article de l'id.
Dans cette page cible j'ai ce code pour le traitement : $retour = mysql_query('SELECT * FROM news WHERE id=\'' . $_GET['id'] . '\'') or exit(mysql_error())
Le problème viendrait de là ?
0
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
11 janv. 2013 à 08:39
La requête à l'air bonne, peut-être qu'un if qui amène à cette requête est mal construite, essaye de faire un echo "test"; près de la requête, si tu vois test s'afficher, c'est que c'est bon, sinon, c'est que ton code n'exécute pas cette partie.
0
Hurricane7 Messages postés 3 Date d'inscription lundi 7 janvier 2013 Statut Membre Dernière intervention 14 janvier 2013
14 janv. 2013 à 19:37
Je n'ai pas de if dans ma requête... Dans les deux pages j'ai la requête de connexion à ma base de données et, dans ma page source, la sélection des dernières news à afficher ($retour = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 5') or exit(mysql_error()); while ($donnees = mysql_fetch_array($retour))
{), et dans ma page cible, la même chose sauf que j'essaye de récupérer l'id du lien ($retour = mysql_query('SELECT * FROM news WHERE id=\'' . $_GET['id'] . '\'') or exit(mysql_error())

J'ai l'impression que tout cloche, et le lien et la page cible, parce que quand je met clairement dans le lien ....news.php?id=1, la page cible ne me renvoit rien de ma bdd, ni quand je charge la page cible avec WHERE id=1.
0