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

Messagede dcz » Sam Nov 04, 2006 7:05 pm

dcz a écrit: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é ;)



Tu as jeté un oeil ?

A mon avis il faut faire ça en plusieurs passes, c'est pour cela que la solution de tout virer est pas mal, tu utilises tant de "[" et de "] dans le corps de tes messages ?
Si oui, un autre caractères ne ferait-il pas l'affaire ?

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


C'est simple pour tout faire d'un coup ;)

++
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: 21383
Inscription: Ven Avr 28, 2006 9:03 pm

Publicité

Messagede KeusssiX » Dim Nov 05, 2006 2:51 pm

oui, ben c'est nickel.
j'ai remis ton code :
Code: Tout sélectionner
$post = preg_replace("(\[.*\])U","",$post );

et pis voilà, c'est comme je veux :D

seulement si qqn utilise [] dans le corps de son message, mais je ne pense pas que sur un forum qui a pour thème la maison et les services, qqn ait besoin de ces symboles... et si ça arrive une fois, ce ne sera pas dramatique ;)

merci dcz pour ton aide toujours rapide et précieuse. 8)
KeusssiX
PR0
PR0
 
Messages: 67
Inscription: Ven Oct 27, 2006 4:33 pm
Localisation: Lille, 59 France

Messagede KeusssiX » Dim Nov 05, 2006 4:49 pm

bon, voici le code complet que j'utilise maintenant.
mais j'ai encore besoin d'aide... :oops:
je voudrais garder le titre du premier message posté, mais changer le nom et l'heure de celui qui a posté en premier, par le nom du dernier à avoir répondu et l'heure à laquelle il a répondu (si réponse il ya eu, sinon, évidemment laisser le nom et heure de celui qui a créé le post).
c'est possible ??
Code: Tout sélectionner
// Sélection des 5 derniers posts

$sql = "SELECT TP.topic_id, TP.topic_title, TP.topic_replies, TP.topic_time, PT.post_text, US.username, PST.post_username

FROM forum_topics TP

INNER JOIN forum_posts_text PT, forum_users US, forum_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 = 200;
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("(\[.*\])U","",$post );

// Suppression des bbcodes
$bbcodes = array("[u]", "[/u]", "[i]", "[/i]", "[color]", "[/color]");
$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'];
   }
}
// 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 dcz » Lun Nov 06, 2006 8:36 am

tu n'as plus besoin de filtrer les bbcodes du coup, ils le sont déjà tous.


Et le nom de l'éventuel invité qui aurait pris le temps d'en mettre un est post_username dans la table phpbb_post, tu as simplement inversé username et post_username dans ton script du coup.

Et aussi, $lang['Guest'], c'est mieux que "un anonyme" non ?

++
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: 21383
Inscription: Ven Avr 28, 2006 9:03 pm

Messagede KeusssiX » Lun Nov 06, 2006 6:20 pm

merci ;)
code nettoyé* !

par contre sais tu comment le modifier pour :
je voudrais garder le titre du premier message posté et son contenu, mais changer le nom et l'heure de celui qui a posté en premier, par le nom du dernier à avoir répondu et l'heure à laquelle il a répondu (si réponse il ya eu, sinon, évidemment laisser le nom et heure de celui qui a créé le post).
c'est possible ??


*euh...enfin, j'ai essayé...
ok pour les bbcodes, j'ai supprimé les lignes superflus de suppression des bbcodes
ok pour le $lang, effectivement plus joli ;)
par contre j'ai du mal avec cette partie là, je ne comprends pas les appels à la BD, que signifie les TP, PT, US et PST ? (et donc forcément, je ne sais pas faire la modif que je te demande ci dessus)

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

FROM forum_topics TP

INNER JOIN forum_posts_text PT, forum_users US, forum_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
Dernière édition par KeusssiX le Lun Nov 06, 2006 6:32 pm, édité 1 fois.
KeusssiX
PR0
PR0
 
Messages: 67
Inscription: Ven Oct 27, 2006 4:33 pm
Localisation: Lille, 59 France

Messagede dcz » Lun Nov 06, 2006 6:29 pm

Possible oui, mais un peut plus complexe, il faut sélectionner deux fois la table POST avec un p2.post_time as last_post_time, dans le select et une jointure supplémentaire sur p2.post_id = TP.topic_last_post_id.

Du coup si $db_data['last_post_time'] est supérieur à $db_data['post_time'] (le temps tu premier message) alors c'est lui que tu veux ;)

++
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: 21383
Inscription: Ven Avr 28, 2006 9:03 pm

Messagede KeusssiX » Lun Nov 06, 2006 6:38 pm

tu as répondu trop vite ! j'étais en train d'éditer mon message !
plus rapide que lucky lucke ;)

je crois comprendre ce que tu dis, par contre, comme je viens de l'éditer, je ne sais pas comment appeler les données...
KeusssiX
PR0
PR0
 
Messages: 67
Inscription: Ven Oct 27, 2006 4:33 pm
Localisation: Lille, 59 France

