Puoi avere più di un modulo nella stessa pagina; guarda cosa è stato fatto da node_admin_content () , che utilizza il seguente codice:
function node_admin_content($form_state) {
if (isset($form_state['values']['operation']) && $form_state['values']['operation'] == 'delete') {
return node_multiple_delete_confirm($form_state, array_filter($form_state['values']['nodes']));
}
$form = node_filter_form();
$form['#theme'] = 'node_filter_form';
$form['admin'] = node_admin_nodes();
return $form;
}
Tralasciando la prima istruzione IF, la funzione sta aggiungendo due diversi moduli che hanno i loro gestori di invio.
Il problema è con i campi del modulo che si ripetono due volte. La seguente struttura di array creerebbe problemi quando l'array di moduli viene appiattito, poiché ci sarebbero due campi "coupon".
$form['first form']['coupon'] = array(
'#type' => 'textfield',
'#title' => t('Coupon'),
'#default_value' => variable_get('mymodule_coupon'),
'#size' => 60,
'#maxlength' => 128,
'#required' => TRUE,
);
$form['second form']['coupon'] = array(
'#type' => 'textfield',
'#title' => t('Coupon'),
'#default_value' => variable_get('mymodule_coupon'),
'#size' => 60,
'#maxlength' => 128,
'#required' => TRUE,
);
Senza vedere il codice in uso, potrei pensare che usare un callback di pagina che chiama drupal_get_form () sia probabilmente il modo più semplice, nel tuo caso.
$output = drupal_get_form("form identifier") . drupal_get_form("form identifier");
Ho provato a utilizzare il seguente codice in Drupal 6.
module_load_include('inc', 'path', 'path.admin');
$output = drupal_get_form('path_admin_form') . drupal_get_form('path_admin_form');
Il contenuto di $output
per i due moduli era il seguente (ho rimosso l'output per i campi del modulo singolo).
<form action="/dr61/devel/php" accept-charset="UTF-8" method="post" id="path-admin-form-1">
<div><div class="form-item" id="edit-language-1-wrapper">
<input type="submit" name="op" id="edit-submit" value="Create new alias" class="form-submit" />
<input type="hidden" name="form_build_id" id="form-4eb9304baac34f292901ca23d925ff03" value="form-4eb9304baac34f292901ca23d925ff03" />
<input type="hidden" name="form_token" id="edit-path-admin-form-form-token" value="cd429a06b84e381eb82ef04cd5033eeb" />
<input type="hidden" name="form_id" id="edit-path-admin-form" value="path_admin_form" />
<form action="/dr61/devel/php" accept-charset="UTF-8" method="post" id="path-admin-form-1">
<div><div class="form-item" id="edit-language-1-wrapper">
<input type="submit" name="op" id="edit-submit-1" value="Create new alias" class="form-submit" />
<input type="hidden" name="form_build_id" id="form-fb363c7ca6d88f71d98e86f8a69b0379" value="form-fb363c7ca6d88f71d98e86f8a69b0379" />
<input type="hidden" name="form_token" id="edit-path-admin-form-form-token-1" value="cd429a06b84e381eb82ef04cd5033eeb" />
<input type="hidden" name="form_id" id="edit-path-admin-form-1" value="path_admin_form" />
Non esiste un conflitto tra l'ID HTML assegnato allo stesso campo del modulo e il valore per "form_build_id" (o "form_token") è diverso nei due moduli.
L'implementazione di hook_form_alter()
usato per modificare il modulo dovrebbe essere in grado di capire in quale caso modificare il modulo, oppure entrambi i moduli mostrerebbero gli stessi campi.
Dal punto di vista dell'esperienza dell'utente, non sono sicuro che mostrare due diversi moduli con i propri pulsanti di invio sia il modo migliore per fare ciò che si sta tentando di ottenere.
Penserei che sarebbe meglio usare un modulo che mostri campi diversi in base ai valori impostati per altri campi. Ad esempio, il modulo potrebbe avere un selettore per il tipo di coupon e mostrerebbe diversi campi modulo in base al tipo di coupon selezionato.
hook_forms()
non risolve automaticamente questo. Se usi semplicemente lo stesso modulo due volte sulla stessa pagina, hai ancora il problema di ripetere lo stesso campo del modulo due volte.