2011-01-03 20 views
9

Próbuję mieć przycisk, który nie jest typem przycisku "prześlij", ale raczej zwykłym typem "przycisku", używając api formularza drupal 7, ale nie mogę go uzyskać.W API formularza Drupal 7 - Jak utworzyć wejście typu "button" (nie "submit")?

Próbowałem wielu rzeczy, na przykład ustawiająC#type na "przycisk", ustawiająC#przeciętny typ na "przycisk", ale bez względu na to, co robię, drupal zawsze tworzy przycisk typu "prześlij".

+0

to nie działa? http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html/7#button – Kevin

+0

Nie. Aby zacytować na stronie: "Po naciśnięciu przycisku formularz zostanie przesłany do Drupala, gdzie zostanie zatwierdzony i przebudowany." – Doron

+0

Oh. Domyślam się, że jego domyślnym działaniem jest sprawienie, aby przycisk był akcją, a nie tylko przycisk przycisku. – Kevin

Odpowiedz

12

Można użyć:

"#executes_submit_callback" => FALSE 

Aby wyłączyć krok "Wyślij".

Jeśli tylko chcesz wyłączyć „zatwierdzić” Krok, przeznaczenie:

"#limit_validation_errors" => array() 
+1

To było takie proste i skuteczne rozwiązanie! –

1

dodać następującą funkcję w pliku template.php Twojego szablonu.

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']) . ' />'; 
} 

w formularzu

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

bardzo prosty boczny krokiem jest następujące w formularzu

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

A w szablonie formularza za:

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

Aby dodać do mojego wcześniejszego przykładu - jest to wersja Drupal 6. W Drupal 7, zmień element drupal_render na render – badzilla

0

Kiedyś potrzebujemy zdefiniować domyślny przycisk do przesłania to formularz, ale wszystkie elementy przycisku (#type=button, submit) w atrybucie drupal, TYPE to zawsze "submit", więc należy zmodyfikować ten atrybut na "button", który określa domyślny przycisk, który potrzebowaliśmy.

  1. Renderuj element formularza i zastąp atrybut TYPE.

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

  2. Modyfikacja definicji formularza.

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

3

w Drupal 7 może być dokonane przez dodanie:

'#attributes' => tablicę ('onclick' => 'powrotne (fałsz)'),

do definicji przycisku. Na przykład:

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

To działało dla mojego wniosku.

referencyjny: https://www.drupal.org/node/283065 pod Wyłączenie i przesłanianie Przyciski