| :: |
| Auteur |
Message |
Forge
Inscrit le: 30 Sep 2007 Messages: 17 Localisation: Dans une forge.
|
Posté le: Ven Juil 04, 2008 9:11 am Sujet du message: [Résolu] Récupérer les titres sous PHPBB3 - Rewrite avancé |
|
|
Voilà, je souhaiterais récupérer les titres des derniers topics si possible correctement orthographié.
Jusqu'à présent, j'employais un script similaire à celui-ci mais depuis l'installation de la premod V3.01, cette erreur est renvoyée :
Fatal error: Call to undefined function: utf8_normalize_nfc() in /home.2/nom/www/forum/phpbb_seo/phpbb_seo_class.php
qui renvoie à la ligne :
| Code: | // workaround for FF default iso encoding
if (!$this->is_utf8($this->seo_path['uri']) && function_exists('utf8_encode')) {
$this->seo_path['uri'] = utf8_normalize_nfc(utf8_encode($this->seo_path['uri']));
} |
Avez vous un petit script qui fonctionne bien avec utilisation du mode rewrite avancé pour PHPBB 3.01.
Merci.  |
Dernière édition par Forge le Ven Juil 04, 2008 3:48 pm; édité 1 fois |
|
| Revenir en haut de page |
|
 |
|
 |
SeO Administrateur - Site Admin

Inscrit le: 15 Mar 2006 Messages: 3791
|
Posté le: Ven Juil 04, 2008 9:53 am Sujet du message: Re: [Résolu] Récupérer les titres sous PHPBB3 - Rewrite avancé |
|
|
| Fait un include de includes/utf/utf_tools.php, ou mieux de common.php si c'est possible, pour vraiment avoir tout le code nécessaire ainsi que la config de phpBB (qui sert dans la classe phpbb_seo). Si tu inclus common.php, tu n'aura pas besoin de lancer la classe phpbb_seo. |
_________________ phpBB SEO || SEO Forum || Forum Référencement
GYM Sitemap & RSS for phpBB3 has been released ! || GYM Sitemap & RSS for phpBB3 est disponible ! |
|
| Revenir en haut de page |
|
 |
Forge
Inscrit le: 30 Sep 2007 Messages: 17 Localisation: Dans une forge.
|
Posté le: Ven Juil 04, 2008 3:11 pm Sujet du message: Re: [Résolu] Récupérer les titres sous PHPBB3 - Rewrite avancé |
|
|
Merci SeO.
Voilà donc une solution pour récupérer les titres et le début des posts (260 caractères) et réaliser un affichage en charset ISO-8859-1.
| Code: | <?php
$db_serverforum = "xxxxxx"; //adresse du serveur MySQL
$db_nameforum = "xxxxxx"; //nom de la base de données
$db_user_loginforum = "xxxxxx"; //nom d'utilisateur pour la BD
$db_user_passforum = "xxxxxx"; //mot de passe pour la BD
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
// Sélection des 5 derniers posts
$sql = "SELECT phpbb_topics.topic_id, phpbb_topics.topic_title, phpbb_posts.post_text, phpbb_posts.post_time, phpbb_posts.poster_id, phpbb_posts.post_username, phpbb_users.username
FROM phpbb_topics, phpbb_posts, phpbb_users
WHERE phpbb_posts.post_id = phpbb_topics.topic_first_post_id
AND phpbb_users.user_id = phpbb_topics.topic_poster
GROUP BY phpbb_topics.topic_id
ORDER BY phpbb_topics.topic_id DESC
LIMIT 5";
$req = mysql_query($sql) or die(mysql_error());
echo " Les 5 derniers sujets du <a href=\"http://url-de-votre-forum/\" target=\"_blank\">forum de example</a> :";
// Boucle d'affichage du post
while($db_data = mysql_fetch_assoc($req)) {
// Titre du post
$post_title = "<a href=\"http://url-de-votre-forum/". $phpbb_seo->format_url($db_data['topic_title']) . $phpbb_seo->seo_delim['topic'] . $db_data['topic_id'] . $phpbb_seo->seo_ext['topic'] ."\" target=\"_blank\" >" . htmlentities(utf8_decode($db_data['topic_title'])) . "</a>";
// Extrait du post
$post = $db_data['post_text'];
$max_caracteres = 260;
if (strlen($post)>$max_caracteres) {
$max_caracteres=strrpos(substr($post, 0, $max_caracteres), " ");
$post = substr($post, 0, $max_caracteres);
$post .= " (...)";
}
$post = preg_replace("(\[.*\])U","",$post );
$post = htmlentities(utf8_decode($post));
$poster = htmlentities(utf8_decode($db_data['username']));
setlocale (LC_TIME, 'fr_FR','fra');
$post_time = strftime("%A %d %B %Y à %H:%M", $db_data['post_time']+(0));
$post_time = htmlentities($post_time);
echo "<p align=\"left\">$post_title par $poster - $post_time.<br />
$post</p>";
}
// on ferme la connexion à mysql
garbage_collection();
?> |
Bin, voilà, j'espère que cela pourra servir.
Edit : Le code ci-dessus prend en compte toutes les remarques de SeO ci-dessous.  |
Dernière édition par Forge le Mar Juil 15, 2008 9:50 am; édité 3 fois |
|
| Revenir en haut de page |
|
 |
