theme support meaning examples enfold drupal aop

support - ¿Cómo funciona AOP en Drupal?



enfold theme woocommerce (2)

¿Cómo funciona AOP (Programación Orientada a Aspectos) en Drupal? He aprendido sobre AOP en términos de usarlo para el registro y la seguridad, pero ¿cómo se aplica a Druoal?


drupal imita los paradigmas de AOP a través de anzuelos, lo que básicamente permite a los desarrolladores tejer bits de código durante el flujo de ejecución. puede echar un vistazo a los enganches que un desarrollador puede implementar aquí .

como un ejemplo rápido, si estuviera desarrollando un nuevo módulo basado en nodos (los nodos son el formulario de datos básicos en drupal), tengo acceso instantáneo a comentarios y taxonomía sin ningún trabajo adicional de mi parte. los módulos de comentario y taxonomía tienen la capacidad de conectarse a los nodos y proporcionar esa funcionalidad adicional. entonces, en ese sentido, no tengo que dar cuenta de esas características en mi programa, pero puedo aprovechar esa flexibilidad.


Drupal es un marco de "multi-paradigma", y solo ciertas partes de él implementan "un tipo de AOP":

  • La función render () de Drupal 7, por ejemplo, convierte un conjunto de matrices anidadas en HTML de salida seleccionando las plantillas adecuadas basadas en reglas de precedencia básica: de esta manera, Drupal se comporta como un motor de transformación XSLT, donde se toman los archivos de plantilla de su tema. juntos constituyen un archivo .xsl de entrada y el nido de matriz de entrada es el archivo .xml inicial. Esto significa que hay algo elegantemente funcional en la forma en que funciona el tema.
  • Además, la capa de abstracción de la base de datos D7 está cerca de la orientación de objetos "rectos", aunque como señala Larry (ver más adelante), hay una pequeña cantidad de casi AOP en esta capa OO.

El paradigma de AOP de Drupal podría visualizarse mejor como impulsado por eventos, y todo sucede a través del concepto de ganchos de Drupal. Por ejemplo, cuando haces lo siguiente:

  • escribe un módulo llamado mymodule
  • en mymodule.module, crea una función llamada mymodule_init()
  • habilitar este módulo en Drupal

lo que estás declarando es, en pseudo-código:

subscribe mymodule to "hook events" of type init

Cuando el núcleo de Drupal ejecuta entonces module_invoke_all(''init'') (llamado en _drupal_bootstrap_full() - código disponible aquí ) esto es Drupal diciendo

notify all subscribers to "hook events" of type init that this has occurred by passing any relevant arguments to them and letting them run the code they define in their hook_init()

Entonces, aunque PHP sigue siendo un lenguaje de procedimiento, y tu mymodule_init() podría hacer toda clase de cosas alocadas y sin encapsular si realmente quisieras, Drupal aún está a cargo. Drupal en cierto sentido decide si llamar o no a su código en primer lugar.

De esta forma, Drupal puede convertir sus propias fases de ejecución en casi AOP, definiendo puntos de unión (las module_invoke*() ) y permitiéndole escribir sus propios puntos de corte (su función mymodule_*() cuya convención de nomenclatura debe coincidir Nombre del gancho de Drupal.)

Para obtener más información sobre esto, y la naturaleza multi-paradigmática de Drupal especialmente, prueba la excelente publicación de blog de Larry Garfield .