Как сделать кнопку возврата с помощью API-формы Drupal? - PullRequest
5 голосов
/ 15 ноября 2011

Мне нужно сделать это, но с формами Drupal:

<input type="button" class="button-user" value="Back" onclick="location.href='edit'"/>

Я пытался сделать это, но это не сработало:

$form['back']['#prefix'] = "<input type='button' class='button-user' value='Back' onclick='location.href='edit''/>;

, а также:

$form['back'] = array(
  '#type' => 'button',
  '#value' => 'Back',
  '#attributes' => array(
     'class' => 'button-user',
     'onclick' => 'location.href=edit',        
   )       
 );

Ответы [ 7 ]

4 голосов
/ 15 ноября 2011
$form['back']['#markup'] = "<input type='button' class='button-user' value='Back' onclick='location.href=\'edit\''/>";
3 голосов
/ 09 сентября 2013
$form['back']['#markup'] = "<input type='button' class='button-user' value='Back' onclick='window.history.go(-1)'/>";

Это работает для любой страницы.

1 голос
/ 28 декабря 2015

Простейшая опция в Drupal Form API, с использованием # атрибутов опция.

$form['back-btn'] = array(
    '#type'                 => 'button',
    '#value'                => t('Back'),
    '#attributes'           => array('onclick' => onclick='window.history.back();'),
);
1 голос
/ 23 апреля 2015

Просто добавив мою версию, которая, кажется, отлично работает в 7, просто перехватите ее в цикле перестроения и вместо этого перенаправьте.Расширяемый, можно добавлять любые другие кнопки для выполнения каких-либо действий, обратите внимание, что написание значения «Назад» - это название «операции» (операции)… что-то, что смущало и раздражало меня, пока я не понял это.

0 голосов
/ 04 мая 2016

Это кнопка возврата, которую я использую.«Return false» позволяет избежать отправки формы.

 $form['back'] = array(
  '#type' => 'button',
  '#value' => t('<< Back'),
  '#attributes' => array(
    'onclick' => 'window.history.back();return false;',
  ),
);
0 голосов
/ 22 декабря 2015

Я предпочел решение, не требующее JavaScript. Похоже на ответ Гризли, но не помещая его в форму проверки, которая выглядела ужасно. Но код ниже предлагает кнопку ссылки.

function my_form(&$form, &$form_state) {
  // Some form elements

  // Regular submit button
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
  );

  // Back button (different submit handler prevent the standard submit and takes us
  // to the redirect-submit).
  $form['actions']['back'] = array(
    '#type' => 'submit',
    '#value' => t('Go back'),
    '#submit' => array('custom_back_button'),
  );
}

// Custom form callback for redirection.
function custom_back_button($form, &$form_state) {
  $form_state['redirect'] = '/edit';
}
0 голосов
/ 28 мая 2013

Другое решение будет таким:

function YOUR_MODULE_form_alter(&$form, &$form_state, $form_id) {
  switch($form_id) {
    case "YOUR_FORM_ID":

      unset($form['#validate']); //Maybe necessary

      $form['actions']['back'] = array(
        "#type" => "button",
        "#value" => t('Back'),
        "#weight" => 15,
        "#executes_submit_callback" => FALSE,
        '#limit_validation_errors' => array(),
        '#ajax' => array(
          'callback' => 'YOUR_MODULE_go_back_callback'
        )
      );

      break;
    default:
      break;
  }
}

function YOUR_MODULE_go_back_callback() {
  $html = '
  <script type"text/javascript">
  window.history.go(-1);
  </script>
  ';
  return $html;
}
...