Lorsque vous souhaiter mettre à jour votre environnement de test avec des données de la production, il faut mettre à jour la base de donnes ainsi que les fichiers uploadés par les utilisateurs, ce qui est la partie la plus fatigante lorsque vous travaillez en ftp.

Vous pouvez éviter ce derniers point en ajoutant une ligne a votre fichier htaccess, ou encore mieux : dans le fichier virtualhost pour éviter que Drupal l'écrase à chaque mise à jour.

RewriteRule ^sites/default/files/(.*)\.(jpg|JPG|png)$ https://productionsite.com/sites/default/files/$1.$2 [QSA,R=301,NC,L]

 

On ne peut pas traduire les titres des vues sans devoir ecrire du code php ou installer un module complementaire.
Il y existe néanmoins une solution simple.

Dans votre modulem utilisez ce code qui rendra chaque titre de vues traduisible :

function MODULE_views_pre_render(&$view)  {
  $view->set_title(t($view->get_title()));
}

Ou, dans le fichier template.php de votre theme : 

function THEME_views_pre_render(&$view)  {
  $view->set_title(t($view->get_title()));
}

Cette manipulation vas vous permettre de traduire les emails de bienvenu, d'inscription de perte de mot de passe ou de modification du status des comptes utilisateurs ( bloqué, supprimmé, annulé).

  1. Installer et activer le module Internationnalization (i18n)
  2. Activer les modules Variable translation et User mail translation
  3. Cocher les variables que vous souhaiter pouvoir traduire sur l interface d administration du module Variable translation ( admin/config/regional/i18n/variable ), dans la catégorie User emails
  4. Dans l interface de gestion des comptes ( admin/config/people/accounts ) vous avez maintenant un bloc en haut de la page qui vous permet de selectionner la langue des variables que vous souhaitez modifier. Mettez a jour les textes des mails, et voila !

Le module Variable translation vous permet de saisir les emails dans d autre langues, mais cela ne fonctionnera pas sans le module User mail translation.

Le module User mail translation, remplace le contenu des emails avec les variables localisées, mais aussi les token de liens contenu dans le mail, pour que l'utilisateur soit redirigé vers des pages dans sa langue lorsqu il cick sur les liens contenu dans les emails.

Dans Drupal 6 et 7, les utilisateurs qui veulent récupérer leur password ou s’enregistrer avec validation de leur adresse email, recevrons un lien avec un lien de connexion à usage unique.
Lorsqu'ils cliqueront sur ce lien, ils seront redirige vers le formulaire de connexion à usage unique, qu’ ils devront envoyer.

Il y a un truc simple pour éviter le formulaire de connexion à usage unique qu'explique Sivaji de drupalgardens, en anglais.

Dans le template du mail, que l’on trouve dans Drupal sur la page d administration des comptes ( admin/config/people/accounts ) , apres le token  [user:one-time-login-url], il suffit d'ajouter "/login". Ce qui nous fait donc "[user:one-time-login-url]/login".

Pour Drupal 6, on se retrouve avec "!login_url/login".

Et voilà c’est tout, pas besoin de méthode plus compliqué.

Vous vous amusez avec Sencha Touch et les vues Drupal ? une des fonctionnalitès du framework de sencha touch est  le plugin de pagination des listes qui permet de faire simplement des listes à défilement infinie.

Mais se pose alors un problème lorsque l'on essaye de faire fonctionner cela avec les vues Drupal, en utilisant le module Views Datasource pour générer le json. Le pager de Sencha Touch se base sur une numérotation de page commencant à 1 alors que le pager de svues commence à zéro.

La solution à cela est de modifier la maniére dont le proxy de sencha touch construit ses requètes GET :

Ext.define('path.proxy.MyProxy', {
    extend: 'Ext.data.proxy.JsonP',
    alias: 'proxy.myproxy',
    xtype : 'drupalpagerjsonp',
    config: {
        // This is the url we always query
        url: 'http://my/view/outputing/json/page',
        
        reader: {
            type: 'json',
            rootProperty: 'nodes'
        }
    },
       
     /**
     * We need to add a slight customization to buildRequest
     * We change the 1 index based page query to a zero based one
     */
    buildRequest: function(operation) {
        var request = this.callParent(arguments),
            params  = request.getParams();

        Ext.apply(params, {
            rpp: operation.getLimit(),
            page: operation.getPage() - 1
        });
        
        request.setParams(params);
        request.setUrl(this._url);

        // As we're modifiying the request params, we need to regenerate the url now
        request.setUrl(this.buildUrl(request));
        
        return request;
    }
});

Et voilà !

Un très bon article pour savoir comment mettre en place des traitements batch dans drupal (en anglais) sur drupal.org http://drupal.org/node/180528.

Silvio Gutierrez explique dans son article pour quoi le pager par default a un vrai problème de performance. En gros, le pager exécute une seconde fois la requete de la vue pour son propre usage, ce qui peut etre vraiment problématique pour des vues complexe déjà lourde.

Heureusement il existe une solution très simple : le module lite pager.

A cela s'ajoute deux trucs et astuces pour limiter les jointures ouvertes ( left join ) lorsque c'est inutile, et d'éviter l'usage du distinct dans les requetes.

Cela vaut donc vraiment le cout de lire how to optimise Drupal views the right way pour mettre en place ces 3 optimisations simplement.

Drupal supporte nativement 3 maniéres de mettre du contenu en cache : en utilisant du "php static", en ecrivant dans la base de donées ou dans le system de fichier.

Lullabot a un article très bien fait sur le sujet (en anglais) A Beginner's Guide to Caching Data in Drupal 7 qui explique tout ce qu'il y à savoir pour faire des developpements éfficasses et optimisés simplement.

La solution la plus efficasse est d'utiliser le module colorbox avec le module colorbox node, ce dernier étant celui qui effectue ce tour de magie.

Intégré avec Views

Colorbox node est intégré avec Views et étend l'option "Lié ce champs a son contenu original" ( "link this field to the original piece of content" ) en offrant une nouvel case pour "Afficher le contenu dans une colorbox" ( "Display the content inside of a colorbox" ), avec les paramétres hauteur / largeur. C'est du plug and play.

Ou placé manuelement sur un lien

En ajoutant la classe css "colorbox-node" à n'importe quel lien interne celui ci s'ouvrira dans une colorbox.

<a class="colorbox-node" href="blogs/my-example?width=600&height=600">Mon Example</a>

La documentation communautaire à l'article le plus simple et complet sur le sujet, en anglais  : How to use EntityFielQuery