uw Mon Mar 12 14:03:51 2001 EDT
Modified files:
/php4/pear/Experimental/HTML Menu.php
Log:
- removed a typo
- added the Isomenu feature "use which fits best" for the search of the selected item
Index: php4/pear/Experimental/HTML/Menu.php
diff -u php4/pear/Experimental/HTML/Menu.php:1.3
php4/pear/Experimental/HTML/Menu.php:1.4
--- php4/pear/Experimental/HTML/Menu.php:1.3 Mon Mar 12 12:30:44 2001
+++ php4/pear/Experimental/HTML/Menu.php Mon Mar 12 14:03:51 2001
@@ -57,6 +57,19 @@
* @see get()
*/
var $html = "";
+
+
+ /**
+ * URL of the current page.
+ *
+ * This can be the URL of the current page but it must not be exactly the
+ * return value of getCurrentURL(). If there's no entry for the return value
+ * in the menu hash getPath() tries to find the menu item that fits best
+ * by shortening the URL sign by sign until it find an entry that fits.
+ *
+ * @see getCurrentURL(), getPath()
+ */
+ var $current_url = "";
/**
@@ -123,7 +136,7 @@
/**
* Sets the type / format of the menu: tree, rows or urhere.
*
- * @param string "tree", "rows", "urhere"
+ * @param string "tree", "rows", "urhere", "prevnext"
* @access public
*/
function setMenuType($menu_type) {
@@ -132,6 +145,7 @@
} // end func setMenuType
+
/**
* Returns the HTML menu.
*
@@ -156,7 +170,7 @@
if ("rows" != $this->menu_typ)
$this->html .= $this->getEnd();
- return $this->html . $this->getEnd();
+ return $this->html;
} // end func get
@@ -252,8 +266,6 @@
function buildMenu($menu, $level = 0, $flag_stop_level = -1) {
static $last_node = array();
- $current_url = $this->getCurrentURL();
-
// the recursion goes slightly different for every menu type
switch ($this->menu_type) {
@@ -262,7 +274,7 @@
// loop through the (sub)menu
foreach ($menu as $node_id => $node) {
- if ($current_url == $node["url"]) {
+ if ($this->current_url == $node["url"]) {
// menu item that fits to this url - "active" menu item
$type = 1;
} else if (isset($this->path[$level]) && $this->path[$level] ==
$node_id) {
@@ -290,7 +302,7 @@
// loop through the (sub)menu
foreach ($menu as $node_id => $node) {
- if ($current_url == $node["url"]) {
+ if ($this->current_url == $node["url"]) {
// menu item that fits to this url - "active" menu item
$type = 1;
} else if (isset($this->path[$level]) && $this->path[$level] ==
$node_id) {
@@ -323,7 +335,7 @@
// loop through the (sub)menu
foreach ($menu as $node_id => $node) {
- if ($current_url == $node["url"]) {
+ if ($this->current_url == $node["url"]) {
// menu item that fits to this url - "active" menu item
$type = 1;
} else if (isset($this->path[$level]) && $this->path[$level] ==
$node_id) {
@@ -362,7 +374,7 @@
break;
- } else if ($current_url == $node["url"]) {
+ } else if ($this->current_url == $node["url"]) {
// menu item that fits to this url - "active" menu item
$type = 1;
@@ -416,12 +428,10 @@
*/
function buildSitemap($menu, $level = 0) {
- $current_url = $this->getCurrentURL();
-
// loop through the (sub)menu
foreach ($menu as $node_id => $node) {
- if ($current_url == $node["url"]) {
+ if ($this->current_url == $node["url"]) {
// menu item that fits to this url - "active" menu item
$type = 1;
} else if (isset($this->path[$level]) && $this->path[$level] == $node_id)
{
@@ -488,7 +498,7 @@
case 2:
// part of the path to the selected (active) menu item
- $html .= sprintf('<td>%s<a href="%s">%s</a>%s</td>',
+ $html .= sprintf('<td>%s<b><a href="%s">%s</a></b>%s</td>',
$indent,
$node["url"],
$node["title"],
@@ -522,7 +532,7 @@
return $html;
} // end func getEnty
-
+
/*
* Returns the path of the current page in the menu "tree".
*
@@ -530,10 +540,14 @@
* @see buildPath(), $urlmap
*/
function getPath() {
-
+
+ $this->current_url = $this->getCurrentURL();
$this->buildPath($this->menu, array());
+
+ while ($this->current_url && !isset($this->urlmap[$this->current_url]))
+ $this->current_url = substr($this->current_url, 0, -1);
- return $this->urlmap[$this->currentURL()];
+ return $this->urlmap[$this->current_url];
} // end func getPath
@@ -549,8 +563,6 @@
*/
function buildPath($menu, $path) {
- $current_url = $this->getCurrentURL();
-
// loop through the (sub)menu
foreach ($menu as $node_id => $node) {
@@ -558,7 +570,10 @@
$this->urlmap[$node["url"]] = $path;
// we got'em - stop the search by returning true
- if ($node["url"] == $current_url)
+ // KLUDGE: getPath() works with the best alternative for a URL if there's
+ // no entry for a URL in the menu hash, buildPath() does not perform this
+test
+ // and might do some unneccessary recursive runs.
+ if ($node["url"] == $this->current_url)
return true;
// current node has a submenu
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]