Messagede KeusssiX » Lun Nov 06, 2006 9:29 pm

++
KeusssiX
PR0
PR0
 
Messages: 67
Inscription: Ven Oct 27, 2006 4:33 pm
Localisation: Lille, 59 France

Messagede dcz » Lun Nov 06, 2006 9:59 pm

lol, évites les doubles post tout de même ;)

Donc, les PT, TP etc sont des alias (raccourcis) pour associer une valeur que l'on demande (par le select) à une table, ce qui est utile vu que l'on en sélectionne plus d'une.

TP.topic_title est associé à FROM forum_topics TP, ou en version plus longue FROM forum_topics AS TP.

en fait je croyais que tu préférais les INNER JOIN à ma requête, et que donc tu t'en sortais ;)

Du coup :

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


C'est classé par ordre de dernière réponse et limité à 10 messages, tu peux modifier.
Avec ça, tu aura $db_data['last_post_time'] et $db_data['last_post_username'] pour comparer avec $db_data['post_time'] et $db_data['post_username'] (les données du premier message).
Mais tu n'as que le contenu du premier message.
++
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: 21383
Inscription: Ven Avr 28, 2006 9:03 pm

Messagede KeusssiX » Mar Nov 07, 2006 1:54 am

ok et désolé :oops:

donc voici mon code finalement.
par contre, je ne comprends pas, cela sort bien la date du dernier post (le premier par défaut), là pas de souci,
mais pas moyen d'avoir un auteur... rien ne sort avec ce code ???
pourtant, je n'arrive pas à voir la faille...

PS : est-ce que le lien ne crée pas un duplicate ?
le lien est de la forme topicXX.html, qui correspond à titre_du_topic.vtXX.html, ça fait 2 liens affichés pour une seule page ?

Code: Tout sélectionner
// Sélection des 5 derniers posts

$sql = "SELECT t.*, p.*, pt.*, p2.post_time AS last_post_time, p2.post_username AS last_post_username
   FROM forum_topics AS t, forum_posts AS p, forum_posts_text AS pt, forum_posts AS p2
      WHERE t.topic_status <> 2
         AND p.post_id = t.topic_first_post_id
         AND pt.post_id = t.topic_first_post_id
         AND p2.post_id = t.topic_last_post_id
   ORDER BY p.post_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 = 200;
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("(\[.*\])U","",$post );

// Traitement du nom de l'auteur
$auteur = $db_data['username'];
if ($auteur == 'Anonymous') {
   if ($db_data['last_post_username'] == '') {
      $auteur = $lang['Guest'];
   }
   else {
      $auteur = $db_data['last_post_username'];
   }
   
}
// Traitement de la date post
$news_time = gmdate("d M Y \à H:i:s", $db_data['last_post_time']+(3600));

// Traitement des réponses
$nombre = $db_data['topic_replies'];
$reponses = $lang['Replies'];

echo "<p align=\"left\"><a href=\"http://www.toutalamaison.com/forum/topic".$db_data['topic_id'].".html\">".$db_data['topic_title'].", <span class=\"Style100\">par $auteur, le $news_time ($nombre $reponses)</span></a><br />
$post</p>";

}
KeusssiX
PR0
PR0
 
Messages: 67
Inscription: Ven Oct 27, 2006 4:33 pm
Localisation: Lille, 59 France

Messagede dcz » Mar Nov 07, 2006 10:04 am

Erf, ils faudrait encore ajouter un select sur la table user pour ça.

Ça alourdit un peut :

Code: Tout sélectionner
$sql = "SELECT t.*, p.*, pt.*, p2.post_time AS last_post_time, p2.post_username AS last_post_username, u.username
   FROM phpbb_topics AS t, phpbb_posts AS p, phpbb_posts_text AS pt, phpbb_posts AS p2, phpbb_users as u
      WHERE t.topic_status <> 2
         AND p.post_id = t.topic_first_post_id
         AND pt.post_id = t.topic_first_post_id
         AND p2.post_id = t.topic_last_post_id
         AND u.user_id = t.topic_first_post_id
   ORDER BY p.post_id DESC LIMIT 10";


Et là tu peux, si post_username est vide, mettre $db_data['username'] à la place ;)

++
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: 21383
Inscription: Ven Avr 28, 2006 9:03 pm

Messagede KeusssiX » Mar Nov 07, 2006 12:45 pm

