<ralphdahlgren.com>


 
Navigation
  • Home
  • Etomite CMS News
  • Code Library
    • Snippets
      • DisplayCode
      • EtoConfig
      • ListMenu
      • PoweredBy
      • RenderTime
  • Tutorials
  • Ralphs Rants
  • Site Map
  • Search Help
  • Login|Logout
 
Credits
 
Valid XHTML 1.1 Valid CSS! Powered By PHP Powered By MySQL
Powered By Etomite
 

ListMenu
Snippet: ListMenu <?php
// --------------------
// Snippet: ListMenu
// --------------------
// Version: 0.6f
// Date: 2005.08.04
// jaredc@honeydewdesign.com
//
// This snippet was designed to show navigation
// in a nested lists of arbitrary depth.

// Configuration Settings

   // $removeNewLines
   // This setting will remove white space from between <ul> and <li> 
   // items so the list can be styled in IE. This makes it hard to read
   // the source code- set to false for troubleshooting before launch. 
   // False is also handy if the list will be horizontal.
   
$removeNewLines = true;

   
// $currentAsLink
   // If you would like to turn off the link for the
   // current page, set to false.
   
$currentAsLink = true;

   
// $LM_node [ int ]
   // Settable in snippet call only. Allows you to set an arbitrary
   // anchor for this menu. Should be id number of initial document.
   // For ListMenu this is typically the current page so that the
   // snippet will generate a list back to the site root.
   // [ [ListMenu?LM_node=56]]

   // $levelsDeep [ int ]
   // Specifies how many levels of menu you want to show starting
   // with the children of current document working back to root. For
   // example, 3 levels would give you the children of the current 
   // page, the current page and its siblings, and the current page's 
   // parent and its siblings. The child generation is counted regardless
   // of wether or not there are children. 
   //
   // You can also specify negative  values. Negative values indicate
   // how many levels NOT to include, starting at the root. For example,
   // if you want all BUT the root level showing, you can declare -1.
   // This would be a main section menu - but without the "global" options.
   //
   // The default of 0 will show current children all the  back to root.
   // This represents the complete menu. You can also set this in a snippet
   // call with LM_levels:
   // [ [ListMenu?LM_levels=1]]
   
$levelsDeep = 0;

   
// $directGeneology [ true | false ]
   // Set this option if you only want to show the direct geneolgy. For
   // instance, with this set to true, and you were on examplePage 5
   // levels deep, you would see all of examplePage's child pages (if
   // any), examplePage's parent, but NOT siblings of any parent above
   // the current page.
   
$directGeneology = true;
   
   
// $showGlobals [ true | false ]
   // Leave the root level folders showing, even if $directGeneology is
   // true. NOTE- this will NOT override a set $levelsDeep. Settable in 
   // snippet call with LM_globals (0=false, 1=true)
   // [ [ListMenu?LM_globals=1]]
   
$showGlobals = true;

   
// $sortWiz [ array ]
   // You can specify any number of sort columns and directions, so you
   // are not limited to menuindex - for instance you might want alphabetic
   // or folders first or whatever. Format each sort like this:
   // $sortWiz[] = array("sortColumn","direction");
   // Where sortColumn is the sort column like isfolder, pagetitle, etc.
   // and direction is "ASC" for ascending and "DESC" is descending.
   // Default is:
   // $sortWiz[] = array("menuindex","ASC");
   // If you wanted folders first, THEN contents in alphabetical order:
   // $sortWiz[] = array("isfolder","ASC");
   // $sortWiz[] = array("pagetitle","ASC");
   
$sortWiz[] = array("menuindex","ASC");
   
   
// $alternateRows [ true | false ]
   // Append "_alt" to style class of alternate rows (true)
   
$alternateRows = false;
   
   
// $showDescription [ true | false ]
   // Show the description under the link- usually not necessary
   // Set in snippet call with LM_desc:
   // [ [ListMenu?LM_desc=1]]
   
$showDescription = false;

// STYLES used
//
// #LM_level_N      menu level where N is the number of the depth
//                  starting at 0
// #LM_youAreHere   menu item of current location
// .LM_expanded     expanded menu item with children
// .LM_collapsed    menu item with childen, but not expanded
// .LM_endPage      menu item with children
// .LM_description  menu item description
// 

// ########################################
// End Config
// The rest takes care of itself
// ########################################

