Derniers posts ac infos diverses et premiers mots :[u] :-/ ?

Forum consacré aux codes conseillés ou mis à disposition sur phpBB SEO. Support, téléchargements, conseils ...

Modérateur: Modérateurs

Derniers posts ac infos diverses et premiers mots :[u] :-/ ?

Messagede yazerty » Mar Oct 31, 2006 11:28 am

Bonjour,

Je souhaite afficher les 10 derniers sujets postés sur mon forum de la manière suivante :

Titre du sujet, par Auteur, le Jour XX Mois 2006 :
350 premiers caractères du sujet posté (...)
Auteur-de-la-réponse a posté la dernière réponse (il y a xx réponses en tout)



Grâce au code suivant :

Code: Tout sélectionner
<?php

// Connexion à la bdd
"(trululu...)
   
// Sélection des 10 derniers posts
$sql = "SELECT TP.topic_id, TP.topic_title, TP.topic_replies, PT.post_text
FROM phpbb_topics TP
INNER JOIN phpbb_posts_text PT
ON TP.topic_id = PT.post_id
GROUP BY TP.topic_id
ORDER BY TP.topic_id DESC
LIMIT 10";
$req = mysql_query($sql) or die(mysql_error());

// Boucle d'affichage du post
while($db_data = mysql_fetch_assoc($req)) {

// Extrait du post
$post = $db_data['post_text'];
$max_caracteres = 350;
if (strlen($post)>$max_caracteres) {
   $max_caracteres=strrpos(substr($post, 0, $max_caracteres), " ");
   $post = substr($post, 0, $max_caracteres);
   $post .= " (...)";
}

echo "<p><a href=\"url.com?id=".$db_data['topic_id']."\">".$db_data['topic_title']."</a><br />
$post</p>";

}

// Fermeture de la connexion à la bdd
mysql_close();
?>


J'arrive pour le moment à afficher :

Le ballon rouge
[u:78da08f766][i:78da08f766]Ce rêve et ses interprétations font partie des archives de la Boîte à rêves. C'est ce qui explique leur présentation spécifique. Vous pouvez toutefois continuer la discussion en répondant normalement...[/i:78da08f766][/u:78da08f766] Le samedi 01 janvier 2005 à 20:07 Un rêveur anonyme a confié le rêve suivant à la (...)


Le problème qui m'est pour le moment posé ce sont ces
"[u:78da08f766][i:78da08f766]" qui semblent correspondent aux balises [ u ] et [ i ] présentes au début d'une bonne partie de mes posts.

Je ne sais absolument pas comment gérer la chose. Je ne suis pas vraiment un pro en php/mysql. Je comprends à peu près les choses de base on va dire ;-).

Pourriez-vous m'aidez svp ?
yazerty
PR1
PR1
 
Messages: 180
Inscription: Lun Oct 30, 2006 1:13 am

Publicité

Messagede dcz » Mer Nov 01, 2006 12:14 pm

En fait, tu sort le contenu des messages directement, sans parser les bbcodes etc.

Le truc, c'est que pour pouvoir le faire sans trop ajouter de code, le mieux est encore de puiser dans les fonction de phpBB, il nous faut donc partager les sessions entre cette page et le forum.

Je vais jeter un oeil à tout ça ;)

++
Useful links :
SEO Forum || SEO Directory || SEO phpBB || Search
____________________

Liens Utiles :
Forum référencement || Annuaire référencement || Référencement phpBB || Recherche
dcz
Admin
Admin
 
Messages: 21411
Inscription: Ven Avr 28, 2006 9:03 pm

Messagede yazerty » Mer Nov 01, 2006 3:25 pm

Il y aurait pas tout simplement (?) moyen de tout simplement supprimer ces balises de mises en forme ? En php il existerait une fonction pour faire ça ? J'ai regardé mais le problème c'est qu'il n'y a pas le même nombre de chiffres à chaque fois apparemment (9 ou 10 en moyenne), non ? D'ailleurs à quoi servent donc ces chiffres étranges :- ?

Car c'est ce que je veux au final : juste le texte brut, avec les saut de ligne (pour garder une présentation homogène sur la page qui affichera ces derniers sujets avec des "infos étendues").
yazerty
PR1
PR1
 
Messages: 180
Inscription: Lun Oct 30, 2006 1:13 am

Messagede dcz » Mer Nov 01, 2006 5:14 pm

