jump-menu.inc

  1. cis7 sites/all/modules/ulmus/ctools/includes/jump-menu.inc
  2. cle7 sites/all/modules/ulmus/ctools/includes/jump-menu.inc
  3. ecd7 sites/all/modules/ulmus/ctools/includes/jump-menu.inc
  4. elmsmedia7 sites/all/modules/ulmus/ctools/includes/jump-menu.inc
  5. harmony7 sites/all/modules/ulmus/ctools/includes/jump-menu.inc
  6. icor7 sites/all/modules/ulmus/ctools/includes/jump-menu.inc
  7. meedjum_blog7 sites/all/modules/ulmus/ctools/includes/jump-menu.inc
  8. mooc7 sites/all/modules/ulmus/ctools/includes/jump-menu.inc

Provides a simple "jump menu".

A jump menu is a select box and an optional 'go' button which can be removed if javascript is in use. Each item is keyed to the href that the button should go to. With javascript, the page is immediately redirected. Without javascript, the form is submitted and a drupal_goto() is given.

Functions

Namesort descending Description
ctools_jump_menu Generate a jump menu form.
ctools_jump_menu_submit Submit handler for the jump menu.

File

sites/all/modules/ulmus/ctools/includes/jump-menu.inc
View source
  1. <?php
  2. /**
  3. * @file
  4. * Provides a simple "jump menu".
  5. *
  6. * A jump menu is a select box and an optional 'go' button which can be removed
  7. * if javascript is in use. Each item is keyed to the href that the button
  8. * should go to. With javascript, the page is immediately redirected. Without
  9. * javascript, the form is submitted and a drupal_goto() is given.
  10. *
  11. */
  12. /**
  13. * Generate a jump menu form.
  14. *
  15. * This can either be used with drupal_get_form() or directly added to a
  16. * form. The button provides its own submit handler so by default, other
  17. * submit handlers will not be called.
  18. *
  19. * One note: Do not use #tree = TRUE or it will be unable to find the
  20. * proper value.
  21. *
  22. * @code
  23. * ctools_include('jump-menu');
  24. * $output = drupal_get_form('ctools_jump_menu', $targets, $options);
  25. * @endcode
  26. *
  27. * @param $select
  28. * An array suitable for use as the #options. The keys will be the direct
  29. * URLs that will be jumped to, so you absolutely must encode these using
  30. * url() in order for them to work reliably.
  31. *
  32. * @param $options
  33. * $options may be an array with the following options:
  34. * - 'title': The text to display for the #title attribute.
  35. * - 'description': The text to display for the #description attribute.
  36. * - 'default_value': The text to display for the #default_value attribute.
  37. * - 'hide': If TRUE the go button will be set to hide via javascript and
  38. * will submit on change.
  39. * - 'button': The text to display on the button.
  40. * - 'image': If set, an image button will be used instead, and the image
  41. * set to this.
  42. * - 'inline': If set to TRUE (default) the display will be forced inline.
  43. */
  44. function ctools_jump_menu($form, &$form_state, $select, $options = array()) {
  45. $options += array(
  46. 'button' => t('Go'),
  47. 'choose' => t('- Choose -'),
  48. 'inline' => TRUE,
  49. 'hide' => TRUE,
  50. );
  51. ctools_add_js('jump-menu');
  52. if (!empty($options['choose'])) {
  53. $select = array('' => $options['choose']) + $select;
  54. }
  55. $form['jump'] = array(
  56. '#type' => 'select',
  57. '#options' => $select,
  58. '#attributes' => array(
  59. 'class' => array('ctools-jump-menu-select'),
  60. ),
  61. );
  62. if (!empty($options['title'])) {
  63. $form['jump']['#title'] = $options['title'];
  64. }
  65. if (!empty($options['description'])) {
  66. $form['jump']['#description'] = $options['description'];
  67. }
  68. if (!empty($options['default_value'])) {
  69. $form['jump']['#default_value'] = $options['default_value'];
  70. }
  71. if (isset($options['image'])) {
  72. $form['go'] = array(
  73. '#type' => 'image_button',
  74. '#src' => $options['image'],
  75. '#submit' => array('ctools_jump_menu_submit'),
  76. '#attributes' => array(
  77. 'class' => array('ctools-jump-menu-button'),
  78. ),
  79. );
  80. }
  81. else {
  82. $form['go'] = array(
  83. '#type' => 'submit',
  84. '#value' => $options['button'],
  85. '#submit' => array('ctools_jump_menu_submit'),
  86. '#attributes' => array(
  87. 'class' => array('ctools-jump-menu-button'),
  88. ),
  89. );
  90. }
  91. if ($options['inline']) {
  92. $form['jump']['#prefix'] = '<div class="container-inline">';
  93. $form['go']['#suffix'] = '</div>';
  94. }
  95. if ($options['hide']) {
  96. $form['jump']['#attributes']['class'][] = 'ctools-jump-menu-change';
  97. $form['go']['#attributes']['class'][] = 'ctools-jump-menu-hide';
  98. }
  99. return $form;
  100. }
  101. /**
  102. * Submit handler for the jump menu.
  103. *
  104. * This is normally only invoked upon submit without javascript enabled.
  105. */
  106. function ctools_jump_menu_submit($form, &$form_state) {
  107. if ($form_state['values']['jump'] === '') {
  108. // We have nothing to do when the user has not selected any value.
  109. return;
  110. }
  111. // If the path we are redirecting to contains the string :: then treat the
  112. // the string after the double colon as the path to redirect to.
  113. // This allows duplicate paths to be used in jump menus for multiple options.
  114. $redirect_array = explode("::", $form_state['values']['jump']);
  115. if(isset($redirect_array[1]) && !empty($redirect_array[1])){
  116. $redirect = $redirect_array[1];
  117. }
  118. else {
  119. $redirect = $form_state['values']['jump'];
  120. }
  121. // If the path we are redirecting to starts with the base path (for example,
  122. // "/somepath/node/1"), we need to strip the base path off before passing it
  123. // to $form_state['redirect'].
  124. $base_path = base_path();
  125. if (strpos($redirect, $base_path) === 0) {
  126. $redirect = substr($redirect, strlen($base_path));
  127. }
  128. // Parse the URL so that query strings and fragments are preserved in the
  129. // redirect.
  130. $redirect = drupal_parse_url($redirect);
  131. $redirect['path'] = urldecode($redirect['path']);
  132. $form_state['redirect'] = array($redirect['path'], $redirect);
  133. }