web-dev-qa-db-fra.com

Meilleure pratique pour créer des modules à l'aide de classes

Je cherche à commencer à construire mes modules en tant que classes maintenant que lazy/auto-load sont en Drupal 7, et j'aimerais regarder certains modules (contrib ou core) qui font un excellent travail.

Existe-t-il un moyen créatif d'intégrer une classe en tant que hooks? Dois-je implémenter chaque fonctionnalité en tant que plugin ctools?

Les passants doivent noter que D7 a un nouveau files[] déclarations dans le module .info fichiers pour les classes/interfaces de chargement automatique/paresseux: Écriture de fichiers .info (Drupal 7.x) .

Ce qui suit est une bonne lecture pour obtenir les motivations et la constitution (pour ainsi dire) de la communauté Drupal Programmation Drupal dans une perspective orientée objet .

19
electblake

n module n'est pas une classe de Crell est ce que vous devez lire en premier.

Le plus grand OOP partie dans Drupal 7 est la nouvelle couche d'abstraction de base de données (conçue par le même Crell et d'autres). Cela implémente de nombreux modèles qui peuvent et doivent être réutilisé.

Par exemple:

Quelque chose qui est toujours controversé est Masquage des informations . DBTNG implémente cela en rendant les propriétés de classe protégées et en interdisant l'accès direct. D'autre part, nous avons hook_query_alter () et ils peuvent être modifiés presque librement avec diverses méthodes par référence getter .

16
Berdir

C'est une question intéressante.

L'idée d'un module Drupal en tant que classe est très intéressante. Cependant, même dans les modules D7, il suffit d'implémenter des fonctions de hook qui sont vérifiées par leur nom, donc même si vous créez une classe pour votre module, vous doivent encore implémenter des fonctions de hook pour les appeler.

Cependant, de nombreux modules utilisent des classes en interne et exposent des fonctionnalités via ces classes. L'exemple le plus évident est celui des vues. C'est donc peut-être un bon endroit où chercher. Cependant, sachez que de nombreux modules utilisent les classes à leur manière, donc ce que vous apprenez en regardant les vues peut ne pas toujours être applicable.

3
Jeremy French

L'API d'entité (le module contrib) vous permet de déclarer une "classe d'entité" pour chacun de vos types d'entité, afin que tout le code lié à votre entité (créer, charger, enregistrer, accéder, etc.) puisse aller dans une classe (voir comment Organic Les groupes le font, par exemple).

Cela dit, n'en faites pas trop. Les plugins ctools sont une bonne chose lorsque vous en avez besoin (vous écrivez les prochaines vues, panneaux ou règles), mais utiliser des classes partout juste pour la pureté idéologique ne vous fera pas beaucoup de bien.

2
Bojan Zivanovic