legge aktiv klasse å knytte kontakter med SF2 og kvist

stemmer
31

følgende enkle kode:

<li><a href={{ path('_list') }}>List</a></li>

er det en enkel måte å legge til en class=activehvis gjeldende side matcher _listrute?

bruker den nyeste PR-Release av symfony2 og kvist som mal motor

Publisert på 17/04/2011 klokken 21:19
kilden bruker
På andre språk...                            


10 svar

stemmer
79

Twig tillater conditionals og Request-objektet er tilgjengelig i hele programmet. Hvis du er inkludert malen, for å få den ruten du ønsker å bruke:

app.request.attributes.get('_route')

Hvis du bruker gjengi funksjon, du ønsker å bruke:

app.request.attributes.get('_internal')

Med det, bør du være i stand til å bruke:

class="{% if app.request.attributes.get('_route') == '_list' %}active{% endif %}"

eller kortere:

class="{{ app.request.get('_route') == '_list' ? 'active' }}"
Svarte 18/04/2011 kl. 14:19
kilden bruker

stemmer
18

Noen ganger du ikke ønsker å gjøre eksakt matching av en rute. For slike tilfeller kan du bruke "starter med" betinget logikk kvist.

Som et eksempel, la oss anta at du arbeider med bøker. Du har følgende ruter: bok, book_show, book_new, book_edit. Du vil ha navigasjons element boken til å bli markert for noen av disse tilfellene. Denne koden vil oppnå det.

<a class="{% if app.request.attributes.get('_route') starts with 'book' %}active{% endif %}">Books</a>
<a class="{% if app.request.attributes.get('_route') starts with 'author' %}active{% endif %}">Authors</a>

Dette eksemplet arbeider med minst Symfony 2.3.x

Svarte 21/10/2013 kl. 22:16
kilden bruker

stemmer
13

Korteste versjon:

{% set route = app.request.get('_route') %}

 <li class="{{ route starts with 'post' ? 'open' }}"></li>
 <li class="{{ route starts with 'category' ? 'open' }}"></li>

Noen ganger nyttig:

{% set route = app.request.get('_route') %}

<li class="{{ 'post' in route ? 'open' }}"></li>
<li class="{{ 'category' in route ? 'open' }}"></li>
Svarte 14/01/2016 kl. 10:08
kilden bruker

stemmer
8

Med Ternæroperatøren:

    {% set route = app.request.attributes.get('_route') %}
    <ul class="nav navbar-nav">
        <li {{ route ==  'profile_index' ? 'class="active"' }}><a href="{{ path('profile_index') }}"><i class="icon-profile position-left"></i> My Profile</a></li>
        <li {{ route ==  'influencers_index' ? 'class="active"'}}><a href="{{ path('influencers_index') }}"><i class="icon-crown position-left"></i> Influencers</a></li>
        <li {{ route ==  'task_manager_index' ? 'class="active"'}}><a href="{{ path('task_manager_index') }}"><i class="icon-alarm-check position-left"></i> Task Manager</a></li>
    </ul>
Svarte 18/11/2015 kl. 23:01
kilden bruker

stemmer
3

Jeg fant en veldig god pakke som håndterer alt dette automagisk:

https://github.com/KnpLabs/KnpMenuBundle

Svarte 19/04/2011 kl. 20:45
kilden bruker

stemmer
1

Symfony2.3, i Twig, prøv dette for å få URI:

{{ dump(app.request.server.get("REQUEST_URI")) }}
Svarte 16/09/2013 kl. 06:12
kilden bruker

stemmer
1

SF2.2

{{ dump(app.request.server.get('PATH_INFO')) }}
Svarte 03/05/2013 kl. 18:17
kilden bruker

stemmer
0

Dette gjøres med symfony 3.4, men sannsynligvis noe lignende kan gjøres med SF2.

src \ AppBundle \ Twig \ AppExtension.php

<?php

namespace AppBundle\Twig;

use Symfony\Component\HttpFoundation\RequestStack;

class AppExtension extends \Twig_Extension
{
    private $requestStack;

    public function __construct(RequestStack $requestStack)
    {
        $this->requestStack = $requestStack;
    }

    public function getFunctions()
    {
        return [
            new \Twig_SimpleFunction('activeMenu', [$this, 'activeMenu'])
        ];
    }

    /**
     * Pass route names. If one of route names matches current route, this function returns
     * 'active'
     * @param array $routesToCheck
     * @return string
     */
    public function activeMenu(array $routesToCheck)
    {
        $currentRoute = $this->requestStack->getCurrentRequest()->get('_route');

        foreach ($routesToCheck as $routeToCheck) {
            if ($routeToCheck == $currentRoute) {
                return 'active';
            }
        }

        return '';
    }
}

Legg dette til services.yml

services:
    #... some other services
    AppBundle\Twig\AppExtension:
        arguments: ["@request_stack"]

bruk:

<ul class="nav navbar-nav">
    <li class="{{ activeMenu(['form', 'edit_form']) }}"><a href="{{ path('form') }}">Form</a></li>
    <li class="{{ activeMenu(['list']) }}"><a href="{{ path('list') }}">List</a></li>
</ul>
Svarte 07/01/2018 kl. 11:31
kilden bruker

stemmer
0

Dette er hvordan jeg gjør det (med Symfony 2,6)

<li {% if app.request.get('_route') == '_homepage' %} class="active" {% endif %}><a href="{{ path('_homepage') }}">Student</a></li>

'_homepage'er navnet på ruten i routing.ymldin pakke og ruten ser slik ut

_homepage:
    path:     /
    defaults: { _controller: CoreBundle:Default:index }
Svarte 08/06/2015 kl. 11:22
kilden bruker

stemmer
-2

class = "class_name {% hvis loop.index0 == 0%} classname.Velg {% endif%}"

Svarte 03/03/2017 kl. 12:47
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more