drupal-header

Múltiples drupal_execute() en Drupal 6 es imposible… O NO :)

El otro día Nicolas, un amigo y compañero de trabajo se quebró la cabeza con este tema. La cosa debía ser mas bien simple, en un bucle tenia que procesar una serie de datos, rellenar un formulario programaticamente y darle un drupal_execute() para que se creen una cantidad de nodos…

Eso fue de todo menos simple. Resulta que el que programó la función drupal_validate_form() se olvidó que podía caber la posibilidad de que alguien quisiera llamarlo en bucle, y no se le ocurrió mejor idea que cachear la primera validación y cortar cualquier otra dentro de un mismo request.

La solución por la que se decantó Nicolas fue la de crear una implementación propia de ciertas funciones. Antes que digan algo, recomiendo que se den una vuelta por los foros de Drupal y se convensan de la imposibilidad de aplicar una solución mejor.
De hecho esta solución es bastante buena, porque no tenes mas que poner el código en tu modulo, e invocar la versión modificada de drupal_execute().

La modificación se tuvo hacer mucho antes de llegar a drupal_validate_form() para poder tomar control sobre la misma, por lo que en esta modificación hubo que reemplazar funciones de:
drupal_execute() -> drupal_execute_no_cache()
drupal_process_form() -> drupal_process_form_no_cache()
drupal_validate_form() -> drupal_validate_form_no_cache();

los archivos modificados son estos:

Como dije. Copienlo a su módulo y usen drupal_execute_no_cache() en lugar de drupal_execute().

2 Comments

  • Daniel 29/08/2010

    Hola que tal amigo, antes que nada, felicidades por la web, he obtenido muchos tips atravez de ella, bueno el motivo del mail es saber si me puedes ayudar con un formulario de drupal para subir un archivo al servidor, espero y me puedas ayudar
    Gracias!!!

  • trebor 22/10/2011

    Me presento:
    soy mas o menos nuevo en drupal, se programar algunos programillas en php y en general me defiendo bien de lo que es la programación (sino lo busco en google XD).

    Mi problema:
    He creado un nodo con código php que importa/actualiza otros nodos desde un xml externo. El código funciona bien (en veinte segundos me crea o actualiza unos 400 nodos), le falta alguna comprobación de seguridad, etc…. (cosas que iré reparando)

    El problema es que me gustaría que al ejecutar el código apareciera una barra de progreso (la típica de drupal, la azul con rayas, ya me va bien). Los motivos són que visualmente ayuda (tiene que estar de cara a los usuarios) y que por lo que tengo entendido no limita al script a un máximo de 60s.

    Lo único que he encontrado más o menos coherente es en la api de drupal pero por lo que parece solo es para la subida de archivos.

    Gracias por adelantado por tu ayuda

:).