| 1 | <?php
 | 
  
    | 2 | 
 | 
  
    | 3 | // $Id: legacy.php 915 2009-01-21 19:27:01Z Ruebenwurzel $
 | 
  
    | 4 | 
 | 
  
    | 5 | /*
 | 
  
    | 6 |     show_menu2: show_menu replacement for Website Baker 
 | 
  
    | 7 |     Copyright (C) 2006-2009, Brodie Thiesfield
 | 
  
    | 8 | 
 | 
  
    | 9 |     This program is free software; you can redistribute it and/or
 | 
  
    | 10 |     modify it under the terms of the GNU General Public License
 | 
  
    | 11 |     as published by the Free Software Foundation; either version 2
 | 
  
    | 12 |     of the License, or (at your option) any later version.
 | 
  
    | 13 | 
 | 
  
    | 14 |     This program is distributed in the hope that it will be useful,
 | 
  
    | 15 |     but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
  
    | 16 |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
  
    | 17 |     GNU General Public License for more details.
 | 
  
    | 18 | 
 | 
  
    | 19 |     You should have received a copy of the GNU General Public License
 | 
  
    | 20 |     along with this program; if not, write to the Free Software
 | 
  
    | 21 |     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
 | 
  
    | 22 |     02110-1301, USA.
 | 
  
    | 23 | */
 | 
  
    | 24 | 
 | 
  
    | 25 | /*
 | 
  
    | 26 |     This file provides backward compatibility between show_menu2 and the
 | 
  
    | 27 |     old functions show_menu() and menu(). Note that it is highly recommended 
 | 
  
    | 28 |     for you to update your templates to use show_menu2 directly.
 | 
  
    | 29 |  */    
 | 
  
    | 30 | 
 | 
  
    | 31 | /* ----------------------------------------------------------------------------
 | 
  
    | 32 |    show_menu
 | 
  
    | 33 |    
 | 
  
    | 34 |  From: http://forum.websitebaker.org/index.php/topic,2251.msg13978.html#msg13978  
 | 
  
    | 35 |  
 | 
  
    | 36 |  * By calling it multiple times, you can have one menu just
 | 
  
    | 37 |  * showing the root level, one for the sub-pages, and so on
 | 
  
    | 38 |  * The order of the arguments has been changed compared
 | 
  
    | 39 |  * to the page_menu() function, so read carefully the list
 | 
  
    | 40 |  * of arguments!
 | 
  
    | 41 |  * To just display the standard menu, use
 | 
  
    | 42 |  * <?php show_menu(); ?> within your template's html code.
 | 
  
    | 43 |  * You don't normally need anymore than the first four arguments.
 | 
  
    | 44 |  * Usual calls would be (inside php code!)
 | 
  
    | 45 |  * show_menu(1,0,-1,false); - displays the complete page tree
 | 
  
    | 46 |  * show_menu(1,1,1); - show only first sub level
 | 
  
    | 47 |  * show_menu(1,1,-1); -    show an expanding/collapsing menu tree starting at level 1
 | 
  
    | 48 |  * Have fun experimenting!
 | 
  
    | 49 |  *
 | 
  
    | 50 |  * Full list of arguments:
 | 
  
    | 51 |  * 1. $menu_number:   With activitated "multiple menu" feature
 | 
  
    | 52 |  *                  you can choose which menu will be displayed
 | 
  
    | 53 |  *                  default: 1
 | 
  
    | 54 |  * 2. $start_level: The depth level of the root of the displayed
 | 
  
    | 55 |  *               menu tree. Defaults to '0', which is the top level.
 | 
  
    | 56 |  *                  '1' will show all pages starting from the first sub level.
 | 
  
    | 57 |  * 3. $recurse:     Gives the maximum number of levels to be displayed. Default
 | 
  
    | 58 |  *                  is '-1' which means 'all'.
 | 
  
    | 59 |  * 4. $collapse:    Specifies, whether the menu tree shall be
 | 
  
    | 60 |  *               expandable/collapsible (if set to 'true')
 | 
  
    | 61 |  *               or complete (all pages being displayed) if set to 'false'
 | 
  
    | 62 |  * 5. $item_template: Gives the possibility to specify the html code that is
 | 
  
    | 63 |  *                  displayed before displaying sub-pages
 | 
  
    | 64 |  * 6. $item_footer: The html code to appear after sub-pages were displayed.
 | 
  
    | 65 |  * 7. $menu_header: The html code to appear before the entire menu code and each
 | 
  
    | 66 |  *               sub tree.
 | 
  
    | 67 |  * 8. $menu_footer: The html code to appear after the entire menu code and each
 | 
  
    | 68 |  *               sub tree.
 | 
  
    | 69 |  * 9. $default_class: The (CSS) class of every menu item except the currently viewed page
 | 
  
    | 70 |  * 10. $current_class: The class of the currently viewed page
 | 
  
    | 71 |  * 11. $parent:    (used internally) The page_id of the menu's root node, defaults is '0' (root level)
 | 
  
    | 72 |  */
 | 
  
    | 73 |  
 | 
  
    | 74 | class SM2_ShowMenuFormatter
 | 
  
    | 75 | {
 | 
  
    | 76 |     var $output;
 | 
  
    | 77 |     var $itemTemplate;
 | 
  
    | 78 |     var $itemFooter;
 | 
  
    | 79 |     var $menuHeader;
 | 
  
    | 80 |     var $menuFooter;
 | 
  
    | 81 |     var $defaultClass;
 | 
  
    | 82 |     var $currentClass;
 | 
  
    | 83 |     
 | 
  
    | 84 |     function output($aString) {
 | 
  
    | 85 |         if ($this->flags & SM2_BUFFER) {
 | 
  
    | 86 |             $this->output .= $aString;
 | 
  
    | 87 |         }
 | 
  
    | 88 |         else {
 | 
  
    | 89 |             echo $aString;
 | 
  
    | 90 |         }
 | 
  
    | 91 |     }
 | 
  
    | 92 |     function initialize() { $this->output = ''; }
 | 
  
    | 93 |     function startList($aPage, $aUrl) { 
 | 
  
    | 94 |         echo $this->menuHeader;
 | 
  
    | 95 |     }
 | 
  
    | 96 |     function startItem($aPage, $aUrl, $aCurrSib, $aSibCount) { 
 | 
  
    | 97 |         // determine the class string to use
 | 
  
    | 98 |         $thisClass = $this->defaultClass;
 | 
  
    | 99 |         if ($aPage['page_id'] == PAGE_ID) {
 | 
  
    | 100 |             $thisClass = $this->currentClass;
 | 
  
    | 101 |         }
 | 
  
    | 102 |         
 | 
  
    | 103 |         // format and display this item
 | 
  
    | 104 |         $item = str_replace( 
 | 
  
    | 105 |                 array(
 | 
  
    | 106 |                     '[a]','[/a]','[menu_title]','[page_title]','[url]',
 | 
  
    | 107 |                     '[target]','[class]'
 | 
  
    | 108 |                     ),
 | 
  
    | 109 |                 array(
 | 
  
    | 110 |                     "<a href='$aUrl' target='".$aPage['target']."'>", '</a>',
 | 
  
    | 111 |                     $aPage['menu_title'], $aPage['page_title'], $aUrl, 
 | 
  
    | 112 |                     $aPage['target'], $thisClass
 | 
  
    | 113 |                     ),
 | 
  
    | 114 |                 $this->itemTemplate);
 | 
  
    | 115 |         echo $item;
 | 
  
    | 116 |     }
 | 
  
    | 117 |     function finishItem() { 
 | 
  
    | 118 |         echo $this->itemFooter;
 | 
  
    | 119 |     }
 | 
  
    | 120 |     function finishList() { 
 | 
  
    | 121 |         echo $this->menuFooter;
 | 
  
    | 122 |     }
 | 
  
    | 123 |     function finalize() { }
 | 
  
    | 124 |     function getOutput() {
 | 
  
    | 125 |         return $this->output;
 | 
  
    | 126 |     }
 | 
  
    | 127 | }
 | 
  
    | 128 | 
 | 
  
    | 129 | function show_menu(
 | 
  
    | 130 |     $aMenu          = 1, 
 | 
  
    | 131 |     $aStartLevel    = 0, 
 | 
  
    | 132 |     $aRecurse       = -1, 
 | 
  
    | 133 |     $aCollapse      = true,
 | 
  
    | 134 |     $aItemTemplate  = '<li><span[class]>[a][menu_title][/a]</span>',
 | 
  
    | 135 |     $aItemFooter    = '</li>',
 | 
  
    | 136 |     $aMenuHeader    = '<ul>',
 | 
  
    | 137 |     $aMenuFooter    = '</ul>',
 | 
  
    | 138 |     $aDefaultClass  = ' class="menu_default"',
 | 
  
    | 139 |     $aCurrentClass  = ' class="menu_current"',
 | 
  
    | 140 |     $aParent        = 0
 | 
  
    | 141 |     )
 | 
  
    | 142 | {
 | 
  
    | 143 |     static $formatter;
 | 
  
    | 144 |     if (!isset($formatter)) {
 | 
  
    | 145 |         $formatter = new SM2_ShowMenuFormatter;
 | 
  
    | 146 |     }
 | 
  
    | 147 |     
 | 
  
    | 148 |     $formatter->itemTemplate  = $aItemTemplate;
 | 
  
    | 149 |     $formatter->itemFooter    = $aItemFooter;  
 | 
  
    | 150 |     $formatter->menuHeader    = $aMenuHeader;  
 | 
  
    | 151 |     $formatter->menuFooter    = $aMenuFooter;  
 | 
  
    | 152 |     $formatter->defaultClass  = $aDefaultClass;
 | 
  
    | 153 |     $formatter->currentClass  = $aCurrentClass;
 | 
  
    | 154 |     
 | 
  
    | 155 |     $start = SM2_ROOT + $aStartLevel;
 | 
  
    | 156 |     if ($aParent != 0) {
 | 
  
    | 157 |         $start = $aParent;
 | 
  
    | 158 |     }
 | 
  
    | 159 | 
 | 
  
    | 160 |     $maxLevel = 0;
 | 
  
    | 161 |     if ($aRecurse == 0) {
 | 
  
    | 162 |         return;
 | 
  
    | 163 |     }
 | 
  
    | 164 |     if ($aRecurse < 0) {
 | 
  
    | 165 |         $maxLevel = SM2_ALL;
 | 
  
    | 166 |     }
 | 
  
    | 167 |     else {
 | 
  
    | 168 |         $maxLevel = SM2_START + $aRecurse - 1;
 | 
  
    | 169 |     }
 | 
  
    | 170 |     
 | 
  
    | 171 |     $flags = $aCollapse ? SM2_TRIM : SM2_ALL;
 | 
  
    | 172 |     
 | 
  
    | 173 |     // special case for default case
 | 
  
    | 174 |     if ($aStartLevel == 0 && $aRecurse == -1 && $aCollapse) {
 | 
  
    | 175 |         $maxLevel = SM2_CURR + 1;
 | 
  
    | 176 |     }
 | 
  
    | 177 | 
 | 
  
    | 178 |     show_menu2($aMenu, $start, $maxLevel, $flags, $formatter);
 | 
  
    | 179 | }
 | 
  
    | 180 | 
 | 
  
    | 181 | function page_menu(
 | 
  
    | 182 |     $aParent = 0, 
 | 
  
    | 183 |     $menu_number = 1, 
 | 
  
    | 184 |     $item_template = '<li[class]>[a][menu_title][/a]</li>', 
 | 
  
    | 185 |     $menu_header = '<ul>', 
 | 
  
    | 186 |     $menu_footer = '</ul>', 
 | 
  
    | 187 |     $default_class = ' class="menu_default"', 
 | 
  
    | 188 |     $current_class = ' class="menu_current"', 
 | 
  
    | 189 |     $recurse = LEVEL    // page['level']
 | 
  
    | 190 |     ) 
 | 
  
    | 191 | {
 | 
  
    | 192 |     show_menu($menu_number, 0, $recurse+2, true, $item_template, '', 
 | 
  
    | 193 |         $menu_header, $menu_footer, $default_class, $current_class, $aParent);
 | 
  
    | 194 | }
 | 
  
    | 195 | 
 | 
  
    | 196 | ?>
 |