2011-01-03 8 views
9

Estoy tratando de tener un botón que no sea de tipo "enviar", sino más bien un tipo de "botón" normal, usando los formularios api de drupal 7, pero parece que no puedo obtenerlo.En Drupal 7 form API: ¿Cómo creo una entrada de tipo "botón" (no "enviar")?

He intentado muchas cosas, como establecer #type en 'button', estableciendo #button_type en 'button' pero no importa lo que haga, drupal siempre crea un botón de tipo "submit".

+0

Esto no funciona? http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html/7#button – Kevin

+0

No. Para citar de la página: "Cuando se presiona el botón, el formulario se enviará a Drupal, donde se validará y reconstruirá". – Doron

+0

Oh. Supongo que su comportamiento predeterminado es hacer que el botón sea una acción, y no solo un botón. – Kevin

Respuesta

2

Es posible que desee comprobar this issue para más información y luego considerar this workaround. También es posible que pueda usar #markup para insertarlo manualmente.

12

Se puede utilizar:

"#executes_submit_callback" => FALSE 

Para desactivar el paso de "enviar".

Si sólo desea desactivar el "validar" paso, utilice:

"#limit_validation_errors" => array() 
+1

¡Esta fue una solución tan simple y efectiva! –

1

agregue la siguiente función en el archivo template.php de su plantilla.

function templatename_button($variables) { 
    $element = $variables['element']; 
    $type = strtolower($element['#button_type']); 
    switch($type){ 
    case 'submit': 
    case 'reset': 
    case 'button': 
     break; 
    default: 
     $type = 'submit'; 
     break; 
    } 
    $element['#attributes']['type'] = $type; 

    element_set_attributes($element, array('id', 'name', 'value')); 

    $element['#attributes']['class'][] = 'form-' . $element['#button_type']; 
    if (!empty($element['#attributes']['disabled'])) { 
    $element['#attributes']['class'][] = 'form-button-disabled'; 
    } 

    return '<input' . drupal_attributes($element['#attributes']) . ' />'; 
} 

y en su forma

$form['mybutton'] = array(
    '#type' => 'button', 
    '#value' => t('mytext'), 
    '#button_type' => 'button', 
); 
2

Una muy simple paso lateral es el siguiente en su forma

$form['your-form-element'] = array(
    '#type' => 'button', 
    '#name' => 'any-name', 
    '#value' => t('Button Text'), 
); 

Y en la plantilla de su formulario:

print str_replace('type="submit"', 'type="button"', drupal_render($form['your-form-element'])); 
+0

Para agregar a mi ejemplo anterior, esa es la versión de Drupal 6. En Drupal 7, cambie drupal_render para renderizar – badzilla

0

En algún momento necesitamos definir un botón predeterminado para enviar Es una forma, pero todos los elementos del botón (#type=button, submit) en Drupal, el atributo TYPE siempre es "submit", por lo que debe modificar este atributo para "button" que especifica un botón predeterminado que necesitábamos.

  1. Renderice el elemento de formulario y reemplace el atributo TYPE.

    echo strtr(drupal_render($form['btn']), array('type="submit"' => 'type="button"'));

  2. modificar la definición de la forma.

    form['btn']['#attributes'] = array('onclick' => 'this.type="submit"');

3

En Drupal 7 esto se puede lograr mediante la adición de:

'#attributes' => array ('onclick' => 'de retorno (false);'),

a la definición de tu botón. Por ejemplo:

$form['my_form'] = array(
'#type' => 'button', 
'#attributes' => array('onclick' => 'return (false);'), 
'#value' => t('My Button'), 
'#prefix' => t('<div class="myButton">'), 
'#suffix' => t('</div>') 
); 

Esto funcionó para mi aplicación.

Referencia: https://www.drupal.org/node/283065 bajo desactivación de botones y Sustitución de

Cuestiones relacionadas