By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
432,369 Members | 950 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 432,369 IT Pros & Developers. It's quick & easy.

forgetable arrays

P: n/a
Hi,
I'm having trouble with my code:

<?php
/**
* Contains classes to easyly create an XHTML navigation frame.
*
* plancode.com
* Bauplanmanagment im Netz
*
* <p>Contains classes to create an XHTML navigation frame. The main
class is menu. See there for details</p>
*
* @version 0.1
* @see menu
* @author Bj&ouml;rn Keil <ke**@plancode.com >
* @since 19.11.2003
* @package Administration
* @copyright plancode.com 19.11.2003
*/

/**
* A single menu entry for the navigation bar
*
* @since 19.11.2003
* @author Bjoern Keil <ke**@plancode.com>
*/
class menunode {
/**
* Contains the title of a menu entry
* @access public
* @var string
*/
var $title;

/**
* Contains the base directory of the referenced item
* @access public
* @var string
*/
var $directory;

/**
* Contains the filename of the menu entry
* @access public
* @var string
*/
var $file;

/**
* Conains the parentnode or null for root nodes
* @access private
* @var menunode
*/
var $parent;

/**
* Contains an array of child nodes
* @access public
* @var array of menunode
*/
var $children;

/**
* Constructor, initializes base fuctions
* @param string The title of the function
* @param string The base directory in wich the file belonging to the
entry may be found
* @param string The name of the file belonging to the directory
entry <i> The directory has to be empty or end with "/"</i>
*/
function setNode ($title, $directory, $file) {
$this->title = $title;
$this->directory = $directory;
$this->file = $file;
$this->children = array();
}

/**
* Set the parent for the current node
* @param menunode The node to be set as parent
*/
function setParent ($parent) {
$this->parent = $parent;
}

/**
* Creates a new child node and sets it up
* @param string The title of the child menuentry
* @param string The directory of the child node relative to the
current node. <i>Has to be empty or end with "/"</i>
* @param string The name of the file linked from the menu
* @return menunode the newly created menuentry
*/
function addChild ($title, $subdir, $file) {
$newchild = new menunode;
$newchild->setNode($title, $this->directory.$subdir, $file);
$newchild->setParent($this);
$this->children[] = $newchild;
return $newchild;
}

/**
* Draw the menustarting from this node into a string
* @return string containing XHTML code for menu
*/
function draw() {
$menustring = "<li><a href=\"$this->directory$this->file\"
target=\"content\">$this->title</a></li>\n";
echo current($this->children);
if (count($this->children) > 0) {
$menustring .= "<ul>\n";
foreach ($this->children as $currentnode) {
$menustring .= $currentnode->draw();
}
$menustring .= "</ul>\n";
}
return $menustring;
}

}
/**
* Create a simple menu
*
* Usage:
* <code>
* $mymenu = new menu;
* $mymenu -> setNode("Menu title", "Menulink directory", Menulink
file");
* $mymenu->addChild("Entry title", "Entry directory", "Entry file");
* $first_level_entry = $mymenu->addChild("Entry title", "Entry
subdirectory", "Entry file");
* $second_level_entry =
* $first_level_entry->addChild("Entry title", "Entry subdirectory",
"Entry file");
* $second_level_entry =
* $first_level_entry->addChild("Entry title", "", "Entry file");
*
* echo $mymenu->create();
* </code>
* <i>Warning:
* <ol>
* <li>The directory and subdirectories must end with a "/" or
* be left empty as in the example above if the the files of next
* menu level are in the same directory</li>
* <li>All directory entries are relative to the level above. I.E.
only the menu root
* item may contain an absolute adress.</li>
* <li>Off course, directories & subdirectories may not start with a
"/"</li>
* <li>Menu & entry titles have to be XHTML code. Special characters
have to be represented
* with the proper HTML sequences like: &nbsp;</li>
* </ol>
* </i>
*/
class menu extends menunode {

/**
* Create the XHTML code for the whole menu
* @return string containing the XHTML code
*/
function create() {
$menustring = "<h2><a href=\"$this->directory$this->file\"
target=\"content\">$this->title</a></h2>\n";
$currentnode = current($this->children);
if (count($this->children) > 0) {
$menustring .= "<ul>\n";
foreach ($this->children as $currentnode) {
$menustring .= $currentnode->draw();
}
$menustring .= "</ul>\n";
}
return $menustring;
}
}
?>

The Problem is, it generates the first level of the menu without any
problems. But once it tries to access the 2nd level nodes from the
first level nodes it seems to have forgotten what there are any child
nodes. I used this code for testing:
<?PHP
require_once "menu.php";

$newmenu = new menunode;
$newmenu->setnode("Navigation","","");
$level1 = $newmenu->addChild("Punkt 1","","");
$level1->addChild("Punkt a","","");
$newmenu->addChild("Punkt 2","","");
$newmenu->addChild("Punkt 3","","");
$newmenu->addChild("Punkt 4","","");
$newmenu->addChild("Punkt 5","","");
echo $newmenu->create();
echo $level1->children[0]->title;
?>

Sorry for the long post and thanks ahead.
Björn Keil
Jul 17 '05 #1
Share this Question
Share on Google+
1 Reply


P: n/a
I'm too lazy to read all your code but I have previously helped someone
else to build a heirachial menu from a database table.

see my post on thread

"Simple menu, MySQL query question"

Who knows, maybe you might even use it :)

I don't know if the original poster of that thread used it, he didn't
bother to reply.

If you can't find the thread, I'll dig up the code and send it to you.
At the moment, it makes XML but you could easily make it produce HTML.

Jul 17 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.