it-swarm-eu.dev

Jak mohu přidat další tlačítko a odeslat popisovač do vystaveného formuláře pohledu?

Chtěl bych přidat druhé tlačítko do exponovaného zobrazení formuláře.

Dokážu si nechat zobrazit tlačítko, ale nechat ho zavolat obsluhujícímu tlačítku. Místo toho se chová stejně jako standardní vyhledávací tlačítko, které zobrazení poskytuje automaticky.

Jak mohu nechat své druhé tlačítko zavolat na samostatnou obsluhu?

Níže je to, co jsem se snažil udělat.

(FWIW, mým konkrétním cílem je nechat uživatele, aby použil vystavený pohledový formulář k vyhledání existujícího uzlu, pak, pokud jej nenajde, aby pokračoval a zveřejnil nový uzel. Chci tedy tlačítko, které bude volat akce zaúčtování nového uzlu.)


function my_module_form_alter(&$form, &$form_state, $form_id) {
  switch ($form_id) {
    case 'views_exposed_form':
      if ($form['#id'] = 'views-exposed-form-my-module-page-1') {
        // Add a button
        $form['my_button']['#type'] = 'button';
        $form['my_button']['#value'] = t('My Extra Button');
        $form['my_button']['#submit'] = array('my_module_button_handler');
      }
      break;
  }
}

function my_module_button_handler($form, &$form_state) {
  // do something here
}
4
chipcleary

Dobře, nechal jsem to fungovat.

Potřeboval udělat několik věcí:

1) Vypněte na formuláři AJAX) (Když jsem ho měl, fungovalo to, jako kdybych klikl na výchozí tlačítko, i když jsem klikl na své tlačítko ($ form_state ['clicked_button']) ['#value'] bylo vždy výchozí tlačítko).

2) V my_module_button_handler nejen nastavte $ from_state ['redirect'], ale také $ form_state ['no_redirect'] = FALSE.

Pokud byste věděli, jak s tím pracovat, AJAX on), ocenil bych tip.

2
chipcleary

Obslužný program pro odeslání není ve výchozím nastavení vyvolán u prvku typu tlačítko api formuláře. Pokud chcete na tlačítku spustit obslužný program pro odeslání, musíte přidat

$form['my_button']['#executes_submit_callback'] = TRUE;

Jako vedlejší poznámka to nebude případ, pokud #typ byl 'předložit', protože executes_submit_callback je ve výchozím nastavení roven true pro daný typ prvku.

Snad to pomůže.

2
ericduran