2010-08-19 12 views
10

Tengo mucha curiosidad por saber cómo se puede desintegrar un módulo de Drupal en múltiples archivos de inclusión. Un número de soporte de enlace para vincular incluye componentes, como hook_menu, hook_theme, etc.Cómo dividir el código de un módulo en archivos separados

Una vez planeé simplificar uno de mis complejos módulos que han llegado a 2.3K de líneas con la mitad de su conjunto de características. Tengo que retroceder todos esos pasos debido a la falta de conocimiento sobre el alcance de la inclusión.

Ayudame en este sentido si hay alguna información detallada.

Respuesta

10

Lo que Nikitsaid es correcto.
Agregaré que hay algunos enlaces que pueden definir qué archivos deben cargarse. Ejemplos de tales ganchos son hook_theme() y hook_menu().

Un módulo nunca debe cargar incondicionalmente un archivo que necesita llamando al module_load_include() desde fuera de una función.

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

Pero mi intención principal es sobre varias funciones de acceso a datos que se usan en varias partes. p.ej. comentarios 'comment_total_count()', 'comment_today_count()' se usa en plantillas, 'comment_thread()' es requerido en la página de administración así como también en la página de contenido. 'comment_insert()' en la página de contenido mientras 'comment_remove()' y 'comment_edit()' en la página de administración. ¿Necesito usar la sintaxis convencional 'require' o' include'? ¿Y qué hay para incluir varios archivos? –

+1

La función utilizada para incluir archivos PHP es ['module_load_include()'] (http://api.drupal.org/api/function/module_load_include/6). Puede incluir uno o más archivos. – kiamlaluno

2

Es simple, simplemente revise otros módulos grandes (como cck, views, etc.). Los ganchos principales deben estar en el módulo, otros deben estar en archivos diferentes: temas, páginas de administración, otras páginas, funciones de servicio, etc.

7

Usar más archivos es simplemente una cuestión de agrupar elementos similares en el mismo archivo, para mantenerlo más administrado. archivos típicos usados ​​es

  • .admin.inc para toda la materia de administración, las devoluciones de llamada de menú, formularios, etc.
  • .pages.inc de devoluciones de llamada de menú frontend.
  • .theme.inc para funciones temáticos, etc. preproceso ganchos
  • .forms.inc de formas no admin y sus manejadores.

Esto es más un estilo de codificación que cualquier otra cosa. Así que esto es solo para ayudarse a mantener el código que ha escrito.

+1

Es por el rendimiento también. Todas las funciones de los archivos .module se cargan en cada inicialización. – ram4nd

Cuestiones relacionadas