Index: navigation.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/navigation/navigation.module,v
retrieving revision 1.24
diff -u -r1.24 navigation.module
--- navigation.module 30 May 2004 22:00:21 -0000 1.24
+++ navigation.module 30 May 2004 22:34:12 -0000
@@ -6,13 +6,17 @@
*/
// API:
-function navigation_display_tabs($mid) {
+function navigation_display_tabs($mid, $fulltabs = 0) {
$output = "";
if(navigation_menu_allowed($mid) && ($menu = navigation_load_menu($mid))) {
- $output = "
\n";
$selected = navigation_load_selected_items($mid);
- $output .= navigation_build_tabs($menu, 0, 0, $selected);
- $output .= "
\n";
+ if ($fulltabs)
+ {
+ $output .= navigation_build_fulltabs($menu, 0, 0, $selected);
+ }
+ else {
+ $output .= navigation_build_tabs($menu, 0, 0, $selected);
+ }
}
return $output;
}
@@ -76,6 +80,51 @@
}
}
+/**
+ * navigation_build_tabs: Builds collapsed menu structure - ideal for use with
+ * DHTML/CSS for dropdown menus.
+ */
+function navigation_build_fulltabs($menu, $row, $active_parent, $selected) {
+
+ // Pretty-print mini-macro
+ for ($i = 0; $i < $row; $i++)
+ {
+ $spaces .= " ";
+ }
+
+ if($menu[$row]) {
+ unset($tabrow);
+ unset($children);
+ foreach ($menu[$row] as $item) {
+ unset($rowOutput);
+ if (navigation_item_allowed($menu[mid], $item->iid) && (in_array($active_parent, $item->parents) || !$active_parent)) {
+ $children = $item->iid;
+
+ // Output the item.
+ if ($selected[$item->iid]) {
+ $menuOutput .= "\n$spaces iid\">". navigation_l($item->name, $item->url, array("title" => $item->description, "class" => "active-tab"));
+ }
+ else {
+ $menuOutput .= "\n$spaces iid\">". navigation_l($item->name, $item->url, array("title" => $item->description));
+ }
+
+ // Check: item has children
+ $rowOutput = navigation_build_fulltabs($menu, $row + 1, $children, $selected);
+ if ($rowOutput) {
+ // Output submenu
+ $menuOutput .= "\n$rowOutput\n$spaces ";
+ }
+ }
+ }
+ if ($menuOutput) {
+ $output = "$spaces\n";
+ }
+ }
+
+ return $output;
+}
+
+/* Original Algorithm - build selected row only. */
function navigation_build_tabs($menu, $row, $active_parent, $selected) {
// only try and build the next row if it exists
if($menu[$row]) {
@@ -92,17 +141,16 @@
$tabrow .= " iid\">". navigation_l($item->name, $item->url, array("title" => $item->description)) ."\n";
}
}
- }
- if($tabrow) {
- $output .= "\n\n";
- }
- if ($children) {
- foreach($children as $child) {
- $output .= navigation_build_tabs($menu, $row + 1, $child, $selected);
+ if($tabrow) {
+ $output .= "\n\n";
+ }
+ if ($children) {
+ foreach($children as $child) {
+ $output .= navigation_build_tabs($menu, $row + 1, $child, $selected);
+ }
}
}
}
-
return $output;
}
@@ -116,7 +164,7 @@
if ($selected[$item->iid]) {
if(navigation_get_tree($menu[mid], $item->iid)) {
// this item has children, display expanded icon
- $output .= "iid\">". navigation_l($item->name, $item->url, array("title" => $item->description)) ."\n";
+ $output .= "iid\">". navigation_l($item->name, $item->name, $item->url, array("title" => $item->description)) ."\n";
// display children of active items
$output .= navigation_build_menu($menu, $row + 1, $item->iid, $selected);
$output .= "\n";