We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 24658
    • 11 Posts
    I download the Wayfinder snippet last week, I want to make a dropmenu inside of a TV.

    I copied the contents of the file snippet.wayfinder.tpl.php into a new snippet named Wayfinder.
    I created a new folder under assets/snippets named wayfinder.
    ! Copied the file wayfinder.inc.php into the newly created folder

    But each time I get the same error:
    Parse error: syntax error, unexpected ’?’ in /home/contracts/CN20060931/www/manager/includes/document.parser.class.inc.php(705) : eval()’d code on line 1

    It’s maybe a noop question smiley, is there somethink that I forgot to do?

    www.stipnuenen.nl
      • 7923
      • 4,213 Posts
      remove <?php from the start of the snippet code and ?> at the end if there is one


        "He can have a lollipop any time he wants to. That's what it means to be a programmer."
        • 24658
        • 11 Posts
        Quote from: doze at Oct 07, 2006, 08:21 AM

        remove <?php from the start of the snippet code and ?> at the end if there is one

        Ok thanks the PHP-error code is gone cool

        But I can’t see the menu, This is the code of the snippet:
        /*
         Snippet name: Wayfinder
         Short Desc: builds site navigation
         Version: beta
         Authors: Ryan Thrash (vertexworks.com)
                  Kyle Jaebker (muddydogpaws.com)
        */
        
        class Wayfinder {
            var $id = 0;
            var $level = 0;
            var $ph = FALSE;
            var $debug;
            var $ignoreHidden = FALSE;
            var $hideSubMenus = FALSE;
            var $textOfLinks = 'menutitle';
            var $titleOfLinks = 'pagetitle';
            var $templates = array();
            var $parentTree = array();
            var $wfDocs = array();
            var $css = array();
            var $cssTpl = FALSE;
            var $jsTpl = FALSE;
            var $rowIdPrefix = FALSE;
            var $useWeblinkUrl = TRUE;
            var $modxVersion = array();
            var $placeHolders = array('[+wf.wrapper+]','[+wf.classes+]','[+wf.classnames+]','[+wf.link+]','[+wf.title+]','[+wf.linktext+]','[+wf.id+]','[+wf.attributes+]','[+wf.docid+]');
            var $ie = "\n";
            var $debugOutput = '<h2>WayFinder Debug Output:</h2>';
            
            function getMenuChildren($id=0, $sort='menuindex', $dir='ASC') {
                global $modx;
                $fields = 'sc.id,sc.menutitle,sc.pagetitle,sc.introtext,sc.menuindex,sc.published,sc.hidemenu,sc.parent,sc.isfolder,sc.description,sc.alias,sc.longtitle,sc.type,if(sc.type=\'reference\',sc.content,\'\') as content, sc.template';
                
                if (substr($this->modxVersion['code_name'],-4) >= 1392) {
                    $fields .= ',sc.link_attributes';
                }
                
                $tblsc = $modx->getFullTableName("site_content");
                $tbldg = $modx->getFullTableName("document_groups");
                
                if ($this->ignoreHidden) {
                    $menuWhere = '';
                } else {
                    $menuWhere = ' AND sc.hidemenu = 0';
                }
        
                // modify field names to use sc. table reference
                $sort = 'sc.'.implode(',sc.',preg_replace("/^\s/i","",explode(',',$sort)));
                // get document groups for current user
                if($docgrp = $modx->getUserDocGroups()) $docgrp = implode(",",$docgrp);
                // build query
                $access = ($modx->isFrontend() ? "sc.privateweb=0":"1='".$_SESSION['mgrRole']."' OR sc.privatemgr=0").
                  (!$docgrp ? "":" OR dg.document_group IN ($docgrp)");
                $sql = 'SELECT DISTINCT '.$fields.' FROM '.$tblsc.' sc LEFT JOIN '.$tbldg.
                    ' dg on dg.document = sc.id WHERE sc.parent = '.$id.
                    ' AND sc.published=1 AND sc.deleted=0 AND ('.$access.')'.$menuWhere.
                    ' ORDER BY '.$sort.' '.$dir.';';
                $result = $modx->dbQuery($sql);
                $resourceArray = array();
                for($i=0;$i<@$modx->recordCount($result);$i++)  {
                  array_push($resourceArray,@$modx->fetchRow($result));
                }
                return $resourceArray;
            }
        
            //generate the menu
            function buildMenu($parentId,$curLevel = 1) {
                global $modx;
                $output = '';
        
                $resource = $this->getMenuChildren($parentId,'menuindex','ASC');
        
                $firstItem = 1;
        
                if (is_array($resource) && !empty($resource)) {
                    $numItems = count($resource);
                    foreach ($resource as $n => $v) {
                        if ($this->useWeblinkUrl !== 'FALSE' && $v['type'] == 'reference') {
                            $v['link'] = $v['content'];
                        } else {
                            $v['link'] = $modx->makeUrl($v['id']);
                        }
                        $v['level'] = $curLevel;
                        $v['first'] = $firstItem;
                        $firstItem = 0;
                        if ($n == ($numItems-1) && $numItems > 1) {
                            $v['last'] = 1;
                        } else {
                            $v['last'] = 0;
                        }
        
                        $useTextField = (empty($v[$this->textOfLinks])) ? 'pagetitle' : "$this->textOfLinks";
                        $v['linktext'] = $v[$useTextField];
                        $v['title'] = $v[$this->titleOfLinks];
        
                        if ($v['isfolder'] && ($curLevel < $this->level || $this->level == 0) && (!$this->hideSubMenus || in_array($v['id'],$this->parentTree))) {
                            $oldLevel = $curLevel;
                            $subMenu = $this->ie . $this->buildMenu($v['id'],++$curLevel) . $this->ie;
                            $curLevel = $oldLevel;
                        } else {
                            $subMenu = '';
                        }
                        $output .= $this->renderRow($v,$subMenu);
                    }
        
                    if ($this->templates['innerTpl'] && $curLevel > 1) {
                        $useChunk = $this->templates['innerTpl'];
                        $usedTemplate = 'innerTpl';
                    } else {
                        $useChunk = $this->templates['outerTpl'];
                        $usedTemplate = 'outerTpl';
                    }
        
                    if ($curLevel > 1) {
                        $wrapperClass = 'innercls';
                    } else {
                        $wrapperClass = 'outercls';
                    }
        
                    $classNames = $this->setItemClass($wrapperClass);
                    if ($classNames) $useClass = ' class="' . $classNames . '"';
                    $phArray = array($output,$useClass);
        
                    $output = str_replace($this->placeHolders,$phArray,$useChunk);
        
                    if ($this->debug) {
                        $numDocs = $numItems;
                        $this->debugOutput .= '<strong>Nesting Complete:</strong> Previous ' . $numDocs . ' level ' . $curLevel . ' items inserted into ' . $usedTemplate . ' with class ' . $classNames . '<br/>';
                    }
                }
        
                return $output;
            }
        
            //render each rows output
            function renderRow(&$resource,$subMenu) {
                global $modx;
                $output = '';
        
                if ($resource['id'] == $modx->documentObject['id'] && $resource['isfolder'] && $this->templates['parentRowHereTpl'] && ($resource['level'] < $this->level || $this->level == 0)) {
                    $usedTemplate = 'parentRowHereTpl';
                } elseif ($resource['id'] == $modx->documentObject['id'] && $this->templates['innerHereTpl'] && $resource['level'] > 1) {
                    $usedTemplate = 'innerHereTpl';
                } elseif ($resource['id'] == $modx->documentObject['id'] && $this->templates['hereTpl']) {
                    $usedTemplate = 'hereTpl';
                } elseif ($resource['isfolder'] && $this->templates['activeParentRowTpl'] && ($resource['level'] < $this->level || $this->level == 0) && $this->isHere($resource['id'])) {
                    $usedTemplate = 'activeParentRowTpl';
                } elseif ($resource['isfolder'] && ($resource['template']=="0" || is_numeric(strpos($resource['link_attributes'],'rel="category"'))) && $this->templates['categoryFoldersTpl'] && ($resource['level'] < $this->level || $this->level == 0)) {
                    $usedTemplate = 'categoryFoldersTpl';
                } elseif ($resource['isfolder'] && $this->templates['parentRowTpl'] && ($resource['level'] < $this->level || $this->level == 0)) {
                    $usedTemplate = 'parentRowTpl';
                } elseif ($resource['level'] > 1 && $this->templates['innerRowTpl']) {
                    $usedTemplate = 'innerRowTpl';
                } else {
                    $usedTemplate = 'rowTpl';
                }
                
                $useChunk = $this->templates[$usedTemplate];
        
                $useSub = $subMenu;
                $classNames = $this->setItemClass('rowcls',$resource['id'],$resource['first'],$resource['last'],$resource['level'],$resource['isfolder'],$resource['type']);
                if ($classNames) $useClass = ' class="' . $classNames . '"';
                
                if ($this->rowIdPrefix) {
                    $useId = ' id="' . $this->rowIdPrefix . $resource['id'] . '"';
                } else {
                    $useId = '';
                }
        
                $phArray = array($useSub,$useClass,$classNames,$resource['link'],$resource['title'],$resource['linktext'],$useId,$resource['link_attributes'],$resource['id']);
        
                $output .= str_replace($this->placeHolders,$phArray,$useChunk);
        
                if ($this->debug) {
                    $this->debugOutput .= '<strong>Item Processed: (' . $resource['id'] . ') ' . $resource['pagetitle'] . '</strong><br/>
                    template: ' . $usedTemplate . ' | class: ' . $classNames . '<br/>
                    level: ' . $resource['level'] . ' | First/Last: ' . $resource['first'] . '/' . $resource['last'] . '<br/>';
                    $this->debugOutput .= $this->rowIdPrefix? 'Id applied: ' . $useId . '<br/>' : '';
                }
        
                return $output . $this->ie;
            }
        
            //debugging to check for valid chunks
            function checkChunks() {
                global $modx;
        
                foreach ($this->templates as $n => $v) {
                    $chunkcheck = $modx->getChunk($v);
                    if (empty($v) || !$chunkcheck) {
                        if ($n === 'outerTpl') {
                            $this->templates[$n] = '<ul[+wf.classes+]>[+wf.wrapper+]</ul>';
                        } elseif ($n === 'rowTpl') {
                            $this->templates[$n] = '<li[+wf.id+][+wf.classes+]><a href="[+wf.link+]" title="[+wf.title+]" [+wf.attributes+]>[+wf.linktext+]</a>[+wf.wrapper+]</li>';
                        } else {
                            $this->templates[$n] = FALSE;
                        }
                        if ($this->debug) {
                            $this->debugOutput .= 'No chunk found for <strong>' . $n . '</strong> using default.<br/>';
                        }
                    } else {
                        $this->templates[$n] = $chunkcheck;
                        if ($this->debug) {
                            $this->debugOutput .= 'The chunk ('.$v.') for <strong>' . $n . '</strong> was used.<br/>';
                        }
                    }
                }
                if ($this->debug) {
                    $this->debugOutput .= '<br/>';
                }
            }
        
            //determine "you are here"
            function isHere($did) {
                return in_array($did,$this->parentTree);
            }
        
            //determine style class for current item being processed
            function setItemClass($classType, $docId = 0, $first = 0, $last = 0, $level = 0, $isFolder = 0, $type = 'document') {
                global $modx;
                $returnClass = '';
                $hasClass = 0;
        
                if ($classType === 'outercls' && !empty($this->css['outer'])) {
                    //Set outer class if specified
                    $returnClass .= $this->css['outer'];
                    $hasClass = 1;
                } elseif ($classType === 'innercls' && !empty($this->css['inner'])) {
                    //Set inner class if specified
                    $returnClass .= $this->css['inner'];
                    $hasClass = 1;
                } elseif ($classType === 'rowcls') {
                    //Set row class if specified
                    if (!empty($this->css['row'])) {
                        $returnClass .= $this->css['row'];
                        $hasClass = 1;
                    }
                    //Set first class if specified
                    if ($first && !empty($this->css['first'])) {
                        $returnClass .= $hasClass ? ' ' . $this->css['first'] : $this->css['first'];
                        $hasClass = 1;
                    }
                    //Set last class if specified
                    if ($last && !empty($this->css['last'])) {
                        $returnClass .= $hasClass ? ' ' . $this->css['last'] : $this->css['last'];
                        $hasClass = 1;
                    }
                    //Set level class if specified
                    if (!empty($this->css['level'])) {
                        $returnClass .= $hasClass ? ' ' . $this->css['level'] . $level : $this->css['level'] . $level;
                        $hasClass = 1;
                    }
                    //Set parentFolder class if specified
                    if ($isFolder && !empty($this->css['parent']) && ($level < $this->level || $this->level == 0)) {
                        $returnClass .= $hasClass ? ' ' . $this->css['parent'] : $this->css['parent'];
                        $hasClass = 1;
                    }
                    //Set here class if specified
                    if (!empty($this->css['here']) && $this->isHere($docId)) {
                        $returnClass .= $hasClass ? ' ' . $this->css['here'] : $this->css['here'];
                        $hasClass = 1;
                    }
                    //Set self class if specified
                    if (!empty($this->css['self']) && $docId == $modx->documentIdentifier) {
                        $returnClass .= $hasClass ? ' ' . $this->css['self'] : $this->css['self'];
                        $hasClass = 1;
                    }
                    //Set class for weblink
                    if (!empty($this->css['weblink']) && $type == 'reference') {
                        $returnClass .= $hasClass ? ' ' . $this->css['weblink'] : $this->css['weblink'];
                        $hasClass = 1;
                    }
                }
        
                return $returnClass;
            }
            
            //Add the specified css & javascript chunks to the page
            function regJsCss() {
                global $modx;
                
                if ($this->debug) {
                    $this->debugOutput .= '<h3>Processing Css/Js Chunks</h3>';
                }
                
                if ($this->cssTpl) {
                    $cssChunk = $modx->getChunk($this->cssTpl);
                    if ($cssChunk) {
                        $modx->regClientCSS($cssChunk);
                        if ($this->debug) {$this->debugOutput .= '<p>The CSS chunk ' . $this->cssTpl . ' was added to the page.</p>';}
                    } else {
                        if ($this->debug) {$this->debugOutput .= '<p>The CSS chunk ' . $this->cssTpl . ' was not found.</p>';}
                    }
                }
                
                if ($this->jsTpl) {
                    $jsChunk = $modx->getChunk($this->jsTpl);
                    if ($jsChunk) {
                        $modx->regClientStartupScript($jsChunk);
                        if ($this->debug) {$this->debugOutput .= '<p>The JS chunk ' . $this->jsTpl . ' was added to the page.</p>';}
                    } else {
                        if ($this->debug) {$this->debugOutput .= '<p>The JS chunk ' . $this->jsTpl . ' was not found.</p>';}
                    }
                }
            }
        }


        The settings in the TV are:
        Input type: Dropdownlist menu
        Code: [[Wayfinder? &startId=`0`]]
          • 7923
          • 4,213 Posts
          How does your snippet call look like and site structure etc..?


            "He can have a lollipop any time he wants to. That's what it means to be a programmer."
            • 24658
            • 11 Posts
            Quote from: doze at Oct 07, 2006, 08:32 AM

            How does your snippet call look like and site structure etc..?

            Do I have to set the pages manually?, the settings looks right:
            http://modxtest.muddydogpaws.com/wayfinder_documentation.html
              • 7923
              • 4,213 Posts
              Oh.. maybe I misunderstood what you want to do..

              So do you want to create a dopdown list TV that lists document names by using Wayfinder to generate the list data? In that case you need to use @EVAL return $modx->runSnippet("Wayfinder", array("startId", "0")); in the input options field of the TV and use Wayfinder templates to make it return the TV data in correct format.

              But if you are just needing to Wayfinder to do a menu into a certain TV, you can set the TV type to just "text" and have the Wayfinder call in the default value field like [!Wayfinder? &startId=`0`!] (exclamations means that the snippet is run uncached).

              The "dropdown list" in the TV type means that when editing a document, the TV is built as a dropdown list form element. It doesn’t mean that it would turn your Wayfinder output to a dropdown menu. You need to use CSS to style the menu to a dropdown menu. So maybe you aren’t actually needing a TV at all..?



                "He can have a lollipop any time he wants to. That's what it means to be a programmer."
                • 24658
                • 11 Posts
                Quote from: doze at Oct 07, 2006, 09:38 AM

                Oh.. maybe I misunderstood what you want to do..

                So do you want to create a dopdown list TV that lists document names by using Wayfinder to generate the list data? In that case you need to use @EVAL return $modx->runSnippet("Wayfinder", array("startId", "0")); in the input options field of the TV and use Wayfinder templates to make it return the TV data in correct format.

                But if you are just needing to Wayfinder to do a menu into a certain TV, you can set the TV type to just "text" and have the Wayfinder call in the default value field like [!Wayfinder? &startId=`0`!] (exclamations means that the snippet is run uncached).

                The "dropdown list" in the TV type means that when editing a document, the TV is built as a dropdown list form element. It doesn’t mean that it would turn your Wayfinder output to a dropdown menu. You need to use CSS to style the menu to a dropdown menu. So maybe you aren’t actually needing a TV at all..?


                Thanks man now there is a menu running cool

                The blocks in this template are all different TV’s, the code is ok now but how do I get a real dropmenu?. It looks the same as the ’’UltimateParent’’, so whats the difference with wayfinder?. On the wayfinder site the are a few examples:
                http://modxtest.muddydogpaws.com/wayfinder_documentation.html

                Is it difficult to get it like that, I mean a 2 or 3 level menu with that block view?, It can olso be horizontal in the topbar, no problem.

                Or is there maby a bether option for my to get a simple good looking dropmenu, Breadcrumbs or something?
                  • 7923
                  • 4,213 Posts
                  Get this file and look inside. You can find Mollio dropdown menu and many cssplay menus from that archive what all use Wayfinder. There is flyout menus, dropdown menus, dropline menus etc.. If you are going to use the CSSPlay menus on a commercial site, you have to ask Stu’s permission. You can find contact information in www.cssplay.co.uk.


                    "He can have a lollipop any time he wants to. That's what it means to be a programmer."
                    • 24658
                    • 11 Posts
                    Quote from: doze at Oct 08, 2006, 06:52 AM

                    Get this file and look inside. You can find Mollio dropdown menu and many cssplay menus from that archive what all use Wayfinder. There is flyout menus, dropdown menus, dropline menus etc.. If you are going to use the CSSPlay menus on a commercial site, you have to ask Stu’s permission. You can find contact information in www.cssplay.co.uk.

                    Thank you so much!, now its looking really sweet! smiley cool

                    I used the css menu, here you see a example in firefox:


                    Thats looks good, perfect!

                    But with IE:


                    In Internet Explorer it become a mess, the menu is in the wrong place.

                    This is code I used:

                    body {
                    font-family: "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;
                    font-size: 80%;
                    }
                    
                    /********** Global styles **********/
                    .cl {
                    clear:both;
                    }
                    p {
                    margin: 0 0 0 0px;
                    }
                    
                    /********** Body  **********/
                    #container {
                    width: 673px;
                    margin: 0px auto;
                    background:#ee3f12;
                    padding:0px
                    }
                    
                    /********** Top **********/
                    #topleft {
                    color: #FFFFFF;
                    width: 208px;
                    height: 140px;
                    }
                    #topleft h2 {
                    text-align: center;
                    font-size:2em;
                    font-weight: normal;
                    color: #fff;
                    margin:0;
                    padding:0px;
                    margin-bottom:40px;
                    }
                    #topleft h3{
                    text-align:center;
                    font-style:italic;
                    }
                    #topright {
                    float: right;
                    height: 140px;
                    width: 452px;
                    text-align: right;
                    background:#fff;
                    
                    }
                    #topright h4 {
                    font-size:2em;
                    color: #F01E1E;
                    text-align:center;
                    }
                    
                    #gallery {
                    width: 673px;
                    height:140px;
                    border-top:5px solid #fff;
                    border-bottom:5px solid #fff;
                    }
                    #gallery img{
                    margin:0;
                    padding:0;
                    border:0;
                    }
                    /********** Body **********/
                    #content {
                    width: 452px;
                    float: right;
                    background-color: #fff;
                    }
                    /********** Menu **********/
                    .menu {
                    position:relative; 
                    z-index:1000;
                    font-size:90%;
                    }
                    
                    /* remove all the bullets, borders and padding from the default list styling */
                    .menu ul {
                    padding:0;
                    margin:0;
                    list-style-type:none;
                    width:221px;
                    }
                    /* hack for IE5.5 */
                    * html .menu ul {margin-left:-16px; ma\rgin-left:0;}
                    /* position relative so that you can position the sub levels */
                    .menu li {
                    position:relative;
                    }
                    
                    /* get rid of the table */
                    table {position:absolute; top:0; left:0; z-index:100; font-size:1em;}
                    
                    /* style the links */
                    .menu a, .menu a:visited {
                    display:block; 
                    text-decoration:none;
                    height:30px;
                    line-height:30px;
                    width:221px;
                    color:#000;
                    background:#eeedef;
                    text-indent:5px;
                    border:1px solid #fff;
                    border-width:0 1px 1px 0;
                    }
                    /* hack for IE5.5 */
                    * html .menu a, * html .menu a:visited {width:150px; w\idth:149px;}
                    /* style the link hover */
                    .menu a:hover{
                    color:#fff; 
                    background:#949e7c;
                    }
                    
                    /* hide the sub levels and give them a positon absolute so that they take up no room */
                    .menu ul ul {
                    visibility:hidden;
                    position:absolute;
                    top:0;
                    left:150px; 
                    }
                    /* make the second level visible when hover on first level list OR link */
                    .menu ul :hover ul{
                    visibility:visible;
                    }
                    /* keep the third level hidden when you hover on first level list OR link */
                    .menu ul :hover ul ul{
                    visibility:hidden;
                    }
                    /* keep the fourth level hidden when you hover on second level list OR link */
                    .menu ul :hover ul :hover ul ul{
                    visibility:hidden;
                    }
                    /* make the third level visible when you hover over second level list OR link */
                    .menu ul :hover ul :hover ul{ 
                    visibility:visible;
                    }
                    /* make the fourth level visible when you hover over third level list OR link */
                    .menu ul :hover ul :hover ul :hover ul { 
                    visibility:visible;
                    }
                    #menu {
                    background: #000000;
                    border-bottom: 5px solid #FFFFFF;
                    height:30px;
                    margin-left:5px;
                    }
                    #menu ul{
                    list-style:none;
                    padding:0;
                    margin:0;
                    }
                    #menu li{
                    float:left;
                    width:33.3%;
                    text-align:center;
                    }
                    #menu li.last a{
                    border-right:none;
                    }
                    #menu a{
                    display:block;
                    text-decoration: none;
                    color: #0f0b03;
                    padding:8px 15px;
                    border-right:1px solid #fff;;
                    }
                    #menu a:hover {
                    background: #000000;
                    color: #fff;
                    }
                    #menu li.here a{
                    background:#000000;
                    color:#fff;
                    }
                    /********** Main Content **********/
                    #pad {
                    padding: 12px;
                    color: #000;
                    background:#c7b793;
                    margin-left:5px;
                    }
                    #pad h3 {
                    padding: 4px;
                    margin: 4px;
                    font-size: 120%;
                    font-weight: bold;
                    color: #FFFFFF;
                    }
                    #pad a{
                    color: #0f0b03;
                    }
                    
                    /**********  Left Column **********/
                    #left {
                    width: 213px;
                    color: #FFFFFF;
                    padding: 0px;
                    }
                    #left h1 {
                    padding: 4px;
                    margin: 4px;
                    font-size: 120%;
                    font-weight: bold;
                    color: #fff;
                    }
                    #left #menuBlock ul{
                    list-style:none;
                    padding:0;
                    margin:0;
                    }
                    #left #menuBlock a{
                    display:block;
                    text-decoration: none;
                    color: #0f0b03;
                    padding:8px 15px;
                    background: #cf9f25;
                    margin-bottom:2px;
                    }
                    #left #menuBlock li ul li a{
                    padding-left:40px;
                    }
                    #left #menuBlock li ul{
                    display:none;
                    }
                    #left #menuBlock li.here ul{
                    display:block;
                    }
                    #left #menuBlock li.here a, #left #menuBlock a:hover{
                    background: #f1bc35;
                    color: #fff;
                    }
                    #left #menuBlock li.here ul li a{
                    color: #0f0b03;
                    background: #cf9f25;
                    }
                    #left #menuBlock li.here ul li a:hover{
                    background: #f1bc35;
                    color: #fff;
                    }
                    
                    /********** Footer **********/
                    #footer {
                    background-color: #000000;
                    padding: 12px;
                    width: 649px;
                    color:#000;
                    font-size: 90%;
                    text-align: center;
                    clear:both;
                    border-top: 5px solid #fff;
                    }
                    #footer a{
                    color:#000;
                    }
                    #attrib{
                    display:none;
                    }
                    


                    And the Chuck:

                    <li><a [+wf.classes+] href="[+wf.link+]" title="[+wf.title+]">[+wf.linktext+]<!--[if IE 7]><!--></a><!--<![endif]-->
                    <table><tr><td>
                    
                    [+wf.wrapper+]
                    
                    </td></tr></table>
                    <!--[if lte IE 6]></a><![endif]-->
                    
                    </li>
                    


                    And the page code:

                    <div class="menu">
                    [!Wayfinder? &startId=`0` &level=`4` &parentRowTpl=`wfParentRow`!]
                    </div>