<h1>Site Map</h1> <?php /* $Id: inc_sitemap.php 1697 2008-06-18 11:21:57Z dylan $ */ echo '<p> </p>'; $templateConstants = DisplayBase::getTemplateConstants(); $siteId = $templateConstants['siteId']; $pageManager = getStaticClass('ObjectManager'); $pages = $pageManager->getObjectsForSiteMap($siteId); //$splitPages = divideArray($pages,3); $splitPages = divideArray($pages,2); echo '<table id="sitemap" width="100%" border="0">'; echo '<tr>'; foreach ($splitPages as $column){ //echo '<td valign="top" width="33%">'; echo '<td valign="top" width="50%">'; echo drawLinks($column, $templateConstants, $pageManager); echo '</td>'; } echo '</tr>'; echo '</table>'; function drawLinks($pages, &$templateConstants, &$pageManager){ $html = ''; $count = count($pages); if ($count){ $previousLevel = 2; for ($i=0; $i<$count; $i++){ $page = $pages[$i]; if ($page['level'] < $previousLevel) $html .= str_repeat("</ul>\n", ($previousLevel - $page['level'])); if ($page['level'] > $previousLevel) { if (($page['level'] % 2) == 1)$class = 'level1'; elseif (($page['level'] % 3) == 1)$class = 'level2'; elseif (($page['level'] % 4) == 1)$class = 'level3'; else $class = 'level4'; $html .= "<ul class=\"$class\">\n"; } $html .= buildTargetLink($page, $templateConstants, $pageManager); $previousLevel = $page['level']; if (isset($pages[($i + 1)]) && ($pages[($i + 1)]['level'] == 2)) $html .= "<br /><br />\n"; } } return $html; } function divideArray($pages, $pieces){ $divArray = array(); for ($i=$pieces; $i>1; $i--){ $pageCount = count($pages); $splitStart = floor($pageCount / $i); $splitIndex = findNearestTopObject($pages, $splitStart); $divArray[] = array_splice($pages, 0, $splitIndex); } $divArray[] = $pages; return $divArray; } function findNearestTopObject($pages, $splitStart, $splitDistance=1){ if ($pages[$splitStart]['level'] != 2){; $splitStart = $splitStart + $splitDistance; $splitDistance = (((abs($splitDistance) / $splitDistance) * -1) * (abs($splitDistance) + 1)); $splitStart = findNearestTopObject($pages, $splitStart, $splitDistance); } return $splitStart; } function buildTargetLink($page, &$templateConstants, &$pageManager) { $targetLink = $templateConstants['webRoot']; if (isPublishing()) { // external link has diff path, currently we have to pattern match to decipher between external/internal links if ($page['type'] == 'link' && preg_match('#http://#', $page['linkTarget']) && strlen($page['name'])) $targetLink .= $page['linkTarget']; else $targetLink .= $page['path']; } else { if ($page['type'] == 'link') { if (strlen($page['name'])) $targetLink .= $page['linkTarget']; else $targetLink .= '/template' . PHP_EXT . substr($page['linkTarget'], 1); } else $targetLink .= '/template' . PHP_EXT . '?cid=' . $page['cid']; } $html = ''; if ($page['level'] > 2) $html .= "<li>"; else if ($page['level'] == 2) $html .= "<b>"; if (!strlen($page['name']) && $page['type'] == 'link') { $pageData = $pageManager->getIdsByPath($page['linkTarget']); //abort($templateConstants); $pageData = $pageManager->getObjectByCid($pageData['cid'], $templateConstants['siteId']); $page['name'] = $pageData['name']; } $html .= "<a href=\"$targetLink\">" . $page['name'] . "</a>"; if ($page['level'] > 2) $html .= "</li>"; else if ($page['level'] == 2) $html .= "</b>"; $html .= "\n"; return $html; } ?>
Comments: