Blog

Comment éviter des field_collection vides

jcisio
12/02/2015
Quand on utilise field_collection, dans certain cas, le dernier item d'un champ est vide (une entité field_collection est créée sans aucune donnée utile). Pour contourner ce problème, le module fournit un hook hook_field_collection_is_empty_alter() pour décider quand est-ce un item est vide.

Quand on utilise field_collection, dans certain cas, le dernier item d'un champ est vide (une entité field_collection est créée sans aucune donnée utile). Pour contourner ce problème, le module fournit un hook hook_field_collection_is_empty_alter() pour décider quand est-ce un item est vide.

Exemple :

 

/**
 * Implements hook_field_collection_is_empty_alter().
 */

function magnard_fiche_livre_field_collection_is_empty_alter(&$is_empty, FieldCollectionItemEntity $item) { if ($item->field_name == 'field_produit_auteurs' && empty($item->field_produit_auteur[LANGUAGE_NONE])) { $is_empty = TRUE; } }

 

 

Ce morceau de code évite de la création d'une field_collection field_produit_auteurs si elle n'a pas son champ field_produit_auteur (sans "s") rempli.

Nouveau logo Scald

piotre
11/09/2014
Un nouveau logo scald pour de nouvelles aventures, sous D8 entre autres.
nouveau logo scald

Un nouveau logo scald pour de nouvelles aventures, sous D8 entre autres.

Merci à Alex A., Aurélia Z !

Gérer proprement vos modules

jcisio
29/09/2013
Dans cet article, je présente une approche pour ranger les fonctions dans votre module en utilisant la programmation orientée objet (OOP). Cela n'a par contre rien à voir avec Drupal 8.

Dans cet article, je présente une approche pour ranger les fonctions dans votre module en utilisant la programmation orientée objet (OOP). Cela n'a par contre rien à voir avec Drupal 8.

Traditionnellement, dans un module, toutes les fonctions sont préfixées par le nom du module et présente dans le fichier ton_module.module. Ça fait un gros fichier ! Même si Dries a dit qu'il ne voyait pas de problème avec un fichier .module de 100 Ko, aujourd'hui on a la tendance de faire des petits fichiers ton_module.*.inc, chacun a une responsabilité unique. Pour utiliser une fonction dans ces fichier :

  • soit on met une require_once au début du fichier .module ;
  • soit on chaque fois on a besoin d'une fonction, on commence par module_load_include() ;
  • soit on charge le fichier automatiquement (le cas avec hook_menu(), hook_theme() etc.).

Si vous travaillez avec Drupal depuis un peu de temps, vous devriez connaître tout cela. Mais si on veut aller plus loin, on peut mettre les fonctions dans des classes sous forme des méthodes statiques. Les avantages sont :

  • autoload de toutes les classes ;
  • et l'utilisation propre de l'espace de nom.

Pour l'autoload, vous pouvez mettre classiquement les fichiers dans le .info dans les lignes files[] = ..., ou bien vous écrivez votre propre class loader si vous êtes trop paresseux pour modifier les fichiers .info, sinon vous pouvez en récupérer un avec Google.

Pour l'espace de nom, ce n'est pas forcément la vraie nouvelle fonctionalité du PHP 5.3 (car il arrive que vous utilisez encore la version 5.2), mais le nom de classe. Vous n'avez pas besoin de préfixer les méthodes dans vos classes. Votre intélligent IDE (vim l'est aussi) pourra avoir des suggestions plus pertinentes. Exemple : vous travaillez sur un projet "vous", avec 20 modules "vous_module1", "vous_module2"..., dans chaque module vous avez des fonctions vous_module1_fonction1, vous_module1_fonction2... et vous tapez "vous" votre IDE va suggérer 10 fonctions qui sont tous dans le premier module vous_module1. Pas très pertinent. Avec les classes séparées, votre IDE présente d'abord des classes, puis les méthodes quand vous complétez le nom de classe. Plus pratique !

Les méthodes enveloppées dans des classes ne pollue pas le scope global, elles aident aussi pour le refactoring ou le protypage ou le test. Mais l'article est trop long, donc j'arrête. Quand même, avant, pour l'info, ce paradigme est utilisé récemment dans Drupal 7 avec la classe FieldInfo (par yched et al.) et c'est très bien. Il n'y a alors pas de raison pour ne pas l'utiliser.

PS : un article sans code, mais allo quoi.

ton_module.inc

function ton_module_faire_1() {} function ton_module_faire_2() {}

sera :

TonModule.php

class TonModule { public static function faire_1() {} public static function faire_2() {} }

Un nouveau site Open Web Solutions

slybud
15/06/2013
"Les cordonniers sont les plus mal chaussés". Partant de ce vieil adage, nous nous devions de ne pas faillir à cette règle et de continuer avec notre site en Drupal 2.0 encore pendant de longues années.
Capture ecran site ows.fr

"Les cordonniers sont les plus mal chaussés". Partant de ce vieil adage, nous nous devions de ne pas faillir à cette règle et de continuer avec notre site en Drupal 2.0 encore pendant de longues années.

Cependant, devant les cris d'horreur poussés pas nos collègues graphistes (et néanmoins amis), ayant peur de commencer à figurer dans un quelconque top 10 des sites les plus ringards à la Topito, nous avons retroussé nos manches (enfin nous avons mis du temps pour bien retrousser) et réalisé la merveille que vous avez sous les yeux en Drupal 7. Bravo à toute l'équipe, c'est à dire nous :)

Alors, pour faire bref, quoi de neuf :

  • Un nouveau design qui mériterait un award !
  • Une navigation simplifiée
  • Encore et toujours plus de drupal
  • Des billets de blog (plus à jour que les anciens on l'espère)
  • Un design full responsive !

Comme on dit à Portland : "Enjoy" !

DrupalCamp : Paris 2013

DeFr
14/06/2013
Nous avons l'habitude de sponsoriser de nombreux événements Drupal (quelques exemples), mais lorsqu'ils se déroulent à Paris, nous nous devons de faire les choses en grand. Par conséquent, Open Web Solutions a décidé de s'investir sérieusement dans le Drupal Camp Paris, édition 2013.
logo drupal camp Paris

Nous avons l'habitude de sponsoriser de nombreux événements Drupal (quelques exemples), mais lorsqu'ils se déroulent à Paris, nous nous devons de faire les choses en grand. Par conséquent, Open Web Solutions a décidé de s'investir sérieusement dans le Drupal Camp Paris, édition 2013. Très concrètement, vous pourrez

  • Venir nous rencontrer sur notre stand tout au long des 3 jours de la conférence
  • Assister à l'une de nos conférences ou au sprint Scald
    • Le vendredi, de 17h à 17h45, Pierre T vous présentera quelques outils indispensables pour gérer votre projet sous Drupal
    • Le samedi, de 15h à 15h45, Sylvain vous expliquera pourquoi vous voulez utiliser Scald sur l'ensemble de vos projets pour gérer vos media, même si vous ne le savez pas encore. Tous les détails sur le site du DrupalCamp
    • Le samedi, de 16h20 à 17h05, Didier vous parlera de la mise en place de tests fonctionnels automatisés sur vos projets, via les technologies Behat et Mink. Pour plus de détails, c'est par là.
    • Le dimanche, de 10h à 12h, Pierre C vous montrera par la pratique comment construire un site media en 45 minutes. Les lecteurs les plus attentifs n'auront pas manqués de noter les 75 minutes d'écart entre la durée de la construction et la durée de la session, le but étant de multiplier les interactions avec l'audience pour aboutir à un résultat unique.
    • Le dimanche, à partir de 10h, Franck (c'est moi-même…) animera un sprint sur le module Scald
  • Repartir avec l'une des nos nombreuses surprises

A très vite au DrupalCamp !

Modules Drupal 7 en vrac

piotre
21/10/2011
Voici quelques modules qui m'ont été bien utiles pour nos derniers projets Drupal

Voici quelques modules qui m'ont été bien utiles pour nos derniers projets Drupal :

Développement drupal sous vim : liste des fonctions drupal 6

piotre
19/03/2009
Comment ajouter l'autocomplétion des fonctions de Drupal 6 à vim

Après quelques projets drupal 6 développés sous l'éditeur vim, je me suis aperçu qu'une autocompletion incluant les fonctions core drupal 6 serait bien utile.

J'ai trouvé le dictionnaire des fonctions core drupal 5 pour vim ici : http://www.vim.org/scripts/script.php?script_id=1675, mais pas le dictionnaire des fonctions core drupal 6.

J'ai donc générer à l'aide d'un script la liste de l'ensemble des fonctions core drupal 6, tout en respectant la syntaxe des dictionnaires vim : drupal_6_core_functions.dict

Ensuite j'ai :

Et hop le tour est joué !