Drupal

Share and options

Comment bien optimizer un Drupal 7

Après de longues heures de benchmarks divers et variés, j'ai enfin réussi à avoir obtenir une configuration optimum pour faire tourner un Drupal 7 correctement. Comme des bons exemples valent mieux que mille mots, voici en image comment faire :

Pour le benchmark, je vais utiliser la commande ab -n 100 -c 4 http://blog-d7.guinevere/

Migration de ce site

Ce site vient de migrer en Drupal 7, opération fructueuse, malgré quelques désagréments. J'ai en effet développé un module permettant de forcer un peu plus l'aggrégation des fichiers CSS et JS, et j'ai malcontreusement déployé une version bugguée sur ce site, que j'ai finalement du désactiver.

Bon bref, ça semblerait marcher, jusqu'à ce que:

! <Haza`> pounard > The website encountered an unexpected error. Please try again later.
<Haza`> boooh

Rappellez moi de plus jamais de me faire de pub sur IRC :)

Mise à jour (2 heures après) : J'ai corrigé le fameux module buggué, et mise dans un sandbox sur drupal.org, allez donc voir: ici si j'y suis pour tester ce module.

Une vache à poil!

Voulant tester un peu Drupal 7, j'ai décidé de porter mon bon vieux blog en Drupal 6 vers Drupal 7. Pour fêter ceci, voici la photo d'une vache à poil.

Si vous pensiez que j'allais vous la montrer sur ma page d'accueil, vous vous fourrez le doigt dans l'oeuil jusqu'au coude! Donnez vous au moins la peine de cliquer, ça ne vous fera pas de mal :)

Cette vache semble aussi sympathique que la gestion des media en l'état avec Drupal 7, c'est à dire non fini. Aujourd'hui la field API permet de faire beaucoup de choses, mais aucun module de gestion correcte d'image (parlons WYSIWYG) ne semble encore exister, ce qui est assez dramatique. Tous les modules censés y toucher sont aujourd'hui encore en développement actif, et je ne me risquerais pas à les installer sur un site publique dans ces conditions!

Un nouveau theme \o/

Et voilà, depuis le temps que je trainais l'infameux thème Bluemarine comme base de travail pour celui de mon site! J'ai franchis le pas, pour de multiples raisonsEt surtout à cause de la honte., et que diable, au bout de deux bonnes heures de travail je suis enfin arrivé à un résultat.

Au programme, tout un tas de nouveautés, même si la différence n'est pas flagrante à première vue.

Dans le gros du travail, un thème mélangeant positions absolues et conteneurs floatants, table-less et fluide. Un header quelque peu particulier, puisqu'il est en réalité rendu non loin du footer, suffisament bas dans la page pour ne pas polluer le html brut.

Pour finir, quelques heures de travail, des découvertes en CSS, un peu de Gimp pour faire le fond zébré (et oui, moi je réinvente la roue, je me fais mal, et j'aime ça), et la place pour de nouveaux modules, à venir, plus tard quand ils seront releasés officiellement.

Emulate the CCK form validation process for a given field

Something that you may need to do one day or another is validating a custom form field value as if it was a Content field existing value, outside of the node form context.

There is something quite sad about Content module, that is the API does not seems (in Drupal 6, at least, I'm awaiting for a lot of improvements in D7 Field API) to expose any function for manual field validation. The whole process of validation goes through the numerous iterations in node_form and in hook_nodeapi() content module's implementation.

I found a way, quite ugly, but tested and working, let's analyse the following code (comments are inside the function)...

Code snippet: current OG context to node creation links

Simple use case of the day : when you deal with Organic Groups in Drupal, you might want your users to be able to create nodes in their groups without dealing with the infamous audience checkboxes.

A simple solution is to use the links from the Navigation menu. In order for OG to be able to add a node as post in a group, it needs to find the gids[] GET parameter.

An ugly, but really efficient solution is to use the custom_url_rewrite_outbound() function to alter node/add/* links and enforce the gids[] parameter if the user is currently is in a group context.

Tip of the day, get a views row primary key value

This is often a problem when you pragmatically manipulate views row's : finding the primary key value of the current row being explored.
Let's have an example : A node base table based view.

<?php
 
// Load the view, and stick to default display for sample purpose.
 
$view = views_get_view('my_node_view');
 
$view->set_display(NULL);
 
// Then, execute it.
 
$view->pre_execute();
 
// You will set some other options here, like limit, pager, offset.
 
$view->execute();
?>

What then?

A simple (and ugly) time-saving line of code

Update on Mai, 28 : Added a new code snippet.

Sometimes, when you are trying to debug PHP code, you'll get an ugly WSOD, without any error messages in PHP error log.

When this happens, it's always really difficult to find out why. The lack of message tells you that you you didn't wrote something that bad, but bad enougth for the framework you are working with to partially catch your error without really crashing.

So, how can you resolve this?

Personal reminder about Drupal's settings.php

Because I often duplicate a production site on a local machine in order to do some debugging/bugfixes, I like everything to be ready the sooner as possible without having to do a lot of clicks.

Here is how I override values in my custom settings.php file instead of loosing time clicking into the administration pages or even doing configuration alteration with Drush.

Here is a common production site settings.php $conf variable alteration :

WTF is that!? - PHP will drive me crazy; Drupal FAPI too!

What do you think this code will output:

<?php
  $foo
= '7rray';
  echo (int)
$foo;
?>

If you answered NULL, 0 or '7rray', you're absolutely wrong. The magic with PHP is whatever you use (int) or intval() you get absolutely weird results, because it'll try to parse your string as an integer whatever is in it.

Pages