[3526] | 1 | <?php
|
---|
| 2 | // TreeMenuSafe.php
|
---|
| 3 | // Author: Chip Chapin <cchapin@chipchapin.com>
|
---|
| 4 | // This file is an extension to HTML_TreeMenu, by Richard Heyes.
|
---|
| 5 | // Much of the code is based on Heyes' client-side JavaScript code.
|
---|
| 6 |
|
---|
| 7 | include_once('TreeMenu.php');
|
---|
| 8 | include_once('ccBrowserInfo.php');
|
---|
| 9 |
|
---|
| 10 | // Browser detection determines whether we generate DHTML menus
|
---|
| 11 | static $tmsDoesMenus = 'maybe';
|
---|
| 12 |
|
---|
| 13 |
|
---|
| 14 | class HTML_TreeMenuSafe extends HTML_TreeMenu
|
---|
| 15 | {
|
---|
| 16 | // Constructor
|
---|
| 17 | function HTML_TreeMenuSafe($layer=null, $images=null, $linkTarget = '_self', $usePersistence = true)
|
---|
| 18 | {
|
---|
| 19 | if ($GLOBALS['tmsDoesMenus'] == 'maybe') {
|
---|
| 20 | $tmb = new ccBrowserInfo();
|
---|
| 21 | $GLOBALS['tmsDoesMenus'] = ($tmb->is_ie5up() || $tmb->is_moz5up);
|
---|
| 22 | }
|
---|
| 23 | HTML_TreeMenu::HTML_TreeMenu($layer, $images, $linkTarget, $usePersistence);
|
---|
| 24 | } // HTML_TreeMenuSafe
|
---|
| 25 |
|
---|
| 26 | function printMenu($images=null, $rigidmenu=false, $layer=null)
|
---|
| 27 | {
|
---|
| 28 | if (!$rigidmenu && $GLOBALS['tmsDoesMenus']) HTML_TreeMenu::printMenu($images, $layer);
|
---|
| 29 | elseif (!empty($this->items)) {
|
---|
| 30 | // Static menu
|
---|
| 31 | // $images could have been set in the constructor,
|
---|
| 32 | // so don't assign to it unless a value has been supplied here.
|
---|
| 33 | // $layer is not used for static menus.
|
---|
| 34 | if (!empty($images)) $this->images = $images;
|
---|
| 35 | for ($i=0; $i < count($this->items); $i++) {
|
---|
| 36 | $this->_printStaticMenu($this, $i);
|
---|
| 37 | }
|
---|
| 38 | } // static menu
|
---|
| 39 | } // printMenu
|
---|
| 40 |
|
---|
| 41 |
|
---|
| 42 | //
|
---|
| 43 | // Helper Functions
|
---|
| 44 | //
|
---|
| 45 |
|
---|
| 46 | // Print HTML for a single menu node
|
---|
| 47 | // This code is based on the JavaScript function drawMenu().
|
---|
| 48 | function _printNode($thisnode, $currentlevel, $prepend='', $modifier='')
|
---|
| 49 | {
|
---|
| 50 | if (empty($this->images)) {
|
---|
| 51 | // No images in output
|
---|
| 52 | $iconimg = '';
|
---|
| 53 | $imgTag = '';
|
---|
| 54 | }
|
---|
| 55 | else {
|
---|
| 56 | $gifname = 'branch';
|
---|
| 57 | $iconimg = $thisnode->icon ? sprintf('<img src="%s/%s" width="20" height="20" align="top">',
|
---|
| 58 | $this->images, $thisnode->icon) : '';
|
---|
| 59 | $imgTag = sprintf('<img src="%s/%s%s.gif" width="20" height="20" align="top" border="0" />',
|
---|
| 60 | $this->images, $gifname, $modifier);
|
---|
| 61 | }
|
---|
| 62 | $linkStart = $thisnode->link ? sprintf('<a href="%s" target="%s">',
|
---|
| 63 | $thisnode->link, $this->linkTarget) : '';
|
---|
| 64 | $linkEnd = $thisnode->link ? '</a>' : '';
|
---|
| 65 | $titleString = $thisnode->text;
|
---|
| 66 | $styleStart = '';
|
---|
| 67 | $styleEnd = '';
|
---|
| 68 | if ($thisnode->style == 'auto') {
|
---|
| 69 | $styleInx = min($currentlevel, count($GLOBALS['_autostyles'])-1);
|
---|
| 70 | $styleStart = '<span class="' . $GLOBALS['_autostyles'][$styleInx] . '">';
|
---|
| 71 | $styleEnd = '</span>';
|
---|
| 72 | }
|
---|
| 73 | echo '<nobr>'. $styleStart . $prepend .
|
---|
| 74 | (parentLayerID == null && nodes.length == 1 ? '' : $imgTag) .
|
---|
| 75 | $iconimg .
|
---|
| 76 | $linkStart . $titleString . $linkEnd .
|
---|
| 77 | $styleEnd . "</nobr><br>\n";
|
---|
| 78 | } // _printNode
|
---|
| 79 |
|
---|
| 80 |
|
---|
| 81 | // Static menu.
|
---|
| 82 | // Print current node and all subnodes
|
---|
| 83 | function _printStaticMenu($nodeParent, $nodeinx, $currentlevel=0, $prepend='')
|
---|
| 84 | {
|
---|
| 85 | $thisnode = $nodeParent->items[$nodeinx];
|
---|
| 86 | $cntSubnodes = empty($thisnode->items) ? 0 : count($thisnode->items);
|
---|
| 87 | $cntSiblings = empty($nodeParent->items) ? 0 : count($nodeParent->items);
|
---|
| 88 |
|
---|
| 89 | // Gif modifier
|
---|
| 90 | if ($nodeinx == 0 && $currentlevel == 0) $modifier = $cntSubnodes > 1 ? 'top' : 'single';
|
---|
| 91 | elseif ($nodeinx == ($cntSiblings - 1)) $modifier = 'bottom';
|
---|
| 92 | else $modifier = '';
|
---|
| 93 | $this->_printNode($thisnode, $currentlevel, $prepend, $modifier);
|
---|
| 94 |
|
---|
| 95 | // Print any subnodes
|
---|
| 96 | for ($i=0; $i<$cntSubnodes; $i++) {
|
---|
| 97 | // Determine what to prepend to child subnode entries.
|
---|
| 98 | $newPrepend = $prepend;
|
---|
| 99 | if (empty($this->images)) {
|
---|
| 100 | // No images. Use spaces instead
|
---|
| 101 | $newPrepend .= ' ';
|
---|
| 102 | }
|
---|
| 103 | else {
|
---|
| 104 | // Prepend images to each menu entry
|
---|
| 105 | //if ($currentlevel == 0 && $cntSiblings == 1) $nppimg = '';
|
---|
| 106 | //^^^ This special case does not apply to static menus.
|
---|
| 107 | // Why? Bwaaa Ha Ha Ha Haaaaaaa!! Try it and see. Happy Halloween...
|
---|
| 108 | if ($nodeinx < ($cntSiblings - 1)) $nppimg = 'line.gif';
|
---|
| 109 | else $nppimg = 'linebottom.gif';
|
---|
| 110 | $newPrepend .= sprintf('<img ninx=%d csn=%d src="%s/%s" width="20" height="20" align="top">', $nodeinx, $cntSubnodes, $this->images, $nppimg);
|
---|
| 111 | }
|
---|
| 112 |
|
---|
| 113 | // Now print the menu entry for this node
|
---|
| 114 | $this->_printStaticMenu($thisnode, $i, $currentlevel+1, $newPrepend);
|
---|
| 115 | }
|
---|
| 116 | } // _printStaticMenu
|
---|
| 117 |
|
---|
| 118 |
|
---|
| 119 | } // class HTML_TreeMenuSafe
|
---|
| 120 |
|
---|
| 121 |
|
---|
| 122 | ?>
|
---|