Мне очень любопытно узнать, как модуль Drupal можно дезинтегрировать в несколько включаемых файлов. Поддержка хуков для связывания включает в себя такие компоненты, как hook_menu, hook_theme и т. Д.
Однажды я планировал упростить один из моих сложных модулей, длина которых достигла 2,3 Кб с половиной его набора функций. Я должен откатить все эти шаги из-за отсутствия знаний о сфере охвата.
Помогите мне в этом, если есть какая-то подробная информация.
То, что Никит сказал , правильно.
Я добавлю, что есть несколько хуков, которые позволяют определять, какие файлы необходимо загрузить. Примеры таких хуков: 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',
),
// …
);
}
Использование большего количества файлов - это просто вопрос группировки похожих вещей в одном файле, чтобы сделать его более управляемым. Обычно используются файлы
.admin.inc
для всего администрирования, обратных вызовов меню, форм и т. Д. .pages.inc
для обратных вызовов внешнего меню. .theme.inc
для функций темы, обработчиков препроцессора и т. Д. .forms.inc
для неадминистративных форм и их обработчиков. Это больше стиль кодирования, чем что-либо еще. Так что это просто для того, чтобы помочь себе поддерживать написанный вами код.
Это просто, просто просмотрите другие большие модули (например, cck , просмотры и т. д.). Основные хуки должны быть в модуле, остальные должны быть в разных файлах - темах, страницах администратора, других страницах, служебных функциях и так далее ...