Tengo una situación en la que me gustaría poder crear nodos y nodos de referencia al mismo tiempo. ¿Hay alguna solución para esto que funcione bien para esto?
Para aclarar de lo que estoy hablando, considere la siguiente situación ( muy simplificada en aras de la explicación):
Hay una clase de tipo de contenido que tiene un campo referenciado de nodo, Estudiante . Me gustaría que los usuarios puedan crear nodos de clase y nodos de estudiantes al mismo tiempo. También me gustaría que puedan usar el autocompletado de referencia de nodo normal para elegir un Estudiante que ya existe.
Idealmente, me gustaría que todo esto funcione desde una sola página, y también que funcione dentro de los límites del sistema de permisos de Drupal para que pueda tener varios roles y varios permisos.
Sí, sé que en este caso , sería mejor que el Estudiante sea un usuario (en lugar de un nodo), pero Clase y Estudiante son solo para ilustrar la situación. El escenario real realmente necesita referencias de nodo.
Hay una pregunta similar a esto, Crear nodos referenciados junto con el nodo padre , pero estoy específicamente interesado en las soluciones de Drupal 7 únicamente.
EDITAR:
No solo busca módulos existentes, sino que también comienza el código personalizado.
Respuestas:
Utilizo el cuadro de diálogo Referencias , que pone un pequeño "+" en los campos de referencia existentes, lo que permite al usuario crear un nuevo alumno directamente desde el formulario de edición del nodo de clase .
fuente
Para un par de sitios diferentes ahora, he hecho esto usando un modal ctools, y aquí está el resumen básico de cómo lo implementé (muy simple):
Cree una devolución de llamada de página personalizada en el hook_menu () de su módulo que muestre un formulario de nodo básico para el nodo al que desea hacer referencia (para un nodo 'estudiante', solo tenga un campo de nombre y quizás un campo de año de graduación). En ese formulario, en su devolución de llamada de envío, guarde el nodo usando node_save () y almacene el ID del nodo (que debe estar en $ node-> nid después de pasar un nuevo objeto de nodo a node_save ()) en el formulario
$form_state['storage']['student_id']
.Modifique la forma del nodo maestro / clase usando hook_form_alter () . Necesita hacer algunas cosas aquí:
Primero, debe agregar el javascript y la funcionalidad modal de ctools para que ctools sepa qué hacer con su enlace especial:
En segundo lugar, debe agregar un enlace a la devolución de llamada de la página que creó en el paso 1 en el menú de enlace, y con ese enlace, agregue la clase 'ctools-use-modal'. Así por ejemplo:
Aquí hay un ejemplo de devolución de llamada:
En
mymodule_create_student_form($form, $form_state)
, cree su formulario como lo haría normalmente, y luego, en la funciónmymodule_create_student_form_submit(form, &$form_state)
(enviar), establezca el valor del NID del nodo de estudiante recién creado$form_state['storage']['student_id']
. Así es como obtendrá ctools / AJAX para devolver el nuevo nid a su formulario de clase original.En mi situación, estaba usando el modal para escupir algo de marcado a la página original, así que pasé el marcado a un marcador de posición usando
ajax_command_append()
, luego tuve un jQuery en la página original monitoreando el marcador de posición div, y cuando encontró contenido en , movería el HTML al lugar apropiado en otro lugar del formulario de nodo. En su caso, deberá completar un campo de referencia de nodo único o de valores múltiples, que puede ser un poco más complejo. Todavía no he necesitado hacer eso ... así que no tengo más consejos que ofrecer para esa parte de la ecuación.fuente
Una opción podría ser agregar soporte de nodo al módulo de formulario de entidad en línea .
EDITAR: El formulario de entidad en línea tiene soporte de nodo hoy en día.
fuente
Los siguientes módulos se pueden utilizar en Drupal 7:
Noderefcreate solo crea un nuevo nodo si no existe mediante el asistente de autocompletar. Nodeconnect y entityconnect proporcionan el botón agregar / editar en la referencia de nodo, si se utiliza el asistente de autocompletar. Nodeconnect solo lo proporciona para referencia de nodo, mientras que entityconnect lo proporciona para referencia de nodo, referencia de entidad, referencia de término y referencia de usuario.
Inline_entity_form proporciona dos widgets adicionales para referencia de entidad (solo).
fuente
Si esto es realmente similar al escenario de la escuela y sus estudiantes pueden unirse a varias clases, usaría:
Esto también requeriría usar Token , filtrar la vista en función del nid de clase y configurar un valor predeterminado para el campo de referencia del nodo de Asistencia como el nid de clase actual.
Eventualmente, podría asignar su tipo de contenido de Estudiante a Usuario con una referencia de usuario.
fuente