Drupal : duplication de blog
Depuis un moment je m'amuse à créer ma « page perso », jonathan.michalon.eu. Mais mon « blog » qui n'en est pas vraiment un est créé sur une autre instance de Drupal, dans une autre base de donnée, affichée par chalmion.homelinux.net (je n'avais pas michalon.eu au début…).
J'ai voulu rendre disponible le même contenu sur les deux sites. Mais comme les deux instances de drupal ont leurs données dans deux bases de données différentes, c'est pas évident.
À l'aide du fameux module views, et grâce à un peu de documentation en ligne (comme ce post), j'ai finalement dû faire un mini-module qui génère la requête SQL produisant les données à afficher dans une instance depuis la base de l'autre.
Le module contient une seule fonction php, un hook, qui est appelé par views et modifie la requête pour la vue de mon blog.
<?php
function getblog_views_pre_execute(&$view)
{
global $language;
if($view->name=="blog")
{
$view->build_info['query']="
SELECT node.nid AS nid,
node_revisions.body AS node_revisions_body,
node.title AS node_title,
node.created AS node_created,
node_revisions.format AS node_revisions_format
FROM drupal6.node node
LEFT JOIN drupal6.node_revisions node_revisions
ON node.vid = node_revisions.vid
WHERE type='blog'
AND node.uid='1'
AND language='->language'
ORDER BY created desc
";
$view->build_info['count_query'] = $view->build_info['query'];
}
}
La requête est une variante de celle générée par views pour afficher tout le contenu du site, avec les champs titre, date, corps.
Il a aussi fallu changer l'URL de chaque billet de blog pour pointer sur l'autre site, puisque les données ne sont pas réellement sur jonathan.michalon.eu. count_query doit contenir une requête produisant le nombre d'entrées que la requête principale donnera, pour le calcul de mise en page (nombre de billets par page).