Jean-Philippe Fleury

informatique libre • art libre

Une installation optimisée de Drupal

Quelques pistes pour une installation optimisée de Drupal 6. Il s'agit d'un brouillon, une sorte de mémo, et il faudrait bien que je prenne le temps de faire du gros ménage là-dedans et d'en faire un tutoriel un peu plus abouti.

La base

Premièrement, on récupère la dernière version de Drupal. On trouvera le lien sur l'accueil de Drupal francophone. Ensuite on télécharge les fichiers pour le français. Une fois les deux archives extraites, on fusionne les dossiers, ce qui donne par exemple cp -R fr-6.x-1.0/. drupal-6.9. On installe le tout sur son serveur.

La configuration et les modules à ajouter

On a une installation de base de Drupal. Il va falloir ajouter ou configurer plusieurs modules pour modeler Drupal à notre convenance.

Option URLs simplifiées

On active les URL simplifiées, option disponible par défaut dans Drupal.

On passe donc maintenant de liens ?q=node/1 à des liens node/83.

Choisir entre conserver ou supprimer les www

Le contenu dupliqué est le fait qu'un même contenu puisse être accessible par plus d'une URL. C'est le cas par exemple si un site présente le même contenu sur exemple.com et www.exemple.com. Les moteurs de recherche essaient de réduire le contenu dupliqué dans leurs résultats. Par exemple, s'il y a du contenu dupliqué reconnu par Google, ce dernier affiche à la dernière page de résultats une phrase de ce type:

Pour limiter les résultats aux pages les plus pertinentes (total : 128), Google a ignoré certaines pages à contenu similaire. Si vous le souhaitez, vous pouvez relancer la recherche en incluant les pages ignorées.

C'est mieux de choisir soi-même. Commençons par choisir entre un site avec www ou un site sans www. Dans le .htaccess de Drupal, il y a une section qu'on peut décommenter. Voir ce qui suit ce paragraphe:

# If your site can be accessed both with and without the 'www.' prefix, you
# can use one of the following settings to redirect users to your preferred
# URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:

Page title

Le module Page Title permet de personnaliser pour chaque page le contenu de la balise title dans l'en-tête HTML de notre page. Par exemple, on peut saisir soi-même le contenu, faire ajouter automatiquement le terme associé, etc. Dans ce dernier cas, s'il n'y a pas de terme, plusieurs séparateurs peuvent se suivre. Par exemple, si on met [page-title] | [term] | [site-name] comme contenu de la balise title et qu'il n'y a pas de terme, on va obtenir comme titre Mon titre | | Mon site. J'ai fait un rapport de bogue à ce sujet: http://drupal.org/node/386014.

Pour ajouter la pagination dans le titre, voir la demande http://drupal.org/node/224262 et le code proposé. En espérant que le correctif soit intégré au module Token bientôt.

À noter que ce module dépend du module Token.

Meta tags

Le module Meta tags permet de personnaliser plusieurs métabalises, dont keywords et description. Bien sûr le référencement ne repose plus sur les métabalises, mais il peut y avoir un intérêt quand même. Par exemple, le contenu de la balise description est souvent affiché dans les résultats des moteurs de recherche. Il y a donc un intérêt à la soigner. Pour sa part, la balise keywords pourrait permettre, si son contenu est personnalisé, d'éviter que certaines pages ayant un contenu ressemblant soient considérées comme du contenu dupliqué.

Pour la pagination (page 1, page 2, etc.), ce module met pour l'instant noindex. Dans mon cas, ce n'est pas adapté parce que je mets une description de la catégorie sur ces pages. Voir http://drupal.org/node/294996, en espérant qu'un correctif soit apporté bientôt.

Pathauto

Le module Pathauto permet d'obtenir des URL plus parlantes, par exemple ouverture-de-mon-site au lieu de node/1. À noter que ce module dépend du module Path (livré par défaut avec un Drupal de base).

Il est recommandé d'installer en complément le module Path redirect.

Note: pour que la redirection de flux RSS fonctionne, il faut mettre 0/feed dans le champ «Internal feed alias text (leave blank to disable) :». Voir Taxonomy term path feed problem.

Path redirect

Le module Path redirect permet de rediriger d'anciennes adresses vers les nouvelles dans le cas où on modifie l'URL d'une page. Quand le module Pathauto est également installé, ce dernier peut être configuré pour faire automatiquement les redirections.

Global Redirect

Le module Global Redirect s'assure qu'il n'y a pas de page ayant deux adresses différentes. Si une page est accessible par exemple par node/1 et ouverture-de-mon-site, le module va effectuer une redirection 301 de la première adresse vers la seconde.

