Question

I'm building a site in Drupal and I only want to show the secondary links on the pages that use the Views I've created. I tried using the $secondary_links variable in the views-view.tpl.php but the variable is null. How can I achieve this?

Was it helpful?

Solution

Have you activated the secondary links from the theme settings? That would be:

http://example.com/admin/build/themes/settings/name_of_your_theme

I believe once you have activated the option, the variable will be populated.

EDIT: Thinking a second more, I would also comment that I am not sure if the primary and secondary links are passed to the views templates. I believe those are passed to the page.tpl.php file instead. If I am right, and for some reason you want to add that variable to those passed to the views template, you will have to use a preprocess function, like explained here.

EDIT #2: Indeed if you only need the secondary menu used in a specific views template, another approach would be to simply call menu_secondary_links() from within the template. This is not the most elegant solution ever, as it puts in a theming element something that should belong somewhere else, but it's up to you to make the call whether that menu in the views is a core functionality or a styling element.

HTH!

OTHER TIPS

The secondary links are as mac correctly writes only available in page.tpl.php, but if I understand you correctly, the best solution is not getting the secondary links into your view.

With your theme, the secondary links, will most likely be printed out where they should, regardless of what is being displayed, be it your views, nodes, the front page etc. Views are displayed and everything else you render, is wrapped in the page template, that controls where menus are located, regions and other fun stuff.

Now, if you don't want to alter this, the location of the menus, their styling and this stuff, you shouldn't be printing the secondary menu in your views template, you shouldn't be doing anything with it at all.

The solution is simple
It's using something that mac mentioned but in a different way: preprocess function. These functions are used to in your template.php file, to add some logic to your variables. You can alter variables or remove them altogether. What I would do, would simply be to remove the primary links, by setting the value of $primary_links to an empty text string.
This would effectively remove the primary links, so only the secondary links are displayed. You could also display the secondary links as the primary, but this might cause confusing to your users. You just need to add some logic to control when this should happen and you are set.

You can use the following code to show secondary menu on any view

function YourTheme_preprocess_views_view(&$vars)
{
    $menu_sec = menu_navigation_links('menu-secondary');
    $vars['custom_menu'] = theme('links__menu-secondary', array('links' => $menu_sec));
}

or you can even use other preprocess function depending upon your needs.

Further you can call it on .tpl.php file using:

<?php
    $menu_sec = menu_navigation_links('menu-secondary');
    print theme('links__menu-secondary', 
        array(
            'links' => $menu_sec,
            'attributes'=>array(
                'class' => array('nav', 'nav-pills', 'p-f-subfilter'),
            )
        )
    );
?>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top