// Adjust for snippet variables
$showGlobals = (isset($LM_globals))? $LM_globals : $showGlobals ;
$levelsDeep = (isset($LM_levels))? $LM_levels : $levelsDeep ;
$showDescription = (isset($LM_desc))? $LM_desc : $showDescription ;

// Make adjustment for new lines 
$ieSpace = ($removeNewLines)? "" : "\n";

// Create Geneology

$fullGeneology = array();
$geneologyMarker = (isset($LM_node))? $LM_node : $etomite->documentIdentifier;
while (
$currentMarker=$etomite->getPageInfo($geneologyMarker, null, 'id,parent')){
    
$fullGeneology[] = $currentMarker['id'];
    
$geneologyMarker = $currentMarker['parent'];
}
$fullGeneology[] = 0;

// alter geneology for correct depth
$geneology = array();
if ((
$levelsDeep > 0) && (count($fullGeneology) > $levelsDeep)){
    for(
$i = 0; $i < $levelsDeep; $i++){
        
$geneology[] = $fullGeneology[$i];
    }
} elseif ((
$levelsDeep) < 0 && (count($fullGeneology) > abs($levelsDeep))){
    for (
$i = 0; $i < -$levelsDeep; $i++){
        
array_pop($fullGeneology);
    }
    
$geneology = $fullGeneology;
} else {
    
$geneology = $fullGeneology;
}

// Build lists

// Initialize
$currentParent = $geneology[0];


$listSoFar = '';
$lookForChild = 0;
// Assemble sort string
$sortString = '';
foreach(
$sortWiz as $sortCriteria){
  
$sortString .= $sortCriteria[0] . " " . $sortCriteria[1] . ", ";
}
$sortString = substr($sortString,0,strlen($sortString)-2);

for(
$geneCount=0;$geneCount < count($geneology);$geneCount++){
    
$childrenList = $etomite->getActiveChildren($geneology[$geneCount], $sortString, null,'id, pagetitle, longtitle, parent, isfolder, description');
    if (
$childrenList){
        
$currentLevelList = '<ul id="LM_level_'.(count($geneology)-$geneCount).'">'."\n".$ieSpace;
        
$listPosition = 0;
        foreach (
$childrenList as $childItem){
          if (!
$directGeneology || $geneCount==0 || (($geneCount==1)&&(!$etomite->getActiveChildren($geneology[0]))) || ($directGeneology && in_array($childItem['id'],$geneology)) || ($showGlobals && ($geneology[$geneCount]==0))){
                if (
$childItem['isfolder']){
                    
$cssStyle = (in_array($childItem['id'], $geneology))? ' class="LM_expanded': ' class="LM_collapsed';
                } else {
                    
$cssStyle = ' class="LM_endPage';
                }
        
$cssStyle .= ($alternateRows && ($listPosition%2))? '_alt"' : '"';
                
$currentLevelList .= '<li'.$cssStyle.'>';                
                if((!
$currentAsLink) && ($childItem['id'] == $etomite->documentIdentifier)){
                    
$currentLevelList .= '<span id="LM_youAreHere">';
                    
$currentLevelList .= $childItem['pagetitle'].'</span>';
                } else {
                    
$linkTitle = ($childItem['longtitle'])? $childItem['longtitle'] : $childItem['pagetitle'] ;
                    
$currentLevelList .= '<a href="[ ~'.$childItem['id'].'~]" title="' . $linkTitle .'">';
                    
$currentLevelList .= $childItem['pagetitle'].'</a>';
                }
        
$currentLevelList .= ($showDescription)? '<div class="LM_description">'.$childItem['description'].'</div>' : '' ;
                if (
$lookForChild == $childItem['id']) {
                    
$currentLevelList .= $listSoFar;
                }
                
$currentLevelList .= "</li>\n".$ieSpace;
          }
          
$listPosition++;
        }
        
$currentLevelList .= "</ul>\n".$ieSpace;
      }
    
$listSoFar = $currentLevelList;
    
$lookForChild = $geneology[$geneCount];   
}

// send to parser
return $listSoFar;
?>


Powered by Etomite 1.1 (Prelude).
MySQL: 0.0056 s, 16 request(s), PHP: 0.0259 s, Total: 0.0314 s, document retrieved from database
2008-11-21 04:22 PM