C'est un solution aussi.
Ces chiffres étranges sont le BBcodeUid de chaque message.
C'est vrai qu'on pourrait les enlever avec une expression régulière.

En cache ça donnerait :

Code: Tout sélectionner
$post = preg_replace('/\:[0-9a-z\:]+\]/si', ']', $post);


Pour se retrouver avec seulement des bbcode sans leur bbcodeUid, ou :

Code: Tout sélectionner
$post = preg_replace("(\[.*\])U","",$post );

Pour retirer tout ce qui se trouve entre "[" et "]" dans le message, dont les BBcodes. Je veux dire que cela pourrait aussi tronquer du vrai texte qui se trouverait entre ces deux caractères.

Et pour le résumé, si tu veux t'assurer de ne pas casser de BBcodes, qui se trouveraient à cheval sur la limite et ne serait du coup pas filtrés, tu peut utiliser cette fonction bien pratique :

Code: Tout sélectionner
// Borrowed from www.php.net http://www.php.net/strtok
function summarize($paragraph, $limit){
   $tok = strtok($paragraph, " ");
   $text="";
   $words='0';
   while($tok){
      $text .= " ".$tok;
      $words++;
      if(($words >= $limit) && ((substr($tok, -1) == "!")||(substr($tok, -1) == ".")))
         break;
      $tok = strtok(" ");
   }
   return ltrim($text);
}


Cette fonction limite la sortie en nombre de phrases.

Et il faudrait un petit coup de :

Code: Tout sélectionner
$post = strip_tags($post);


Pour retirer toutes les balise html éventuelles.

Dans l'ordre ça pourrait donner :
Code: Tout sélectionner
$max_phrases = 3;
$post = summarize($post, $max_phrases);
$post = strip_tags($post);


Suivit d'une des deux façon de traiter les bbcodes.

++
Useful links :
SEO Forum || SEO Directory || SEO phpBB || Search
____________________

Liens Utiles :
Forum référencement || Annuaire référencement || Référencement phpBB || Recherche
dcz
Admin
Admin
 
Messages: 21411
Inscription: Ven Avr 28, 2006 9:03 pm

Messagede yazerty » Mer Nov 01, 2006 5:36 pm

Ah vi, en expressions régulières :). J'y connais vraiment rien dans ces trucs là, merci pour le code :) !

J'ai opté pour un mix qui me parait remplir les 2 conditions (supprimer les bbcodes sans supprimer les éventuels autres choses contenues dans des []) :

Code: Tout sélectionner
// Traitement des variables alphanumériques des bbcodes
$post = preg_replace('/\:[0-9a-z\:]+\]/si', ']', $post);

// Suppression des bbcodes (liste des bbcodes à compléter)
$bbcodes = array("[u]", "[/u]", "[i]", "[/i]");
$post = str_replace($bbcodes, "", "$post");


Par contre je me suis planté dans ma requête SQL, elle ne me donne pas le texte des derniers sujets :? . Faut que je vois ça de plus près...
yazerty
PR1
PR1
 
Messages: 180
Inscription: Lun Oct 30, 2006 1:13 am

Messagede dcz » Mer Nov 01, 2006 5:48 pm

Bonne idée pour les BBcode ;)

Et pour ta requête, un truc comme ça plutôt :

Code: Tout sélectionner
$sql = "SELECT t.*, pt.*
   FROM phpbb_topics AS t, phpbb_posts_text AS pt
      WHERE t.topic_status <> 2
         AND pt.post_id = t.topic_last_post_id
   ORDER BY p.post_id DESC LIMIT 10";


Doit pas être très loin du but ;)

++
Useful links :
SEO Forum || SEO Directory || SEO phpBB || Search
____________________

Liens Utiles :
Forum référencement || Annuaire référencement || Référencement phpBB || Recherche
dcz
Admin
Admin
 
Messages: 21411
Inscription: Ven Avr 28, 2006 9:03 pm

Messagede yazerty » Mer Nov 01, 2006 8:04 pm

Ah vi, topic_first_post_id m'a aidé (topic_last_post_id serait si je voulais afficher les derniers posts, ou les sujets ayant reçu dernièrement des posts, je veux afficher les derniers sujets sans tenir compte des derniers posts).

Voici à quoi j'aboutis pour le moment

Code: Tout sélectionner
// Sélection des 5 derniers posts
$sql = "SELECT TP.topic_id, TP.topic_title, TP.topic_replies, PT.post_text, US.username, PST.post_username

FROM phpbb_topics TP

