Page 1 sur 2
Affichage d'une partie du texte récupéré sur un blog
Posté : 19 juin 2009, 09:57
par Ariochs
Bon pour commencer je m'excuse si je post au mauvais endroit (j'ai hésité avec la partie php..).
Voici mon problème.
Sur mon site j'ai réservé un petit emplacement pour les dernières news ajouté sur un blog.
Disons que j'ai un code qui me permet de récupérer les dernières news ajouté (que j'ai toujours pas fait qu'en j'y pense..). Si la news du blog fait deux pages, et que moi j'ai de la place que pour 100 mots environs, comment faire pour qu'il n'affiche que les 100 premiers mot et ce finissent par "..." . Par la suite quand on clique sur ce texte, ça nous redirige sur le blog.
Merci
Posté : 19 juin 2009, 13:50
par albat
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "PHP débutant".
Posté : 19 juin 2009, 14:38
par Ariochs
Merci (désolé de mettre trompé d'endroit..)
Posté : 19 juin 2009, 15:23
par albat
Y a pas de mal. L'hésitation est humaine.

Posté : 19 juin 2009, 15:39
par Nagol
tu pourrais par exemple faire un explode(' ', $texte) et compter les mots, jusqu'à ce qu'il y'en ai 100 et par un de plus, personellement je préférerais compter les caractères au total, et faire le nombre qui va bien + 3 petits points

Posté : 25 juin 2009, 10:39
par Ariochs
Bon me revoila sur cette partie du code. Je rencontre un petit problème..
Pour le nombre de mot tout fonctionne correctement. Du coup j'ai voulu le faire en nombre de caractères. Malheureusement sa coince..
Voila dans un 1er temps le code pour la limite de mots :
<?php
//fonction limitation de mots
function debutchaine($chaine, $nbmots) { // 1er argument : chaîne - 2e argument : nombre de mots
$chaine = preg_replace('!<br.*>!iU', "", $chaine); // remplacement des BR par des espaces
$chaine = strip_tags($chaine);
$chaine = preg_replace('/\s\s+/', ' ', $chaine); // retrait des espaces inutiles
$tab = explode(" ",$chaine);
if (count($tab) <= $nbmots) {
$affiche = $chaine;
}
else {
$affiche = "$tab[0]";
for ($i=1; $i<$nbmots; $i++) {
$affiche .= " $tab[$i]";
}
}
if (count($tab) > $nbmots ){
$affiche .= '... <a href="http://www.adresse.fr"><b>Lire la suite</b></a>';
}
return $affiche;
}
$mots_complets = 'salut sa va bien je suis un super pote a toi on rigole tou le temp c tro dorle comme on ce marre c bien le stage ouai sa va encore c pa mal mais bon c pa tt le temp marran oui mai comme dans la vrai vie tu sais on fai pa tout le temps ce quon veu sa serait telllement rigolo sinon ahahahahahahahahahaha bebebebebebebebeeb cececececececececececec'; //data événement
$nb_mots = 50;
$mot_courts = debutchaine($mots_complets, $nb_mots);
echo $mot_courts;
?>
J'ai donc repris ce code et me suis arranger pour le faire en caractères.
Malheuresement sa n'affiche que le 1er mot et mes ... + lire la suite
Je n'ai changé que cette ligne :
$nb_mots = substr($mots_complets, 0, 70);
Merci pour votre aide
Posté : 25 juin 2009, 10:55
par charabia
Tu désires autoriser un certain nombre de caractères dans une chaîne et une fois ce nombre dépassé mettre des "..." à la place ?
Posté : 25 juin 2009, 11:02
par Ariochs
Oui. Car en fait c'est pour recuperer le dernier articles mis sur un blog.
Donc il y a un petit espace réservé pour un morceaux de cet article, une fois le nombre de caractères depassé, sa affiche "... Lire la suite" a la fin.
Posté : 25 juin 2009, 11:06
par charabia
Ce regex d'expreg.com devrait t'aider :
$max=20;
if(strlen($chaine)>=$max){$chaine=substr($chaine,0,$max);
$espace=strrpos($chaine," ");
$chaine=substr($chaine,0,$espace)."..."; }
echo $chaine;
Aucun mot ne sera coupé au milieu et il y aura ... après 20 caractères.
Posté : 25 juin 2009, 11:26
par Ariochs
Héhé merci, ça fonctionne parfaitement
Petite question en plus.
Je sais récupérer mes données dans une BDD, mais comment dire de récupérer la dernière information ajouté ?
[EDIT] : J'ai rien dit, je crois qu'il faut utiliser LAST_INSERT_ID(). Vais faire quelque essais ^^
Pour ceux qui serait interessé par le code, je le laisse ici :
<?php
//fonction limitation de mots
function debutchaine($chaine, $nbmots) { // 1er argument : chaîne - 2e argument : nombre de mots
$max=50;
if(strlen($chaine)>=$max){$chaine=substr($chaine,0,$max);
$espace=strrpos($chaine," ");
$chaine=substr($chaine,0,$espace).'... <a href="http://www.site.fr"><b>Lire la suite</b></a>'; }
//echo $chaine;
$tab = explode(" ",$chaine);
if (count($tab) <= $nbmots) {
$affiche = $chaine;
}
else {
$affiche = "$tab[0]";
for ($i=1; $i<$nbmots; $i++) {
$affiche .= " $tab[$i]";
}
}
return $affiche;
}
$mots_complets = 'salut sa va bien je suis un super pote a toi on rigole tou le temp c tro dorle comme on ce marre c bien le stage ouai sa va encore c pa mal mais bon c pa tt le temp marran oui mai comme dans la vrai vie tu sais on fai pa tout le temps ce quon veu sa serait telllement rigolo sinon ahahahahahahahahahaha bebebebebebebebeeb cececececececececececec'; //data événement
$nb_mots = 50;
$mot_courts = debutchaine($mots_complets, $nb_mots);
echo $mot_courts;
?>
Posté : 25 juin 2009, 11:39
par charabia
Tu veux aussi utiliser le ORDER BY et LIMIT combinés
Posté : 25 juin 2009, 14:25
par Ariochs
Bon je reviens car j'arrive pas a faire ce que je veux..
Donc j'arrive pas a récupérer le dernier topic créé, et si je remplace par l'id=1 pour être sur d'avoir un message, le limite de caractère ne s'applique plus..
Qui peux m'aider ? svp
[EDIT] Trouvé la solution pour la limite de caractère en récupération de donnée, mais par contre pour avoir le dernier topic créé, toujours pas trouvé. J'edit le code qui est a la suite
Le code actuel :
<?php
// Connexion au serveur
include 'admin/connectbddwp.php';
//Je sélectionne toutes les catégories de la table
$sql = "SELECT post_content FROM wp_posts WHERE id=1";
$enreg = mysql_query($sql) or die(mysql_error());
while ($rec = mysql_fetch_array($enreg)){
$mots_complets = $rec['post_content'];
//fonction limitation de mots
function debutchaine($chaine, $nbmots) { // 1er argument : chaîne - 2e argument : nombre de mots
$max=40;
if(strlen($chaine)>=$max){$chaine=substr($chaine,0,$max);
$espace=strrpos($chaine," ");
$chaine=substr($chaine,0,$espace).'... <a href="http://www.iltc.fr"><b>Lire la suite</b></a>'; }
//echo $chaine;
$tab = explode(" ",$chaine);
if (count($tab) <= $nbmots) {
$affiche = $chaine;
}
else {
$affiche = "$tab[0]";
for ($i=1; $i<$nbmots; $i++) {
$affiche .= " $tab[$i]";
}
}
return $affiche;
}
$nb_mots = 10;
$mot_courts = debutchaine($mots_complets, $nb_mots);
echo $mot_courts;
}
?>
Posté : 25 juin 2009, 14:29
par charabia
Tu n'as pas appliqué la fonction qui coupe ta chaîne dans ton code. Genre
debutchaine($mots_complets['post_content'], $nb_mots)
Posté : 25 juin 2009, 14:34
par Ariochs
Oui j'ai vu après.. Avec la fatigue je m'embrouille..
Par contre pour récupérer le dernier ID toujours pas réussi.
Le "SELECT post_content FROM wp_posts WHERE id='mysql_insert_id() '" n'a pas l'air de marché.. Vais test d'autres ptits truc pour voir, mais je dois pas être loin. Peux être un LAST_INSERT_ID()..
Posté : 25 juin 2009, 14:37
par charabia
mysql_insert_id() convertit le type de valeur retourné par la fonction C de MySQL C mysql_insert_id() en type PHP long (appelé int en PHP). Si votre colonne de type AUTO_INCREMENT est une colonne de type BIGINT, la valeur retournée par mysql_insert_id() sera incorrecte. À la place, utilisez la fonction interne MySQL LAST_INSERT_ID() dans une requête SQL.