Planète JulienD

Par juliendubreuil
julien dubreuil
Drupal since 2009

Traiter de grandes quantités de données avec la batch api de Drupal et Drush

Traiter de grandes quantités de données avec la batch api de Drupal et Drush

Lorsque l’on est confronté aux joies de la production et de la maintenance de sites Internet il arrive souvent que l’on doive effectuer certaines manipulations sur des données existantes, comme l’ajout, la modification ou la suppression d’informations. Ces opérations sont en générale longues et coûteuses en mémoire car les quantités de données à traiter sont importantes et c’est pour cela que l’on utilise des batchs qui permettent de relâcher les processus une fois terminés évitant ainsi la saturation des ressources disponibles.

Quand la quantité de données à manipuler semble faible, le traitement avec un batch n’est pas nécessaire car il prendrait bien plus de temps qu’avec un simple script php. Même s’il est difficile de quantifier quand utiliser un batch ou un simple script, car tout dépend du travail à effectuer, des machines et du contexte, sachez que si vous devez réaliser un traitement lourd, l’utilisation d’un batch vous permettra de ne pas avoir peur que PHP s’arrête, simulant un malaise par manque de mémoire ou de temps.

La réalisation d’un batch avec Drupal c’est chose facile, puisqu’il existe une API pour cela, la Batch Api – http://drupal.org/node/180528 qui permet de créer de simplement des scripts de traitement.Il y a plein d’exemples sur le sujet, regardez le module example – http://drupal.org/project/examples – qui vous explique de A à Z comment coder et exécuter depuis l’interface web un batch.

Dans mon cas, je cherchais à réaliser un batch sans avoir besoin d’être connecté à l’interface d’administration de mon site et c’est naturellement que je me suis tourné vers Drush pour réaliser cette tâche.

Voici donc un petit snipet que vous pourrez réutiliser pour vos batch.

Déclaration de la commande Drush

Pour commencer nous allons créer notre commande drush. Dans un module, créez un fichier portant le nom de votre module avec l’extension drush.inc (dans mon cas sandbox.drush.inc)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<span class='line'><span class="k">function</span> <span class="nf">sandbox_drush_command</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'> <span class="nv">$items</span>  <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
</span><span class='line'> <span class="nv">$items</span><span class="p">[</span><span class="s1">&#39;my-import&#39;</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;callback&#39;</span>      <span class="o">=&gt;</span> <span class="s1">&#39;sandbox_setup_batch&#39;</span><span class="p">,</span>
</span><span class='line'>    <span class="s1">&#39;description&#39;</span> <span class="o">=&gt;</span> <span class="nx">dt</span><span class="p">(</span><span class="s1">&#39;Import&#39;</span><span class="p">),</span>
</span><span class='line'> <span class="p">);</span>
</span><span class='line'> <span class="k">return</span> <span class="nv">$items</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">function</span> <span class="nf">sandbox_drush_help</span><span class="p">(</span><span class="nv">$section</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'> <span class="k">switch</span> <span class="p">(</span><span class="nv">$section</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">case</span> <span class="s1">&#39;drush:myimport&#39;</span><span class="o">:</span>
</span><span class='line'>     <span class="k">return</span> <span class="nx">dt</span><span class="p">(</span><span class="s2">&quot;Traitement des utilisateurs.&quot;</span><span class="p">);</span>
</span><span class='line'> <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span>

Déclaration du Batch

Une fois notre commande prête il nous faut déclarer notre batch, sandbox_setup_batch().


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<span class='line'><span class="k">function</span> <span class="nf">sandbox_setup_batch</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>
</span><span class='line'> <span class="c1">// Ici nous créons un tableau nommé opérations, qui contiendra toutes les fonctions qui devront être invoquées lors de l&#39;exécution du batch. Il est ainsi possible de réaliser plusieurs traitements différents avec un seul batch.</span>
</span><span class='line'> <span class="nv">$operations</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
</span><span class='line'> <span class="nv">$operations</span><span class="p">[]</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s1">&#39;sandbox_batch_process&#39;</span><span class="p">,</span> <span class="k">array</span><span class="p">());</span>
</span><span class='line'>
</span><span class='line'> <span class="c1">// Déclaration des propriétés de notre batch.</span>
</span><span class='line'> <span class="nv">$batch</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
</span><span class='line'>   <span class="c1">// Le tableau d’opérations à effectuer lors du traitement de notre batch.</span>
</span><span class='line'>   <span class="s1">&#39;operations&#39;</span> <span class="o">=&gt;</span> <span class="nv">$operations</span><span class="p">,</span>
</span><span class='line'>   <span class="s1">&#39;title&#39;</span> <span class="o">=&gt;</span> <span class="nx">t</span><span class="p">(</span><span class="s1">&#39;Import batch&#39;</span><span class="p">),</span>
</span><span class='line'>   <span class="s1">&#39;init_message&#39;</span> <span class="o">=&gt;</span> <span class="nx">t</span><span class="p">(</span><span class="s1">&#39;Initializing&#39;</span><span class="p">),</span>
</span><span class='line'>   <span class="s1">&#39;error_message&#39;</span> <span class="o">=&gt;</span> <span class="nx">t</span><span class="p">(</span><span class="s1">&#39;An error occurred&#39;</span><span class="p">),</span>
</span><span class='line'>   <span class="c1">// Fonction qui sera appelée à la fin du batch.</span>
</span><span class='line'>   <span class="s1">&#39;finished&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;sandbox_finished_method&#39;</span>
</span><span class='line'> <span class="p">);</span>
</span><span class='line'>
</span><span class='line'> <span class="c1">// Initialisation du batch.</span>
</span><span class='line'> <span class="nx">batch_set</span><span class="p">(</span><span class="nv">$batch</span><span class="p">);</span>
</span><span class='line'> <span class="nv">$batch</span> <span class="o">=&amp;</span> <span class="nx">batch_get</span><span class="p">();</span>
</span><span class='line'>
</span><span class='line'> <span class="nv">$batch</span><span class="p">[</span><span class="s1">&#39;progressive&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="k">FALSE</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'> <span class="c1">// Execution du batch.</span>
</span><span class='line'> <span class="nx">drush_backend_batch_process</span><span class="p">();</span>
</span><span class='line'><span class="p">}</span>
</span>

