1
在我的網站上,我有一個導航欄,其中包含指向不同控制器的鏈接。 到目前爲止,我使用jquery來突出顯示當前頁面的鏈接,但不知怎的,事情變得更加複雜,並且它已經不夠了。symfony2樹枝:在右側頁面突出顯示導航欄的最佳實踐
所以我的問題是:在導航欄上突出顯示當前頁面鏈接的最佳做法是什麼? - 將鏈接的ID作爲參數傳遞給模板? - 更自動化的東西,不需要修改每個控制器的響應?
在我的網站上,我有一個導航欄,其中包含指向不同控制器的鏈接。 到目前爲止,我使用jquery來突出顯示當前頁面的鏈接,但不知怎的,事情變得更加複雜,並且它已經不夠了。symfony2樹枝:在右側頁面突出顯示導航欄的最佳實踐
所以我的問題是:在導航欄上突出顯示當前頁面鏈接的最佳做法是什麼? - 將鏈接的ID作爲參數傳遞給模板? - 更自動化的東西,不需要修改每個控制器的響應?
假設您可以將當前頁面與數據庫中的ID進行匹配,並且您正在爲您的網站使用基本模板。我建議你可以做這樣的事情:
{% 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>
{% 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
// ...
// 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
(或在我的情況下,因爲我有子菜單)作爲一個全球到twig
你現在可以在任何地方訪問這個變量,即使在宏內部也是如此。正如你可以在我的菜單宏中看到的,我使用{% if link.PageId in selected_page_ids
來添加我選擇的類。宏是因爲我很懶
最簡單的方法是將selected_page_id(s)作爲全局變量傳遞給twig。這樣你不需要編輯你的控制器。 – DarkBee 2014-12-04 13:54:00
我正在使用[KnpMenuBundle](http://knpbundles.com/KnpLabs/KnpMenuBundle),它爲我完成了這項工作。 – 2014-12-04 15:18:31
@DarkBee:你能否詳細說明你是如何完成這項工作的?看起來很有趣 - Alain,這個包看起來不錯,但看起來不太容易定製。謝謝! – 2014-12-04 17:33:14