2012-07-04 29 views
5

Realmente estoy luchando para entender la API Drupal Form ... en realidad Drupal en general.Drupal 7 - Anulando el Formulario Básico HTML Mark-Up

Aquí es mi problema, he creado un formulario con renders bien, sin embargo, como lo que he de hacer ahora es divs envoltura alrededor de ciertos elementos de formulario, esto es lo que mi ESTILO forma de una manera que va a satisfacer mis sitio y no una basura estándar de caja.

¿Alguien puede por favor ayudar o al menos apuntar en la dirección correcta de un "buen" tutorial y no algunas tonterías breves y vagas que están enyesadas en toda la web?

gracias.

+0

¿Has creado un formulario personalizado o quieres diseñar uno existente? Pruebe este [tutorial] (http://www.jaypan.com/tutorial/themeing-drupal-7-forms-including-css-and-js) o [este] (http://www.digett.com/blog/26/05/2011/how-theme-comment-form-drupal-7) –

+0

He creado mi propio formulario personalizado usando la API de formulario pero no puedo darle el estilo que quiero porque necesito agrupe una carga de elemento, es decir, detalles personales (nombre, dirección, teléfono, etc., etc.). Básicamente quiero deslizar partes del formulario en la pantalla, cuando cada parte se completa, es por eso que necesito agregar un marcado HTML adicional. –

+0

gracias por la respuesta. El primer tutorial enviado por JAYPAN funciona bien después de liberar tuve que reiniciar el módulo después de ciertos cambios. –

Respuesta

13

hook_form_alter es tu amigo aquí.

En archivo template.php de su tema puede añadir prefijos y sufijos a las formas, los elementos de formulario, etc.

A continuación se muestra un ejemplo de un sitio que hice recientemente.

function bhha_form_alter(&$form, &$form_state, $form_id) { 
    if ($form_id == 'user_login') {  
    $form['#prefix'] = '<div class="loginForm">'; 
    $form['#suffix'] = '</div>'; 
    $form['name']['#title'] = Null; // Change text on form 
    $form['name']['#description'] = Null; // Change text on form 
    $form['name']['#attributes'] = array('placeholder' => t('username')); 
    $form['name']['#size'] = '30'; 
    $form['pass']['#title'] = Null; 
    $form['pass']['#description'] = Null; // Change text on form 
    $form['pass']['#attributes'] = array('placeholder' => t('password')); 
    $form['pass']['#size'] = '30'; 
    //$form['actions']['submit']['#value'] = t('password'); 
    $form['actions']['submit'] = array('#type' => 'image_button', '#src' => base_path() . path_to_theme() . '/images/Login.png'); 
    $form['links']['#markup'] = '<a class="user-password" href="'.url('user/password').'">' . t('Forgot your password?') . '</a>'; // Remove Request New Password from Block form 
    $form['links']['#weight'] = 540; 
    } 
} 

Inspeccione su código para obtener el formulario que desea para la id del tema. Reemplace los guiones bajos con guiones y debería poder usar el ejemplo anterior para hacer lo que quiera.

En su forma más básica que supongo que un ejemplo sería:

function THEME_NAME_form_alter(&$form, &$form_state, $form_id) { 
    if ($form_id == 'FORM_ID') {  
     // Adds a wrapper div to the whole form 
    $form['#prefix'] = '<div class="loginForm">'; 
    $form['#suffix'] = '</div>'; 

     // Adds a wrapper div to the element NAME 
    $form['name']['#prefix'] = '<div class="formRow">'; 
    $form['name']['#suffix'] = '</div>'; 
    } 
} 
+0

gracias por la ayuda que la función Alter realmente ayudó, intenté algunas de las otras maneras de hacerlo también. –

+0

¿Qué hace cuando tiene una lista dinámica de casillas de verificación (de los términos de la taxonomía) y no puede codificar su nombre de manera rígida? Tengo una casilla de verificación tipo # con un número dinámico de #opciones. ATM cada opción muestra un contenedor div no deseado, no quiero ningún contenedor. Quiero control total –

2

varias maneras de hacer esto. Por ejemplo

  1. Si usted está buscando para sobrescribir el marcado sobre el terreno, se puede usar field.tpl.php o template_preprocess_field().
  2. Si desea cambiar el marcado adjunto de su formulario (aunque me pregunto por qué, dado que el marcado estándar de Drupal es increíblemente estilizable), querría registrar las funciones del tema y manejar el marcado de esa manera. Aquí hay un nice article que elabora sobre esto.
Cuestiones relacionadas