2009-10-22, 20:56:03
Alexey Wrote:I have same problem!
Slug is empt
Anybody have a decision?
I patched theme_function.php (/admin/inc/) to make my multilevel-navigation work.
I give no guarantee this won't make any problems elsewhere:
Code:
starting from line Line 203
if ($PRETTYURLS == '1') {
if ($parent != '') {$parent = tsl($parent); }
if ($slug == 'index' ) { $slugs = ''; } else { $slugs = $slug; }
$url = $SITEURL . @$parent . $slugs;
} else {
if ($slug == 'index' ) { $slugs = ''; } else { $slugs = '?id='.$slug; }
$url = $SITEURL .'index.php'.$slugs;
}
$specific = array("slug"=>$slug,"url"=>$url,"parent_slug"=>$parent,"title"=>$title,"menu_priority"=>$pri,"menu_text"=>$text,"menu_status"=>$menuStatus,"private"=>$private);
my multilevelnavi has changed completely:
Code:
<ul id="navigation">
<?php
$navdata = menu_data(); // I managed only to get all menu data by passing a not existing slug
$current_slug = return_page_slug(); // slug of current page
$parent_slug = $current_slug."/"; // set default parent - the current page
// if user is already on a subpage - find parent-slug
foreach ($navdata as $navpoint) {
// if in a sublever-page - search the current in array - set parent
if( ($navpoint['slug']==$current_slug) AND ($navpoint['parent_slug'] != '')) {
$parent_slug = $navpoint['parent_slug'];
break;
}
}
function hasSublevel($parentSlug, $nd) {
foreach ($nd as $navpoint) {
if($navpoint['parent_slug']==$parentSlug) {
return true;
}
}
return false;
}
function isParentOfActive($slug, $nd) {
$current_slug = return_page_slug();
foreach ($nd as $navpoint) {
if(($navpoint['slug']==$current_slug) AND ($navpoint['parent_slug'] == $slug)) {
return true;
}
}
return false;
}
function printSublevel($parentSlug, $nd) {
$current_slug = return_page_slug();
foreach ($nd as $navpoint) {
if($navpoint['parent_slug']==$parentSlug) {
// found a subpage of this parent
$classnames = $navpoint['slug'];
if($navpoint['slug'] == $current_slug) {
// found current page !!
$classnames .= " current";
}
echo '<li class="'.$classnames.'">';
echo '<a href="'.$navpoint['url'].'">'.$navpoint['menu_text'].'</a>';
echo '</li>';
}
}
}
foreach ($navdata as $navpoint) {
if($navpoint['parent_slug'] == '') {
// first level Navpoints
$classnames = $navpoint['slug'];
if(($navpoint['slug'] == $current_slug) or isParentOfActive($navpoint['slug'], $navdata)) {
// found current page !!
$classnames .= " current";
}
echo '<li class="'.$classnames.'">';
echo '<a href="'.$navpoint['url'].'">'.$navpoint['menu_text'].'</a>';
// now check for subcategories
if( (($navpoint['slug'].'/' == $parent_slug) AND hasSublevel($navpoint['slug'], $navdata)) OR isParentOfActive($navpoint['slug'], $navdata) ) {
echo '<ul class="lvl_2">';
printSublevel($navpoint['slug'], $navdata);
echo '</ul>';
}
echo '</li>';
}
}
?>
</ul>
Now this shows the subcategories even if you are IN the subcategory
It highlights the current subcategory and the parent category.
It's working only for 2 levels (root and one sublevel)
Once again I can not guarantee this will work under al circumstances.
It's a bit quick'n dirty I know - needed to finish this. If anyone has ideas how to improve this - let me know.
Stil