aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jquery_drawer.module45
1 files changed, 41 insertions, 4 deletions
diff --git a/jquery_drawer.module b/jquery_drawer.module
index 5f759d3..f382b66 100644
--- a/jquery_drawer.module
+++ b/jquery_drawer.module
@@ -70,14 +70,52 @@ function jquery_drawer_block($op = 'list', $delta = 0, $edit = array()) {
case 'view':
// Get all terms from a given vocabulary
- $vid = variable_get('jquery_drawer', '1');
- $menu = taxonomy_node_tree_parents($vid);
+ $vid = variable_get('jquery_drawer', '1');
+ $menu = taxonomy_node_tree_parents($vid);
+
+ // Remove empty menus
+ foreach ($menu as $key => $term) {
+ if (jquery_drawer_check_empty($term->tid)) {
+ unset($menu[$key]);
+ }
+ }
+
$block['content'] = theme('jquery_drawer', $menu);
return $block;
}
}
/**
+ * Check empty menus.
+ */
+function jquery_drawer_check_empty($tid) {
+ $parents = array();
+ $nodes = jquery_drawer_select_nodes(array($tid));
+ $children = jquery_drawer_get_children($tid);
+
+ while ($node = db_fetch_object($nodes)) {
+ $parents[] = $node;
+ }
+
+ if (empty($parents) && empty($children)) {
+ return TRUE;
+ }
+}
+
+/**
+ * Static version of taxonomy_select_nodes().
+ */
+function jquery_drawer_select_nodes($tid) {
+ static $cache = array();
+
+ if (empty($cache[$tid])) {
+ $cache[$tid] = taxonomy_select_nodes(array($tid));
+ }
+
+ return $cache[$tid];
+}
+
+/**
* Implementation of hook_menu().
*/
function jquery_drawer_menu() {
@@ -119,7 +157,6 @@ function jquery_drawer_theme() {
* @ingroup themeable
*/
function theme_jquery_drawer($menu) {
-
$output = '<ul id="drw_tabs">';
$output .= implode((array) module_invoke_all('jquery_drawer'));
@@ -189,7 +226,7 @@ function jquery_drawer_page($tid = NULL) {
if (!isset($cache[$tid])) {
$output = '';
- $nodes = taxonomy_select_nodes(array($tid));
+ $nodes = jquery_drawer_select_nodes(array($tid));
$base = variable_get('jquery_drawer_link', 'node');
$tree = jquery_drawer_get_children($tid);
$output .= '<ul id="drw_item" class="hidden">';