All pastes #96851 Raw Edit

Dryanta

public text v1 · immutable
#96851 ·published 2006-07-23 07:22 UTC
rendered paste body
<?php

        // The current level of the navigation structure
        $NavNode_Depth= 0;

        // Elements of the HtmlFormats array are function names to be called to output the correct html for a particular navigation level
        // Overwrite the HtmlFormats property with function names for each navigation level
        // If the navigation level goes beyond the length of the HtmlFormats array, NavNode::BuildHtml will use the last element of the array
        $NavNode_HtmlFormats= array();

        class NavNode {

                // Other properties
                var $Url= '/index.php';
                var $Kids= array();
                var $Label= "";
                var $HtmlFormats;

                function NavNode($Url="", $Kids="") {
                        if ($Url!="") $this->Url= $Url;
                        if (is_array($Kids) && count($Kids)>0) {
                                foreach (array_keys($Kids) as $i) {
                                        $this->Kids[$i]= $Kids[$i];
                                        $this->Kids[$i]->Label= $i;
                                }
                        }
                        $this->HtmlFormats= &$GLOBALS['NavNode_HtmlFormats'];
                }

                // Returns a string containing an HTML representation for this link
                // Calls the BuildHtml function of all it's children, and appends to the HTML string
                function BuildHtml() {
                        global $NavNode_HtmlFormats;
                        global $NavNode_Depth;
                        $s= "";
                        if (count($this->HtmlFormats)<1) die("NavNode::HtmlFormats is empty!");
                        if ($NavNode_Depth>(count($this->HtmlFormats)-1)) $NavNode_Depth= count($this->HtmlFormats)-1;
                        if ($this->Url && $this->Label) {
                                $funcname= $this->HtmlFormats[$NavNode_Depth]."";
                                $s.= $funcname($this);
                        }
                        // Build children HTML
                        if (count($this->Kids)>0) {
                                $NavNode_Depth++;
                                $k= 0;
                                foreach (array_keys($this->Kids) as $i) {
                                        $k++;
                                        if ($k==count($this->Kids)) $this->Kids[$i]->isLastChild= true;
                                        $s.= $this->Kids[$i]->BuildHtml();
                                }
                                $NavNode_Depth--;
                        }
                        return $s;
                }


        }

        /*
                Customization
        */


        $Navigation= new NavNode('', array(
                'Home'=> new NavNode(),
                'Services'=> new NavNode('/services.php', array(
                        'Residential'=> new NavNode('/services/residential.php'),
                        'Commercial'=> new NavNode('/services/commercial.php'),
                        'Government'=> new NavNode('/services/government.php')
                )),
                'IT Consulting'=> new NavNode('/consulting.php', array(
                        'Security Consulting'=> new NavNode('/consulting/security.php'),
                        'Network Deployment'=> new NavNode('/consulting/networkdeployment.php')
                )),
                'Equipment Sales'=> new NavNode('/store/'),
                'Support'=> new NavNode('/support.php'),
                'Contact Us'=> new NavNode('/contactus.php')
        ));

        $Navigation->HtmlFormats= array(
                'HtmlFormat0',
                'HtmlFormat1',
                'HtmlFormat2'
        );

        function HtmlFormat0(&$o) {
                return '';
        }

        function HtmlFormat1(&$o) {
                $s= '<tr><td><img src="/design/spacer.gif" width="100" height="10" alt="" /></td></tr>'."\n";
                if ($o->Url==$_SERVER['PHP_SELF']) {  // make sure pages do not link to themselves!
                        $s.= '<tr><td class="nav_button_active">'.$o->Label.'</td></tr>'."\n";
                } else { // create a link to the page
                        $s.= '<tr><td class="nav_button" onClick="document.location.href=\''.$o->Url.'\'" onMouseOver="this.className= \'nav_button_over\'" onMouseOut="this.className= \'nav_button\'"><a href="'.$o->Url.'">'.$o->Label.'</a></td></tr>';
                }
                return $s;
        }

        function HtmlFormat2(&$o) {
                $lastChild= $o->isLastChild ? 'true' : 'false';
                $s=  '<tr valign="top"><td colspan="3" class="nav_button_sub_'.$lastChild.'">'."\n";
                $s.= '<table cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><img src="/design/subnav_'.$lastChild.'.gif" alt="" width="38" height="15" /></td><td class="nav_button_sub_true">';
                if ($o->Url==$_SERVER['PHP_SELF']) {  // make sure pages do not link to themselves!
                        $s.= $o->Label;
                } else { // create a link to the page
                        $s.= '<a href="'.$o->Url.'">'.$o->Label.'</a>';
                }
                return "$s</td></tr></table></td></tr>\n";
        }

?>