2010-08-19 5 views
10

Je suis très curieux de savoir comment un module Drupal peut être désintégré en plusieurs fichiers d'inclusion. Une fois que j'ai prévu de simplifier un de mes modules complexes qui ont atteint 2.3K de lignes avec la moitié de son ensemble de fonctionnalités. Je dois annuler toutes ces étapes en raison du manque de connaissances sur la portée de l'inclusion. Aidez-moi à cet égard s'il y a quelques informations détaillées.Comment diviser le code d'un module en fichiers séparés

Répondre

10

Qu'est-ce Nikitsaid est correct.
J'ajouterai que certains hooks sont autorisés à définir quels fichiers doivent être chargés. Des exemples de tels crochets sont hook_theme() et hook_menu().

Un module ne doit jamais charger de manière inconditionnelle un fichier dont il a besoin en appelant module_load_include() depuis l'extérieur d'une fonction.

function book_menu() { 
    $items['admin/content/book'] = array(
    'title' => 'Books', 
    'description' => "Manage your site's book outlines.", 
    'page callback' => 'book_admin_overview', 
    'access arguments' => array('administer book outlines'), 
    'file' => 'book.admin.inc', 
); 
    $items['admin/content/book/list'] = array(
    'title' => 'List', 
    'type' => MENU_DEFAULT_LOCAL_TASK, 
); 
    $items['admin/content/book/settings'] = array(
    'title' => 'Settings', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('book_admin_settings'), 
    'access arguments' => array('administer site configuration'), 
    'type' => MENU_LOCAL_TASK, 
    'weight' => 8, 
    'file' => 'book.admin.inc', 
); 
    // … 
} 

function user_theme() { 
    return array(
    'user_picture' => array(
     'arguments' => array('account' => NULL), 
     'template' => 'user-picture', 
    ), 
    'user_profile' => array(
     'arguments' => array('account' => NULL), 
     'template' => 'user-profile', 
     'file' => 'user.pages.inc', 
    ), 
    // … 
    'user_admin_perm' => array(
     'arguments' => array('form' => NULL), 
     'file' => 'user.admin.inc', 
    ), 
    // … 
); 
} 
+0

Mais mon intention principale concerne plusieurs fonctions d'accès aux données utilisées dans diverses parties. par exemple. commentaires. 'comment_total_count()', 'comment_today_count()' est utilisé dans les modèles, 'comment_thread()' est requis sur la page d'administration ainsi que sur la page de contenu. 'comment_insert()' sur la page de contenu alors que 'comment_remove()' et 'comment_edit()' sur la page admin. Ai-je besoin d'utiliser la syntaxe 'require' ou' include'? Et que diriez-vous d'inclure plusieurs fichiers? –

+1

La fonction utilisée pour inclure les fichiers PHP est ['module_load_include()'] (http://api.drupal.org/api/function/module_load_include/6). Vous pouvez inclure un ou plusieurs fichiers. – kiamlaluno

2

C'est simple, passez en revue d'autres grands modules (comme cck, views, etc.). Les crochets principaux devraient être dans le module, d'autres devraient être dans différents dossiers - themers, pages d'administration, d'autres pages, fonctions de service et ainsi de suite ...

7

En utilisant plus de dossiers, est juste une question de grouper des choses semblables ensemble dans le même fichier, pour le garder plus géré. fichiers typiques utilisés est

  • .admin.inc pour tous les trucs d'administration, callbacks de menu, des formulaires, etc.
  • .pages.inc pour callbacks menu frontend.
  • .theme.inc pour les fonctions à thème, prétraiter crochets etc.
  • .forms.inc pour les formes non-administrateurs et leurs gestionnaires.

Ceci est plus un style de codage que toute autre chose. Donc, c'est juste pour vous aider à maintenir le code que vous avez écrit.

+1

C'est aussi pour la performance. Toutes les fonctions des fichiers .module sont chargées à chaque initialisation. – ram4nd

Questions connexes