Opération de batch à réaliser

A ce stade notre commande Drush est créée et notre batch déclaré, mais pour le moment il ne fait rien car nous n’avons pas encore implémenté la fonction principale, celle que notre batch devra exécuter. Ici, je récupère un par un tous les utilisateurs ayant le statut actif du site.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<span class='line'><span class="k">function</span> <span class="nf">sandbox_batch_process</span><span class="p">(</span><span class="o">&amp;</span><span class="nv">$context</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>
</span><span class='line'> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nb">isset</span><span class="p">(</span><span class="nv">$context</span><span class="p">[</span><span class="s1">&#39;sandbox&#39;</span><span class="p">][</span><span class="s1">&#39;progress&#39;</span><span class="p">]))</span> <span class="p">{</span>
</span><span class='line'>   <span class="nv">$context</span><span class="p">[</span><span class="s1">&#39;sandbox&#39;</span><span class="p">][</span><span class="s1">&#39;progress&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span><span class='line'>   <span class="nv">$context</span><span class="p">[</span><span class="s1">&#39;sandbox&#39;</span><span class="p">][</span><span class="s1">&#39;current_user&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span><span class='line'>   <span class="c1">// Récupération du nombre d’élément à traiter.</span>
</span><span class='line'>   <span class="nv">$context</span><span class="p">[</span><span class="s1">&#39;sandbox&#39;</span><span class="p">][</span><span class="s1">&#39;max&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nx">db_result</span><span class="p">(</span><span class="nx">db_query</span><span class="p">(</span><span class="s1">&#39;SELECT COUNT(DISTINCT uid) FROM {users} WHERE status = 1&#39;</span><span class="p">));</span>
</span><span class='line'> <span class="p">}</span>
</span><span class='line'>
</span><span class='line'> <span class="c1">// Histoire de ne pas avoir de problèmes nous récupérerons les utilisateurs 50 par 50</span>
</span><span class='line'> <span class="nv">$limit</span> <span class="o">=</span> <span class="mi">50</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'> <span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;SELECT uid FROM {users} WHERE status = 1 AND uid &gt; %d ORDER BY uid ASC&quot;</span><span class="p">;</span>
</span><span class='line'> <span class="nv">$result</span> <span class="o">=</span> <span class="nx">db_query_range</span><span class="p">(</span><span class="nv">$sql</span><span class="p">,</span> <span class="nv">$context</span><span class="p">[</span><span class="s1">&#39;sandbox&#39;</span><span class="p">][</span><span class="s1">&#39;current_user&#39;</span><span class="p">],</span> <span class="mi">0</span><span class="p">,</span> <span class="nv">$limit</span><span class="p">);</span>
</span><span class='line'> <span class="k">while</span> <span class="p">(</span><span class="nv">$row</span> <span class="o">=</span> <span class="nx">db_fetch_array</span><span class="p">(</span><span class="nv">$result</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>
</span><span class='line'>   <span class="c1">// C’est ici que doit se faire le traitement de votre batch.</span>
</span><span class='line'>   <span class="c1">//...</span>
</span><span class='line'>
</span><span class='line'>   <span class="c1">// Une fois que nous en avons terminé avec les données en cours il nous suffit de mettre à jour les informations du batch et de passer à la suivante.</span>
</span><span class='line'>   <span class="nv">$context</span><span class="p">[</span><span class="s1">&#39;sandbox&#39;</span><span class="p">][</span><span class="s1">&#39;progress&#39;</span><span class="p">]</span><span class="o">++</span><span class="p">;</span>
</span><span class='line'>   <span class="nv">$context</span><span class="p">[</span><span class="s1">&#39;sandbox&#39;</span><span class="p">][</span><span class="s1">&#39;current_user&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$account</span><span class="o">-&gt;</span><span class="na">uid</span><span class="p">;</span>
</span><span class='line'> <span class="p">}</span>
</span><span class='line'>
</span><span class='line'> <span class="c1">// Tant que l’on n’a pas traité tout le jeu de données on continue à exécuter notre batch.</span>
</span><span class='line'> <span class="k">if</span> <span class="p">(</span><span class="nv">$context</span><span class="p">[</span><span class="s1">&#39;sandbox&#39;</span><span class="p">][</span><span class="s1">&#39;progress&#39;</span><span class="p">]</span> <span class="o">!=</span> <span class="nv">$context</span><span class="p">[</span><span class="s1">&#39;sandbox&#39;</span><span class="p">][</span><span class="s1">&#39;max&#39;</span><span class="p">])</span> <span class="p">{</span>
</span><span class='line'>   <span class="nv">$context</span><span class="p">[</span><span class="s1">&#39;finished&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$context</span><span class="p">[</span><span class="s1">&#39;sandbox&#39;</span><span class="p">][</span><span class="s1">&#39;progress&#39;</span><span class="p">]</span> <span class="o">/</span> <span class="nv">$context</span><span class="p">[</span><span class="s1">&#39;sandbox&#39;</span><span class="p">][</span><span class="s1">&#39;max&#39;</span><span class="p">];</span>
</span><span class='line'> <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">function</span> <span class="nf">sandbox_finished_method</span><span class="p">(</span><span class="nv">$success</span><span class="p">,</span> <span class="nv">$results</span><span class="p">,</span> <span class="nv">$operations</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'> <span class="nx">drush_print</span><span class="p">(</span><span class="s1">&#39;Finished importing!&#39;</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span>

Et voilà, en quelques lignes nous avons un batch prêt à l’emploi pour traiter nos données. Notez que cette commande drush peut être ajoutée dans un CRON afin d’être exécutée régulièrement.

Par juliendubreuil
julien dubreuil
Drupal since 2009

7 Choses à faire pour améliorer vos compétences sur Drupal

Voici un article que j’aurais aimé lire quand j’ai commencé Drupal, quelques conseils simples permettant d’aborder sereinement le CMS et sa communauté. Aujourd’hui ces étapes tombent sous le sens pour moi mais vu l’essor que rencontre la version 7 de Drupal je me dis qu’il y en a d’autres à qui cela pourrait servir.

1) Inscrivez-vous sur Drupal.org

Avoir un compte sur Drupal.org c’est essentiel. Cela vous permettra en cas de besoin de poster une question, de proposer un patch ou encore d’apporter une nouvelle fonctionnalité à un module. Pour moi la création de votre compte est la première étape, c’est celle qui vous mettra en relation avec la communauté.

2) Intéressez-vous aux initiatives D8

Si vous utilisez Drupal, vous n’êtes pas sans savoir que la version 8 est en cours de réalisation. Sachez qu’ils existe plusieurs initiatives regroupant chacune les changements majeurs à venir pour Drupal. Je vous conseille donc de faire le tour des ces initiatives et de les suivre attentivement. Libre à vous si vous vous en sentez l’âme de contribuer et d’apporter votre petite graine à l’une d’entre elle. Vous trouverez toutes les initiatives D8 à cet endroit.

3) Testez, testez et testez des modules

Il parait que c’est en forgeant qu’on devient forgeron, en tout cas une chose est sûre, plus vous testerez de modules, d’outils ou de méthodologie, plus vous apprendrez. A mon sens il est important de vous créer un référentiel de modules, chaque module devant être générique et réutilisable pour vos projets.

4) Documentez-vous, lisez

Lorsque je m’attaque à une nouvelle techno ou lorsque je m’intéresse à un nouveau sujet je procède toujours de la même façon, j’essaie d’identifier des acteurs majeurs, des aguerris qui savent de quoi ils parlent, je m’abonne aux flux de leurs blogs, à leurs comptes Twitter et je lis ce qu’ils partagent. Après il ne reste qu’à maintenir cette liste de blogs à jour, en supprimant ceux qui ne produisent pas de contenus de qualité et en ajoutant de nouveaux. Ainsi vous obtenez la crème de la crème et cela me permet de rester au courant des dernières nouveautés, même si je suis quelques temps sans travailler sur le sujet.

Pour vous, voici quelques liens à suivre :

Une autre façon d’apprendre par la lecture est d’acheter quelques livres qui traitent du sujet. Cette solution est plus onéreuse qu’une recherche sur le web mais est souvent plus efficace lorsqu’on cherche un point précis (pour peu que ce soit un bon bouquin).

5) Connectez-vous aux channels IRC

Une bonne façon pour être en contact directe avec la communauté est de venir la rencontrer sur les channels IRC #drupal et #drupal-fr. Ici vous aurez les membres les plus actifs de la communauté, ceux qui arpentent les méandres de Drupal depuis plusieurs années. Pour moi c’est le meilleur moyen de trouver de l’aide, de récupérer de précieux conseils ou d’obtenir des pistes à creuser. Néanmoins, n’attendez pas de ces personnes connectées qu’elles fassent le travail à votre place et qu’elles vous prennent par la main pour vous montrer quoi et comment faire, tout ce qu’elles pourront faire c’est vous aiguiller. Plus d’info sur cette page : drupal.org/irc

6) Rencontrer la communauté

Sortez! Allez à la rencontre de la communauté qui se trouve près de chez vous. Rien ne vaut les rencontres que vous pourrez faire lors d’évènements de type barcamp, meetup ou drink. Vous en apprendrez bien plus lors de ces rencontres que derrière votre ordinateur à chercher sur Google. Sachez qu’il existe plusieurs groupes utilisateurs Drupal répartis dans les villes de Lille, Lyon, Nantes, Paris et Toulouse. Vous trouverez toutes les informations nécessaires sur la page officielle Drupal France.

7) Contribuez !

Le dernier point et pas des moindres, contribuer, participer activement à améliorer et enrichir Drupal. Lorsqu’on parle de contribution on pense tout de suite à la réalisation de module. C’est vrai, mais il n’y a pas que ça, il existe d’autres possibilités comme par exemple, soumettre ou tester un patch, écrire les tests unitaires d’un module, rédiger de la documentation, ou encore traduire des modules. Un conseil si vous voulez participer, ne restez pas focalisé sur la création de module, pour moi faire de la traduction c’est aussi méritant. Bref les possibilités sont vastes pour participer à l’écosysteme de Drupal, à vous de trouvez la votre.

Cet article 7 Choses à faire pour améliorer vos compétences sur Drupal est apparu en premier sur Julien Dubreuil.

Par juliendubreuil
julien dubreuil
Drupal since 2009

7 Choses à faire pour améliorer vos compétences sur Drupal

7 Choses à faire pour améliorer vos compétences sur Drupal

Voici un article que j’aurais aimé lire quand j’ai commencé Drupal, quelques conseils simples permettant d’aborder sereinement le CMS et sa communauté. Aujourd’hui ces étapes tombent sous le sens pour moi mais vu l’essor que rencontre la version 7 de Drupal je me dis qu’il y en a d’autres à qui cela pourrait servir.

1) Inscrivez-vous sur Drupal.org

Avoir un compte sur Drupal.org c’est essentiel. Cela vous permettra en cas de besoin de poster une question, de proposer un patch ou encore d’apporter une nouvelle fonctionnalité à un module. Pour moi la création de votre compte est la première étape, c’est celle qui vous mettra en relation avec la communauté.

2) Intéressez-vous aux initiatives D8

Si vous utilisez Drupal, vous n’êtes pas sans savoir que la version 8 est en cours de réalisation. Sachez qu’ils existe plusieurs initiatives regroupant chacune les changements majeurs à venir pour Drupal. Je vous conseille donc de faire le tour des ces initiatives et de les suivre attentivement. Libre à vous si vous vous en sentez l’âme de contribuer et d’apporter votre petite graine à l’une d’entre elle. Vous trouverez toutes les initiatives D8 à cet endroit.

3) Testez, testez et testez des modules

