Récupérer les urls des derniers sujets dans un autre script

Le forum de support du mod rewrite phpBB SEO Avancé.
Ce mod de réécriture d'url injecte les titres des catégories, forums et sujets dans leurs URLs.

Modérateur: Modérateurs

Récupérer les urls des derniers sujets dans un autre script

Messagede yazerty » Mar Mar 20, 2007 1:53 pm

Bonjour,

J'ai installé le mod avancé sur un forum en cours de développement et j'aimerais afficher sur la page d'accueil de mon site les derniers sujets de mon forum.

J'ai bricolé un petit script, qui marche, sauf pour les urls qui ne prennent pas les titres des sujets pour qu'elle soient celles générées par le mod avancé :(.
Code: Tout sélectionner
<?php
// www.phpBB-SEO.com SEO TOOLKIT BEGIN
include('forum/phpbb_seo/phpbb_seo_class.php');
$phpbb_seo = new phpbb_seo();
// www.phpBB-SEO.com SEO TOOLKIT END


// Connexion à la BDD
$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 10";

$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.site.net/forum/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 .= " (...)";
}

// www.phpBB-SEO.com SEO TOOLKIT BEGIN
$phpbb_seo->seo_url['topic'][$topic_id] = $phpbb_seo->format_url($topic_title);
// www.phpBB-SEO.com SEO TOOLKIT END
      
$post = preg_replace("(\[.*\])U","",$post );
$poster = "<a href=\"http://www.site.net/forum/membre".$db_data['poster_id'].".html\" class=\"nav\" >".$db_data['username']."</a>";
$post_time = strftime("%A %e %B @ %H:%M", $db_data['post_time']+(0));

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

}
?>


Je ne comprends pas comment marche le bout de code phpbbseo que j'ai essayer d'introduire dans mon propre code. Pourriez-vous m'aider à fixer le bug svp ?
yazerty
PR1
PR1
 
Messages: 180
Inscription: Lun Oct 30, 2006 1:13 am

Publicité

Messagede dcz » Mer Mar 21, 2007 3:25 pm

Donc, en faisant comme ça, il y a juste un truc à prendre en compte, c'est que la classe phpBB récupère quelques données de la config de phpBB, et notamment pour définir l'url du forum.
Du coup, pour utiliser la classe en dehors de phpBB, il faut lui donner quelques infos pour que tout se passe nickel.

Le plus simple est, je pense de gruger en assignat les variables en question manuellement après l'invocation de la classe :

Code: Tout sélectionner
// www.phpBB-SEO.com SEO TOOLKIT BEGIN
include('forum/phpbb_seo/phpbb_seo_class.php');
$phpbb_seo = new phpbb_seo();
$phpbb_seo->seo_path['phpbb_script'] = 'forum/';
$phpbb_seo->seo_path['root_url'] = 'http://www.exmple.com/';
$phpbb_seo->seo_path['phpbb_url'] = $phpbb_seo->seo_path['root_url'] . $phpbb_seo->seo_path['phpbb_script'];
$phpbb_seo->seo_url['user'] = $this->seo_static['user'] = 'membre';
// www.phpBB-SEO.com SEO TOOLKIT END


A adapter à ton cas du coup pour l'url du domaine (la racine), mais après, tu as toutes les fonction de la classe dispo.

Après, comme on est pas dans phpBB, on réécrit en "manuel", tu remplaces :

Code: Tout sélectionner
// Titre du post
$post_title = "<a href=\"http://www.site.net/forum/topic".$db_data['topic_id'].".html\">".$db_data['topic_title']."</a>";


Par :

Code: Tout sélectionner
// Titre du post
// www.phpBB-SEO.com SEO TOOLKIT BEGIN
$post_title = "<a href=\"" . $phpbb_seo->seo_path['phpbb_url'] . $phpbb_seo->format_url($db_data['topic_title']) . $phpbb_seo->seo_delim['topic'] . $db_data['topic_id'] . $phpbb_seo->seo_ext['topic'] . "\">" . $db_data['topic_title'] . "</a>";
// www.phpBB-SEO.com SEO TOOLKIT END


Et hop, pas besoin du reste, tu effaces :

Code: Tout sélectionner
// www.phpBB-SEO.com SEO TOOLKIT BEGIN
$phpbb_seo->seo_url['topic'][$topic_id] = $phpbb_seo->format_url($topic_title);
// www.phpBB-SEO.com SEO TOOLKIT END


Pour les membres, tu pourrait aussi généraliser la mise en forme de l'url, c'est rien de parser trois variables, et cela permet de faire en sorte que tes régléges éventuels de la classe phpbb_seo soient directement pris en compte.

Donc, pour tout à fait bien faire, faudrait remplacer :
Code: Tout sélectionner
$poster = "<a href=\"http://www.site.net/forum/membre".$db_data['poster_id'].".html\" class=\"nav\" >".$db_data['username']."</a>";


