/[cvs]/nfo/php/libs/net.php.pear/HTML/TreeMenu.php
ViewVC logotype

Diff of /nfo/php/libs/net.php.pear/HTML/TreeMenu.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by joko, Thu Feb 27 16:45:21 2003 UTC revision 1.2 by joko, Wed Jul 7 02:21:09 2004 UTC
# Line 33  Line 33 
33  // |         Harald Radi <harald.radi@nme.at>                              |  // |         Harald Radi <harald.radi@nme.at>                              |
34  // +-----------------------------------------------------------------------+  // +-----------------------------------------------------------------------+
35  //  //
36  // Id: TreeMenu.php,v 1.15 2003/02/21 18:19:39 richard Exp  // Id: TreeMenu.php,v 1.18 2003/12/20 13:10:59 richard Exp
37  // $Id$  // $Id$
38    
39  /**  /**
# Line 101  class HTML_TreeMenu Line 101  class HTML_TreeMenu
101      * are Wolfram Kriesings' PEAR Tree class, and Richard Heyes' (me!)      * are Wolfram Kriesings' PEAR Tree class, and Richard Heyes' (me!)
102      * Tree class (available here: http://www.phpguru.org/). This      * Tree class (available here: http://www.phpguru.org/). This
103      * method is intended to be used statically, eg:      * method is intended to be used statically, eg:
104      * $treeMenu = &HTML_TreeMenu::import($myTreeStructureObj);      * $treeMenu = &HTML_TreeMenu::createFromStructure($myTreeStructureObj);
105      *      *
106      * @param  array  $params   An array of parameters that determine      * @param  array  $params   An array of parameters that determine
107      *                          how the import happens. This can consist of:      *                          how the import happens. This can consist of:
# Line 172  class HTML_TreeMenu Line 172  class HTML_TreeMenu
172                  break;                  break;
173    
174              /**              /**
175              * Richard Heyes' (me!) Tree class              * Richard Heyes' (me!) second (array based) Tree class
176                */
177                case 'heyes_array':
178                    // Need to create a HTML_TreeMenu object ?
179                    if (!isset($params['treeMenu'])) {
180                        $treeMenu = &new HTML_TreeMenu();
181                        $parentID = 0;
182                    } else {
183                        $treeMenu = &$params['treeMenu'];
184                        $parentID = $params['parentID'];
185                    }
186                    
187                    // Loop thru the trees nodes
188                    foreach ($params['structure']->getChildren($parentID) as $nodeID) {
189                        $data = $params['structure']->getData($nodeID);
190                        $parentNode = &$treeMenu->addItem(new HTML_TreeNode(array_merge($params['nodeOptions'], $data)));
191    
192                        // Recurse ?
193                        if ($params['structure']->hasChildren($nodeID)) {
194                            $recurseParams['type']        = 'heyes_array';
195                            $recurseParams['parentID']    = $nodeID;
196                            $recurseParams['nodeOptions'] = $params['nodeOptions'];
197                            $recurseParams['structure']   = &$params['structure'];
198                            $recurseParams['treeMenu']    = &$parentNode;
199                            HTML_TreeMenu::createFromStructure($recurseParams);
200                        }
201                    }
202                    
203                    break;
204    
205                /**
206                * Richard Heyes' (me!) original OO based Tree class
207              */              */
208              case 'heyes':              case 'heyes':
209              default:              default:
# Line 202  class HTML_TreeMenu Line 233  class HTML_TreeMenu
233    
234          return $treeMenu;          return $treeMenu;
235      }      }
236                
237          /**      /**
238      * Creates a treeMenu from XML. The structure of your XML should be      * Creates a treeMenu from XML. The structure of your XML should be
239          * like so:      * like so:
240          *      *
241          * <treemenu>      * <treemenu>
242          *     <node text="First node" icon="folder.gif" expandedIcon="folder-expanded.gif" />      *     <node text="First node" icon="folder.gif" expandedIcon="folder-expanded.gif" />
243          *     <node text="Second node" icon="folder.gif" expandedIcon="folder-expanded.gif">      *     <node text="Second node" icon="folder.gif" expandedIcon="folder-expanded.gif">
244          *         <node text="Sub node" icon="folder.gif" expandedIcon="folder-expanded.gif" />      *         <node text="Sub node" icon="folder.gif" expandedIcon="folder-expanded.gif" />
245          *     </node>      *     </node>
246          *     <node text="Third node" icon="folder.gif" expandedIcon="folder-expanded.gif">      *     <node text="Third node" icon="folder.gif" expandedIcon="folder-expanded.gif">
247          * </treemenu>      * </treemenu>
248          *      *
249          * Any of the options you can supply to the HTML_TreeNode constructor can be supplied as      * Any of the options you can supply to the HTML_TreeNode constructor can be supplied as
250          * attributes to the <node> tag. If there are no subnodes for a particular node, you can      * attributes to the <node> tag. If there are no subnodes for a particular node, you can
251          * use the XML shortcut <node ... /> instead of <node ... ></node>. The $xml argument can      * use the XML shortcut <node ... /> instead of <node ... ></node>. The $xml argument can
252          * be either the XML as a string, or an pre-created XML_Tree object. Also, this method      * be either the XML as a string, or an pre-created XML_Tree object. Also, this method
253          * REQUIRES my own Tree class to work (http://phpguru.org/tree.html). If this has not      * REQUIRES my own Tree class to work (http://phpguru.org/tree.html). If this has not
254          * been include()ed or require()ed this method will die().      * been include()ed or require()ed this method will die().
255          *      *
256          * @param  mixed  $xml  This can be either a string containing the XML, or an XML_Tree object      * @param  mixed  $xml  This can be either a string containing the XML, or an XML_Tree object
257          *                      (the PEAR::XML_Tree package).      *                      (the PEAR::XML_Tree package).
258          * @return object       The HTML_TreeMenu object      * @return object       The HTML_TreeMenu object
259      */      */
260          function createFromXML($xml)      function createFromXML($xml)
261          {      {
262                  if (!class_exists('Tree')) {          if (!class_exists('Tree')) {
263                          die('Could not find Tree class');              die('Could not find Tree class');
264                  }          }
265    
266                  // Supplied $xml is a string          // Supplied $xml is a string
267                  if (is_string($xml)) {          if (is_string($xml)) {
268                          require_once('XML/Tree.php');              require_once('XML/Tree.php');
269                          $xmlTree = &new XML_Tree();              $xmlTree = &new XML_Tree();
270                          $xmlTree->getTreeFromString($xml);              $xmlTree->getTreeFromString($xml);
271    
272                  // Supplied $xml is an XML_Tree object          // Supplied $xml is an XML_Tree object
273                  } else {          } else {
274                          $xmlTree = $xml;              $xmlTree = $xml;
275                  }          }
276    
277                  // Now process the XML_Tree object, setting the XML attributes          // Now process the XML_Tree object, setting the XML attributes
278                  // to be the tag data (with out the XML tag name or contents).          // to be the tag data (with out the XML tag name or contents).
279                  $treeStructure = Tree::createFromXMLTree($xmlTree, true);          $treeStructure = Tree::createFromXMLTree($xmlTree, true);
280                  $treeStructure->nodes->traverse(create_function('&$node', '$tagData = $node->getTag(); $node->setTag($tagData["attributes"]);'));          $treeStructure->nodes->traverse(create_function('&$node', '$tagData = $node->getTag(); $node->setTag($tagData["attributes"]);'));
281    
282                            
283                  return HTML_TreeMenu::createFromStructure(array('structure' => $treeStructure));          return HTML_TreeMenu::createFromStructure(array('structure' => $treeStructure));
284          }      }
285  } // HTML_TreeMenu  } // HTML_TreeMenu
286    
287    
# Line 349  class HTML_TreeNode Line 380  class HTML_TreeNode
380      *                         o link          The link for the node, defaults to blank      *                         o link          The link for the node, defaults to blank
381      *                         o icon          The icon for the node, defaults to blank      *                         o icon          The icon for the node, defaults to blank
382      *                         o expandedIcon  The icon to show when the node is expanded      *                         o expandedIcon  The icon to show when the node is expanded
383      *                         o class         The CSS class for this node, defaults to blank      *                         o cssClass      The CSS class for this node, defaults to blank
384      *                         o expanded      The default expanded status of this node, defaults to false      *                         o expanded      The default expanded status of this node, defaults to false
385      *                                         This doesn't affect non dynamic presentation types      *                                         This doesn't affect non dynamic presentation types
386      *                         o linkTarget    Target for the links. Defaults to linkTarget of the      *                         o linkTarget    Target for the links. Defaults to linkTarget of the
# Line 546  class HTML_TreeMenu_DHTML extends HTML_T Line 577  class HTML_TreeMenu_DHTML extends HTML_T
577      *                         is achieved using cookies. Default is true.      *                         is achieved using cookies. Default is true.
578      *  o noTopLevelImages  -  Whether to skip displaying the first level of images if      *  o noTopLevelImages  -  Whether to skip displaying the first level of images if
579      *                         there is multiple top level branches.      *                         there is multiple top level branches.
580        *  o maxDepth          -  The maximum depth of indentation. Useful for ensuring
581        *                         deeply nested trees don't go way off to the right of your
582        *                         page etc. Defaults to no limit.
583      *      *
584      * And also a boolean for whether the entire tree is dynamic or not.      * And also a boolean for whether the entire tree is dynamic or not.
585      * This overrides any perNode dynamic settings.      * This overrides any perNode dynamic settings.
# Line 561  class HTML_TreeMenu_DHTML extends HTML_T Line 595  class HTML_TreeMenu_DHTML extends HTML_T
595    
596          // Defaults          // Defaults
597          $this->images           = 'images';          $this->images           = 'images';
598            $this->maxDepth         = 0;        // No limit
599          $this->linkTarget       = '_self';          $this->linkTarget       = '_self';
600          $this->defaultClass     = '';          $this->defaultClass     = '';
601          $this->usePersistence   = true;          $this->usePersistence   = true;
# Line 582  class HTML_TreeMenu_DHTML extends HTML_T Line 617  class HTML_TreeMenu_DHTML extends HTML_T
617      function toHTML()      function toHTML()
618      {      {
619          static $count = 0;          static $count = 0;
620          $menuObj = 'objTreeMenu_' . ++$count;          $menuObj     = 'objTreeMenu_' . ++$count;
621    
622          $html  = "\n";          $html  = "\n";
623          $html .= '<script language="javascript" type="text/javascript">' . "\n\t";          $html .= '<script language="javascript" type="text/javascript">' . "\n\t";
# Line 606  class HTML_TreeMenu_DHTML extends HTML_T Line 641  class HTML_TreeMenu_DHTML extends HTML_T
641              }              }
642          }          }
643    
644           $html .= sprintf("\n\t%s.drawMenu();", $menuObj);          $html .= sprintf("\n\t%s.drawMenu();", $menuObj);
645            $html .= sprintf("\n\t%s.writeOutput();", $menuObj);
646    
647          if ($this->usePersistence && $this->isDynamic) {          if ($this->usePersistence && $this->isDynamic) {
648              $html .= sprintf("\n\t%s.resetBranches();", $menuObj);              $html .= sprintf("\n\t%s.resetBranches();", $menuObj);
649          }          }
# Line 620  class HTML_TreeMenu_DHTML extends HTML_T Line 657  class HTML_TreeMenu_DHTML extends HTML_T
657      *      *
658      * @access private      * @access private
659      */      */
660      function _nodeToHTML($nodeObj, $prefix, $return = 'newNode')      function _nodeToHTML($nodeObj, $prefix, $return = 'newNode', $currentDepth = 0, $maxDepthPrefix = null)
661      {      {
662            $prefix = empty($maxDepthPrefix) ? $prefix : $maxDepthPrefix;
663            
664          $expanded  = $this->isDynamic ? ($nodeObj->expanded  ? 'true' : 'false') : 'true';          $expanded  = $this->isDynamic ? ($nodeObj->expanded  ? 'true' : 'false') : 'true';
665          $isDynamic = $this->isDynamic ? ($nodeObj->isDynamic ? 'true' : 'false') : 'false';          $isDynamic = $this->isDynamic ? ($nodeObj->isDynamic ? 'true' : 'false') : 'false';
666          $html = sprintf("\t %s = %s.addItem(new TreeNode('%s', %s, %s, %s, %s, '%s', '%s', %s));\n",          $html = sprintf("\t %s = %s.addItem(new TreeNode('%s', %s, %s, %s, %s, '%s', '%s', %s));\n",
667                          $return,                          $return,
668                          $prefix,                          $prefix,
669                          $nodeObj->text,                          str_replace("'", "\\'", $nodeObj->text),
670                          !empty($nodeObj->icon) ? "'" . $nodeObj->icon . "'" : 'null',                          !empty($nodeObj->icon) ? "'" . $nodeObj->icon . "'" : 'null',
671                          !empty($nodeObj->link) ? "'" . $nodeObj->link . "'" : 'null',                          !empty($nodeObj->link) ? "'" . $nodeObj->link . "'" : 'null',
672                          $expanded,                          $expanded,
# Line 643  class HTML_TreeMenu_DHTML extends HTML_T Line 682  class HTML_TreeMenu_DHTML extends HTML_T
682                               str_replace(array("\r", "\n", "'"), array('\r', '\n', "\'"), $handler));                               str_replace(array("\r", "\n", "'"), array('\r', '\n', "\'"), $handler));
683          }          }
684    
685            if ($this->maxDepth > 0 AND $currentDepth == $this->maxDepth) {
686                $maxDepthPrefix = $prefix;
687            }
688    
689          /**          /**
690          * Loop through subnodes          * Loop through subnodes
691          */          */
692          if (!empty($nodeObj->items)) {          if (!empty($nodeObj->items)) {
693              for ($i=0; $i<count($nodeObj->items); $i++) {              for ($i=0; $i<count($nodeObj->items); $i++) {
694                  $html .= $this->_nodeToHTML($nodeObj->items[$i], $return, $return . '_' . ($i + 1));                  $html .= $this->_nodeToHTML($nodeObj->items[$i], $return, $return . '_' . ($i + 1), $currentDepth + 1, $maxDepthPrefix);
695              }              }
696          }          }
697    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed