Come usare Ajax in forma alterare in Drupal 7?


8

Ho creato un tipo di contenuto denominato "menu principale". Ho alcune liste selezionate che dipendono l'una dall'altra. Volevo visualizzare un elenco diverso quando sono selezionate caselle di controllo diverse. Ho capito che ho bisogno di usare Ajax per modificare il modulo al fine di raggiungere questo obiettivo, ma qualcuno può dirmi come usare Ajax con hook_form_alter?

L'ID del modulo che dovrei modificare è "main_menu_node_form". Quando provo ad accedere a questo modulo usando hook_form_alter()e aggiungo la #ajaxproprietà dei campi modulo, sembra che non riesca a farlo poiché i campi sono già resi prima che l'handle venga passato hook_form_alter(). Qualcuno può aiutarmi a risolvere questo problema?

Nota: ho creato il tipo di contenuto utilizzando hook_install().

function main_menu_content_type_form_main_menu_node_form_alter(&$form, &$form_state, $form_id) {
  dpm($form);
  dpm($form_state);

  $form['field_mlnk'] = array(
    '#ajax' => array(
      'callback' => 'main_menu_content_type_form_main_menu_node_form_alter_callback',
      'wrapper' => 'link-div',
      'method' => 'replace',
      'effect' => 'fade',
    ),
  );
}

1
Sarebbe utile vedere il codice del modulo che si sta tentando di modificare e il codice che si sta utilizzando per modificarlo.
kiamlaluno

@kiamlaluno Ho creato un tipo di contenuto main_menu usando la funzione hook_install. Volevo visualizzare i campi durante l'aggiunta di contenuti in base alla selezione effettuata negli elenchi. Devo aggiungere le proprietà ajax in hook_install o in Hook_form_alter.
Drupal Developer

Tuttavia, sarebbe utile vedere il codice che stai utilizzando hook_form_alter()(come hai scritto, "Quando provo ad accedere a questo modulo usando il modulo alter [... [...]").
kiamlaluno

@kiamlaluno Ho aggiunto lo snippet di codice alla mia domanda. Si prega di vedere questo e dimmi se il codice funziona o no.
Drupal Developer

Sarebbe perfetto se mostrassi anche il codice per main_menu_content_type_form_main_menu_node_form_alter_callback(); se tale funzione contiene codice errato, gli utenti non possono segnalare eventuali modifiche da apportare al codice per farlo funzionare.
kiamlaluno

Risposte:


7

Sarei in grado di darti alcune informazioni dettagliate su cosa stai facendo di sbagliato con hook_form_alter se includessi del codice effettivo dal tuo modulo personalizzato. Tuttavia, poiché non stai specificando alcun dettaglio, puoi guardare il video: Come creare bellissimi moduli in Drupal 7 (nota che ho inserito l'URL in modo che inizi nel momento in cui è descritto Ajax). Circa 5 minuti di visione di questo probabilmente ti daranno la risposta alla tua domanda (poiché descrive esattamente come usare Ajax con hook_form_alter), ma se sei davvero impaziente, il codice effettivo viene mostrato da qualche parte qui intorno .

Se vuoi vedere un esempio live, ben testato e documentato di un modulo che viene modificato usando ajax, ce n'è uno nel modulo Esempi . Puoi trovare l'hook reale qui e la funzione di callback qui .

Spero che questo possa essere d'aiuto. In caso contrario, forniscici ulteriori informazioni sul tuo codice e saremo in grado di dirti esattamente cosa stai facendo di sbagliato.


@ F123K Volevo modificare i campi esistenti nel modulo anziché aggiungere un nuovo campo al modulo. Quindi, per favore, dimmi come potrebbe essere fatto.
Drupal Developer

Post modificato con un hook di esempio e la funzione di callback.
F1234k,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.