Planète

Par juliendubreuil
julien dubreuil
Drupal since 2009

Drupalcon London 2011, retour sur l’événement.

Ca y est l’événement Drupal européen de l’année est passé et il faudra maintenant attendre un an pour retrouver autant de Drupaleur réunis en un seul et même endroit en Europe.
Cette conférence à Londres m’a permis de découvrir cette charmante capitale et au passage, on a eu le droit à une visite en règle. Nous avons eu le plaisir de goûter à la pluie londonienne, enfin à ce stade là, ce n’était plus de la pluie mais des trombes d’eau qui déferlaient du ciel… (je comprends pourquoi les parapluies ne sont pas chers dans les boutiques pour touristes :)

Alors cette conférence ?

Ce qu’il y a de bien pendant une Drupalcon c’est qu’il y en a pour tout le monde, les développeurs, les thémeurs, les sites builders et même pour les chefs de projet, ainsi que pour tous les niveaux. Avec plus de 25 sessions par jour, sans compter les BoFs, difficile de ne pas trouver son bonheur.
Néanmoins j’ai trouvé que certaines sessions n’étaient pas assez avancées, enfin pas autant que je l’esperais. Mon impression est aussi celle de quelques autres développeurs qui comme moi, sont restés sur leur faim pour quelques unes d’entre elles. A côté de cela, les sessions «core» (qui parlent du corps de Drupal, souvent de Drupal8 et où l’on trouve toutes les rock-stars) étaient intéressantes.

Je ne sais pas si vous avez suivi la keynote d’ouverture, mais celle-ci ne m’a pas emballée. Le message que j’ai capté est que maintenant, Drupal est un produit qu’il faut vendre et qu’il va falloir faire du marketing pour le rendre encore plus populaire. C’est bien me direz-vous, que ce soit pour Drupal ou pour son écosystème, mais le problème est qu’actuellement, on (les entreprises qui font du Drupal) n’arrive déjà pas à répondre à la demande et que l’on (toujours les drupal factories) n’arrive pas à embaucher des personnes qualifiées alors pourquoi faire du marketing au risque de refuser des projets. Quelque chose m’échappe et ça me chagrine. Lors de cette keynote on a aussi eu le droit à plein de slides avec des chiffres comme s’il y avait quelque chose à justifier… D’ailleurs je n’ai pas compris la slide sur le fait qu’il a fallut 12 mois pour avoir 100.000 sites en Drupal 6 alors qu’il n’en a fallut que 6 pour atteindre le même chiffre sur Drupal 7. Sur quoi sont basés ces stats ? Le nombre de sites en ligne ? Le nombre de téléchargement sur drupal.org ? Bref, c’était pas la keynote la plus emballante de l’histoire.

Bon n’allez pas croire, après la lecture de ce précédent paragraphe que ça n’en valait pas le coup, c’était super chouette et il y avait quelques sessions qui valaient le déplacement:

N’ayant pu assister qu’à une seule session par créneau horaire (non je ne fais pas encore dans la projection astrale), il faut que je regarde les sessions que j’ai loupées. N’hésitez donc pas à compléter la liste ci-dessus.

Mention spéciale à l’équipe organisatrice qui, dès le lendemain des sessions, mettait en ligne les vidéos des conférences. Bravo pour l’efficacité!
Mais comme tout Drupaleur qui va à une Drupalcon, on n’y va pas uniquement pour les sessions, on y va aussi pour rencontrer des personnes de qualité qui ont des étoiles qui brillent dans les yeux quand on discute de technos… Bref, ça a été l’occasion de faire de chouettes rencontres et de revoir des gens que l’on n’avait pas vu depuis un moment.


Nous étions quand plus de 1700 participants, dont 80 Français. Pas mal, non ? On s’aperçoit que l’on était bien à une conférence info lorsqu’on voit le stats de bande passante utilisée, de mails échangés et de messages twitter envoyés. Affolants ces geeks… Avec un si grand nombre de participants, je comprends qu’il était difficile de faire la Drupalcon dans Londres. Heureusement que les transports Londoniens sont très efficaces, cela nous a permis de pas mettre trop de temps pour rentrer de Croydon au centre de Londres. Par contre c’est dommage qu’il y ait eu autant de distance entre les sessions, les bofs et les conférences core, mais bon je pense qu’ils n’ont pas pu faire autrement avec autant de participants.

La Drupalcon est un excellent booster, je rentre chez moi avec un bon souvenir, plein de motivation et l’intention de tester de nouvelles choses ! Merci à Ideia de m’avoir donné la chance d’aller à cette Drupalcon et merci aux organisateurs pour avoir organisé cette conférence annuelle.

Et vous qui étiez là-bas ou à distance, qu’avez vous pensé de cette conférence ?

La prochaine c’est où et c’est pour quand ?

Pendant que j’y suis et pour une fois qu’il ne s’agit pas d’un post technique, j’en profite pour rappeler que la prochaine Drupalcon Européenne aura lieu à Munich du 20 au 23 août 2012 et promet aux vues des organisateurs d’être encore meilleure que celle-ci. Bon courage à l’équipe organisatrice!

Crédits Photos – macetaria, wwphotos, pixelmord, batigolix

Cet article Drupalcon London 2011, retour sur l’événement. est apparu en premier sur Julien Dubreuil.

Par juliendubreuil
julien dubreuil
Drupal since 2009

Drupalcon London 2011, retour sur l’événement.

Drupalcon London 2011, retour sur l'événement.

Ca y est l’événement Drupal européen de l’année est passé et il faudra maintenant attendre un an pour retrouver autant de Drupaleur réunis en un seul et même endroit en Europe.
Cette conférence à Londres m’a permis de découvrir cette charmante capitale et au passage, on a eu le droit à une visite en règle. Nous avons eu le plaisir de goûter à la pluie londonienne, enfin à ce stade là, ce n’était plus de la pluie mais des trombes d’eau qui déferlaient du ciel… (je comprends pourquoi les parapluies ne sont pas chers dans les boutiques pour touristes :)

Alors cette conférence ?

Ce qu’il y a de bien pendant une Drupalcon c’est qu’il y en a pour tout le monde, les développeurs, les thémeurs, les sites builders et même pour les chefs de projet, ainsi que pour tous les niveaux. Avec plus de 25 sessions par jour, sans compter les BoFs, difficile de ne pas trouver son bonheur.
Néanmoins j’ai trouvé que certaines sessions n’étaient pas assez avancées, enfin pas autant que je l’esperais. Mon impression est aussi celle de quelques autres développeurs qui comme moi, sont restés sur leur faim pour quelques unes d’entre elles. A côté de cela, les sessions «core» (qui parlent du corps de Drupal, souvent de Drupal8 et où l’on trouve toutes les rock-stars) étaient intéressantes.

Je ne sais pas si vous avez suivi la keynote d’ouverture, mais celle-ci ne m’a pas emballée. Le message que j’ai capté est que maintenant, Drupal est un produit qu’il faut vendre et qu’il va falloir faire du marketing pour le rendre encore plus populaire. C’est bien me direz-vous, que ce soit pour Drupal ou pour son écosystème, mais le problème est qu’actuellement, on (les entreprises qui font du Drupal) n’arrive déjà pas à répondre à la demande et que l’on (toujours les drupal factories) n’arrive pas à embaucher des personnes qualifiées alors pourquoi faire du marketing au risque de refuser des projets. Quelque chose m’échappe et ça me chagrine. Lors de cette keynote on a aussi eu le droit à plein de slides avec des chiffres comme s’il y avait quelque chose à justifier… D’ailleurs je n’ai pas compris la slide sur le fait qu’il a fallut 12 mois pour avoir 100.000 sites en Drupal 6 alors qu’il n’en a fallut que 6 pour atteindre le même chiffre sur Drupal 7. Sur quoi sont basés ces stats ? Le nombre de sites en ligne ? Le nombre de téléchargement sur drupal.org ? Bref, c’était pas la keynote la plus emballante de l’histoire.

Bon n’allez pas croire, après la lecture de ce précédent paragraphe que ça n’en valait pas le coup, c’était super chouette et il y avait quelques sessions qui valaient le déplacement:

N’ayant pu assister qu’à une seule session par créneau horaire (non je ne fais pas encore dans la projection astrale), il faut que je regarde les sessions que j’ai loupées. N’hésitez donc pas à compléter la liste ci-dessus.

Mention spéciale à l’équipe organisatrice qui, dès le lendemain des sessions, mettait en ligne les vidéos des conférences. Bravo pour l’efficacité!
Mais comme tout Drupaleur qui va à une Drupalcon, on n’y va pas uniquement pour les sessions, on y va aussi pour rencontrer des personnes de qualité qui ont des étoiles qui brillent dans les yeux quand on discute de technos… Bref, ça a été l’occasion de faire de chouettes rencontres et de revoir des gens que l’on n’avait pas vu depuis un moment.


Nous étions quand plus de 1700 participants, dont 80 Français. Pas mal, non ? On s’aperçoit que l’on était bien à une conférence info lorsqu’on voit le stats de bande passante utilisée, de mails échangés et de messages twitter envoyés. Affolants ces geeks… Avec un si grand nombre de participants, je comprends qu’il était difficile de faire la Drupalcon dans Londres. Heureusement que les transports Londoniens sont très efficaces, cela nous a permis de pas mettre trop de temps pour rentrer de Croydon au centre de Londres. Par contre c’est dommage qu’il y ait eu autant de distance entre les sessions, les bofs et les conférences core, mais bon je pense qu’ils n’ont pas pu faire autrement avec autant de participants.

La Drupalcon est un excellent booster, je rentre chez moi avec un bon souvenir, plein de motivation et l’intention de tester de nouvelles choses ! Merci à Ideia de m’avoir donné la chance d’aller à cette Drupalcon et merci aux organisateurs pour avoir organisé cette conférence annuelle.

Et vous qui étiez là-bas ou à distance, qu’avez vous pensé de cette conférence ?

La prochaine c’est où et c’est pour quand ?

Pendant que j’y suis et pour une fois qu’il ne s’agit pas d’un post technique, j’en profite pour rappeler que la prochaine Drupalcon Européenne aura lieu à Munich du 20 au 23 août 2012 et promet aux vues des organisateurs d’être encore meilleure que celle-ci. Bon courage à l’équipe organisatrice!

Crédits Photos – macetaria, wwphotos, pixelmord, batigolix

Par juliendubreuil
julien dubreuil
Drupal since 2009

Comment créer et mettre à jour un node par la programmation

Comment créer et mettre à jour un node par la programmation

Bien que cela puisse paraître compliqué de l’extérieur, créer et modifier des contenus Drupal sans l’aide de l’interface d’administration est une chose relativement simple lorsque l’on s’est déjà confronté au problème. Néanmoins il faut être prudent avec ce que vous voulez sauvegarder, puisqu’en outrepassant le système naturel de création de contenus via l’interface d’admin vous avez la possibilité de faire tout et n’importe quoi et d’empêcher les autres modules de fonctionner correctement.

Voici donc un poste très simple sur la création de nodes via la programmation.

1.1 Initialisation de l’objet node


1
2
3
4
5
6
7
8
9
10
11
12
<span class='line'><span class="nv">$node</span> <span class="o">=</span> <span class="k">new</span> <span class="k">stdClass</span><span class="p">();</span> <span class="c1">// Création d’un nouvel objet</span>
</span><span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">type</span> <span class="o">=</span> <span class="s2">&quot;article&quot;</span><span class="p">;</span> <span class="c1">// Spécification du type de contenu à créer</span>
</span><span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">title</span> <span class="o">=</span> <span class="s2">&quot;Le titre de votre nouveau node&quot;</span><span class="p">;</span>
</span><span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">language</span> <span class="o">=</span> <span class="nx">LANGUAGE_NONE</span><span class="p">;</span> <span class="c1">// Définition de la langue du contenu.</span>
</span><span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">path</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">&#39;alias&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;article/chuck-norris-is-a-jedi&#39;</span><span class="p">);</span> <span class="c1">// Ajout de l’url du contenu</span>
</span><span class='line'><span class="nx">node_object_prepare</span><span class="p">(</span><span class="nv">$node</span><span class="p">);</span> <span class="c1">// Création des valeurs par défaut.</span>
</span><span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">uid</span> <span class="o">=</span> <span class="mi">14</span><span class="p">;</span> <span class="c1">// Ajout de l’auteur du node si vous souhaitez qu&#39;il soit différent de l&#39;utilisateur en cours</span>
</span><span class='line'>
</span><span class='line'><span class="c1">// Do your stuff</span>
</span><span class='line'>
</span><span class='line'><span class="nv">$node</span> <span class="o">=</span> <span class="nx">node_submit</span><span class="p">(</span><span class="nv">$node</span><span class="p">);</span> <span class="c1">// Prépare le node avant l’enregistrement (date + auteur) si les champs sont vides.</span>
</span><span class='line'><span class="nx">node_save</span><span class="p">(</span><span class="nv">$node</span><span class="p">);</span> <span class="c1">// Enregistrement du node.</span>
</span>

Notes :
* Définition de la langue : Si le module Locale n’est pas activé sur votre site, utilisez la constante LANGUAGE_NONE afin de ne pas spécifier de langue en particulier à votre contenu, sinon insérez la langue désirée.

* Node_object_prepare() : remplit par défaut certaines valeurs telles que le statut, la promotion en page d’accueil, les commentaires ou encore le sticky.

1.2 Ajout du champ body

Au passage, depuis cette dernière version le champ body n’est plus obligatoire et peut être supprimé/caché depuis l’interface de gestion des champs.


1
2
3
4
<span class='line'><span class="nv">$body_text</span> <span class="o">=</span> <span class="s1">&#39;Chuck Norris donne fréquemment du sang à la Croix-Rouge. Mais jamais le sien.&#39;</span><span class="p">;</span>
</span><span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">[</span><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">language</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;value&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$body_text</span><span class="p">;</span> <span class="c1">// Votre texte</span>
</span><span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">[</span><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">language</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;summary&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nx">text_summary</span><span class="p">(</span><span class="nv">$body_text</span><span class="p">);</span> <span class="c1">// Résumé de votre champ body si vous en voulez un.</span>
</span><span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">body</span><span class="p">[</span><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">language</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;format&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;filtered_html&#39;</span><span class="p">;</span> <span class="c1">// Format d’entrée du champ.</span>
</span>

Notez ici la réutilisation du champ $node->language défini à l’étape précédente, cette variable vous servira souvent pour récupérer les informations de vos champs.

1.3 Remplissez vos champs

Rien de compliqué puisque la manip’ est la même que pour le champ body, il suffit d’ajouter la valeur désirée dans le champ voulu.


1
<span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">field_text_list</span><span class="p">[</span><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">language</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;value&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;Pomme&#39;</span><span class="p">;</span>
</span>

Par contre certain champ ont besoin de plus d’informations comme le champ texte à qui il faut renseigner le format d’entrée.


1
2
<span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">field_custom_name</span><span class="p">[</span><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">language</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;value&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;Texte dans mon champ custom&#39;</span><span class="p">;</span>
</span><span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">field_custom_name</span><span class="p">[</span><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">language</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;format&#39;</span><span class="p">]</span>  <span class="o">=</span> <span class="s1">&#39;text_format&#39;</span><span class="p">;</span> <span class="c1">// Si votre champ à un format d’entrée n’oubliez pas  de le renseigner.</span>
</span>

1.4 Renseigner un champ nodereference

Si vous utilisez le module nodereference pour lier vos contenus, il vous suffit simplement d’indiquer le nid du node dans le champ pour que cela fonctionne.


1
<span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">field_nodereference</span><span class="p">[</span><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">language</span><span class="p">][][</span><span class="s1">&#39;nid&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">12</span><span class="p">;</span>
</span>

1.5 Insérer un terme à votre node

Si votre terme existe déjà, ajoutez simplement l’Id de celui-ci à votre champ.


1
<span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">field_tags</span><span class="p">[</span><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">language</span><span class="p">][][</span><span class="s1">&#39;tid&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">8</span><span class="p">;</span> <span class="c1">// field_tags, correspond au nom du champ et 8 à son id</span>
</span>



Sinon, si vous voulez en créer un nouveau procédez comme suit :


1
2
3
4
5
6
<span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">field_tags</span><span class="p">[</span><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">language</span><span class="p">][]</span> <span class="o">=</span> <span class="k">array</span> <span class="p">(</span>
</span><span class='line'>  <span class="s1">&#39;vid&#39;</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span>  <span class="c1">// Id du vocabulaire</span>
</span><span class='line'>  <span class="s1">&#39;tid&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;autocreate&#39;</span><span class="p">,</span>
</span><span class='line'>  <span class="s1">&#39;name&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Mon term&#39;</span><span class="p">,</span> <span class="c1">// Votre term</span>
</span><span class='line'>  <span class="s1">&#39;vocabulary_machine_name&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;tags&#39;</span>
</span><span class='line'><span class="p">);</span>
</span>

1.6 Ajouter un fichier

Le nouveau système de fichier mérite un post à lui tout seul pour bien le comprendre et s’en servir, du coup je vous livre toute faite la solution pour ajouter un fichier déjà présent sur votre site à votre contenu.


