Estoy interesado en incrustar un formulario de widget de campo fuera del contexto del formulario de edición de nodo completo.
He mostrado formularios completos en el pasado usando drupal_get_form pero eso no parece aplicarse a formularios de campo solitarios.
¿Es posible mostrar un formulario de widget de campo en funcionamiento? ¿Cuál sería la mejor manera de hacerlo?
Tanto los widgets de campo como los formularios "normales" se parecen mucho, así que si esto no es posible, ¿qué se requeriría para "cambiar" un formulario de widget a un formulario normal?
Esta pregunta parece estar pidiendo algo similar, pero no entiendo la respuesta. Esa respuesta especifica el uso de hook_field_widget_form_alter ; lo que no entiendo es cómo hacer que se muestre el Formulario de campo, no cómo engancharlo una vez que se está creando.
#access = FALSE
que parecía hacky en este contexto.Estaba usando intensamente la función sugerida por ttk, pero creo que una actualización reciente arruinó las cosas ...
Aquí hay una nueva versión de la solución anterior que funciona bien con Drupal 7.22 y ctools 7.x-1.3.
Entonces, como en la publicación anterior, llama a su función personalizada de esta manera:
Observe que el paquete de entidades ahora es un parámetro. Hice esto porque también estaba usando esta función para editar usuarios. De esta manera, también se puede usar para el término de taxonomía, o cualquier otra entidad.
Y el
my_field_attach_form
se define como:Esta función me ahorró mucho tiempo, ¡espero que también lo haga para usted!
fuente
Aquí está la solución usando el
ctools_field_invoke_field()
método. En su función de formulario personalizado, agregue:donde la
my_field_attach_form
función se define comoTenga en cuenta que su sitio necesita tener ctools habilitado. Es una pena que Drupal no incluya una función auxiliar como esta de forma predeterminada.
fuente
No pude hacer que el método ctools funcionara y decidí hacerlo de esta manera.
Este código estaría dentro de una función de formulario, por lo que $ form y $ form_state ya se pasarían.
Primero cree un nodo vacío de un tipo que tenga el campo que desea representar.
Dupliqué las variables de forma para no golpear el original.
Saque el campo que está buscando y agréguelo al formulario.
Utilicé este método para representar el widget de selección de taxonomía, el widget de casillas de verificación de taxonomía y el widget de selección jerárquica en un formulario personalizado. (El widget de autocompletar taxonomía se procesa pero arroja un error al enviar)
Finalmente renderizar e imprimir
fuente
ctools_field_invoke_field()
método descrito anteriormente también funciona.He creado formularios a partir de campos individuales usando
Esto debería devolver el formulario de widget requerido que se puede utilizar en cualquier forma como
Para obtener los valores para los 2 parámetros anteriores, use:
Para otros parámetros, puede consultar el enlace de la API aquí
Esto devuelve el formulario de widget predeterminado definido en el campo de tipos de contenido.
Espero que esto ayude a alguien :)
fuente