Как разбить код модуля на отдельные файлы - PullRequest
10 голосов
/ 19 августа 2010

Мне очень любопытно узнать, как модуль Drupal может быть интегрирован в несколько включаемых файлов.Поддержка хуков для связывания включает в себя такие компоненты, как hook_menu, hook_theme и т. Д.

Однажды я планировал упростить один из моих сложных модулей, который достиг 2,3 тыс. Строк с половиной набора функций.Я должен откатить все эти шаги из-за отсутствия знаний о сфере охвата.

Помогите мне в этом, если есть какая-то подробная информация.

Ответы [ 3 ]

10 голосов
/ 19 августа 2010

Что Никит сказал правильно.
Я добавлю, что есть несколько хуков, которые позволяют определить, какие файлы необходимо загрузить. Примерами таких крючков являются hook_theme() и hook_menu().

Модуль никогда не должен безоговорочно загружать нужный ему файл, вызывая module_load_include() извне функции.

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',
    ),
    // …
  );
}
7 голосов
/ 19 августа 2010

Использование большего количества файлов - это всего лишь вопрос объединения похожих вещей в один файл, чтобы сделать его более управляемым.Обычно используются следующие файлы:

  • .admin.inc для всех функций администрирования, обратных вызовов меню, форм и т. Д.
  • .pages.inc для обратных вызовов меню внешнего интерфейса.
  • .theme.incдля функций тем, перехватчиков препроцесса и т. д.
  • .forms.inc для неадминистративных форм и их обработчиков.

Это больше стиль кодирования, чем все остальное.Так что это просто для того, чтобы помочь себе сохранить код, который вы написали.

2 голосов
/ 19 августа 2010

Все просто, просто просмотрите другие большие модули (например, cck, views и т. Д.).Основные хуки должны быть в модуле, другие должны быть в разных файлах - темы, страницы администратора, другие страницы, сервисные функции и так далее ...

...