Ceci est une libre traduction de l’article « 48 Essential developpment tips from Lullabot », paru sur missingfeatures.com
Source : http://www.missingfeatures.com/2010/02/16/48-essential-drupal-development-tips-from-lullabot/
Les derniers éléments de la liste d’origine n’ont pas été traduit, car ils ne concernaient pas spécialement Drupal (mais firebug, jquery…) et la flemme m’est tombé dessus après une quarantaine d’éléments à traduire.
Si vous remarquez des erreurs, des améliorations ou des modifications à ajouter, n’hesitez pas à le dire dans les commentaires de cet article, je ferais les mises-à-jour.
Il reste encore quelques points a traduire. Si quelqu’un se sent inspiré, qu’il n’hésite pas ! ;-)
- Afficher la variable $body_classes dans l’attribut class= »" de la balise de votre thème. Cela permet d’avoir accèss à des class CSS pratiques telles que « front », « not_front », « logged_in » …
- La page admin/build/block est la seule page d’administration qui utilise le thème du front-end, afin que les indications d’emplacements des blocks aient du sens.
- Les deux variables les plus souvent absentes de page.tpl.php sont $closure et $tabs.
- La convention de theming est de copier le fichier depuis le module du core (node.tpl.php par exemple) dans votre thème, et de l’éditer selon vos besoins.
- Use placeholder tokens to handle languages that order words differently. Example:
$variables['submitted'] = t('On @date', array('@date'=>format_date($variables['created'],'custom','F jS'))); - Bonne pratique: Pour les mises-à-jour des versions majeurs de Drupal, la bonne pratique est de supprimer, et de re-créer toutes les fonction de thème que vous avez surchargées, afin de prendre en compte toutes les modifications de code
- Si vous ne voulez pas afficher $content dans node.tpl.php, ne le faites pas. Affichez chaque champs un par un.
- Performance: Utilisez le style « champs » plutôt que « nodes » avec views. L’affichage « nodes » effectue un node_load() pour chaque node de votre vue, qui représente environ 50 requêtes par node. L’affichage « champs » recupère uniquement ce que vous avez besoin.
- La fonction dsm() dpm() est très utile, et permet d’avoir un affichage des variables complexes pour le debbugage. Vous devez avoir le module devel d’installé.
- Regroupez vos modules custom dans le même package pour simplifier la liste des modules pour vous, et les futurs développeurs.
- Utilisez le module coder pour identifier les changements d’api entre Drupal 6 et 7
- Bonne pratique: La variable user représente l’utilisateur identifié sur le site au moment de l’exécution du code. La variable account représente un utilisateur du site, sans rapport avec l’utilisateur identifié.
- Performance: Toute la table des variables est chargée à chaque page, donc limitez la quantité d’information que vous y stockez.
- Performance: La fonction variable_get() ne provoque aucun appel a la base de données, puisque toutes les informations de variables sont stockés en mémoire.
- Comme ces informations sont stockés dans le cache à la création, n’appelez pas t() sur les titres de menus et les descriptions. La langue utilisée à la création serait la même pour tout le monde.
- Utilisez MENU_LOCAL_TASK dans le hook_menu pour ajouter un onglet à une page, comme un node ou un profil utilisateur.
- Performance: Déplacez les grosses fonctions de callback de menu dans des fichiers .inc, en utilisant l’attribut « file ». Cela permettra de réduire la consommation mémoire, car tout le fichier .module est chargé à chaque page. (les fichiers .inc sont chargés au cas-par-cas)
- Utilisez %user et %node dans votre hook_menu fera en sorte que Drupal appelle automatiquement node_load() ou user_load() avec le bon identifiant. (ce sont les « magic handlers »)
- Vous pouvez utiliser vos propres « magic handlers » en utilisant le % dans hook_menu. Par exemple, %foobar appèlera automatiquement foobar_load(). Cette fonction doit se trouver dans le fichier .module
- Dans votre module, vous pouvez utiliser $GLOBALS['conf']['cache'] = false pour désactiver le cache d’une page. (Pensez a vider le cache)
- Pour déterminer qu’un site est propulsé par Drupal, vous pouvez vérifier que la d’expiration des headers soit le 11/19/1978 (Date de naissance du créateur de Drupal)
- Faire des « routes » avec Drupal: custom_url_rewrite_inbound() et custom_url_rewrite_outbound().
- Choisissez le bon type de champ pour les dates avec CCK:
- Date (iso date), satisfaisant pour des dates imprécises, comme une année
- Datestamp (Unix epoch), même format que le core de Drupal. Offre le même degré de précision que Datetime
- Datetime, stocke les dates dans le format natif du SGBD utilisé. Permet la manipulation des dates au niveau de la base de donnée, qui est plus rapide.
- Bonne pratique: Séparer votre dossier sites/all/modules en 2 sous-dossiers contrib et custom
- Bonne pratique: Si vous devez modifier un module contrib, suivez les modifications dans un fichier de patch, et stockez tout vos patches dans un dossier. A chaque mise-à-jour d’un module contrib, vérifiez que le patch a toujours son utilité.
- Bonne pratique: hook_menu() devrait être la première fonction de vos modules. Elle sert ensuite d’index pour le module, décrivant ce qu’il fait, et où.
- Les clés des tableaux de form débutent avec un dièse (#) pour pouvoir imbriquer différents formulaires dans un même tableau.
- L’attribut « clicked_button » est ajouté au from_state par Drupal, pour permettre l’utilisation d’images comme boutons de soumission de formulaires, y compris avec Internet Explorer
- On peut définir une erreur sur un champ imbriqué en utilisant le format parent][enfant.
- La fonction form_error() est plus logique (et plus "propre") que form_set_error(). Elle font la même chose.
form_set_error('home][street','You must enter the street address.');form_error($form['home']['street'], ‘You must enter the street address.’);
- If anything is placed in $form_storage Drupal will ignore any redirects specified and rebuild the form on the submit. To avoid this you must unset $form_storage.
- Bonne pratique: Vous pouvez utiliser n'importe quel HTML dans une fonction de thème, puisqu'un thème vous permet de surcharger le code HTML de ses propres fonctions
- Drupal effectuera le rendu des parties restantes de $form que vous n'avez pas "rendues". Ce n'est donc pas nécessaire de faire manuellement le rendu de chaque partie du $form, mais seulement celles qui vous intéressent.
- Utilisez db_set_active() pour naviguer entre les différentes connections que vous avez spécifiées dans votre fichier settings.php. Cela permet de sortir du core de Drupal, pour gérer des données externes.
- Le module Table Wizard vous permet d'exposer n'importe quelle table dans views.
- Si vous spécifiez une valeur (avec #value) à un élément de formulaire (de type 'hidden' par exemple), Drupal utilisera cette valeur, sans tenir compte de l'entrée utilisateur.
- Un élément de formulaire de type 'value' (#type = 'value';) ne sera jamais envoyé à l'utilisateur, mais restera disponible dans le $form, pour pouvoir acceder à cette valeur à travers d'autres fonctions.
- Astuce HTML: L'utilisation du javascript en ligne (ex: drupal_add_js('my js', 'inline'); ) empêche le navigateur de charger autre chose, en attendant que tout le javascript soit chargé.
- Une bonne façon de gérer vos vues (views) est de les exporter, et de les installer à travers un module custom. De cette façcon, vous en gardez une trace dans votre système de gestion de version. Vous pouvez toujours effectuer des changements avec Views UI.
- Managing major patches: Create an empty module and use hook_update() to push major site configuration changes (settings, etc). This way you can update the module code then run update.php and install the patch in Drupal.
- Quand "nettoyer": Utiliser des données au niveau des templates est plutôt sûr. Par contre, partout ailleurs, ca ne l'est pas. Utilisez check_plain (aucune balise) ou check_markup (passage au travers les formats d'entrées)
- Vous pouvez écrire un script drush_make pour pouvoir créer une installation propre de Drupal avec les dernières versions des modules téléchargées depuis drupal.org
- Utilisez cache_get() et cache_set() autant que possible pour réduire les accès à la base de donnée.
J'espère que cette liste vous a plu, n'hésitez pas à faire des commentaires pour l'améliorer.
Poster un commentaire