INNER JOIN phpbb_posts_text PT, phpbb_users US, phpbb_posts PST
ON TP.topic_first_post_id = PT.post_id AND US.user_id = TP.topic_poster AND PST.poster_id = TP.topic_poster

GROUP BY TP.topic_id
ORDER BY TP.topic_id DESC
LIMIT 5";
$req = mysql_query($sql) or die(mysql_error());

// Boucle d'affichage du post
while($db_data = mysql_fetch_assoc($req)) {

// Extrait du post
$post = $db_data['post_text'];
$max_caracteres = 350;
if (strlen($post)>$max_caracteres) {
   $max_caracteres=strrpos(substr($post, 0, $max_caracteres), " ");
   $post = substr($post, 0, $max_caracteres);
   $post .= " (...)";
}

// Traitement des variables alphanumériques des bbcodes
$post = preg_replace('/\:[0-9a-z\:]+\]/si', ']', $post);

// Suppression des bbcodes
$bbcodes = array("[u]", "[/u]", "[i]", "[/i]");
$post = str_replace($bbcodes, "", "$post");

// Traitement du nom de l'auteur
$auteur = $db_data['username'];
if ($auteur == 'Anonymous') {
   if ($db_data['post_username'] == '') {
      $auteur = 'un anonyme';
   }
   else {
      $auteur = $db_data['post_username'];
   }
}

echo "<p><a href=\"http://www.boiteareves.com/reve/topic".$db_data['topic_id'].".html\">".$db_data['topic_title'].", par $auteur, le </a><br />
$post</p>";

}


Par contre mon traitement de $auteur est mauvais. Je ne comprends pas pourquoi. Si vous voyez (?)...

J'avais une petite question sinon.

post_time (dans la table phpbb_posts) retourne l'heure courante, mesurée en secondes depuis le début de l'époque UNIX, (1er janvier 1970 00:00:00 GMT). Mais auriez-vous une petite fonction sous le coude qui permette de transformer ça en heure française compréhensible ;-) ?

Je fouille dans les fichiers de phpbb mais pour le moment je ne trouve pas :roll: ...
yazerty
PR1
PR1
 
Messages: 180
Inscription: Lun Oct 30, 2006 1:13 am

Messagede dcz » Jeu Nov 02, 2006 8:30 am

La tu classe les sujets par leur ID, je te proposait par dernière modif, mais c'est comme tu veux.

Pour la fonction, gmdate ;)
Useful links :
SEO Forum || SEO Directory || SEO phpBB || Search
____________________

Liens Utiles :
Forum référencement || Annuaire référencement || Référencement phpBB || Recherche
dcz
Admin
Admin
 
Messages: 21411
Inscription: Ven Avr 28, 2006 9:03 pm

Messagede yazerty » Jeu Nov 02, 2006 9:02 am

Merci, je vais voir cette fonction gmdate() :)...

Mmm et j'ai encore un petit problème avec mes filtrages de texte : les bbcodes avec des paramètres genre url=, list=, etc. Dans le cas d'un url= par exemple, l'url reste dans le bbcode et n'est donc pas supprimé lors de mon str replace :/.

J'ai tenté de simili-modifier ton regex, mais en vain, je ne comprends rien à ces trucs. D'ailleurs aurais-tu une bonne adresse pour apprendre un peu ces trucs ^^ ?

Code: Tout sélectionner
// Traitement des variables alphanumériques des bbcodes
$post = preg_replace('/\:[0-9a-z\:]+\]/si', ']', $post);
$post = preg_replace('=:[0-9a-z\:]+\]/si', ']', $post);

// Suppression des bbcodes
$bbcodes = array("[u]", "[/u]", "[i]", "[/i]", "[u]", "[/u]", "[quote]", "[/quote]", "[code]", "[/code]", "[list]", "[/list]", "[list=]", "[/list]", "[img]", "[/img]", "[url]", "[/url]");
$post = str_replace($bbcodes, "", "$post");
yazerty
PR1
PR1
 
Messages: 180
Inscription: Lun Oct 30, 2006 1:13 am

Messagede dcz » Jeu Nov 02, 2006 9:25 am

C'est pour cela que c'est pratique de retirer tout ce qui se trouve entre "[" et "]".

Pour les Reg-Ex : http://www.expreg.com/

++
Useful links :
SEO Forum || SEO Directory || SEO phpBB || Search
____________________

Liens Utiles :
Forum référencement || Annuaire référencement || Référencement phpBB || Recherche
dcz
Admin
Admin
 
