Limitar nodos en Drupal mediante validación en formulario

En el artículo anterior hacíamos posible la entrada de contenido para los slides de cabecera. Comentamos también que seria interesante limitar el número de header slides que podríamos añadir, ya que no tiene mucho sentido tener más de 5 elementos de este tipo. Este planteamiento se puede generalizar para cualquier tipo de contenido y sirve para limitar el número de nodos de un tipo de dato que podemos generar. Esta validación la realizamos en el formulario de entrada de datos.

formulario_añadir_nodo

Este tipo de validaciones hay que realizarlas en un módulo ya que no tienen que ver con la presentación de datos.

Consejo: No llamar al módulo con el mismo nombre del tema. Yo me he encontrado que Drupal llamaba dos veces a una validación.

Una vez construido el módulo (p.ej un módulo con funciones varias para nuestro proyecto) añadimos las dos funciones

La primera función que usamos es hook_form_FORM_ID_alter. El form_id siempre es [node-type]_node_form, en nuestro caso slide_cabecera_node_form. De esta forma granulamos mejor nuestro código en lugar de usar un hook mas generico y hacer un if dentro. Aquí simplemente añadimos un validador a la lista de validadores del formulario.

El validador es nomesmascotesmod_form_slide_cabecera_node_form_validate (el nombre no tiene que seguir ningún patrón particular). Distinguimos si el formulario esta en edición o creación verificando que exista el número de identificación. En caso de creación realizamos la consulta en base de datos para ver si hemos llegado al tope.

En caso de que existan 5 slides enviamos un mensaje de error que romperá el flujo habitual de guardado.

formulario_error_añadir_nodo