0

In first place I'm not very good concerning to PHP so that's why I post this. I made my research but didn't find anything that could help me heading my objective.

I wanted to place a footer module with the current page menu parent and respective Children. I've tried a module mod_footermenu but this one displays all menus and children. But I only wanted the current parent menu and all its children.

Example:

Menu:

- Europe
-- Portugal
-- Spain
-- France

- America
-- Canada
-- Brazil
-- USA

- Asia
-- China
-- Japan
-- Corea

So, if I am currently viewing page canada my footer menu would display:

- America (parent) -- Canada -- Brazil -- USA

This is the code that of default.php for the module I am using. How could I change it in order to get what I've described? For some reason, this module is displaying my menus inlined. Could it be css display:inline?

CODE:

<ul class="asdasd<?php echo $class_sfx;?>"<?php
$tag = '';
if ($params->get('tag_id')!=NULL) {
    $tag = $params->get('tag_id').'';
    echo ' id="'.$tag.'"';
}
?>>
<?php
foreach ($list as $i => &$item) :
    $class = 'item-'.$item->id;
    if ($item->id == $active_id) {
        $class .= ' current';
    }

    if (in_array($item->id, $path)) {
        $class .= ' active';
    }
    elseif ($item->type == 'alias') {
        $aliasToId = $item->params->get('aliasoptions');
        if (count($path) > 0 && $aliasToId == $path[count($path)-1]) {
            $class .= ' active';
        }
        elseif (in_array($aliasToId, $path)) {
            $class .= ' alias-parent-active';
        }
    }

    if ($item->deeper) {
        $class .= ' deeper';
    }

    if ($item->parent) {
        $class .= ' parent';
    }

    if (!empty($class)) {
        $class = ' class="'.trim($class) .'"';
    }

    echo '<li'.$class.'>';

    // Render the menu item.
    switch ($item->type) :
        case 'separator':
        case 'url':
        case 'component':
            require JModuleHelper::getLayoutPath('mod_menu', 'default_'.$item->type);
            break;

        default:
            require JModuleHelper::getLayoutPath('mod_menu', 'default_url');
            break;
    endswitch;

    // The next item is deeper.
    if ($item->deeper) {
        echo '<ul>';
    }
    // The next item is shallower.
    elseif ($item->shallower) {
        echo '</li>';
        echo str_repeat('</ul></li>', $item->level_diff);
    }
    // The next item is on the same level.
    else {
        echo '</li>';
    }
endforeach;
?></ul>

If anyone could take a look a this code I would really appreciate, I've tried changing a lot in this code but the closest I've achieved was to display only the currents (parent active menu, and its current child), but I wanted the non current children too.

2 Answers 2

1

You might achieve what you need much more easily by using (or tweaking) the "breadcrumb" module. There are variations of this module which give you quite a bit of control over what is shown in the hierarchy and of course it always knows the current page. Bear in mind though that breadcrumbs are derived from your menu structure - so ensure that is complete before expecting results.

1
  • It would be nice if this module would allow to display whole tree from the current parent menu, as I wanted. And another problem is that this module seems to have issues, in my case it shows twice, for some reason. I've googled this issue and it looks that a lot of people has it too. Any idea of other similar module? Or do you have any idea if this module can be easily coded to achieve what I want? Thanks for your answer.
    – azhpo
    Jan 26, 2015 at 16:40
1

I would solve this problem by adding a module to your footer position. Define in a CSS not to display the menu, except of the li tag with the class "item-xxx active deeper parent"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.