Skip to content

Instantly share code, notes, and snippets.

@chucktrukk
Created August 23, 2010 19:09
Show Gist options
  • Save chucktrukk/546108 to your computer and use it in GitHub Desktop.
Save chucktrukk/546108 to your computer and use it in GitHub Desktop.
<?php
if( ! function_exists('pPrint') ) {
function pPrint($arr, $return = false){
$output = '<pre>'.print_r($arr, TRUE).'</pre>';
if ($return)
return $output;
else
echo $output;
}
}
$documentMap = $modx->documentMap;
function buildStack(&$stack = array(), $level = 0)
{
global $modx;
if(empty($stack)) {
foreach($modx->getChildIds($level, 1) as $alias => $docId)
{
$stack[$level][$docId] = array('id' => $docId, 'parent' => 0, 'alias' => $alias, 'level' => $level);
}
$level = $level + 1;
}
$tmp = array();
foreach($stack[$level - 1] as $doc => $alias) {
foreach($modx->getChildIds($doc, 1) as $alias => $docId) {
$stack[$level][$docId] = array('id' => $docId, 'parent' => $doc, 'alias' => $alias, 'level' => $level);
}
}
if( ! empty($stack[$level]) ) {
buildStack($stack, $level + 1);
}
}
$stack = array();
buildStack($stack);
$levels = count($stack);
while($levels > 1){
$element = array_pop($stack);
foreach($element as $doc => $attr)
{
$parent = $attr['parent'];
$pLevel = $attr['level'] - 1;
$stack[$pLevel][$parent]['__children'][$attr['id']] = $attr;
}
$levels--;
}
$stack = $stack[0];
function generateMenu($array)
{
echo '<ul>';
foreach($array as $doc)
{
echo '<li>'.$doc['alias'].'</li>';
if( isset($doc['__children']) && ! empty($doc['__children']) )
{
generateMenu($doc['__children']);
}
}
echo '</ul>';
}
generateMenu($stack);
$lookup = $stack;
$output = pPrint($lookup, TRUE);
$output = str_replace(array("Array", '(', ')'), '', $output);
echo $output = str_replace("\n\n", "\n", $output);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment