Estoy buscando una forma de incrustar un formulario "agregar nodo" en una página de destino. Estaba usando Form Block , pero parece traer muchos errores porque estaba usando una versión de instantánea de desarrollo.
19
Estoy buscando una forma de incrustar un formulario "agregar nodo" en una página de destino. Estaba usando Form Block , pero parece traer muchos errores porque estaba usando una versión de instantánea de desarrollo.
Respuestas:
Puedes usar:
fuente
node_add()
no está definido, querrá agregarloif (!function_exists('node_add')) { module_load_include('inc', 'node', 'node.pages'); }
al principio. Esta información proviene de aquí: ( kahthong.com/2012/01/embed-drupal-node-form-anywhere )Aunque la respuesta de Daniel Wehner es absolutamente correcta y funciona, quería agregar dos problemas comunes que enfrenté con este enfoque y soluciones para superar esos problemas. Primero mi código, luego las explicaciones:
¿Por qué lo hice así, en lugar de lo simple de Daniel
node_add
?Problema 1: la
node_add()
función cambia el título de la página a Crear 'tipo de nodo' , esto está codificado en la función.Solución 1: en lugar de usar la
node_add
función, copié el código y eliminé eldrupal_set_title
. El código anterior es el mismo código que lanode_add
función, excepto de esta línea.Problema 2: en la forma incrustada, algunas funciones ajax no funcionaron. Por ejemplo, si tiene un campo que puede tener valores ilimitados, de modo que tiene un botón 'Agregar otro elemento', o si tiene un campo de archivo de carga en su formulario, no funcionan.
Solución 2: en su módulo personalizado, implemente
hook_menu_alter()
para rutas de llamada ajax e incluyanode.pages.inc
.fuente
function YOURMODULE_form_NODETYPE_node_form_alter(&$form, &$form_state) { form_load_include($form_state, 'inc', 'node', 'node.pages'); }
Si uso el código de respuesta aceptado ...
... dentro de una función de devolución de llamada de página,
print drupal_render..
esto da como resultado una página completamente sin tema (aspecto roto).Entonces, en cambio, acabo
return
de editar el$form
:fuente