2009-11-05 40 views
5

Deseo crear un formulario de entrada para el usuario registrado, separado del formulario de creación de contenido del administrador. Cada presentación creará múltiples nodos. Para ilustrar el caso, utilizaré el tipo de contenido Proyecto y Revisión.Forma de nodo personalizado de Drupal

Proyecto: Título , Descripción, propietario, Clasificación.

revisión: Título , Crítico, Proyecto, dificultad

He fijado los tipos de contenido, junto con sus campos usando módulos CCK. Quiero crear un formulario de entrada para que se muestre para los miembros registrados (no administrador). Su campo incluye Nombre del proyecto, Descripción, propietario, Clasificación, revisión, dificultad.

Cuando se envía el formulario, Nombre del proyecto, Descripción, propietario y value Clasificación entra en un nuevo nodo Proyecto, donde el resto entra en revisión nueva nodo.

Otra personalización que me gustaría hacer es para Clasificación y campo de entrada dificultad utilizar star rating input.

¿Cuál sería la mejor manera de lograr esto? ¿Debo crear un módulo personalizado y un formulario personalizado (¿Alguien me puede indicar cómo hacerlo)? ¿O hay algún módulo que pueda usar?

Gracias

Respuesta

8

Hay varias maneras de hacer esto:

  1. hacer todo desde cero: esto es lo que theunravelers suggestion (1) se reduce a - construir el formulario usted mismo, añada su propia validación y presentar los manipuladores y el enviar, construir dos objetos de nodo y guardarlos.Tendrás control/flexibilidad total, pero es bastante trabajo y debes comprender bien el funcionamiento interno de Drupals para hacerlo bien.

  2. 'Sobrecarga' uno de tus tipos de contenido con los campos necesarios para el otro y modifica los tipos de contenido 'sobrecargado' (y edita/visualiza parcialmente) la lógica para crear el otro tipo de contenido de los campos adicionales, mientras se oculta ellos en la 'sobrecargada' en la pantalla y editar. Puede find an article describing this approach here. Este es un enfoque considerablemente más fácil que el # 1, pero lo consideraría un poco 'hackish', debido a la definición del tipo de contenido frente a la discrepancia de visualización.

  3. Una variación menos 'hackish' del n. ° 2 sería configurar sus tipos de contenido normalmente y simplemente manipular el proceso de edición y envío a través del hook_form_alter(). Haría más o menos lo mismo que con el método n.º 2, pero en lugar de "sobrecargar" un nodo con los campos adicionales por adelantado, simplemente inyéctelos en el formulario de edición directamente en hook_form_alter (ya sea desde cero o cargando el edite la forma del otro nodo en el fondo y copie las definiciones de campo relevantes de eso). Al enviar el formulario, elimina esos campos adicionales mientras los usa para construir su otro nodo. Esto requiere un poco más de trabajo y conocimiento que el n. ° 2, pero debe ser un poco más estable y fácil de ajustar/mantener que eso, ya que no tiene que lidiar con una definición de tipo de contenido vs. desajuste de visualización.

Además, no se ha especificado cómo se quiere tratar con la edición de nodos existentes - me gustaría sugerir la adición de un nodereference a uno de los nodos para realizar un seguimiento de su asociación. De esta forma, también podría agregar la lógica para editar ambos nodos desde un formulario, así como la eliminación sincronizada, si lo desea.

+0

Me gusta mucho el # 2, pero podría decir que crear un tercer tipo de contenido que es esencialmente una fusión de los dos. Cada vez que desee editar los dos, simplemente edite el tercero y los cambios se propaguen. Eso podría ser tan fácil como el # 2, pero un poco menos hackish. – theunraveler

4

Eso suena como un trabajo personalizado para mí. Puede usar el Form API en su módulo para hacer la forma. Mire casi cualquier otro módulo para ver ejemplos de cómo funciona la API de formulario. Luego, querrá crear un objeto $ node a partir de todos los valores de esos campos y usar node_submit() y node_save() para crear realmente los diferentes nodos.

Sugeriría que tal vez consulte el módulo Webform para usar la API de formulario y secuestrar el proceso de envío para que cree esos dos tipos de nodos.

2

Opción # 3, usando una de las soluciones más jóvenes en la creación de un campo de nodereferencia CCK que puede apuntar a un nodo no existente, y crearlo en el envío.

Node Reference Create parece uno de los proyectos más estables.

Node Reference Auto-create y Node Reference Field parecen tener más valor agregado para determinar valores en el nuevo nodo.

Esto tiene una ventaja secundaria en la creación de una nodereferencia entre los módulos, que puede usar para integrar los nodos cuando se representan, crear Vistas y más.

Cuestiones relacionadas