ayayaïe !
je ne comprends pas, j'ai essayé dans tous les sens, j'obtiens de droles de résultats :
les posts ne sont plus ordonnés par ordre du plus récent au plus vieux (je n'arrive pas à trouver la logique...)
et pire, si la date correspond à la date du dernier post du topic affiché, le nom sort de on ne sait où et ne correspond à rien ???

j'ai enlevé le cas du post d'un invité car je n'arrive déjà pas le cas normal, mais j'aimerais le réintégrer.

je conseille d'aller voir le résultat sur ma page d'accueil : www.toutalamaison.com (en bas "quoi de neuf sur le forum").
et voici le code que j'ai changé :
Code: Tout sélectionner
$sql = "SELECT t.*, p.*, pt.*, p2.post_time AS last_post_time, p2.post_username AS last_post_username, u.username
   FROM forum_topics AS t, forum_posts AS p, forum_posts_text AS pt, forum_posts AS p2, forum_users as u
      WHERE t.topic_status <> 2
         AND p.post_id = t.topic_first_post_id
         AND pt.post_id = t.topic_first_post_id
         AND p2.post_id = t.topic_last_post_id
         AND u.user_id = t.topic_first_post_id
   ORDER BY p.post_id DESC LIMIT 5";

Code: Tout sélectionner
// Traitement du nom de l'auteur
$auteur = $db_data['post_username'];
if ($auteur == '') {
      $auteur = $db_data['username'];
     }
   else {
      $auteur = $db_data['post_username'];
   }


keskis passe ???

++
KeusssiX
PR0
PR0
 
Messages: 67
Inscription: Ven Oct 27, 2006 4:33 pm
Localisation: Lille, 59 France

Messagede yazerty » Mar Nov 07, 2006 4:01 pm

So,

Après un petit débug de mon code, voilà mon code pour afficher les 5 derniers posts de tous les forums.

Je crois que c'est à peu près ce que tu veux. Il te suffira de rajouter l'affichage des réponses, que j'ai supprimé de mon code (mais facile à remettre) :), non ?

Code: Tout sélectionner
<?php
// Connexion à la BDD
$db = mysql_connect('xxx', 'xxx', 'xxx');
mysql_select_db('xxx',$db);
   
// Sélection des 5 derniers posts

$sql = "SELECT TP.topic_id, TP.topic_title, PT.post_text, PST.post_time, PST.poster_id, PST.post_username, US.username

FROM phpbb_topics TP, phpbb_posts_text PT, phpbb_posts PST, phpbb_users US

WHERE PT.post_id = TP.topic_first_post_id
AND PST.post_id = TP.topic_first_post_id
AND US.user_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)) {

// Titre du post
$post_title = "<a href=\"http://www.boiteareves.com/reve/topic".$db_data['topic_id'].".html\">".$db_data['topic_title']."</a>";

// Extrait du post
$post = $db_data['post_text'];
$max_caracteres = 400;
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("(\[.*\])U","",$post );

// Traitement du nom de l'auteur
if ($db_data['poster_id'] != '-1' ) {
   $poster = "<a href=\"".append_sid("$urlPath/membre".$db_data['poster_id']).".html\" class=\"nav\" >".$db_data['username']."</a>";
}
else {
   $poster = $db_data['post_username'];
}

// Traitement de la date du post, affichage en joli français
setlocale(LC_TIME, 'fr_FR');
$post_time = strftime("%A %e %B à %H:%M", $db_data['post_time']+(0));

echo "<p align=\"left\">$post_title, par $poster, le $post_time<br />
$post</p>";

}
?>


Cela donne ce résultat, avec un lien sur le nom du sujet et un autre sur le nom de l'auteur du sujet (et non de la dernière réponse - debug) vers son profil :

Les invités doivent entrer leur nom, par yazerty, le jeudi 2 novembre à 13:08
Suite à un sujet sur lequel il y avait des "invités" qui répondaient à des "invités", j'ai décidé de mettre en place un système obligeant les personnes qui proposent des rêves et des interprétations à donner un "nom d'utilisateur" (pseudonyme). Si cela n'est pas concluant, nous serons contrait de mettre en place un système obligeant les personnes souhaitant (...)


Par contre je me suis rendu compte que ni dans mon code ni dans le code last active topics dont on parle ici, les url vers les profils des membres ne sont url rewrités. J'ai feinté, mais je trouve ça moyen, pas propre. Car cela correspond uniquement à un rewriting phpbb SEO simple, et ce n'est donc pas immédiatement adapté pour les 3 solutions de rewritting phpbb SEO...

Pour ça je suis complètement incompétent et dcz serait le bienvenu ;-) :)...
yazerty
PR1
PR1
 
Messages: 180
Inscription: Lun Oct 30, 2006 1:13 am

Messagede dcz » Mar Nov 07, 2006 5:56 pm

Ahh oui, tiens, le profils ne sont pas réécrits sur topic anywhere, j'ai du zapper ces URL en le moddant.

Faudrait voir ça dans son sujet.

++
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: 21383
Inscription: Ven Avr 28, 2006 9:03 pm

Messagede yazerty » Mar Nov 07, 2006 6:19 pm

Mm mais il ne s'agit pas de topic anywhere mais d'un script totalement indépendant à placer sur n'importe quelle page du site :/.

Ce que je ne comprends pas c'est que ça passe par le append_sid(), qui est censé être utilisé pour le rewrite made in phpbb SEO si je me rappelle bien. So, ça devrait marcher de base, non ?
yazerty
PR1
PR1
 
Messages: 180
Inscription: Lun Oct 30, 2006 1:13 am

PrécédenteSuivante

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 3 invités