class_TreeMenu.php
上传用户:gzy2002
上传日期:2010-02-11
资源大小:1785k
文件大小:5k
源码类别:

电子政务应用

开发平台:

Java

  1. <?php
  2. // $Id: class_TreeMenu.php,v 1.1 2002/12/23 15:51:24 deskpro Exp $
  3. /**
  4. * HTML_TreeMenu Class
  5. *
  6. * A simple couple of PHP classes and some not so simple
  7. * Jabbascript which produces a tree menu. In IE this menu
  8. * is dynamic, with branches being collapsable. In IE5+ the
  9. * status of the collapsed/open branches persists across page
  10. * refreshes.In any other browser the tree is static. Code is
  11. * based on work of Harald Radi.
  12. *
  13. * Usage.
  14. *
  15. * After installing the package, copy the example php script to
  16. * your servers document root. Also place the TreeMenu.js and the
  17. * images folder in the same place. Running the script should
  18. * then produce the tree.
  19. *
  20. * @author  Richard Heyes
  21. * @author  Harald Radi
  22. * @access  public
  23. * @package HTML_TreeMenu
  24. */
  25. class HTML_TreeMenu
  26. {
  27. /**
  28.     * Indexed array of subnodes
  29. * @var array
  30.     */
  31. var $items;
  32. /**
  33.     * The layer ID
  34. * @var string
  35.     */
  36. var $layer;
  37. /**
  38.     * Path to the images
  39. * @var string
  40.     */
  41. var $images;
  42. /**
  43.     * Name of the object
  44. * This should not be changed without changing
  45. * the javascript.
  46. * @var string
  47.     */
  48. var $menuobj;
  49. /**
  50.     * Constructor
  51. *
  52. * @access public
  53. * @param  string $layer          The name of the layer to add the HTML to.
  54. *                                In browsers that do not support document.all
  55. *                                or document.getElementById(), document.write()
  56. *                                is used, and thus this layer name has no effect.
  57. * @param  string $images         The path to the images folder.
  58. * @param  string $linkTarget     The target for the link. Defaults to "_self"
  59. * @param  string $usePersistence Whether to use clientside persistence. This option
  60. *                                only affects ie5+.
  61.     */
  62. function HTML_TreeMenu($layer, $images, $linkTarget = '_self', $usePersistence = true)
  63. {
  64. $this->menuobj        = 'objTreeMenu';
  65. $this->layer          = $layer;
  66. $this->images         = $images;
  67. $this->linkTarget     = $linkTarget;
  68. $this->usePersistence = $usePersistence;
  69. }
  70. /**
  71.     * This function adds an item to the the tree.
  72. *
  73. * @access public
  74. * @param  object $menu The node to add. This object should be
  75. *                      a HTML_TreeNode object.
  76. * @return object       Returns a reference to the new node inside
  77. *                      the tree.
  78.     */
  79. function &addItem(&$menu)
  80. {
  81. $this->items[] = &$menu;
  82. return $this->items[count($this->items) - 1];
  83. }
  84. /**
  85.     * This function prints the menu Jabbascript code. Should
  86. * be called *AFTER* your layer tag has been printed. In the
  87. * case of older browsers, eg Navigator 4, The menu HTML will
  88. * appear where this function is called.
  89. *
  90. * @access public
  91.     */ 
  92. function printMenu()
  93. {
  94. echo "n";
  95.   echo '<script language="javascript" type="text/javascript">' . "nt";
  96. echo sprintf('%s = new TreeMenu("%s", "%s", "%s", "%s");',
  97.              $this->menuobj,
  98.  $this->layer,
  99.  $this->images,
  100.  $this->menuobj,
  101.  $this->linkTarget);
  102.  
  103. echo "n";
  104. if (isset($this->items)) {
  105. for ($i=0; $i<count($this->items); $i++) {
  106. $this->items[$i]->_printMenu($this->menuobj . ".n[$i]");
  107. }
  108. }
  109.   echo sprintf("nt%s.drawMenu();", $this->menuobj);
  110. if ($this->usePersistence) {
  111. echo sprintf("nt%s.resetBranches();", $this->menuobj);
  112. }
  113. echo "n</script>";
  114. }
  115. } // HTML_TreeMenu
  116. /**
  117. * HTML_TreeNode class
  118. * This class is supplementary to the above and provides a way to
  119. * add nodes to the tree. A node can have other nodes added to it. 
  120. *
  121. * @author  Richard Heyes
  122. * @author  Harald Radi
  123. * @access  public
  124. * @package HTML_TreeMenu
  125. */
  126. class HTML_TreeNode
  127. {
  128. /**
  129.     * The text for this node.
  130. * @var string
  131.     */
  132. var $text;
  133. /**
  134.     * The link for this node.
  135. * @var string
  136.     */
  137. var $link;
  138. /**
  139.     * The icon for this node.
  140. * @var string
  141.     */
  142. var $icon;
  143. /**
  144.     * Indexed array of subnodes
  145. * @var array
  146.     */
  147. var $items;
  148. /**
  149.     * Whether this node is expanded or not
  150. * @var bool
  151.     */
  152. var $expanded;
  153. /**
  154.     * Constructor
  155. *
  156. * @access public
  157. * @param  string $text      The description text for this node
  158. * @param  string $link      The link for the text
  159. * @param  string $icon      Optional icon to appear to the left of the text
  160. * @param  bool   $expanded  Whether this node is expanded or not (IE only)
  161. * @param  bool   $isDynamic Whether this node is dynamic or not (no affect on non-supportive browsers)
  162.     */
  163. function HTML_TreeNode($text = null, $link = null, $icon = null, $expanded = false, $isDynamic = true)
  164. {
  165. $this->text      = (string)$text;
  166. $this->link      = (string)$link;
  167. $this->icon      = (string)$icon;
  168. $this->expanded  = $expanded;
  169. $this->isDynamic = $isDynamic;
  170. }
  171. /**
  172.     * Adds a new subnode to this node.
  173. *
  174. * @access public
  175. * @param  object $node The new node
  176.     */
  177. function &addItem(&$node)
  178. {
  179. $this->items[] = &$node;
  180. return $this->items[count($this->items) - 1];
  181. }
  182. /**
  183.     * Prints jabbascript for this particular node.
  184. *
  185. * @access private
  186. * @param  string $prefix The jabbascript object to assign this node to.
  187.     */
  188. function _printMenu($prefix)
  189. {
  190. echo sprintf("t%s = new TreeNode('%s', %s, %s, %s, %s);n",
  191.              $prefix,
  192.              $this->text,
  193.              !empty($this->icon) ? "'" . $this->icon . "'" : 'null',
  194.              !empty($this->link) ? "'" . $this->link . "'" : 'null',
  195.  $this->expanded  ? 'true' : 'false',
  196.  $this->isDynamic ? 'true' : 'false');
  197. if (!empty($this->items)) {
  198. for ($i=0; $i<count($this->items); $i++) {
  199. $this->items[$i]->_printMenu($prefix . ".n[$i]");
  200. }
  201. }
  202. }
  203. }
  204. ?>