1
2
3
4
5
6
7
8
9
10
<span class='line'><span class="nv">$filepath</span> <span class="o">=</span> <span class="nx">drupal_realpath</span><span class="p">(</span><span class="s1">&#39;misc/druplicon.png&#39;</span><span class="p">);</span>  <span class="c1">// Création du chemin du fichier</span>
</span><span class='line'><span class="c1">// Création de l’objet contenant les propriétés du fichier.</span>
</span><span class='line'><span class="nv">$file</span> <span class="o">=</span> <span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="k">array</span><span class="p">(</span>
</span><span class='line'>  <span class="s1">&#39;uid&#39;</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span>
</span><span class='line'>  <span class="s1">&#39;uri&#39;</span> <span class="o">=&gt;</span> <span class="nv">$filepath</span><span class="p">,</span>
</span><span class='line'>  <span class="s1">&#39;filemime&#39;</span> <span class="o">=&gt;</span> <span class="nx">file_get_mimetype</span><span class="p">(</span><span class="nv">$filepath</span><span class="p">),</span>
</span><span class='line'>  <span class="s1">&#39;status&#39;</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span>
</span><span class='line'><span class="p">);</span>
</span><span class='line'><span class="nv">$file</span> <span class="o">=</span> <span class="nx">file_copy</span><span class="p">(</span><span class="nv">$file</span><span class="p">,</span> <span class="s1">&#39;public://&#39;</span><span class="p">);</span> <span class="c1">// On déplace le fichier à la racine du système de fichiers</span>
</span><span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">field_image</span><span class="p">[</span><span class="nx">LANGUAGE_NONE</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="k">array</span><span class="p">)</span><span class="nv">$file</span><span class="p">;</span> <span class="c1">// On assigne le fichier au champ</span>
</span>

2 Mise à jour du contenu


1
2
3
4
<span class='line'><span class="nv">$nid</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
</span><span class='line'><span class="nv">$node</span> <span class="o">=</span> <span class="nx">node_load</span><span class="p">(</span><span class="nv">$nid</span><span class="p">);</span>
</span><span class='line'><span class="nv">$node</span><span class="o">-&gt;</span><span class="na">title</span> <span class="o">=</span> <span class="s1">&#39;Mise à jour du titre&#39;</span><span class="p">;</span>
</span><span class='line'><span class="nx">node_save</span><span class="p">(</span><span class="nv">$node</span><span class="p">);</span>
</span>

On charge le node avec un id, on met à jour le champ qui nous intéresse et on le sauvegarde. Si vous avez plusieurs nodes à mettre à jour, utilisez la fonction node_load_multiple() qui vous évitera de faire plusieurs requêtes sur la base de données.

Voilà, j’espère que cet article et les quelques liens ci-dessous vous permettront de vous aider. Il y a pas mal de modules qui font de la création de nodes comme ça. En trouver un et le décortiquer reste la meilleure solution pour apprendre. Si toutefois vous avez plus d’informations, je suis preneur :)

Voici les quelques sources qui m’ont aidées à comprendre les changements de cette nouvelle version:

Crédits Photo – kikkerperspectief

Par Artusamak
Julien Dubois

Info utile #1 – Les fonctions de validation

Voilà un billet d’un style un peu différent, plus court qu’à l’habitude, à propos d’une information bête au sujet des fonctions de validation qui m’a fait perdre une heure hier et qui aurait pu être évitée.

Si vous vous retrouvez dans la situation où vous ajoutez une fonction de validation sur un formulaire mais que cette fonction n’est pas exécutée (et que bien sûr vous avez vérifié par trois fois la syntaxe de votre code), prenez le temps de regarder le détail du formulaire.

En fait il faut savoir que lorsque vous cliquez sur un élément de formulaire de type bouton, ses fonctions de validation et d’exécution sont exécutée et seulement celles de ce bouton. Ce qui au final est logique car cela vous permet d’avoir un comportement différent par bouton sans avoir de risque d’interférences entre les fonctions de validation / exécution de votre bouton et celles du formulaire global. Le détail des mécanismes de ces fonctions à exécuter se trouve dans la fonction form_execute_handlers().

A noter également qu’il existe un attribut du Form API qui a été introduit dans Drupal 7 qui permet de limiter les valeurs à contrôler lors de la soumission du formulaire, il s’agit de l’attribut #limit_validation_errors. Cet attribut prends un tableau comme valeur avec la liste des entrées du $form_state['values'] qui doivent être validées. Pratique pour contourner un champ obligatoire lorsque l’on a un bouton qui supprime un noeud par exemple.

Par badgones

Putty, SSH, OpenSSH, Windows et Linux

Voici un super tuto pour créer ses clés SSH, et pouvoir les utiliser à la fois sur Linux et Windows.

Using Putty on Windows to login Linux securely via OpenSSH

  • Submitted by: Man-wai CHANG
  • Update by: Man-wai CHANG
  • Date Submitted: 31 May 2006
  • Document Version: 1.0
  • Last Updated: 02/02/2008 18:46:43

This is a guide about using Putty on Windows with OpenSSH on Linux. You would learn about how to:

en lire plus

Par juliendubreuil
julien dubreuil
Drupal since 2009

Ajouter des classes CSS à la balise body facilement

Ajouter des classes CSS à la balise body facilement

Je ne sais pas si vous avez déjà voulu ajouter une classe sur la balise body en Drupal 6 mais ce n’était pas le truc le plus évident à faire. La meilleure solution se résumait à modifier le fichier template.php, à implémenter le hook template_preprocess() et à ajouter ses valeurs au tableau $vars[‘body_classes’], bref, par rapport au besoin c’était un poil compliqué.

Drupal 7 permet maintenant de faire ça plus facilement et directement dans un .module. Pour cela il faut utiliser le hook : hook_preprocess_HOOK() qui permet aux modules d’intervenir sur sur n’importe quel preprocess de thème.


1
2
3
4
5
6
7
<span class='line'><span class="sd">/**</span>
</span><span class='line'><span class="sd">* Implements hook_preprocess_HOOK().</span>
</span><span class='line'><span class="sd">*/</span>
</span><span class='line'><span class="k">function</span> <span class="nf">sandbox_preprocess_html</span><span class="p">(</span><span class="o">&amp;</span><span class="nv">$vars</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'> <span class="c1">// Ajout d&#39;une nouvelle classe au body</span>
</span><span class='line'> <span class="nv">$vars</span><span class="p">[</span><span class="s1">&#39;classes_array&#39;</span><span class="p">][]</span> <span class="o">=</span> <span class="s1">&#39;ma-nouvelle-classe&#39;</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span>

Puisque la construction html de la page et donc la génération des classes pour le body est faite lors du template_preprocess_html il nous faut implémenter le hook_preprocess_html. Dans l’exemple ci-dessus j’ai juste ajouté une nouvelle classe à mon body mais vous pouvez faire tout ce que vous voulez lors de cette étape vous avez entre les mains toutes les infos permettant la construction de la structure html de la page.

Alors, la vie n’est pas plus simple avec Drupal 7 ? :)

Crédits Photo – exey

Par badgones

Poids module Drupal : Ordonner les modules Drupal pour choisir l'ordre de chargement

Afin d'ordonner les modules Drupal pour choisir l'ordre de chargement de ceux-ci, il suffit d'implémenter le hook install du module et de changer le poids associé.

Pour être plus clair, il faut créer un fichier nom_module.install ayant pour contenu ceci :

function NOM_MODULE_install() {
  db_query("UPDATE {system} SET weight = '-1' WHERE name = 'NOM_MODULE' AND type = 'module'");
}

Par bisonbleu

Module | Unique Field

Récemment, j'ai fait face au casse-tête suivant : comment prévenir la création de doublons pour un type de contenu (tdc) spécifique. Par exemple, comnent empêcher un utilisateur de remplir le même formulaire deux fois, de créer une 2e inscription pour un même événement. La question vaut son pesant d'or surtout s'il s'agit d'un événement payant. Sans compter que la chasse aux doublons pollueurs n'a rien de bien divertissant.

On le sait, Drupal permet que deux noeuds aient exactement le même nom ou titre. On fait comment alors?

Share page with AddThis
Par bisonbleu

Module | Unique Field

Récemment, j'ai fait face au casse-tête suivant : comment prévenir la création de doublons pour un type de contenu (tdc) spécifique. Par exemple, comnent empêcher un utilisateur de remplir le même formulaire deux fois, de créer une 2e inscription pour un même événement. La question vaut son pesant d'or surtout s'il s'agit d'un événement payant. Sans compter que la chasse aux doublons pollueurs n'a rien de bien divertissant.

On le sait, Drupal permet que deux noeuds aient exactement le même nom ou titre. On fait comment alors?

Share page with AddThis
Par bisonbleu

Module | Unique Field

Récemment, j'ai fait face au casse-tête suivant : comment prévenir la création de doublons pour un type de contenu (tdc) spécifique. Par exemple, comnent empêcher un utilisateur de remplir le même formulaire deux fois, de créer une 2e inscription pour un même événement. La question vaut son pesant d'or surtout s'il s'agit d'un événement payant. Sans compter que la chasse aux doublons pollueurs n'a rien de bien divertissant.

On le sait, Drupal permet que deux noeuds aient exactement le même nom ou titre. On fait comment alors?

Par badgones

Drupal module Book et profondeur du sommaire

Quand on écrit un "Livre" via le module book de Drupal, on a une génération automatique du menu (sommaire), ou plûtot des enfants d'une page.
Or, on ne peut pas modifier la profondeur de cet affichage, qui affiche donc seulement les enfants directs de la page en cours, mais pas ses "petits-fils" (ou alors je suis preneur de la solution).

Voilà donc la solution pour modifier la profondeur du sommaire :
1- télécharger le module booktree (dispo en attachement aussi)
2- l'installer et l'activer
3- dans le fichier template.php de votre thème, ajouter le hook template_preprocess_book_navigation(&$variables), avec comme contenu :

function THEME_preprocess_book_navigation(&$variables) {
  $book_link = $variables['book_link'];

en lire plus

Par badgones

Drupal et groupe de champs multiples CCK, explication et correction d'erreur Wysiwyg - TinyMCE

Pour créer un groupe de champs multiple sous Drupal 6, la fonction n'est pas disponible de base avec le module CCK 2.
En fait, celle-ci a seulement été ajoutée dans CCK 3, qui est en béta, et non stable à l'heure actuelle. Mais on peut simplement l'ajouter dans CCK 2, en téléchargeant le module CCK3, en le décompressant, et en ajoutant le contenu du répertoire cck/modules/content_multigroup à CCK2, au même endroit.
Il faut en plus copier le répertoire cck/js du module CCK3 dans le répertoire du module CCK2, et ça fonctionne parfaitement.

Maintenant, vous avez un nouveau type de champs CCK "Multigroup", à utiliser comme un "Group", avec le même principe d'arborescence.

Une erreur est cependant visible : si vous utilisez un champ de type Wysiwyg dans le multigroup, le contenu de ce champ est supprimé lors du click sur "Add more values", ce qui est vraiment pénible. 
Pour ça, 1 solution qui m'a prit du temps :

en lire plus

Pages