Где запущен модуль вызова Drupal? - PullRequest
4 голосов
/ 14 февраля 2011

В системе Drupal 7 (и Drupal 6?), Что «запускает» процесс вызова перехвата или где расположены вызовы перехвата «верхнего уровня»?

Как я сейчас понимаю систему модулей Drupalлюбой модуль способен создать ловушку для реализации другим модулем.Это означает, что большая часть исполнения Drupal - это модули, реализующие хуки для других модулей, которые, в свою очередь, предоставляют хуки для реализации другими модулями.

Что мне неясно, так это то, есть ли начальный хук верхнего уровня, который вызывается в начальной загрузке для запуска этого процесса, или если есть несколько немодульных вызовов, которые запускают процесс вызова хукаили что-то еще (извините, что это расплывчато и плохо, но, как я уже сказал, я не понимаю)

Я посмотрел в функции _drupal_bootstrap_full, и в конце появилось многообещающее

module_invoke_all('init');

Однако мой поиск в папке modules/ обнаружил только одну функцию "init" ловушки, которая, казалось, не была отправной точкой

system/system.api.php
1737:function hook_init() {

function hook_init() {
  drupal_add_css(drupal_get_path('module', 'book') . '/book.css');
}

Итак, это говоритМеня что-то вне модульных систем сбивает с толку.Это происходит в одном месте или в нескольких местах.И где эти места?

В настоящее время я не большой пользователь Drupal.Моей конечной целью всего этого является понимание системы модулей Drupal в изоляции , чтобы я мог затем исследовать и понять, как Drupal использует свои модули для сборки приложения, которое большинство людей считают Drupal.Любые / все объяснения приветствуются, но я пытаюсь понять вещи с архитектурной точки зрения.Я понимаю, что вам не нужны эти знания, чтобы использовать Drupal, но мой мозг сломан и не позволит мне двигаться вперед, пока я не узнаю, что делает базовый код PHP.

Ответы [ 2 ]

5 голосов
/ 14 февраля 2011

Система хуков - это одна отдельная система внутри Drupal. Он не несет ответственности за загрузку. hook_init () - это просто ловушка, которая вызывается в конце процесса начальной загрузки. Как сказал другой ответ, module_invoke_all () может быть вызван в любое время и в любом месте процесса.

Проще говоря, в Drupal 7 следующие две строки в index.php отвечают за основной поток запроса:

<?php
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
menu_execute_active_handler();
?>

Что можно перевести в два этапа:

  1. Загрузите систему. Это включает в себя загрузку всех модулей и необходимые файлы, подключение к базе данных и т. Д.

  2. Найдите пункт меню маршрутизатора, отвечающий за этот запрос, и выполните его.

Кто-то начал серию постов в блоге, чтобы описать это более подробно, см. http://becircle.com/blog_topics/line_line.

0 голосов
/ 14 февраля 2011

module_invoke_all - вот где все это происходит.

Из документа: Вызвать хук во всех задействованных модулях, которые его реализуют.

Инициатива, вероятно, не очень хорошая, поскольку очень немногие ее определяют. Также помните, что крючки называются , а не крючки .

Edit:

/**
 * Deletes a node type from the database.
 *
 * @param $type
 *   The machine-readable name of the node type to be deleted.
 */
function node_type_delete($type) {
  $info = node_get_types('type', $type);
  db_query("DELETE FROM {node_type} WHERE type = '%s'", $type);
  module_invoke_all('node_type', 'delete', $info);
}

Это в D6 node.module. Это пример вызова ловушки из кода модуля, в данном случае hook_node_type, с двумя аргументами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...