Drupal Answers Asked by DataGuy on November 17, 2021
UPDATED from earlier:
I am using a simple Drupal form that collect user info before allowing the user access to donwloadable content. NOTE: This is using the form API and I am no longer using a modal; just using a regular page created by a hook. Here is the scenario:
<?php
function my_form_menu() {
$items = array();
$items['form/userinfo'] = array( //this creates a URL that will call this form
'title' => 'Download Form', //page title
'description' => 'A form that gathers user infomation',
'page callback' => 'drupal_get_form', //this is the function that will be called w hen the page is accessed. for a form, use drupal_get_form
'page arguments' => array('my_form'), //name of the form
'access callback' => TRUE
);
return $items;
}
function my_form() {
if (!empty($_COOKIE['Drupal_visitor_downloadbypass'])) {
drupal_goto('this is where the pdf file will go'); // rest of the page will not execute because drupal_goto ends the request.
}
$form['name']['first'] = array(
'#type' => 'textfield',
'#title' => t('First name'),
'#required' => TRUE,
);
$form['name']['last'] = array(
'#type' => 'textfield',
'#title' => t('Last name'),
'#required' => TRUE,
);
$form['name']['title'] = array(
'#type' => 'textfield',
'#title' => t('title'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
);
return $form;
}
function my_form_submit($form, &$form_state) {
// $form_state['values']['example'] contains the submitted value of 'example' element.
user_cookie_save(array('downloadbypass' => 1));
$form_state['redirect'] = 'this is where the pdf file will go';
}
So here is my question: Now my form page is not showing up and I didnt change the hook except for the form name argument. The form will need to redirect back to the previous page and open the file in a new window upon submission.
Thanks!
phi
You didn't mention whether you are using ctools modal forms or a custom modal form.
For general form API submissions, the submit handler will only be executed when the form validation has passed, including the regular CSRF checks.
Suppose you have a form like this:
<?php
function my_form() {
if (!empty($_COOKIE['Drupal_visitor_downloadbypass'])) {
drupal_goto('download/able/file.here'); // rest of the page will not execute because drupal_goto ends the request.
}
$form['example'] = ...;// your form building goes here
..
..
return $form;
}
function my_form_submit($form, &$form_state) {
// $form_state['values']['example'] contains the submitted value of 'example' element.
user_cookie_save(array('downloadbypass' => 1));
$form_state['redirect'] = 'download/able/file.here';
}
If you are using a ctools modals, you can check the $form_state in your ctools form builder to do the same cookie check and redirect above.
Your ctools form builder can be as follows. Note the $form_state check.
<?php
function my_ctools_form_wrapper($js = NULL) {
ctools_include('ajax');
ctools_include('modal');
$form_state = array(
'ajax' => TRUE,
'title' => t('My Ajax Form'),
);
$output = ctools_modal_form_wrapper('my_form', $form_state);
if (!empty($form_state['executed'])) { // is the form submitted ?
// Add the responder javascript, required by ctools
ctools_add_js('ajax-responder');
// Create ajax command array, dismiss the modal window.
$output = array();
$output[] = ctools_modal_command_dismiss();
$output[] = ctools_ajax_command_reload();
}
print ajax_render($output);
exit();
}
Answered by AKS on November 17, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP