Question

En supposant l'installation minimale du module (pour garder les choses simples), quelles sont les «responsabilités» de base des deux fonctions de haut niveau dans les Drupal index.php?

drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
menu_execute_active_handler();

J'essaie de comprendre, à partir d'un niveau élevé, du fonctionnement des systèmes principaux de Drupal, en particulier en relation avec le MVC basé sur le Web. Donc, dans un système de code comme l'allumage, ce qui suit

  1. Examiner l'URL, le transforme en classe et action

  2. Appelle la méthode d'action sur la classe, où les informations sont chargées à partir de modèles, "Logic budacy" est effectué

  3. Les informations sont transmises à une couche de vue

  4. Le système de mise en page rend la page HTML

  5. Une partie de la disposition (souvent une "zone de contenu") est motivée par les informations transmises à l'étape 3

Quel est le processus de répartition équivalent à Drupal? Je comprends comment fonctionne le système de modules, mais je ne suive pas tout à fait la philosophie de Drupal sur le comment / pourquoi du chargement des données et le rendu de thème / mise en page, et où le transfert entre les deux se produit.

Je me rends compte que Drupal est radicalement différent du système MVC d'application Web; J'essaye de comprendre comment. Je me rends compte que Drupal est conçu pour être utilisé avec succès sans comprendre pleinement cela. La préférence donnée aux réponses de Drupal 7, mais s'il y a eu des changements radicaux, les informations des versions précédentes sont les bienvenues.

Était-ce utile?

La solution

Bonnes réponses de Berdir et Apemanmantus déjà (+1), mais de la place pour un essai supplémentaire:

Concernant la relation Drupals avec MVC, j'ai pris un coup de poing sur le sujet avec Cette réponse à une question pour «une métaphore pour le fonctionnement interne du module Drupal», qui pourrait correspondre à votre demande d'un aperçu de «haut niveau».

Quant aux appels de la fonction de haut niveau - eh bien, certaines choses viennent juste en trois, donc je suggère de prendre le theme('page, $return) Appelez le mix, car cela terminera l'aperçu:

drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$return = menu_execute_active_handler();

// Menu status constants are integers; page content is a string.
if (is_int($return)) {
  switch ($return) {
    // [...] Snipped error page handling code
  }
}
elseif (isset($return)) {
  // Print any value (including an empty string) except NULL or undefined:
  print theme('page', $return);
}
drupal_page_footer();

Un par un:

  1. drupal_bootstrap()
    Comme son nom l'indique, cela vise principalement à «préparer la scène», c'est-à-dire par exemple

    • Initialiser la configuration de base
    • Initialiser l'accès à la base de données
    • Initialiser la gestion de la session
    • Identifier l'utilisateur demandé
    • Finalement raccourcir la demande en servant du contenu mis en cache
    • ... (Plus de choses)

    Un point important ici Est-ce que déjà pendant cette phase, le système de crochet invoquera d'autres modules, s'ils le demandent, leur donnant une chance d'injecter une logique personnalisée dans cette phase précoce. Bien qu'il ne soit pas courant que les modules le fassent, cela ajoute à la flexibilité de Drupal qu'elle peut être fait pour des besoins spéciaux tels que par exemple influençant le processus d'identification de l'utilisateur, empêchant ou appliquant un coup de cache, réécrivant le chemin demandé et autre niveau à bas niveau ' ' manipulations.

  2. menu_execute_active_handler()
    Cela correspond à peu près aux étapes 1. et 2. de votre croquis CodeIgniter. Il inspectera le chemin demandé, le corresponde à la fonction de rappel appropriée (y compris certains wildcards «Turn Wildcards en paramètres») et invoquez ce rappel, transmettant les paramètres extraits (ou prédéfinis). Le rappel devrait généralement retourner le principale Contenu de la page, mais est libre de faire d'autres choses comme par EG, il suffit de rediriger la demande. La plupart des "logiques commerciales" seront effectuées ici, mais notez que le contenu retourné est souvent déjà un fragment de balisage, donc cette phase comprend déjà certaines parties de la couche de vue!

  3. theme_page() (Invoqué indirectement via le theme() fonction, qui ajoute beaucoup de «magie» environnant)
    Cela correspond (très) en gros la couche de vue habituelle, car c'est là que l'assemblage final du balisage à retourner a lieu. Mais c'est aussi l'endroit où les éléments «environnants» d'une page sont assemblés (pensez aux menus, en en-têtes, en barres latérales, etc.), donc il y a encore beaucoup de potentiel pour la «logique commerciale» en cours au cours de cette étape.

Pendant toutes ces étapes, le système de crochet (avec le système de thème conçu similaire) fournira un certain nombre de points «Hook in» pour que d'autres modules «s'abonnent», s'ils en ont besoin. Lorsqu'ils sont invoqués, ils seront transmis les informations pertinentes en cours de traitement à ce stade, avec la possibilité d'intervenir et de les manipuler (ou simplement de déclencher un traitement séparé). Tout cela s'ajoute à un système assez flexible (en raison de l'énorme quantité d'options `` intercepter et manipuler '' pour les modules personnalisés), mais est également responsable de nombreuses difficultés d'apprentissage de Drupal, comme la question de `` ce qui se passe quand '' n'est souvent pas facile à répondre: /

Donc, pour résumer sous peu:

  1. Bootstrap - travail de grognement d'initialisation, finalement enrichi d'intrusions précoces de la «logique commerciale».
  2. Exécution - Traitement principal de la «logique métier», déjà avec une logique de génération «View» (assemblage des fragments de balisage).
  3. THEMING - Génération principale de balisage, avec quelques parties importantes de la «logique commerciale» toujours dans le mélange.

Autres conseils

Après le bootstrap, la seule chose donnée qui se produit est le système de routeur de menu, qui comprend quel rappel de page est responsable de cette demande. Pour ce faire, il s'appuie sur les informations que tous les modules installés ont renvoyé dans leur hook_menu () Définition (Ceci est stocké dans la base de données et uniquement mis à jour lorsqu'il est explicitement demandé de le faire, lorsque de nouveaux modules sont activés par exemple).

Ce crochet peut contrôler beaucoup. Par exemple, accès aux autorisations, définition d'arguments, titre des liens de menu, etc. De plus, les routeurs de menu peuvent être presque aussi complexes que vous le souhaitez, ils ne sont pas limités aux modèles de contrôleur / d'action habituels. Je pense que vous pouvez définir des éléments de routeur de menu jusqu'à 9 éléments de profondeur, par exemple «votre module / vue /% / sub /% /% / quoi que ce soit».

Voir http://drupal.org/node/109131 pour un bref aperçu avec un exemple.

À l'intérieur de ce rappel de page, le module de fourniture est libre de faire ce qu'il veut. Ce boîte Utilisez le système de thème s'il le souhaite, tirez des crochets ou faites quoi que ce soit d'autre avec la partie "Contenu" d'une page. Le système de thème comprendra toutes les autres parties d'une page à thème, y compris d'autres régions et autres blocs qui sont automatiquement inclus dans ces régions. Ceci est important à retenir lors de la création de rappels qui répondent à la demande de l'AJAX ou fournissent des choses comme les flux XML, etc. Dans ces cas, vous devrez prendre d'autres mesures pour effectuer des ajustements dans le thème pour répondre aux demandes qui ne devraient pas inclure le "reste" de la page.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top