Jonathan.Michalon.eu

$HOME de Jonathan

11 févr. 2012

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).

Blue Penguin Theme · Powered by Pelican · Atom Feed · Rss Feed

Copyright © 2011-2015 Jonathan Michalon. Vous pouvez réutiliser tout contenu diffusé, sauf mention spécifique.