Verwenden Sie CTools, mit denen Sie ein Formular in ein Modal einfügen können, wenn ein Benutzer auf einen Link klickt.
Bitte überprüfen Sie das folgende Tutorial: Fügen Sie mit CTools und Drupal 7 ein Formular in ein Popup-Modul ein, das diesen Vorgang in wenigen Schritten vereinfacht.
Grundsätzlich müssen Sie Ihren hook_menu()
Rückruf für Ihr modales Formular definieren:
$items['mymodule/%ctools_js'] = array(
'page callback' => 'mymodule_callback',
'page arguments' => array(1),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
Erstellen Sie dann einen Link-Generator, der den HTML-Code zurückgibt:
/**
* 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>';
}
So kann es in Ihrem Seitenrückruf verwendet werden, zB:
/**
* 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');
}
Wenn der Benutzer auf den Link klickt, wird entweder eine Anfrage an /mymodule/ajax
oder /mymodule/nojs
(im Fall von nojs
) gesendet, sodass der folgende Rückruf das Erstellen eines Modals behandelt:
/**
* 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');
}
}
Jetzt müssen Sie nur noch ein Formular und seinen Submit-Handler wie folgt erstellen:
/**
* 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);
}
Um dies zu testen, gehen Sie zu: /mymodule/page
wo Sie den Link 'Magical Modal' sehen sollten, der Ihnen die modale Form zeigen sollte, sobald Sie darauf geklickt haben.
Ich finde, dass Simple Dialog eine großartige Möglichkeit ist, Formulare in Modals bereitzustellen. Es hat den Vorteil, dass die jQuery-Benutzeroberfläche im Kern verwendet wird.
Sie müssen lediglich einen Link zum Formular mit einigen zusätzlichen Informationen bereitstellen. Es bietet eine einfache Methode, die auf Klassen und rel-Tags basiert, oder eine Theme-Methode zur genaueren Steuerung. Ich habe das auf zwei Arten gemacht:
quelle
Das Modul, das Sie benötigen, ist https://drupal.org/project/popup_forms , aber Sie müssen einige Programmierungen vornehmen, um es anzuwenden (dh es kann nicht einfach über die Administrationsoberfläche konfiguriert werden).
quelle