Messages: 21411
Inscription: Ven Avr 28, 2006 9:03 pm

Messagede yazerty » Jeu Nov 02, 2006 9:50 am

Merci :). Je garde précieusement cette adresse qui a l'air d'être assez fournie en articles explicatifs...

De mon côté je vais simplifier ma chose.

Merci pour toute ton aide !
yazerty
PR1
PR1
 
Messages: 180
Inscription: Lun Oct 30, 2006 1:13 am

Messagede dcz » Jeu Nov 02, 2006 8:02 pm

Regardes aussi bbcode.php et bbcode.tpl pour de belles expressions-régulières qui choppent le = des [liste=...] etc ...

A mon avis avec un ou deux tests et de la bonne volonté, c'est vite réglé ;)
Useful links :
SEO Forum || SEO Directory || SEO phpBB || Search
____________________

Liens Utiles :
Forum référencement || Annuaire référencement || Référencement phpBB || Recherche
dcz
Admin
Admin
 
Messages: 21411
Inscription: Ven Avr 28, 2006 9:03 pm

Messagede KeusssiX » Ven Nov 03, 2006 5:58 pm

pas de problème pour installer le code de yazerty, mais...

dans le code de dcz :
Code: Tout sélectionner
// Suppression des bbcodes (liste des bbcodes à compléter)
$bbcodes = array("[u]", "[/u]", "[i]", "[/i]");
$post = str_replace($bbcodes, "", "$post");

je n'arrive pas à inclure les bbcodes tel que [color=][/color], etc. je ne dois quand même pas écrire chaque couleur ? et qu'en est-il des autres bbcodes (tel que quote, list, etc) ?

et le code est incomplet, il manque la date du post : posté le ... (la variable n'est pas definie, ni affichée). j'ai bien essayé de l'écrire moi-même, mais c'est encore au dessus de mes compétences de débutant ! :roll:

si quelqu'un peut m'aider :D

PS, j'ai juste changé TP.topic_first_post_id en TP.topic_last_post_id. mais comme il n'y a pas la date des posts, je ne sais pas si ce sont les derniers posts affichés !
KeusssiX
PR0
PR0
 
Messages: 67
Inscription: Ven Oct 27, 2006 4:33 pm
Localisation: Lille, 59 France

Messagede KeusssiX » Ven Nov 03, 2006 6:16 pm

j'ai finalement réussi !
vérifiez s'il n'y a pas d'erreur !

(je ne suis pas sur pour le fuseau horaire. je suppose que la plupart des serveurs sont à GMT, donc j'ai ajouté 3600 pour GMT+1 qui est mon fuseau horaire)

voici ce que j'ai changé sur le code de yazerty :
Code: Tout sélectionner
$sql = "SELECT TP.topic_id, TP.topic_title, TP.topic_replies, TP.topic_time, PT.post_text, US.username, PST.post_username

puis
Code: Tout sélectionner
// Traitement de la date post
$news_time = gmdate("d M Y \à H:i:s", $db_data['topic_time']+(3600));

echo "<p><a href=\"http://www.toutalamaison.com/forum/topic".$db_data['topic_id'].".html\">".$db_data['topic_title'].", par $auteur, le $news_time</a><br />
$post</p>";
KeusssiX
PR0
PR0
 
Messages: 67
Inscription: Ven Oct 27, 2006 4:33 pm
Localisation: Lille, 59 France

Messagede KeusssiX » Sam Nov 04, 2006 12:33 pm

au fait, je me suis emballé, j'ai réussi à sortir l'heure et la formater, mais par contre je ne sais pas quoi faire pour enlever les bbcodes du texte qui font appel à des variables :
KeusssiX a écrit:pas de problème pour installer le code de yazerty, mais...

dans le code de dcz :
Code: Tout sélectionner
// Suppression des bbcodes (liste des bbcodes à compléter)
$bbcodes = array("[u]", "[/u]", "[i]", "[/i]");
$post = str_replace($bbcodes, "", "$post");

je n'arrive pas à inclure les bbcodes tel que [color=][/color], etc. je ne dois quand même pas écrire chaque couleur ? et qu'en est-il des autres bbcodes (tel que quote, list, etc) ?
KeusssiX
PR0
PR0
 
Messages: 67
Inscription: Ven Oct 27, 2006 4:33 pm
Localisation: Lille, 59 France

Suivante

Retourner vers MODS phpBB2 SEO

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités