Utilisez CTools qui peut insérer un formulaire dans un modal lorsqu'un utilisateur clique sur un lien.
Veuillez consulter le tutoriel suivant: Insérez un formulaire dans un modal contextuel avec CTools et Drupal 7, ce qui simplifie ce processus en quelques étapes.
Fondamentalement, vous devez définir votre hook_menu()
rappel pour votre formulaire modal:
$items['mymodule/%ctools_js'] = array(
'page callback' => 'mymodule_callback',
'page arguments' => array(1),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
puis créez un générateur de liens qui retourne le code HTML:
/**
* Helper function to make a link.
*/
function _mymodule_make_link($link_text = '') {
// Set a default value if no text in supplied.
if (empty($link_text)) {
$link_text = 'Magical Modal';
}
return '<div id="magical-modal-link">' . l($link_text, 'mymodule/nojs', array('attributes' => array('class' => 'ctools-use-modal'))) . '</div>';
}
afin qu'il puisse être utilisé dans le rappel de votre page, par exemple:
/**
* An example page.
*/
function mymodule_page() {
// Load the modal library and add the modal javascript.
ctools_include('modal');
ctools_modal_add_js();
return _mymodule_make_link('Magical modal');
}
Lorsque l'utilisateur clique sur le lien, il fait une demande à /mymodule/ajax
ou /mymodule/nojs
(dans le cas de nojs
), donc le rappel suivant gère la création d'un modal:
/**
* Ajax menu callback.
*/
function mymodule_callback($ajax) {
if ($ajax) {
ctools_include('ajax');
ctools_include('modal');
$form_state = array(
'ajax' => TRUE,
'title' => t('MyModule Modal Form'),
);
// Use ctools to generate ajax instructions for the browser to create
// a form in a modal popup.
$output = ctools_modal_form_wrapper('mymodule_form', $form_state);
// If the form has been submitted, there may be additional instructions
// such as dismissing the modal popup.
if (!empty($form_state['ajax_commands'])) {
$output = $form_state['ajax_commands'];
}
// Return the ajax instructions to the browser via ajax_render().
print ajax_render($output);
drupal_exit();
}
else {
return drupal_get_form('mymodule_form');
}
}
Il vous suffit maintenant de créer un formulaire et son gestionnaire d'envoi comme ci-dessous:
/**
* Drupal form to be put in a modal.
*/
function mymodule_form($form, $form_state) {
$form = array();
$form['new_link_text'] = array(
'#type' => 'textfield',
'#title' => t('Link text'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
/**
* Drupal form submit handler.
*/
function mymodule_form_submit(&$form, &$form_state) {
// Generate the new link using the submitted text value.
$link = _mymodule_make_link($form_state['values']['new_link_text']);
// Tell the browser to close the modal.
$form_state['ajax_commands'][] = ctools_modal_command_dismiss();
// Tell the browser to replace the old link with the new one.
$form_state['ajax_commands'][] = ajax_command_replace('#magical-modal-link', $link);
}
Pour tester cela, allez à: /mymodule/page
où vous devriez voir le lien 'Magical Modal' qui devrait vous montrer la forme modale une fois cliqué.
Je trouve que Simple Dialog est un excellent moyen de fournir des formulaires dans Modals. Il a l'avantage d'utiliser jQuery UI qui est en core.
Il vous suffit de fournir un lien vers le formulaire avec des informations supplémentaires. Il fournit une méthode simple basée sur les classes et les balises rel, ou une méthode de thème pour un contrôle plus précis. Je l'ai fait de deux manières:
la source
Le module dont vous avez besoin est https://drupal.org/project/popup_forms , mais vous devez faire un peu de programmation pour l'appliquer (c'est-à-dire qu'il ne peut pas être simplement configuré via l'interface d'administration).
la source