jquery - symfony2 Twig : best pratice for highlighting a navbar when on the right page

标签 jquery css symfony twig navbar

在我的网站上,我有一个带有指向不同 Controller 的链接的导航栏。 到目前为止,我一直在使用 jquery 来突出显示当前页面的链接,但不知何故事情变得更加复杂并且已经不够了。

所以我的问题是:在导航栏上突出显示当前页面链接的最佳做法是什么? - 将链接的 ID 作为参数传递到模板中? - 不需要修改每个 Controller 的响应的更自动化的东西?

最佳答案

假设您可以将当前页面与您数据库中的 ID 相匹配,并且您正在为您的网站使用基本模板。我建议你可以这样做:

base.twig.html

{% import "somemacros.twig.html" as macros %}
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="x-ua-compatible" content="IE=Edge"/>
        <title>{{ title | default('') }}</title>

        <!-- ************** Metas ************** -->
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   </head>
   <body>
          <div id="container">
              <div id="sidebar_left">
              <!-- Just to be lazy -->
                 {{ macros.menu(links) }}
             </div>
              <div id="content">
                   {% block content %}

                   {% endblock %}
              </div>
    </body>
</html>

somemacros.twig.html

{% macro menu(links, class) %}
    {% if not links is empty %}
        {% for link in links %}
            {% if link['selected'] is defined and link['selected'] %}
                {% set is_selected = true %}
            {% else %}
                {% set is_selected = false %}
            {% endif %} 
            <li{%if class != '' %} class="{{ class }}"{% endif %}>
                <a href="{{ link.getRoute }}" {% if link.PageId in selected_page_ids or link.hasPublicChildren or is_selected %} class="{% if link.PageId in selected_page_ids or is_selected %}selected{% endif %} {%if link.hasPublicChildren%}dropdown{%endif%}"{% endif %}>{{ link.name }}</a>
                {% if link.hasPublicChildren %}
                    <ul>
                        {{ _self.menu(link.getPublicChildren) }}
                    </ul>
                {% endif %}
            </li>
        {% endfor %}
    {% endif %}
{% endmacro %}

PHP 逻辑

<?php
    // ...
    // register twig
    // find out current page / page parents if u are using submenu's
    // ...

   $twig->addGlobal('selected_page_ids', $page_ids); //page_ids is an array of the selected page ids
   // run symfony

将当前 $page_id 的变量(在我的例子中是 $page_ids,因为我有子菜单)作为全局变量添加到 twig您现在可以在任何地方访问此 var,甚至在宏内部。正如您在我的菜单宏中看到的那样,我然后使用 {% if link.PageId in selected_pa​​ge_ids 添加我选择的类。有宏是因为我懒

关于jquery - symfony2 Twig : best pratice for highlighting a navbar when on the right page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27295334/

相关文章:

css - compass/Sinatra 加载模块

json - Doctrine查询postgres json(包含)json_array

php - 使用另一个 symfony2 项目作为供应商

javascript - 使用 jQuery 在 div 中淡入淡出

javascript - 如何在打开事件时获取放大弹出 API 的 url?

jQuery UI 自动完成 : how do you start an asynchronous process and quit it before it finishes

html - DIV 没有像预期的那样将一个放入另一个

html - 通过 CSS 对齐 Div 中的 HTML 文本

jquery - 使用 Ajax 更新 Asp.Net MVC 部分 View

php - ObjectManager 方法 createQuery() 似乎不存在