IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème tronquage news


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 196
    Par défaut Problème tronquage news
    Bonjour,
    j'écris ici vu que ma question n'a plus rien à voir avec mon problème initial.
    J'aimerais tronquer une partie de ma news afin que cela soit plus présentable qui s'ouvrirait ensuite lorsque je clique dessus.
    Voila un exemple concret : http://www.footmercato.net/

    News tronquée et quand on clic dessus on a la news en intégralité.

    J'ai créé une fonction pour cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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)."<br><a href='adresse.html'>Suite de l'article</a>";
     
        }
     
        return $texte;
     
    }
    Est-elle fonctionnelle ?

    Comment l'utiliser ensuite dans mon code qui est le suivant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    						    <?php
    $dossier = 'images/';
    	$sql="SELECT * FROM news order by date desc";
     
    	$req = mysql_query($sql) or die(mysql_error());
    	while($data=mysql_fetch_assoc($req))
    	{
    		$id=$data["id"];
    		$filename=$dossier.$data['image'];
     
    		echo '<img src="'.$filename.'" alt="" />';
    		echo "<p>{$data["titre"]} -- ";
    		echo "<p>{$data["contenu"]} </p>";
    		echo "<p align\"right\">".date("j/n/Y G:i",strtotime($data["date"]))."</p>";;
    		echo "<p><a href=\"formcom.php?id={$data["id"]}\"> Cliquez ici pour ajouter un commentaire </a></p>";
    		$sql="SELECT id FROM comment WHERE news_id={$data["id"]}";
    		$req2 = mysql_query($sql) or die(mysql_error());
    		echo" Commentaire(s) (".mysql_num_rows($req2).")<br><br><br><br><br>";
     
    	}
     
     
    ?>

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 52
    Par défaut
    Salut,

    on appelle une fonction comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    function truncate($text){
      return $text;
    }
    echo truncate('bla bla');
    // ou
    $str = truncate('bla bla');
    echo $str;
    ?>
    tu devrais aussi regarder du côté des jointures mysql pour éviter d'effectuer une requête à chaque boucle
    pour toi, ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    <?php
    function Tronquer_Texte($str, $longueurMax = 150, $suffixe = '...'){
        $subString = substr(trim($str), 0, $longueurMax);
        if(strlen($subString) < strlen($str)){
            $pos = strrpos($subString, ' ');
            if($pos !== false){
                $str = substr($subString, 0, $pos);
                $disallowed = array(',', '.', ':');
                $last_char = substr($str, -1, 1);
                if(in_array($last_char, $disallowed)){
                    $str = substr($str, 0, -1);
                }
                $str .= $suffixe;
            }
            else{
                $str = $subString;
            }
        }
        return $str;
    }
     
    $dossier = 'images/';
    $sql="SELECT n.`id`, n.`titre`, n.`contenu`, n.`date`, n.`image`, COUNT(c.`id`) AS nb_comments
    FROM `news` AS n
    LEFT JOIN `comment` AS c ON n.`id` = c.`news_id`
    GROUP BY n.`id`
    ORDER BY n.`date` DESC ;";
    $req = mysql_query($sql) or die(mysql_error());
    while($data=mysql_fetch_assoc($req))
    {
        $id=$data["id"];
        $filename=$dossier.$data['image'];
     
        echo '<img src="'.$filename.'" alt="" />';
        echo "<p>{$data["titre"]} -- ";
        echo "<p>".Tronquer_Texte($data["contenu"],  50)."<br><a href='adresse.html'>Suite de  l'article</a></p>";
        echo "<p align=\"right\">".date("j/n/Y G:i",strtotime($data["date"]))."</p>";
        echo "<p><a href=\"formcom.php?id={$data["id"]}\">  Cliquez ici pour ajouter un commentaire </a></p>";
        echo" Commentaire(s) ({$data["nb_comments"]})<br><br><br><br><br>";
     
    }
    ?>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 196
    Par défaut
    Tout d'abord merci à toi.
    J'ai réussis à mettre en œuvre ce que tu expliquais mis à part l'affichage du nombre de commentaires que j'ai gardé comme je le faisais.

    Maintenant que j'ai cela, comment faire pour que lorsque je clique sur lire la suite cela m'ouvre une page avec, en fonction de la news sur laquelle j'aurai cliqué cela ouvre cette news ?
    Comme sur le site cité précédemment ?

    Merci encore !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 52
    Par défaut
    si l'affichage du commentaire pose problème, signale nous l'erreur, j'ai fais ça sans vérifier si ça fonctionne.

    sinon pour ce qui est de la page de l'actualité, au lieu de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "<p>".Tronquer_Texte($data["contenu"],  50)."<br><a href='adresse.html'>Suite de  l'article</a></p>";
    tu peux mettre par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<p>".Tronquer_Texte($data["contenu"],  50)."<br><a href='detail-news.php?id={$data["id"]}'>Suite de  l'article</a></p>";
    puis retrouver la news en question avec son id : $_GET['id']

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 196
    Par défaut
    L'erreur est à ce niveau là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo" Commentaire(s) ({$data["nb_comments"]})<br><br><br><br><br>";
    Où on me dit que nb_comments n'existe pas (je ne l'ai pas dans ma bdd donc c'est logique)
    Il faudrait juste que je rajoute un champ nb_comments en int dans ma table news et cela fonctionnerait n'est ce pas ?

    En ce qui concerne la suite j'essaie et je repose pour te dire si je m'en sors !

    Merci beaucoup j'ai bien avancé pour le moment grâce à toi

    EDIT : C'est ok pour pour l'affichage développé des news !
    Il ne reste plus que tu me répondes à ma question pour savoir si je me lance dans la modif même si je pense que c'est ça.

    Puis-je laisser l'affichage du nombre de commentaires comme je l'avais fais quand même ou c'est vraiment moche ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 52
    Par défaut
    Je confirme, c'est vraiment moche =)

    Imaginons que tu sortes 10 000 résultats sur une page, mysql devra traiter 10 001 requêtes au lieu d'une seule... pouerk


    Donc, l'erreur est au niveau de nb_comments qui est un alias de COUNT(c.`id`), regarde mieux la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT n.`id`, n.`titre`, n.`contenu`, n.`date`, n.`image`, COUNT(c.`id`) AS nb_comments
    FROM `news` AS n
    LEFT JOIN `comment` AS c ON n.`id` = c.`news_id`
    GROUP BY n.`id`
    ORDER BY n.`date` DESC ;
    Chez moi, la requête précédente fonctionne.

    Point de diagnostic sans symptôme, poste donc ici l'erreur retournée par mysql, voire même la structure de tes tables.

Discussions similaires

  1. Problème pagination news
    Par valpirl dans le forum Langage
    Réponses: 3
    Dernier message: 25/03/2010, 11h53
  2. Problème de news
    Par Ella68 dans le forum SharePoint
    Réponses: 2
    Dernier message: 14/02/2008, 10h06
  3. [MySQL] Problème de news
    Par fourgeaud dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/11/2006, 23h16
  4. [Système] Système de news: problème aux commentaires
    Par Maxime33 dans le forum Langage
    Réponses: 7
    Dernier message: 16/06/2006, 13h43
  5. Problème sur script de news :(
    Par Anthos59 dans le forum ASP
    Réponses: 7
    Dernier message: 12/04/2006, 10h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo