[Résolu] [Résolu] [Résolu] Dev débutant : Créer un module Drupal qui affiche le nombre de nodes dans un bloc

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour à tous,

Pour ceux qui souhaitent commencer à développer en back-end sur Drupal, voici un tuto pour créer son premier module en PHP/SQL.

http://www.alekos.fr/creer-son-premier-module-drupal/

Les sujets suivants sont abordés :

  • l’architecture d’un module codé en PHP
  • le fonctionnement des hooks
  • la création d’un bloc affichable dans les différentes régions d’un thème
  • l’utilisation de SQL sur Drupal avec db_query()

Bonne lecture !
Alexandre (Alekos Paris)

Forum : 
Version de Drupal : 

Dans ton .info, inutile d'appeler le .module, drupal le gère.
Dans ton hook_block_info() tu doit mettre un nom machine au block $block['nommachine'] = array ...

C'est limite ton code avec la requete en dur dans ton block view. En sachant tous ce que drupal met à disposition niveau requête.

  • db_select au pire des cas.
  • Entity Field Query pour toutes les entités drupal

Pour le système de traduction remplace :

  • t('Il existe') . $nodes . ' nodes.'

Par

  • t('@nb_node nodes exist(s)',array('@nb_node'=>$node))

Car toutes les chaines sont considérées comme anglaises, la langue par défault des chaines provenant des fichiers est en anglais et ce n'est pas modifiable.
Et la variable @nb_node permet, en traduction de changer la valeur dans les traduction.
Par exemple

  • Anglais : 3 nodes exists
  • Français : Il existe 3 nodes

Entre l'anglais et le francais les mots/nombre ne sont pas à la même place dans la phrase.

Bonjour !

Je ne savais pas qu'il est inutile de renseigner le .module, mais je pense que la bonne pratique consiste à le faire, je l'ai toujours vu dans le .info. De plus, pour un tuto c'est préférable d'évoquer la règle des fichiers.

Je crois savoir qu'il n'est pas nécessaire de mettre un nom machine si il n'y a qu'un seul block.

Pour le SQL, oui je sais que Drupal propose des outils comme db_select, addExpression, etc... le problème est d'une part que ça ne fonctionne pas toujours lorsque je code des modules contrairement au bon vieux SQL,d'autre part voulant faire un tuto court et clair, il m'a semblé plus approprié d'utiliser db_query().

Pour l'anglais, merci à toi car je n'avais tout simplement pas percuté cette évidence. Je ne veux pas aborder ce point dans le tuto dans un soucis de simplicité, donc je vais modifier le texte.

Cdlt,
Alexandre [Alekos]

Tu ne veras jamais la déclaration dans le .info du .module dans les modules drupal. C'est l'api qui le gère, c'est son fonctionnement natif. C'est comme le .install => même gestion.

Le nom machine n'est pas obligatoire mais fortement recommander sinon ton block va avoir un nom du type block-1, block-2, donc en bdd c'est pas tip top et pour les liens contextuels non plus.

Concernant la partie SQL je ne comprend pas trop. Si, par exemple, un db_select() ne marche pas c'est à cause d'une mauvaise utilisation car c'est un "language" bas niveau. c'est juste une couche d'abstraction du SQl ce qui lui permet d'être plus lisible et surtout maintenable.

Pour la partie traduction, c'est un piège à con, et j'en ai passer des heure pour essayé de faire un système de language/traduction propre, mais ce n'est pas possible. Drupal8 corrige ça. Ils ne pensent qu'à eux ces anglais :)