Formulaire de contact

Maintenant on ajoute un forumlaire de contact en activant le module Contact, livré par défaut avec Drupal.

GeSHi Filter (coloration syntaxique)

Si vous voulez ajouter proprement du code source sur vos pages, le module GeShi Filter permet d'activer la coloration syntaxique pour du code.

Markdown filter

Si vous voulez utiliser la syntaxe Markdown dans vos pages, installez le module Markdown filter.

Note: si on active GeSHi Filter et Markdown filter, il faut bien faire attention à ce que le filtre Markdown soit analysé avant le filtre GeSHi.

Mailhandler

Si vous voulez créer du contenu par courriel, installez le module Mailhandler.

Mailsave

Le module Mailsave est un complément à Mailhandler. Il permet entre autres de créer automatiquement des fichiers attachés aux pages créées par Mailhandler selon les pièces jointes au courriel.

À noter qu'on doit aussi activer le module Upload (qui est livré par défaut avec Drupal), étant donné que Mailsave se base sur les droits définis pour ce module.

CustomError

Le module CustomError permet de configurer les pages d'erreur 403 et 404 sans avoir à créer de noeud spécial.

Ne pas oublier d'aller sur la page admin/settings/error-reporting et configurer les adresses comme ceci:

customerror/403
customerror/404

XML Sitemap

Le module XML Sitemap permet de générer automatiquement un plan du site.

Note: en date du 17 février 2009, ce module est encore en version de développement pour Drupal 6.

CCK

Le module CCK est quasiment un incontournable. Il permet d'ajouter des champs selon nos besoins, donc de créer ou de configurer des types de contenu.

Views

Le module Views est le compagnon de CCK. Il permet de créer selon des critères précis des listes de contenu. Ensuite, on peut utiliser ces listes pour former notre page d'accueil, des pages de section, des blocs, etc.

Advanced Help

Pour profiter d'une aide avancée de Views, il faut installer le module Advanced Help.

Insert View

Le module Insert View permet d'insérer des vues (générées par le module Views) dans du contenu sans devoir passer par du code PHP. Exemple: [view:nom].

robots.txt

Si nécessaire, personnaliser ce fichier (oui, il faudrait que je développe un peu plus :)).

filter_default

À faire.

Comment mail

Le module Comment mail permet de recevoir un courriel à chaque nouveau commentaire posté sur le site.

Comment Notify

Le module Comment Notify ajoute une option dans le formulaire de commentaire pour permettre aux internautes de s'abonner aux réponses à leur commentaire ou de s'abonner à tous les nouveaux commentaires de l'article.

Captcha

Le module Captcha permet d'éviter le pourriel dans les commentaires.

Pagination

Le module Pagination permet de paginer de longues pages. Cependant, ce module incrémente déjà la variable GET page, ce qui entre en conflit avec le correctif que j'ai appliqué à Drupal pour faire la même chose. Voir le rapport http://drupal.org/node/386154.

Optimiser la structure des pages

Par défaut, la plupart des thèmes mettent le titre du site dans une balise h1 et le titre de la page (ou du noeud) dans une balise h2. À changer. Le titre du site devrait être dans une div et le titre de page dans un h1. Sur la page d'accueil, c'est pas une mauvaise idée de mettre le titre de site exceptionnellement dans un h1.

Faire débuter le numéro de la pagination à 1 et non 0

Par exemple, le lien vers la deuxième page est ?page=1, mais ça devrait plutôt être ?page=2. J'ai soumis un correctif pour le fichier includes/pager.inc.

Term Fields et afficher la description des termes de taxonomie seulement sur la première page

Par défaut, ce n'est pas vraiment possible d'avoir une page personnalisée pour la page d'index des termes de taxonomie. Par exemple, la page /taxonomy/term/id va lister les noeuds faisant partie de ce terme, avec possiblement la description dans le haut si cette information a été remplie. Si la description s'affiche, elle va s'affiche pour toutes les pages (donc sur la page 1, page 2, page 3, etc.). Si on veut écrire une grande description, ce n'est pas adapté. Ce que je propose, c'est donc de faire afficher la description complète sur la première page, et seulement un petit résumé sur les pages suivantes.

On va donc installer le module Term Fields, qui va nous permettre d'ajouter des champs personnalisés aux termes. On va donc installer ce module et ajouter un champ résumé, qu'on va faire afficher seulement sur les pages supérieures à 1. Pour ce faire, on peut ajouter par exemple la fonciton suivante dans notre fichier template.php:

/* Afficher la description des termes de taxonomie seulement sur la première page, et afficher le résumé sur les pages subséquentes */