SeO Administrateur - Site Admin

Inscrit le: 15 Mar 2006 Messages: 3791
|
|
| Revenir en haut de page |
|
 |
Forge
Inscrit le: 30 Sep 2007 Messages: 17 Localisation: Dans une forge.
|
Posté le: Sam Juil 05, 2008 1:08 pm Sujet du message: Re: [Résolu] Récupérer les titres sous PHPBB3 - Rewrite avancé |
|
|
J'ai édité le code ci-dessus. Merci pour ta précision, cela devient vraiment enfantin...
PS : Tu me confirmes que la fermeture de la connexion est exacte grâce à ce code ?
| Code: | // on ferme la connexion à mysql
$db->sql_close(); |
Merci.  |
|
|
| Revenir en haut de page |
|
 |
SeO Administrateur - Site Admin

Inscrit le: 15 Mar 2006 Messages: 3791
|
Posté le: Sam Juil 05, 2008 2:47 pm Sujet du message: Re: [Résolu] Récupérer les titres sous PHPBB3 - Rewrite avancé |
|
|
Oui, mais pour bien faire, il vaut mieux utiliser garbage_collection() :
| Code: | | garbage_collection(); |
qui vides le cache et ferme la connexion à la db, comme ça si une autre tache nécessaire en fin de cycle viens s'ajouter à phpBB, ton code l'utilisera directe
Dans includes/functions.php
| Code: | /**
* Closing the cache object and the database
* Cool function name, eh? We might want to add operations to it later
*/
function garbage_collection()
{
global $cache, $db;
// Unload cache, must be done before the DB connection if closed
if (!empty($cache))
{
$cache->unload();
}
// Close our DB connection.
if (!empty($db))
{
$db->sql_close();
}
} |
Les puristes utiliseraient égallement exit_handler() au lieux de exit; pour tout a fait intégrer les fonctionnalité de phpBB3, les hook en l'occurence (toujours dans includes/functions.php) :
| Code: |
/**
* Handler for exit calls in phpBB.
* This function supports hooks.
*
* Note: This function is called after the template has been outputted.
*/
function exit_handler()
{
global $phpbb_hook;
if (!empty($phpbb_hook) && $phpbb_hook->call_hook(__FUNCTION__))
{
if ($phpbb_hook->hook_return(__FUNCTION__))
{
return $phpbb_hook->hook_return_result(__FUNCTION__);
}
}
// As a pre-caution... some setups display a blank page if the flush() is not there.
@flush();
exit;
} |
Mais il y a déjà moins de chances que ce soit vraiment utile. Et note égallement qui si tu passait par page_header() et page_footer() dans tes pages partageant les sessions de phpBB, tu n'aurait pas besoin de faire ça, c'est fait dans page_footer()  |
_________________ phpBB SEO || SEO Forum || Forum Référencement
GYM Sitemap & RSS for phpBB3 has been released ! || GYM Sitemap & RSS for phpBB3 est disponible ! |
|
| Revenir en haut de page |
|
 |
Forge
Inscrit le: 30 Sep 2007 Messages: 17 Localisation: Dans une forge.
|
Posté le: Mar Juil 15, 2008 9:41 am Sujet du message: Re: [Résolu] Récupérer les titres sous PHPBB3 - Rewrite avancé |
|
|
Merci SeO,
J'ai pris quelques vacances, ce qui explique que je tarde à te répondre.
J'ai édité le code plus haut en appliquant la fonction garbage_collection();.
Je n'ai pas ajouté d'include de functions.php (sans quoi cela foire) mais la fonction garbage_collection() semble faire son effet...
Merci encore.
++
Forge.  |
|
|
| Revenir en haut de page |
|
 |
dcz Administrateur - Site Admin

Inscrit le: 28 Avr 2006 Messages: 15123
|
|
| Revenir en haut de page |
|
 |
|
|