generate drupal-7 hook drupal-webform

drupal 7 - generate - ¿Cómo y dónde escribir Webform submit hook?



drupal url (2)

Primero, debes estar seguro antes de comenzar a torcer el brazo de Drupal para hacer que las cosas funcionen de forma diferente a lo que se supone que deben hacer. Redirigir los datos para un formulario web podría potencialmente darle problemas en la forma en que funciona Webform y esto podría morderlo más adelante. Todavía puede esperar que los datos se guarden en sus propias tablas de contabilidad, pero no puede encontrarlo allí más adelante si sobrescribe su comportamiento.

Dicho esto, si desea modificar el comportamiento de otros módulos, como Webform, tendrá que escribir su propio módulo pequeño. Algunos de estos ganchos también pueden ser influenciados a través de la capa de plantillas (usando su plantilla template.php file), pero este es el lugar equivocado para alterar este tipo de comportamiento en mi opinión.

Un módulo Drupal 7 se compone básicamente de un mínimo de dos archivos, un archivo *.info y un archivo *.module . El primero contiene algunos metadatos necesarios para que Drupal categorice su módulo y calcule las posibles dependencias. Este último contiene el código PHP real.

Estos archivos deben guardarse en un directorio con (preferiblemente) el mismo nombre que usted denominó su info y archivo de module . Para que Drupal encuentre su módulo, puede colocarlo en sites/all/modules .

Si, por ejemplo, nombra su módulo changemyform , estos son los archivos mínimos requeridos:

  • changemyform.info
  • changemyform.module

Y ambos deberían residir en: sites / all / modules / changemyform.

Le sugiero que consulte el manual del desarrollador de Drupal para obtener una explicación más detallada sobre cómo escribir módulos, incluidas licencias, pruebas unitarias, .... Pero para este ejemplo, los dos archivos mencionados servirán.

En su archivo de info , al menos debe escribir el nombre del módulo, una pequeña descripción, para qué versión principal es aplicable y qué dependencias tiene. Algo como esto sería suficiente para nuestro ejemplo:

name = Change my form description = Changes the submission behavior of my form. core = 7.x dependencies[] = webform

A continuación deberíamos escribir la lógica para el archivo del module sí. El gancho general para interceptar cualquier envío de formulario (incluido un formulario web) es:

function mymodule_form_alter( &$form, &$form_state,$form_id ){ ... }

Con este gancho puede, como su nombre lo sugiere, alterar todas las formas representadas con Drupal. No solo el controlador de envío, sino también agregar / eliminar campos, agregar marcado, .... Reemplace mymodule con el nombre real de su módulo, en nuestro caso de ejemplo changemyform . A continuación, debe delimitarlo para que solo tenga efecto en su forma deseada:

function changemyform_form_alter( &$form, &$form_state,$form_id ){ if ($form_id == ''my_desired_webform_form_id'') { $form[''#submit''][] = ''changemyform_submit_handler''; } }

Tenga en cuenta que ahora reemplazo mymodule con mymodule . Como también puede ver, he agregado un controlador personalizado a la propiedad de envío del formulario. Deberá escribir este controlador como una función que contendrá toda la lógica que desee. Por lo tanto, el archivo del module total ahora se convierte en (menos las etiquetas <?php ?> ):

function changemyform_form_alter( &$form, &$form_state,$form_id ){ if ($form_id == ''my_desired_webform_form_id'') { $form[''#submit''][] = ''changemyform_submit_handler''; } } function changemyform_submit_handler($form, &$form_state) { ... your submission logic ... }

Ahora está listo para escribir toda la lógica que necesita para capturar los datos en el envío y hacer lo que quiera.

Dado que se trata de un módulo, debe, por supuesto, habilitarlo en la pantalla de resumen de los módulos de administración para que funcione.

También (como un pequeño detalle) al escribir sus propios módulos, decore cada función con encabezados de documentación que describan qué hace cada función y qué puede contener cada parámetro. Incluso para funciones pequeñas y triviales.

Soy nuevo en Drupal (7) y, por lo tanto, necesito ayuda para las siguientes situaciones.

Creé un Webform (también tengo otro formulario web) y ahora, en lugar de insertar en la tabla predeterminada de webform_submitted_data, quiero que este webfrom se inserte en myTable. Por lo que encontré, necesito escribir un gancho para esto. En realidad, me estoy confundiendo por la forma de escribir este gancho. Tengo preguntas a continuación.

  1. Dónde escribir este enlace (en qué archivo).
  2. Cómo escribir este enlace solo para un formulario web.

Por favor ayuda y avísame si necesitas más información para esto.


La mejor forma es usar hook_webform_submission_insert ()

Ejemplo:

function MYMODULE_webform_submission_insert($node, $submission) { // Insert a record into a 3rd-party module table when a submission is added. db_insert(''mymodule_table'') ->fields(array( ''nid'' => $node->nid, ''sid'' => $submission->sid, ''foo'' => ''foo_data'', )) ->execute(); }