/**
 * Render a taxonomy term page HTML output.
 *
 * @param $tids
 *   An array of term ids.
 * @param $result
 *   A pager_query() result, such as that performed by taxonomy_select_nodes().
 *
 * @ingroup themeable
 */
function phptemplate_taxonomy_term_page($tids, $result) {
  drupal_add_css(drupal_get_path('module', 'taxonomy') .'/taxonomy.css');

  $output = '';

  // Only display the description if we have a single term, to avoid clutter and confusion.
  if (count($tids) == 1) {
    $term = taxonomy_get_term($tids[0]);
    $description = $term->description;

    // Check that a description is set.
    if (!empty($description)) {
      $output .= '<div class="taxonomy-term-description">';
      // Si on se trouve sur la première page, on affiche la description complète
      if (empty($_GET['page'])) {
        $output .= '<p class="legende"><span>Description de la catégorie <em>' . $term->name . '</em></span></p><div class="taxonomy-term-description-contenu">';
        $output .= filter_xss_admin($description);
        $output .= '</div>';
      }

      // Sinon on affiche seulement le résumé.
      else {
        $output .= '<p class="legende"><span>Résumé de la catégorie <em>' . $term->name . '</em></span></p><div class="taxonomy-term-description-contenu">';
        $output .= term_fields_get_field($term->tid, 'resume');
        $output .= l ('<p class="taxonomy-term-description-contenu-plus">En savoir plus sur la catégorie <em>' . $term->name . '</em>...</p>', taxonomy_term_path($term), array('html' => TRUE));
        $output .= '</div>';
      }

      $output .= '</div>';
    }
  }

  $output .= taxonomy_render_nodes($result);

  return $output;
}

Et un style qui l'accompagne:

/* Description des termes de taxonomie */

div.taxonomy-term-description {
    margin-top: 1.5em;
    border: 1px solid #eee;
}

p.legende {
    margin-top: -0.8em;
    margin-left: 10px;
    float: left;
}

p.legende span
{
    padding: 0px 10px;
    background-color: #fff;
    font-weight: bold;
}

div.taxonomy-term-description-contenu {
    clear: left;
    padding: 10px 0 10px 10px;
}

p.taxonomy-term-description-contenu-plus {
    margin-top: 10px;
}

Syndication

Le module Syndication permet de créer une page recenssant tous les flux RSS du site. On peut également générer des flux RSS en mariant plusieurs termes.

Taxonomy Menu

Le module Taxonomy Menu permet d'ajouter dans un menu une liste de terme pour chaque vocabulaire.

Note: j'utilisais avant le module Taxonomy Blocks, qui permet de créer un menu listant chaque terme d'un vocabulaire (optionnellement, on peut faire afficher entre parenthèses le nombre d'éléments de chaque terme). Cependant, dû à un certains nombre de bogues, dont le problème de non-génération des classes habituelles pour les listes (par exemple leaf first), j'ai changé pour le module Taxonomy Menu.

Piwik - Web analytics

Le module Piwik - Web analytics permet d'ajouter le code nécessaire au suivi statistique des visites à l'aide du logiciel Piwik (que l'on doit installer à part).

Node Hierarchy

Le module Node Hierarchy permet de créer facilement une hiérarchie entre les pages, par exemple en assignant telle page enfant de telle autre page parente. On peut configurer pathauto pour que l'URL reflète la hiérarchie, et on peut également faire créer automatiquement le menu hiérarchisé.

Menu block

Le module Menu block permet d'ajouter un bloc qui reflète le menu dans lequel la page courante fait partie.

Note: le module Local Menu permet de réaliser la même chose, mais pour seulement un bloc, alors que Menu block permet de créer autant de bloc qu'on veut.

Table of Contents

Le module Table of Contents permet de générer une table des matières d'une page en se basant sur les titres HTML de niveau 1 à 6.

Search config

Le module Search config permet de configurer les options dans la recherche avancée (et plus).

Autres modules potentiellement utiles

Taxonomy Title

Le module Taxonomy Title permet de configurer le titre (contenu de la balise h1 ou h2 selon les thèmes) pour les pages d'index de chaque terme.

SiteMenu

Le module SiteMenu permet de générer une page listant tous les noeuds classés par catégorie.

Note: en date du 7 mars 2009, ce module est encore en version de développement pour Drupal 6.

À tester plus tard

Taxonomy redirect

Le module Taxonomy redirect permet de changer l'adresse de taxonomie, mais ne permet pas encore une redirection automatique de l'ancienne adresse par défaut de Drupal vers la nouvelle.

À faire

  • Avoir des URL simplifiées aussi pour la pagination, donc se débarrasser des ?page=.

Haut