Par :

Code: Tout sélectionner
$poster = "<a href=\"" . $phpbb_seo->seo_path['phpbb_url'] . $phpbb_seo->seo_static['user'] . $db_data['poster_id'] . $phpbb_seo->seo_ext['user'] . "\" class=\"nav\" >".$db_data['username']."</a>";


Et à noter également que l'on a pas fait passé ni les titres, ni le contenu des messages par la censure de phpBB. Mais bon, si tu modères bien ton forum, devrait pas y avoir de soucis.

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

Messagede yazerty » Mer Mar 21, 2007 9:18 pm

Merci, ça marche très bien maintenant :) !!
yazerty
PR1
PR1
 
Messages: 180
Inscription: Lun Oct 30, 2006 1:13 am

Messagede Fireslinger » Dim Sep 23, 2007 8:56 am

Bonjour !

Je remonte ce topic car j'essaie d'utiliser le même script mais j'ai des pb d'encodage. J'utilise l'UTF-8 et tout se passe bien sur le forum. Le mod Avancé passe ss pbs avec les accents.

Fichier : phpbb_seo_class.php
Code: Tout sélectionner
   function phpbb_seo() {
      global $phpEx, $board_config;
      // config
      $this->encoding = "UTF-8";


Par contre, avec le script, les accents passent pas.. Il doit comprendre que c'est de l'iso..
Si je rajoute un utf8_decode comme ceci :
Code: Tout sélectionner
echo utf8_decode("<p align=\"left\">$post_title, by $poster, $post_time<br />
$post</p>");


ça marche mais pq est-ce que l'encodage n'est pas bien défini automatiquement ?

Merci :)
Fireslinger
 
Messages: 7
Inscription: Ven Aoû 31, 2007 11:12 am

Messagede dcz » Lun Sep 24, 2007 10:36 am

C'est juste qu'en l'état, le script ne se préoccupe pas des header, echo envois donc le header par défaut, en ISO-8859-1 vraisemblablement.

Tu pourrais donc ajouter :
Code: Tout sélectionner
header('Content-type: text/html; charset=UTF-8');
header('Cache-Control: private, no-cache="set-cookie"');
header('Expires: 0');
header('Pragma: no-cache');


Avant :

Code: Tout sélectionner
// Boucle d'affichage du post
while($db_data = mysql_fetch_assoc($req)) {


Et tu ne devrais plus avoir besoin de utf8_decode.

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

Messagede darkjukka » Sam Nov 10, 2007 1:18 pm

Bonjour,

Je viens de tomber sur ce post et j'ai trouvé ce script super donc je l'ai adopté, seulement il m'affiche aussi les topics des forums privés et je voudrais qu'il ne le fasse pas justement.

Y-t-il un moyen de faire cela ?
darkjukka
PR0
PR0
 
Messages: 62
Inscription: Dim Sep 30, 2007 7:24 pm

Messagede darkjukka » Dim Déc 16, 2007 1:52 pm

Je viens de me rappeler que j'ai trouvé la solution il y a quelques temps déjà donc j'en fait profiter s'il y a des intéressés.

Il suffit de rajouter
AND TP.forum_id NOT IN (id du forum)

à la liste
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

Voilou!
darkjukka
PR0
PR0
 
Messages: 62
Inscription: Dim Sep 30, 2007 7:24 pm

Messagede forma » Dim Juil 20, 2008 1:00 pm

Bonjour,

en adaptant un peu le script pour mon site (http://www.infokarate.com), je n'arrive pas à comprendre comment faire soit pour éliminer les smilies dans les posts partiels qu'il affiche sur ma page d'accueil, soit les faire apparaître correctement.

j'obtiens ça à la place des smilies : <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" etc.........

Bref, je ne sais pas comment on déclare ce chemin d'accès SMILIES_PATH

Merci de votre aide et merci pour vos contributions
forma
 
Messages: 3
Inscription: Jeu Juil 17, 2008 10:01 pm
Localisation: Limoges

Messagede dcz » Dim Juil 20, 2008 1:21 pm

C'est qu'en fait, il n'est pas si simple de faire des césures dans les posts de phpBB3, dans ton cas, le code source d'un smiley à été rompu pendant l'opération et ne peut donc pas s'afficher correctement.

Encore un problème qui ne se produit pas si l'on récupère les messages tronqués depuis les flux de Gym sitemaps & RSS, vu que dans le mod, tout est là pour faire des césures qui ne brisent ni les mots, ni les smiley ou 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: 21219
Inscription: Ven Avr 28, 2006 9:03 pm

Messagede forma » Dim Juil 20, 2008 1:41 pm

OK, je te remercie,

réponse logique, je n'ai plus qu'à trouver la quantité de caractères qui coupe le moins souvent le code au mauvais endroit.

Merci
forma
 
Messages: 3
Inscription: Jeu Juil 17, 2008 10:01 pm
Localisation: Limoges

Messagede forma » Dim Juil 20, 2008 8:52 pm

dcz a écrit:Encore un problème qui ne se produit pas si l'on récupère les messages tronqués depuis les flux de Gym sitemaps & RSS, vu que dans le mod, tout est là pour faire des césures qui ne brisent ni les mots, ni les smiley ou bbcodes.


Bonsoir,

Une petite question stp : Je viens d'nstaller la prémod, j'ai bien compris qu'elle était une compilation de mod additionnés à phpBB3 et même si je n'ai pas encore exploité tout son potentiel, je n'ai pas vu le mod que tu cites : Gym sitemaps & RSS

Dois-je ajouté ce mod en plus de la prémod ou est-il prévu dans une version plus avançé de la prémod?

Cordialement
forma
 
Messages: 3
Inscription: Jeu Juil 17, 2008 10:01 pm
Localisation: Limoges

Messagede yann91 » Dim Juil 20, 2008 9:15 pm

forma a écrit:
dcz a écrit:Encore un problème qui ne se produit pas si l'on récupère les messages tronqués depuis les flux de Gym sitemaps & RSS, vu que dans le mod, tout est là pour faire des césures qui ne brisent ni les mots, ni les smiley ou bbcodes.


Bonsoir,

Une petite question stp : Je viens d'nstaller la prémod, j'ai bien compris qu'elle était une compilation de mod additionnés à phpBB3 et même si je n'ai pas encore exploité tout son potentiel, je n'ai pas vu le mod que tu cites : Gym sitemaps & RSS

Dois-je ajouté ce mod en plus de la prémod ou est-il prévu dans une version plus avançé de la prémod?

Cordialement


Salut,

Il suffit de charger -http://www.ton-site.com/gym_sitemaps/gym_install.php . Après tu peux configurer le mod dans le pannel rubrique phpbb seo et récupérer le nouveau htaccess.

Moi aussi au début j'avais pas compris.
yann91
 
Messages: 36
Inscription: Sam Oct 21, 2006 9:59 pm

Messagede thegigistouch » Jeu Juil 31, 2008 2:42 pm

Bonjour,

J'ai besoin d'afficher sur une page les dernies posts d'un forum et de pointer vers celui avec son url rewritée du style

Code: Tout sélectionner
/tracker-tous-les-visiteurs-lors-paiement-valide-t21.html#p53


pour une page ayant pour titre
Tracker tous les visiteurs lors d'un paiement validé


Je vois bien que la requête a été "epurée", mais impossible de trouver a quel endroit dans le code de phpbb seo... :(

En essayant le code donné dans le premier post, j'ai une erreur de dépendances...

Code: Tout sélectionner
    function getLastPosts($qty = FORUM_DERNIERS_POSTS) {
        global $sql;
       
        //Recuperation des derniers posts
        $requete = "SELECT p.post_subject, p.post_text, p.post_time, u.username"
        . " FROM phpbb_posts p"
        . " LEFT JOIN phpbb_users u ON p.poster_id = u.user_id "
        . " WHERE p.post_approved = '1' AND"
        . " p.post_reported = '0'"
        . " ORDER BY p.post_time DESC"
        . " LIMIT 0,$qty";
       
        $lastPosts = $sql->requete($requete);


require_once('../forum/phpbb_seo/phpbb_seo_class.php');
$phpbb_seo = new phpbb_seo();
$url = $phpbb_seo->format_url($topic_title);


( ! ) Fatal error: Call to undefined function phpbb_realpath() in C:\Program Files\wamp\www\xxx\forum\phpbb_seo\phpbb_seo_class.php on line 96


Cet URL rewriting est tout simplement entrain de me rendre complétement dingue! :mrgreen:

Quelqu'un peut-il m'aider? ;)
thegigistouch
 
Messages: 3
Inscription: Jeu Juil 31, 2008 2:33 pm

Messagede SeO » Jeu Juil 31, 2008 2:46 pm

Donc ton script ne partage pas le code de phpBB.
C'est faisable mais assez compliqué, je me demande si tu ne devrais pas mieux récupéré toutes ces infos via un flux RSS.
SeO
Admin
Admin
 
Messages: 6333
Inscription: Mer Mar 15, 2006 9:41 pm

Messagede thegigistouch » Jeu Juil 31, 2008 2:50 pm

Merci de ta réponse plus que rapide! :)

Qu'entends tu par "ne partage pas le code"?

Peux-tu m'indiquer l'expression regulière qui est utilisée ou les critères utilisés pour le filtrage?

En dernier recours j'utiliserai le flux RSS (peux-tu me conseiller un mod léger et simple)?

D'avance merci! ^^

Nico
thegigistouch
 
Messages: 3
Inscription: Jeu Juil 31, 2008 2:33 pm

Suivante

Retourner vers mod Rewrite Avancé phpBB2

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

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


 
cron