Il parait que c’est en forgeant qu’on devient forgeron, en tout cas une chose est sûre, plus vous testerez de modules, d’outils ou de méthodologie, plus vous apprendrez. A mon sens il est important de vous créer un référentiel de modules, chaque module devant être générique et réutilisable pour vos projets.

4) Documentez-vous, lisez

Lorsque je m’attaque à une nouvelle techno ou lorsque je m’intéresse à un nouveau sujet je procède toujours de la même façon, j’essaie d’identifier des acteurs majeurs, des aguerris qui savent de quoi ils parlent, je m’abonne aux flux de leurs blogs, à leurs comptes Twitter et je lis ce qu’ils partagent. Après il ne reste qu’à maintenir cette liste de blogs à jour, en supprimant ceux qui ne produisent pas de contenus de qualité et en ajoutant de nouveaux. Ainsi vous obtenez la crème de la crème et cela me permet de rester au courant des dernières nouveautés, même si je suis quelques temps sans travailler sur le sujet.

Pour vous, voici quelques liens à suivre :

Une autre façon d’apprendre par la lecture est d’acheter quelques livres qui traitent du sujet. Cette solution est plus onéreuse qu’une recherche sur le web mais est souvent plus efficace lorsqu’on cherche un point précis (pour peu que ce soit un bon bouquin).

5) Connectez-vous aux channels IRC

Une bonne façon pour être en contact directe avec la communauté est de venir la rencontrer sur les channels IRC #drupal et #drupal-fr. Ici vous aurez les membres les plus actifs de la communauté, ceux qui arpentent les méandres de Drupal depuis plusieurs années. Pour moi c’est le meilleur moyen de trouver de l’aide, de récupérer de précieux conseils ou d’obtenir des pistes à creuser. Néanmoins, n’attendez pas de ces personnes connectées qu’elles fassent le travail à votre place et qu’elles vous prennent par la main pour vous montrer quoi et comment faire, tout ce qu’elles pourront faire c’est vous aiguiller. Plus d’info sur cette page : drupal.org/irc

6) Rencontrer la communauté

Sortez! Allez à la rencontre de la communauté qui se trouve près de chez vous. Rien ne vaut les rencontres que vous pourrez faire lors d’évènements de type barcamp, meetup ou drink. Vous en apprendrez bien plus lors de ces rencontres que derrière votre ordinateur à chercher sur Google. Sachez qu’il existe plusieurs groupes utilisateurs Drupal répartis dans les villes de Lille, Lyon, Nantes, Paris et Toulouse. Vous trouverez toutes les informations nécessaires sur la page officielle Drupal France.

7) Contribuez !

Le dernier point et pas des moindres, contribuer, participer activement à améliorer et enrichir Drupal. Lorsqu’on parle de contribution on pense tout de suite à la réalisation de module. C’est vrai, mais il n’y a pas que ça, il existe d’autres possibilités comme par exemple, soumettre ou tester un patch, écrire les tests unitaires d’un module, rédiger de la documentation, ou encore traduire des modules. Un conseil si vous voulez participer, ne restez pas focalisé sur la création de module, pour moi faire de la traduction c’est aussi méritant. Bref les possibilités sont vastes pour participer à l’écosysteme de Drupal, à vous de trouvez la votre.

Par juliendubreuil
julien dubreuil
Drupal since 2009

DrupalEveryDay un petit service pour apprendre un peu plus chaque jour

Cela fait quelques mois maintenant que Drupal 7 est arrivé, de nouveaux concepts sont apparus, de nouvelles API ont été mises en place et beaucoup de hooks ont été modifiés.

Comme pas mal de monde, j’ai lu plein d’articles sur Internet mais aujourd’hui encore j’ai l’impression de n’avoir découvert qu’une petite partie des nouvelles fonctionnalités. Forcément j’ai du passer à côté de certaines choses, du coup j’ai cherché une façon de découvrir l’api en profondeur.
L’idée m’est venue d’un calendrier d’énigmes que l’on m’a offert à noël (merci belle-sœur), où chaque jour vous retrouvez une nouvelle devinette à affronter. A ce moment la, je me suis dit pourquoi ne pas faire la même chose avec l’api de Drupal7, chaque jour un nouveau truc à apprendre.
Au début je pensais faire cela uniquement pour moi mais après réflexion je me suis dis que cela pourrait être utile à l’ensemble de la communauté et ce qui prouve que je ne me suis pas trompé, c’est que les premiers échos sont positifs.

J’ai donc crée drupaleveryday.com dont le principe est vraiment basique, puisque chaque jour, 4 fonctions piochées au hasard sont affichées sur le site et publiées sur Twitter. Sur chacune des fonctions vous avez la possibilité de voter en positif ou en négatif selon si vous trouvez cette fonction utile ou non. S’il y a suffisamment de vote on pourrait imaginer plein de choses, comme des quizz et des best-of, donc à vos votes :p

Ce service n’a pas pour but de concurrencer l’api officielle, la documentation et les commentaires doivent rester là bas! Ceci est juste une petite contribution de ma part pour l’écosystème Drupal. N’étant pas graphiste j’ai fait de mon mieux :) néanmoins si une âme charitable pouvait me donner un coup de main sur la mise en forme et l’harmonisation du contenu ça ne serait pas de refu.

Que vous trouviez cette idée utile ou non, n’hésitez pas à me contacter pour me faire part de vos avis, de vos remarques et de comment améliorer ce site web.

Je profite aussi de ce billet pour remercier Opi pour le coup de main sur les media queries !

Cet article DrupalEveryDay un petit service pour apprendre un peu plus chaque jour est apparu en premier sur Julien Dubreuil.

Par juliendubreuil
julien dubreuil
Drupal since 2009

DrupalEveryDay un petit service pour apprendre un peu plus chaque jour

DrupalEveryDay un petit service pour apprendre un peu plus chaque jour

Cela fait quelques mois maintenant que Drupal 7 est arrivé, de nouveaux concepts sont apparus, de nouvelles API ont été mises en place et beaucoup de hooks ont été modifiés.

Comme pas mal de monde, j’ai lu plein d’articles sur Internet mais aujourd’hui encore j’ai l’impression de n’avoir découvert qu’une petite partie des nouvelles fonctionnalités. Forcément j’ai du passer à côté de certaines choses, du coup j’ai cherché une façon de découvrir l’api en profondeur.
L’idée m’est venue d’un calendrier d’énigmes que l’on m’a offert à noël (merci belle-sœur), où chaque jour vous retrouvez une nouvelle devinette à affronter. A ce moment la, je me suis dit pourquoi ne pas faire la même chose avec l’api de Drupal7, chaque jour un nouveau truc à apprendre.
Au début je pensais faire cela uniquement pour moi mais après réflexion je me suis dis que cela pourrait être utile à l’ensemble de la communauté et ce qui prouve que je ne me suis pas trompé, c’est que les premiers échos sont positifs.

J’ai donc crée drupaleveryday.com dont le principe est vraiment basique, puisque chaque jour, 4 fonctions piochées au hasard sont affichées sur le site et publiées sur Twitter. Sur chacune des fonctions vous avez la possibilité de voter en positif ou en négatif selon si vous trouvez cette fonction utile ou non. S’il y a suffisamment de vote on pourrait imaginer plein de choses, comme des quizz et des best-of, donc à vos votes :p

Ce service n’a pas pour but de concurrencer l’api officielle, la documentation et les commentaires doivent rester là bas! Ceci est juste une petite contribution de ma part pour l’écosystème Drupal. N’étant pas graphiste j’ai fait de mon mieux :) néanmoins si une âme charitable pouvait me donner un coup de main sur la mise en forme et l’harmonisation du contenu ça ne serait pas de refu.

Que vous trouviez cette idée utile ou non, n’hésitez pas à me contacter pour me faire part de vos avis, de vos remarques et de comment améliorer ce site web.

Je profite aussi de ce billet pour remercier Opi pour le coup de main sur les media queries !

Par juliendubreuil
julien dubreuil
Drupal since 2009

Drupal et les tâches planifiées

Drupal et les tâches planifiées

Pour exécuter des tâches récurrentes et automatisées, il existe un utilitaire commun à toutes les distributions Unix nommé Cron. Cet outil est vraiment pratique puisqu’il permet l’exécution d’un script à un moment précis. Vous pouvez par exemple lancer un script toutes les 5 minutes ou encore tous les lundi à 21h, les possibilités sont immenses.

Pour bien comprendre comment cela fonctionne je vous invite à lire la doc disponible sur wikipedia

Exécuter la cron de Drupal 7

Pour les versions antérieurs à Drupal 7 il était simple de l’exécuter, il suffisait simplement d’accéder à l’url exemple.fr/cron.php pour lancer le déclenchement. Depuis Drupal 7 il est nécessaire d’ajouter un paramètre supplémentaire à l’adresse, à savoir “cron_key”. Cette option n’est autre qu’un token unique d’authentification qui permet de ne restreindre le déclenchement du service Cron qu’à ceux qui possède cette clé.

Si comme moi vous avez cherché où pouvait bien se trouver cette clé, sachez que pour la récupérer il suffit de se rendre sur le tableau de bord d’administration du site à l’adresse “admin/reports/status”. Vous trouverez une ligne, dans le tableau de votre site, dédiée au Cron, vous indiquant la dernière date à laquelle le service a été exécuté ainsi que l’url pour l’exécuter et c’est cette url que vous devez récupérer.

Vous pouvez déclencher le Cron directement depuis votre navigateur en collant cette adresse ou via un script en accédant à cette adresse grâce à la commande wget.


1
<span class='line'>0 2 * * * wget -O - -q -t 1 http://exemple.com/cron.php?cron_key<span class="o">=</span>obwzqaAADCi-POSvSnVX3LayhESdCy7Dsdw4DQsYr
</span>

Exécuter la cron Drupal 7 chez OVH

J’ai découvert il y a peu qu’OVH proposait la possibilité aux hébergements mutualisés d’utiliser le service de Cron du serveur pour déclencher des tâches plannifiées.

Pour configurer celui-ci, rendez-vous dans l’interface d’administration de votre manager OVH et cliquez sur le Planificateur de tâches.

Comme vous pouvez le constater, il faut spécifier le chemin d’un fichier qui contiendra nos scripts d’exécution. Dans mon cas, j’ai créé un fichier à la racine de mon serveur nommé cronscript.php dans lequel j’ai ajouté le code suivant afin de déclencher les tâches plannifiées de Drupal.


1
<span class='line'>system<span class="o">(</span><span class="s1">&#39;/usr/bin/wget -O - -q http://www.exemple.comain.com/cron.php?cron_key=rGcinK08iqoZq-XyL2DibY...&#39;</span><span class="o">)</span>
</span>

Du coup, dans l’interface de manager OVH, il ne vous reste plus qu’à spécifier le chemin de votre fichier (/www/cronscript.php pour moi) et à définir la périodicité à laquelle il doit être lancé.

Par juliendubreuil
julien dubreuil
Drupal since 2009

Drupal et les tâches planifiées

Pour exécuter des tâches récurrentes et automatisées, il existe un utilitaire commun à toutes les distributions Unix nommé Cron. Cet outil est vraiment pratique puisqu’il permet l’exécution d’un script à un moment précis. Vous pouvez par exemple lancer un script toutes les 5 minutes ou encore tous les lundi à 21h, les possibilités sont immenses.

Pour bien comprendre comment cela fonctionne je vous invite à lire la doc disponible sur wikipedia

Exécuter la cron de Drupal 7

Pour les versions antérieurs à Drupal 7 il était simple de l’exécuter, il suffisait simplement d’accéder à l’url exemple.fr/cron.php pour lancer le déclenchement. Depuis Drupal 7 il est nécessaire d’ajouter un paramètre supplémentaire à l’adresse, à savoir « cron_key ». Cette option n’est autre qu’un token unique d’authentification qui permet de ne restreindre le déclenchement du service Cron qu’à ceux qui possède cette clé.

Si comme moi vous avez cherché où pouvait bien se trouver cette clé, sachez que pour la récupérer il suffit de se rendre sur le tableau de bord d’administration du site à l’adresse “admin/reports/status”. Vous trouverez une ligne, dans le tableau de votre site, dédiée au Cron, vous indiquant la dernière date à laquelle le service a été exécuté ainsi que l’url pour l’exécuter et c’est cette url que vous devez récupérer.

Vous pouvez déclencher le Cron directement depuis votre navigateur en collant cette adresse ou via un script en accédant à cette adresse grâce à la commande wget.

0 2 * * * wget -O - -q -t 1 http://exemple.com/cron.php?cron_key=obwzqaAADCi-POSvSnVX3LayhESdCy7Dsdw4DQsYr

Exécuter la cron Drupal 7 chez OVH

J’ai découvert il y a peu qu’OVH proposait la possibilité aux hébergements mutualisés d’utiliser le service de Cron du serveur pour déclencher des tâches plannifiées.

Pour configurer celui-ci, rendez-vous dans l’interface d’administration de votre manager OVH et cliquez sur le Planificateur de tâches.

Comme vous pouvez le constater, il faut spécifier le chemin d’un fichier qui contiendra nos scripts d’exécution. Dans mon cas, j’ai créé un fichier à la racine de mon serveur nommé cronscript.php dans lequel j’ai ajouté le code suivant afin de déclencher les tâches plannifiées de Drupal.

system('/usr/bin/wget -O - -q http://www.exemple.comain.com/cron.php?cron_key=rGcinK08iqoZq-XyL2DibY...')

Du coup, dans l’interface de manager OVH, il ne vous reste plus qu’à spécifier le chemin de votre fichier (/www/cronscript.php pour moi) et à définir la périodicité à laquelle il doit être lancé.

Cet article Drupal et les tâches planifiées est apparu en premier sur Julien Dubreuil.

Par juliendubreuil
julien dubreuil
Drupal since 2009

Exporter vos views dans vos modules

Exporter vos views dans vos modules

Voici un petit billet pour vous montrer qu’il est simple d’exporter vos vues créées depuis l’interface d’administration directement dans vos modules. Pourquoi ? Simplement pour ne pas laisser le code dans la base de données et pour avoir une copie de celui-ci quelque part dans des fichiers bien au chaud.

Avant toute chose, sachez qu’il existe presque toujours une solution afin d’exporter ce que vous avez fait sur le site dans un module, pour cela vous pouvez utiliser l’API d’un module, un autre module dédié à l’export ou encore utiliser le module Features qui permet d’exporter pas mal de choses en quelques clics. Pour si peu, j’avoue que je préfère mettre ça dans un module et puis de toute façon je ne suis pas un grand fan de Features.

Le code ci dessous est basé sur views 3 et Drupal 7 mais il est semblable à ce que l’on pouvait trouver avec la version 6. Pour cet exemple j’ai crée un module Drupal nommé sandbox dans lequel j’ai ajouté un fichier sandbox.info et sandbox.module.

Première étape : Préparation de notre module l’api de Views

La première étape consiste à se faire connaître auprès de views en invoquant son API, dans notre cas la dernière version, la 3.


1
2
3
4
5
6
7
8
<span class='line'><span class="sd">/**</span>
</span><span class='line'><span class="sd">* Implements hook_views_api().</span>
</span><span class='line'><span class="sd">*/</span>
</span><span class='line'><span class="k">function</span> <span class="nf">sandbox_views_api</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'> <span class="k">return</span> <span class="k">array</span><span class="p">(</span>
</span><span class='line'>   <span class="s1">&#39;api&#39;</span> <span class="o">=&gt;</span> <span class="mi">3</span><span class="p">,</span>
</span><span class='line'> <span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span>

Pour une question de lisibilité et pour mieux nous y retrouver dans nos fichiers, créez un nouveau répertoire nommé views à la racine de votre module dans lequel nous placerons par la suite toutes les vues que nous exporterons.

Créez un nouveau fichier portant par exemple le nom de votre vue et l’extension “.inc” (ex : ma_gestion_des_articles.inc), ouvrez le et placez y la balise d’ouverture PHP (Deuxième étape : Exporter vos vues.

L’exportation d’une vue se fait directement depuis l’interface d’administration de views (admin/structure/views). Cliquez sur le lien “exportez” qui se trouve dans le petit menu d’édition à droite dans la catégorie “opérations” de chaque vue. A ce moment là, votre page se recharge vous mettant face à votre export. Copiez le code, collez le dans le fichier que nous avons crée à l’étape précédente puis sauvegardez le.

Voila, vous avez exporté une copie de sauvegarde de votre vue mais pour le moment Views ne sait pas encore qu’elle existe.

Troisième étape : Indiquer à Views où trouver les fichiers d’export de nos vues.

Dans un nouveau fichier sandbox.views_default.inc à la racine de notre module nous allons créer un petit bout de code qui va nous permettre de scanner automatiquement notre repertoire afin d’indiquer à Views où sont stockés nos fichiers d’export.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<span class='line'><span class="sd">/**</span>
</span><span class='line'><span class="sd">* Implements hook_views_default_views().</span>
</span><span class='line'><span class="sd">*/</span>
</span><span class='line'><span class="k">function</span> <span class="nf">sandbox_views_default_views</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>  <span class="k">static</span> <span class="nv">$views</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">if</span> <span class="p">(</span><span class="nb">isset</span><span class="p">(</span><span class="nv">$views</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">return</span> <span class="nv">$views</span><span class="p">;</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>  <span class="c1">// Remplacer le nom de mon module “sandbox” par le nom de votre module.</span>
</span><span class='line'>  <span class="nv">$files</span> <span class="o">=</span> <span class="nx">file_scan_directory</span><span class="p">(</span><span class="nx">drupal_get_path</span><span class="p">(</span><span class="s1">&#39;module&#39;</span><span class="p">,</span> <span class="s1">&#39;sandbox&#39;</span><span class="p">)</span> <span class="o">.</span> <span class="s1">&#39;/views&#39;</span><span class="p">,</span> <span class="s1">&#39;/\.inc$/&#39;</span><span class="p">);</span>
</span><span class='line'>  <span class="k">foreach</span> <span class="p">(</span><span class="nv">$files</span> <span class="k">as</span> <span class="nv">$filepath</span> <span class="o">=&gt;</span> <span class="nv">$file</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>  <span class="k">include</span> <span class="nv">$filepath</span><span class="p">;</span>
</span><span class='line'>  <span class="k">if</span> <span class="p">(</span><span class="nb">isset</span><span class="p">(</span><span class="nv">$view</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>    <span class="nv">$views</span><span class="p">[</span><span class="nv">$view</span><span class="o">-&gt;</span><span class="na">name</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$view</span><span class="p">;</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'>  <span class="k">return</span> <span class="nv">$views</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span>

A partir de maintenant, Views est capable de venir lire dans ce répertoire et de charger les vues sur votre site. Vous pouvez ainsi stocker une copie de chacune de vos vues, ce qui vous sera pratique si vous voulez installer votre module sur plusieurs sites.

La mise à jour d’une vue ?

Une vue ça vit et, même si vous l’avez exportée dans un module, vous pouvez encore effectuer des modifications sur celle-ci depuis l’interface d’administration des views, elle passera alors dans un état “surchargée”. Notez que si vous la modifiez, elle ne sera plus identique à celle que possède votre module, n’oubliez donc pas de l’exporter à nouveau dans votre module. Néanmoins pour views, la vue à utiliser est toujours la copie qu’il a créée lorsque vous avez sauvegardé vos modifications. Pour revenir à la version qui se trouve dans votre module, vous devez cliquer sur le lien “revert view”.

Par juliendubreuil
julien dubreuil
Drupal since 2009

Exporter vos views dans vos modules

Voici un petit billet pour vous montrer qu’il est simple d’exporter vos vues créées depuis l’interface d’administration directement dans vos modules. Pourquoi ? Simplement pour ne pas laisser le code dans la base de données et pour avoir une copie de celui-ci quelque part dans des fichiers bien au chaud.

Avant toute chose, sachez qu’il existe presque toujours une solution afin d’exporter ce que vous avez fait sur le site dans un module, pour cela vous pouvez utiliser l’API d’un module, un autre module dédié à l’export ou encore utiliser le module Features qui permet d’exporter pas mal de choses en quelques clics. Pour si peu, j’avoue que je préfère mettre ça dans un module et puis de toute façon je ne suis pas un grand fan de Features.

Le code ci dessous est basé sur views 3 et Drupal 7 mais il est semblable à ce que l’on pouvait trouver avec la version 6. Pour cet exemple j’ai crée un module Drupal nommé sandbox dans lequel j’ai ajouté un fichier sandbox.info et sandbox.module.

Première étape : Préparation de notre module l’api de Views

La première étape consiste à se faire connaître auprès de views en invoquant son API, dans notre cas la dernière version, la 3.

/**
* Implements hook_views_api().
*/
function sandbox_views_api() {
 return array(
   'api' => 3,
 );
}

Pour une question de lisibilité et pour mieux nous y retrouver dans nos fichiers, créez un nouveau répertoire nommé views à la racine de votre module dans lequel nous placerons par la suite toutes les vues que nous exporterons.

Créez un nouveau fichier portant par exemple le nom de votre vue et l’extension “.inc” (ex : ma_gestion_des_articles.inc), ouvrez le et placez y la balise d’ouverture PHP (

Chaque vue aura ainsi son propre fichier de configuration.

Deuxième étape : Exporter vos vues.

L’exportation d’une vue se fait directement depuis l’interface d’administration de views (admin/structure/views). Cliquez sur le lien “exportez” qui se trouve dans le petit menu d’édition à droite dans la catégorie “opérations” de chaque vue. A ce moment là, votre page se recharge vous mettant face à votre export. Copiez le code, collez le dans le fichier que nous avons crée à l’étape précédente puis sauvegardez le.

Voila, vous avez exporté une copie de sauvegarde de votre vue mais pour le moment Views ne sait pas encore qu’elle existe.

Troisième étape : Indiquer à Views où trouver les fichiers d’export de nos vues.

Dans un nouveau fichier sandbox.views_default.inc à la racine de notre module nous allons créer un petit bout de code qui va nous permettre de scanner automatiquement notre repertoire afin d’indiquer à Views où sont stockés nos fichiers d’export.

/**
* Implements hook_views_default_views().
*/
function sandbox_views_default_views() {
 static $views;

 if (isset($views)) {
   return $views;
 }

 // Remplacer le nom de mon module “sandbox” par le nom de votre module.
 $files = file_scan_directory(drupal_get_path('module', 'sandbox') . '/views', '/\.inc$/');
 foreach ($files as $filepath => $file) {
   include $filepath;
   if (isset($view)) {
     $views[$view->name] = $view;
   }
 }
 return $views;
}

A partir de maintenant, Views est capable de venir lire dans ce répertoire et de charger les vues sur votre site. Vous pouvez ainsi stocker une copie de chacune de vos vues, ce qui vous sera pratique si vous voulez installer votre module sur plusieurs sites.

La mise à jour d’une vue ?

Une vue ça vit et, même si vous l’avez exportée dans un module, vous pouvez encore effectuer des modifications sur celle-ci depuis l’interface d’administration des views, elle passera alors dans un état “surchargée”. Notez que si vous la modifiez, elle ne sera plus identique à celle que possède votre module, n’oubliez donc pas de l’exporter à nouveau dans votre module. Néanmoins pour views, la vue à utiliser est toujours la copie qu’il a créée lorsque vous avez sauvegardé vos modifications. Pour revenir à la version qui se trouve dans votre module, vous devez cliquer sur le lien “revert view”.

Cet article Exporter vos views dans vos modules est apparu en premier sur Julien Dubreuil.

Par juliendubreuil
julien dubreuil
Drupal since 2009

Comment créer et appliquer des styles d’images avec Drupal 7 via le code

Comment créer et appliquer des styles d’images avec Drupal 7 via le code

Cet article fait suite au précédent post : “Comment créer et appliquer des styles d’images avec Drupal 7 via l’UI” ou je vous détaillais comment, via l’interface d’administration, créer un style d’image. Aujourd’hui le sujet reste le même, mais la création sera faite par la programmation.

Si comme moi, vous êtes confrontés à maintenir à jour des sites Drupal, vous avez déjà dû vous poser tout un tas de questions sur la pérennisation des configurations et de ce fait, vous vous êtes résignés à faire vos modifications directement depuis l’interface d’administration. Du coup, pour chaque chose simple qu’il est possible de faire via le back-office de Drupal, il faut trouver comment le faire en code.

Ainsi, sur la même base que l’article précédent, voici comment créer et appliquer un style d’image par la programmation.

Créer un style d’image via le code

La solution la plus simple consiste à implémenter le hook_image_default_styles() fourni par le module image, qui permet de définir un ou plusieurs style(s) d’images à Drupal dans votre fichier .module.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<span class='line'><span class="k">function</span> <span class="nf">sandbox_image_default_styles</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>  <span class="c1">// La variable $style est un tableau et chaque composant sera un nouveau style.</span>
</span><span class='line'>  <span class="nv">$styles</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
</span><span class='line'>  <span class="c1">// La clé du tableau sera le nom machine de votre style. Pour qu’il  n’y ait pas de soucis contentez-vous de caractères alphanumériques,  d’underscores et de tirets.</span>
</span><span class='line'>  <span class="nv">$styles</span><span class="p">[</span><span class="s1">&#39;image_style_example&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
</span><span class='line'>  <span class="c1">// Pour chaque style pour pouvez ajouter plusieurs effets</span>
</span><span class='line'>  <span class="nv">$styles</span><span class="p">[</span><span class="s1">&#39;image_style_example&#39;</span><span class="p">][</span><span class="s1">&#39;effects&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
</span><span class='line'>  <span class="c1">// Premier effet à appliquer à l’image</span>
</span><span class='line'>    <span class="k">array</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;image_rotate&#39;</span><span class="p">,</span>
</span><span class='line'>      <span class="s1">&#39;data&#39;</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span>
</span><span class='line'>        <span class="s1">&#39;degrees&#39;</span> <span class="o">=&gt;</span> <span class="mi">2</span><span class="p">,</span>
</span><span class='line'>        <span class="s1">&#39;random&#39;</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span>
</span><span class='line'>        <span class="s1">&#39;bgcolor&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;#CECECE&#39;</span><span class="p">,</span>
</span><span class='line'>      <span class="p">),</span>
</span><span class='line'>      <span class="s1">&#39;weight&#39;</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span>
</span><span class='line'>    <span class="p">),</span>
</span><span class='line'>    <span class="c1">// Deuxième effet</span>
</span><span class='line'>    <span class="k">array</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;image_scale&#39;</span><span class="p">,</span>
</span><span class='line'>      <span class="s1">&#39;data&#39;</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span>
</span><span class='line'>        <span class="s1">&#39;width&#39;</span> <span class="o">=&gt;</span> <span class="mi">200</span><span class="p">,</span>
</span><span class='line'>        <span class="s1">&#39;height&#39;</span> <span class="o">=&gt;</span> <span class="mi">200</span><span class="p">,</span>
</span><span class='line'>        <span class="s1">&#39;upscale&#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="s1">&#39;weight&#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="p">);</span>
</span><span class='line'>  <span class="k">return</span> <span class="nv">$styles</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span>

On ne peut plus simple non ? Vous trouverez toutes les informations concernant les effets de base disponibles dans le fichier image.effects.inc du module image.

Voici d’autres fonctions utiles si vous souhaitez intervenir sur les différents styles d’images :

Si toutefois vous n’avez pas trouvé votre bonheur dans ces fonctions, voici toutes les fonctions et méthodes implémentées par le module images

Appliquer un style d’image

Pour appliquez un style d’image à une image il suffit simplement d’utiliser la fonction de thème : theme_image_style($variables).
$variables est un tableau composé de différents éléments :
– style_name: le nom du style que vous voulez appliquer
– path: Le chemin de l’image relatif au système de fichier de Drupal. (ex : public://mon-image.jpg)
– alt: un text alternatif au cas où l’image ne pourrait pas être affichée.
– title: Le titre de votre image. Celui-ci sera affiché lorsque l’image sera survolée
– attributes: un tableau associatif bien connu des fonctions de thème permettant de passer des attributs à la baslise img, tel que des class css…

Notez que votre image doit se trouver sur votre site, car cela ne fonctionne pas avec une image externe.


1
2
3
4
5
6
<span class='line'><span class="c1">// Récupération de l’adresse de l’image.  </span>
</span><span class='line'><span class="nv">$path</span> <span class="o">=</span> <span class="s2">&quot;images/funny_cat.jpg&quot;</span><span class="p">;</span> <span class="c1">// Qui à pour adresse sites/default/files/images/funny_cat.jpg</span>
</span><span class='line'><span class="c1">// Transformation de celle-ci.</span>
</span><span class='line'><span class="nv">$uri</span> <span class="o">=</span> <span class="p">(</span><span class="nx">file_build_uri</span><span class="p">(</span><span class="nv">$path</span><span class="p">));</span>
</span><span class='line'><span class="c1">// Génération de notre image.</span>
</span><span class='line'><span class="nv">$image</span> <span class="o">=</span> <span class="nx">theme</span><span class="p">(</span><span class="s1">&#39;image_style&#39;</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span> <span class="s1">&#39;path&#39;</span> <span class="o">=&gt;</span>  <span class="nv">$uri</span><span class="p">,</span> <span class="s1">&#39;style_name&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;image_style_example&#39;</span><span class="p">));</span>
</span>



Et voila vous venez de créer et appliquer un style via la programmation !

Crédits Photo

Pages