在 drupal 7 的 page.tpl.php 中打印自定义菜单会显示所有语言的所有节点,而不仅仅是当前语言

问题描述 投票:0回答:1

我正在使用 drupal 的 i18n 模块,并且我有两种语言(英语和中文)。我有一个主菜单和一个自定义菜单(联系人菜单)以及一个将两者结合的菜单。所有菜单都不在区域中,而是通过 page.tpl 打印。

当我在主菜单中的节点上单击“中文”时,将显示翻译后的节点,并且主菜单现在仅包含所有中文节点链接 - 完美!

实际上,自定义菜单的工作原理是相同的,但前提是我将其分配给一个区域。我必须通过 page.tpl 中的 php 代码打印此菜单 - 但随后会打印此菜单中的所有节点(英语和中文)。但是,当我将菜单放入某个区域时,仅显示当前语言的节点。

如何渲染自定义菜单以仅显示当前语言的节点?

这是 php 代码(我正在使用/编写 ZEN 子主题)

if ($main_menu): ?>
                <nav id="main-menu" role="navigation">  
                    <?php print theme(
                        'links__system_main_menu', array(
                            'links' => $main_menu,
                            'attributes' => array(
                                //'id' => 'main-menu-links',
                                'class' => array('links', 'main_menu', 'clearfix'),
                            )
                        )
                    ); ?>
                </nav>

            <?php
            endif;
?>

上面的效果很好,只打印当前语言的节点/链接,不像:

<?php if (menu_navigation_links('menu-contact-menu')): ?>
                <nav id="contact-menu" role="navigation">

                    <?php print theme(
                        'links', array(
                            'links' => menu_navigation_links('menu-contact-menu'), 
                            'attributes' => array(
                                'class'=> array('links', 'contact_menu')
                            )
                        )
                    ); ?>
                </nav>
            <?php
                endif;
            ?>

组合后的菜单会是什么样子?目前:

<?php
            // combine main and contact menu and output as one
            if ($main_menu && menu_navigation_links('menu-contact-menu')): ?>
                <nav id="footer-menu" role="navigation">
                    <?php
                        $links = array_merge($main_menu, menu_navigation_links('menu-contact-menu'));

                        print theme(
                            'links', array(
                                'links' => $links, 
                                'attributes' => array(
                                    'class'=> array('links', 'footer-menu')
                                )
                            )
                        );
                    ?>
                </nav>
        <?php
            endif;
        ?>
php drupal menu internationalization
1个回答
0
投票

发现了,有点合乎逻辑...

i18n_menu_navigation_links
成功了

if (menu_navigation_links('menu-contact-menu')): ?>
                <nav id="contact-menu" role="navigation">

                    <?php print theme(
                        'links', array(
                            'links' => i18n_menu_navigation_links('menu-contact-menu', 0),
                            'attributes' => array(
                                'class'=> array('links', 'contact_menu')
                            )
                        )
                    ); ?>
                </nav>
            <?php
                endif;
            ?>
© www.soinside.com 2019 - 2024. All rights reserved.