Pregunta

¿Cómo puedo extender un módulo existente sin modificarlo? En realidad es un módulo contribuido, así que no quiero hackearlo. Pero quiero alterarlo y agregarle ciertas características. Soy nuevo en Drupal y mientras leo los tutoriales al respecto, sigo escuchando una y otra vez: no hackear el núcleo ... y creo que lo mismo se aplica a los módulos también.

¿Fue útil?

Solución

Evite piratear o bifurcar el módulo si es posible. Hackear el módulo le brinda una menor variedad de '' núcleo de hacking '' dolor y bifurcar el módulo (sin una arquitectura y un conjunto de características claramente superiores) simplemente enturbia aún más el agua del módulo, lo que hace aún más difícil para los desarrolladores de sitios tomar una decisión efectiva sobre qué usar.

Las mejores soluciones son:

  1. Utilice cualquier API proporcionada por el módulo. A veces hay funciones que puede usar como llamadas a la API que no necesariamente están pensadas de esa manera.
  2. Cree la funcionalidad adicional y envíe un parche a la cola de emisión del módulo, para que otros puedan beneficiarse de su trabajo y para que usted pueda beneficiarse de las auditorías de seguridad sin mucho esfuerzo.
  3. No siempre, pero a menudo puede llegar lejos creando un módulo personalizado que implemente hook_form_alter y agregue un controlador de envío que lo lleve de regreso a su módulo para su procesamiento.

Otros consejos

Encontré una muy buena publicación sobre la extensión de un módulo en drupal. Partes esenciales:

  • Si el módulo usa código para una devolución de llamada de página que desea cambiar, cambie la devolución de llamada de página con hook_menu_alter ().

  • Si el módulo implementa una función de tema que desea modificar, cambie la función asociada con hook_theme_registry_alter (). Como alternativa, si es suficiente cambiar las variables que obtiene la función de tema, puede implementar la función de preproceso para esa función de tema (por ejemplo, hook_preprocess_rdf_metadata () para theme_rdf_metadata (), y cambiar las variables que obtendrá la función de tema.

  • Si el módulo ejecuta una consulta SQL usando db_select (), y asigna una etiqueta a la consulta, cambie la consulta ejecutada con hook_query_alter ().

  • Si el módulo implementa un enlace que no quiere que se ejecute, puede implementar hook_module_implements_alter () para evitar que se ejecute.

  • Si el módulo implementa un gancho alter (ej. hook_page_alter ()), y desea cambiar lo que ese gancho alteró, implemente el mismo gancho alter, asegurándose de que se ejecute después del implementado desde ese módulo.

En el caso de que la función que desea modificar no sea un enlace, entonces:

  • Verifique que la función esté usando ganchos implementados desde otro módulo. Por ejemplo, node_save () invoca hook_node_presave (); si quisiera cambiar el " cambiado " propiedad del nodo, no pirateo node_save (), sino que implemento hook_node_presave () para alterarlo.

  • Verifique que la función sea referenciada / utilizada desde un gancho; en ese caso, puede hacer algo por ese gancho, como describí anteriormente.

Si algo de lo que dije hasta ahora no se aplica, entonces es mejor crear un módulo personalizado y usar el código del otro módulo para crearlo. También intentaría solicitar una solicitud de función para el módulo existente, con la esperanza de que la función esté implementada. Piratear un módulo de terceros nunca es una buena idea, especialmente porque las actualizaciones automáticas del módulo (a través del Administrador de actualizaciones o Drush) ya no serían posibles para ese módulo.

Puede encontrar más información sobre la ampliación del módulo existente mediante la creación de uno nuevo en este sencillo ejemplo aquí .

¿Qué módulo es? Algunos módulos proporcionan API que puede ampliar escribiendo un módulo propio. Hay toneladas de módulos que " extienden " Vistas construidas a partir de la API de Vistas . Si el módulo que desea ampliar no tiene una buena API, siempre puede bifurcarlo para crear una versión que satisfaga sus necesidades. Quizás también ayude a alguien más.

Incluso si necesitamos usar alguna funcionalidad, podemos hacerlo de la siguiente manera. Necesitamos copiar la función del módulo y podemos pegar la función en su archivo template.php. De lo que puede hacer cambios en esa función en consecuencia.

Para cambiar la forma que muestra el módulo, simplemente puede crear un módulo que implemente hook_form_alter () o hook_form_FORM_ID_alter () . La mayoría de las veces, cuando desea modificar el comportamiento de un módulo, también necesita cambiar la configuración que usa (o cualquier otra forma que use, si es el caso).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top