Use CTools que puede insertar un formulario en un modal cuando un usuario hace clic en un enlace.
Consulte el siguiente tutorial: inserte un formulario en un modo emergente con CTools y Drupal 7 que simplifica este proceso en pocos pasos.
Básicamente, debe definir su hook_menu()
devolución de llamada para su forma modal:
$items['mymodule/%ctools_js'] = array(
'page callback' => 'mymodule_callback',
'page arguments' => array(1),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
luego cree un generador de enlaces que devuelva el código 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>';
}
para que pueda usarse en la devolución de llamada de su página, por ejemplo:
/**
* 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');
}
Cuando el usuario hace clic en el enlace, se hace la solicitud, ya sea a /mymodule/ajax
, o /mymodule/nojs
(en el caso de nojs
), por lo que los siguientes manijas de devolución de llamada creando 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');
}
}
Ahora solo necesita crear un formulario y su controlador de envío como se muestra a continuación:
/**
* 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);
}
Para probar eso, vaya a: /mymodule/page
donde debería ver el enlace 'Magical Modal' que debería mostrarle la forma modal una vez que haga clic.
Creo que Simple Dialog es una excelente manera de proporcionar formularios en Modals. Tiene la ventaja de usar jQuery UI que está en el núcleo.
Todo lo que necesita hacer es proporcionar un enlace al formulario con información adicional. Proporciona un método simple basado en clases y etiquetas rel, o un método de tema para un control más ajustado. Lo he hecho de dos maneras:
fuente
El módulo que necesita es https://drupal.org/project/popup_forms , pero necesita hacer algo de programación para aplicarlo (es decir, no se puede configurar simplemente a través de la interfaz de administración).
fuente