Insérer les articles de Dotclear sur son site
Par Mathieu le mercredi 14 juillet 2010, 17:06 - Informatique - Lien permanent
C'est quelque chose qui existe probablement déjà, mais comme je l'ai développé pour mon site, je vous propose ma solution, petite astuce à l'échelle des tutos Dotclear existants.
Si votre site et Dotclear partagent le même espace
Par « partagent le même espace », j'entends que les fichiers de Dotclear sont accessibles depuis l'endroit où vous voulez placer les articles. Il est également possible d'utiliser cette méthode si il n'y a pas d'accès au fichier de configuration de Dotclear, mais dans ce cas on ne pourra pas se servir de la couche d'abstraction fournie par le moteur de blog, et il aurait fallut faire les requêtes « en dur ».
Dans notre cas, il suffit d'inclure les fichiers de Dotclear et de jouer avec l'API :
<?php
define('CONF_ONLY','1');
include_once('./blog/inc/config.php');
include_once('./blog/inc/clearbricks/dblayer/dblayer.php');
try
{
@$db = dbLayer::init(DC_DBDRIVER,DC_DBHOST,DC_DBNAME,DC_DBUSER,DC_DBPASSWORD,0);
@$conn = $db->db_connect(DC_DBHOST,DC_DBUSER,DC_DBPASSWORD,DC_DBNAME);
}
catch (Exception $e)
{
$db = '';
echo 'Erreur de connexion';
}
if(!$db)
{
//exit;
}
else
{
$query =
' SELECT post_id,post_title,post_url
FROM '.DC_DBPREFIX.'post
WHERE post_status = \'1\'
ORDER BY post_dt DESC LIMIT 5';
$result = $db->db_query($conn,$query);
$num_results = $db->db_num_rows($result);
echo '<ul>';
for($i = 0 ; $i < $num_results ; $i++)
{
$row = $db->db_fetch_assoc($result);
$row['post_title'] = htmlspecialchars($row['post_title']);
echo '<li><a href="./blog/index.php/post/'.$row['post_url'].'" title="'.$row['post_title'].'">'.$row['post_title'].'</a></li>';
}
echo '</ul>';
$db->db_close($conn);
}
?>
La requête ici n'affiche que les titres, triés par date de publication, mais on peut la modifier pour qu'elle renvoie plus d'informations.
Si les fichiers de Dotclear ne sont pas accessibles, et la base non plus d'ailleurs
Dans ce cas, je suppose que le flux est quand même accessible, au minimum, nous allons récupérer le flux RSS du blog et le traiter. Pour ça on va utiliser un logiciel qui - il me semble - n'est plus maintenu, mais qui fait toujours très bien son travail : http://magpierss.sourceforge.net/
<?php
require_once('./magpierss/rss_fetch.inc');
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
$url = "http://mathedit.free.fr/blog/index.php/feed/rss2";
$rss = fetch_rss($url);
$max_items = 5;
$i = 0;
foreach ($rss->items as $item )
{
if ($i>$max_items)
break;
$title = $item['title'];
$url = $item['link'];
$summary = substr(strip_tags($item['summary']),0,100);
echo '<p>'.$summary.' <a href="'.$url.'">lire</a></p>';
$i++;
}
?>
Voilà c'est tout, n'oubliez pas d'encapsuler tout ça dans une classe pour la forme, et amusez vous bien ;)
Commentaires
Attention, à partir de Dotclear 2.3 le fichier à inclure a déménagé, il se trouve maintenant dans le dossier /inc/libs/clearbricks/.