瀏覽代碼

remove AJAX callback, pass menu structure to page directly, dramatically faster, 1 less HTTP request, clear your menu cache, can produce weirdness/infinit loops

Ted Serbinski 18 年之前
父節點
當前提交
ec97ad2402
共有 2 個文件被更改,包括 45 次插入49 次删除
  1. 7 8
      simplemenu.js
  2. 38 41
      simplemenu.module

+ 7 - 8
simplemenu.js

@@ -21,12 +21,11 @@ $(document).ready(function() {
   
   $('body').css('margin-top', '23px');
   
-  // Drupal menu callback
-  $('#simplemenu').load(basePath + 'simplemenu/menu', function() {
-    $('li', this).hover(function() {
-      $('ul', this).slideDown(200);
-    }, function() {});
-    $('a', this).title('');
-    $(this).children('li.expanded').addClass('root');
-  });
+  // Build menu
+  $('#simplemenu').append(simplemenu);
+  $('#simplemenu li').hover(function() {
+    $('ul', this).slideDown(200);
+  }, function() {});
+  $('#simplemenu a').title('');
+  $('#simplemenu').children('li.expanded').addClass('root');          
 });

+ 38 - 41
simplemenu.module

@@ -12,14 +12,7 @@
 function simplemenu_menu($may_cache) {
   $items = array();
 
-  if ($may_cache) {
-    $items[] = array(
-      'path' => 'simplemenu/menu',
-      'access' => user_access('view simplemenu'),
-      'callback' => 'simplemenu_get_menu',
-      'type' => MENU_CALLBACK
-    );
-    
+  if ($may_cache) {    
     $items[] = array(
       'path' => 'admin/settings/simplemenu',
       'title' => t('SimpleMenu'),
@@ -57,6 +50,7 @@ function simplemenu_footer() {
     );
     
     drupal_add_js(array('simplemenu' => $settings), 'setting');
+    drupal_add_js('var simplemenu = '. drupal_to_js(simplemenu_get_menu() .';'), 'inline');
     drupal_add_js($path .'/simplemenu.js');
   }
 }
@@ -130,36 +124,22 @@ function simplemenu_admin_settings() {
 }
 
 /**
- * Return a list of devel module links if the module is enabled
- * and the user has access to this module.
+ * Render an HTML list of links for a given menu.
  */
-function simplemenu_get_devel() {
+function simplemenu_get_menu() {
   $output = '';
   
-  if (variable_get('simplemenu_devel', 0) && module_exists('devel')) {
-    if (user_access('access devel information')) {
-      $links[] = l('Devel settings', 'admin/settings/devel', array('title' => t('Adjust module settings for devel module')));
-      $links[] = l('Empty cache', 'devel/cache/clear', array('title' => t('Clear the database cache tables which store page, menu, node, and variable caches.')), drupal_get_destination());
-      $links[] = l('Phpinfo()', 'admin/logs/status/php');
-      $links[] = l('Function reference', 'devel/reference', array('title' => t('View a list of currently defined user functions with documentation links')));
-      $links[] = l('Reinstall modules', 'devel/reinstall', array('title' => t('Re-run hook_install() for a given module')));
-      $links[] = l('Reset menus', 'devel/menu/reset', array('title' => t('Resets all menu items to their default settings')));
-      $links[] = l('Variable editor', 'devel/variable', array('title' => t('Edit and delete site variables')));
-      $links[] = l('Session viewer', 'devel/session', array('title' => t('List the contents of $_SESSION')));
-
-      if (function_exists('devel_node_access_perm') && user_access(DNA_ACCESS_VIEW)) {
-        // True only if devel_node_access enabled.
-        $links[] = l('Node access summary', 'devel/node_access/summary');
-      }
+  $menu = simplemenu_menu_tree(variable_get('simplemenu_menu', 1));
   
-      $output = '<li class="expanded"><a href="'. url('admin/settings/devel') .'">'. t('Devel module') .'</a><ul>';
-      $output .= '<li class="leaf">'. implode($links, '</li><li class="leaf">') .'</li>';
-      $output .= '</ul></li>';
-    }
+  if (!$menu) {
+    $menu = '<li><a href="'. url('admin/settings/simplemenu') .'">'. t('No menu items found. Try a different menu as the default.') .'</a></li>';
   }
   
+  $output .= simplemenu_get_devel();
+  $output .= $menu;
+  
   return $output;
-}
+}      
 
 /**
  * Custom implementation of menu_tree().
@@ -179,7 +159,7 @@ function simplemenu_menu_tree($pid = 1) {
   }
 
   return $output;
-}
+}                    
 
 /**
  * Custom implementation of theme_menu_tree() to call our custom menu above.
@@ -188,19 +168,36 @@ function simplemenu_theme_menu_tree($pid = 1) {
   if ($tree = simplemenu_menu_tree($pid)) {
     return '<ul>'. $tree .'</ul>';
   }
-}
+}   
 
 /**
- * AJAX menu callback to return an HTML list of links for a given menu.
+ * Return a list of devel module links if the module is enabled
+ * and the user has access to this module.
  */
-function simplemenu_get_menu() {
-  $menu = simplemenu_menu_tree(variable_get('simplemenu_menu', 1));
+function simplemenu_get_devel() {
+  $output = '';
   
-  if (!$menu) {
-    $menu = '<li><a href="'. url('admin/settings/simplemenu') .'">'. t('No menu items found. Try a different menu as the default.') .'</a></li>';
+  if (variable_get('simplemenu_devel', 0) && module_exists('devel')) {
+    if (user_access('access devel information')) {
+      $links[] = l('Devel settings', 'admin/settings/devel', array('title' => t('Adjust module settings for devel module')));
+      $links[] = l('Empty cache', 'devel/cache/clear', array('title' => t('Clear the database cache tables which store page, menu, node, and variable caches.')), drupal_get_destination());
+      $links[] = l('Phpinfo()', 'admin/logs/status/php');
+      $links[] = l('Function reference', 'devel/reference', array('title' => t('View a list of currently defined user functions with documentation links')));
+      $links[] = l('Reinstall modules', 'devel/reinstall', array('title' => t('Re-run hook_install() for a given module')));
+      $links[] = l('Reset menus', 'devel/menu/reset', array('title' => t('Resets all menu items to their default settings')));
+      $links[] = l('Variable editor', 'devel/variable', array('title' => t('Edit and delete site variables')));
+      $links[] = l('Session viewer', 'devel/session', array('title' => t('List the contents of $_SESSION')));
+
+      if (function_exists('devel_node_access_perm') && user_access(DNA_ACCESS_VIEW)) {
+        // True only if devel_node_access enabled.
+        $links[] = l('Node access summary', 'devel/node_access/summary');
+      }
+  
+      $output = '<li class="expanded"><a href="'. url('admin/settings/devel') .'">'. t('Devel module') .'</a><ul>';
+      $output .= '<li class="leaf">'. implode($links, '</li><li class="leaf">') .'</li>';
+      $output .= '</ul></li>';
+    }
   }
   
-  print simplemenu_get_devel();
-  print $menu;
-  exit;
+  return $output;
 }