it-swarm-es.com

Formularios temáticos alternativos para un solo tipo de contenido personalizado

En un sitio, me gustaría un formulario "Entrada rápida" para un tipo de contenido personalizado en la página frontal, al mismo tiempo que mantiene el formulario "NORMAL NORMAL" NO PERSONALIZADO "NORNEO/ADD/MYCONTENTTYPE". Soy capaz de personalizar el formulario "Normal" utilizando la función Theme_Hook que devuelve la matriz adecuada que apunta a mi función que hace que el formulario sea el formulario ('plantilla' => 'forma de nodo').

Pero idealmente me gustaría mantener ambas versiones del formulario, lo que representa mi forma personalizada en la portada en un bloque, y con la forma normal en el lugar normal "Nodo/ADD/MYCONTENTTYPE". Pensé que podría intentar detectar en tiempo de ejecución en la función 'formulario de algunos nodos' si, por ejemplo, se invocó a través de una ruta especial "nodo/agregado/mycontenttype/frontpage", pasando una variable o similar. Todavía no he logrado hacer esto, pero al menos en teoría debería ser factible.

Pero, ¿alguna experiencia experimentada Drupal desarrolladores tiene mejores formas de lograr lo que estoy haciendo, cosas como tener múltiples caminos apuntando a diferentes funciones de representación de plantillas o similares?

2
Marius Kjeldahl

Mi primer pensamiento (en Drupal 6) sería usar hook_form_alter para establecer un valor diferente #theme en el formulario dependiendo de la ruta.

p.ej

mymodule_form_alter(&$form, &$form_state, $form_id) {
 if ($form_id = 'my_form_id') {
  if ($_GET['q'] == 'somepath') {
   $form['#theme'] = 'function_one';
  } elseif ($_GET['q'] == 'someotherpath') {
    $form['#theme'] = 'function_two';
  }    
 }
}
0
cam8001

Lo que terminé haciendo en mi implementación estaba usando EntityForm (D7) y usando reglas para mapear y crear el nodo apropiado cuando se guarda el formulario de entidad.

0
Remog

cam8001 me indicó con respecto a la configuración '# #theme'. En mi plantilla.php tengo:

<?php

function groc_theme($existing, $type, $theme, $path) {
  return array(
    'purchase_node_form_fp' => array(
      'render element' => 'form',
      'template' => 'groc-purchase-node-form'
    )
   );
}

function groc_form_alter(&$form, &$form_state, $form_id) {
  if (arg(3) == 'fp') {
    $form['#theme'] = 'purchase_node_form_fp';
  }
 }
?>

y en mi compra-compra-nodo-form.tpl.php i, luego rindes la forma especial. En el Comest_Form_Alter de arriba, he codificado codificado un elemento de ruta en lugar de usar un parámetro de solicitud, pero es similar a la solución aceptada. La forma en que funciona el código anterior es que si quiero el formulario "especial", simplemente agrego en un "/ FP" al enlace NORMAL Agregar nodo.

0
Marius Kjeldahl