---
title: "Wenn action TRUE, Link class aktiv"
url: "https://www.typo3.net/d/120093-wenn-action-true-link-class-aktiv"
source: "typo3.net"
tags: ["Extensions","Extbase","Fluid","Frage","ViewHelper"]
created: "2015-04-19"
last_reply: "2015-04-20"
replies: 2
solved: false
page: 1
pages: 1
lang: "de"
---

# Wenn action TRUE, Link class aktiv

Extensions › Extbase · 2 Antworten · gestartet 2015-04-19

## Eröffnungsbeitrag

**mbuchegger** · 2015-04-19 · [Beitrag #1](https://www.typo3.net/d/120093-wenn-action-true-link-class-aktiv/1)

Es geht darum eine Abfrage per ViewHelper zu generieren die überprüft ob der Link aktiv ist.

Dazu hab ich folgendes gefunden, ich schaffe es aber einfach nicht zu verwenden.

```php
namespace Your\Package\ViewHelpers\Link;

class ActionViewHelper extends \TYPO3\Fluid\ViewHelpers\Link\ActionViewHelper {

    public function render($action = NULL, $arguments = array(), $controller = NULL, $package = NULL, $subpackage = NULL, $section = '', $format = '',  array $additionalParams = array(), $addQueryString = FALSE, array $argumentsToBeExcludedFromQueryString = array()) {

        if ($this->matchesCurrentRequest($action, $arguments, $controller, $package, $subpackage)) {
            $cssClass = 'active';
            if ($this->hasArgument('class')) {
                $cssClass .= ' ' . $this->arguments['class'];
            }
            $this->tag->addAttribute('class', $cssClass);
        }

        return call_user_func_array('parent::render', func_get_args());
    }

    protected function matchesCurrentRequest($action, $arguments, $controller, $package, $subpackage) {
        // TODO compare arguments with $this->controllerContext->getRequest() and return TRUE if they match
    }

}
```

Folgendes hab ich gemacht...

- ViewHelper unter ViewHelpers/Link/ActionViewHelper.php erstellt
- Im Fluid eingebunden: {namespace x=..\..\ViewHelpers}
- Ein Link soll lt. Anleitung so funktionieren: <f:link.action action="foo" class="{x:ifCurrentRequest(action: 'foo', then: ' active')}">Link</f:link.action>

Einerseits soll in dem oben stehenden ViewHelper noch was eingefügt werden, was ich nicht kapiere und dann bin ich mir nicht sicher ob das mit x:ifCurrentRequest funktioniert. Jeder, der sich gut auskennt wüsste wahrscheinlich was genau ein Platzhalter ist. Ich check es einfach nicht :/

Bitte um Hilfe. Wie funktioniert das ganze?

lg M.

## Antworten

### [#2](https://www.typo3.net/d/120093-wenn-action-true-link-class-aktiv/2) · harald1972 · 2015-04-20

Moin,

```html
<f:link.action action="foo" class="{x:ifCurrentRequest(action: 'foo', then: ' active')}">Link</f:link.action>
```

Wenn ich mir oft auch schwer tu, mit der inline-Schreibweise, kann ich dir doch sagen, daß du hier einen ViewHelper namens IfCurrentRequestViewHelper aufrufen versuchst. Wenn du den nicht geschrieben hast (x = dein namespace), dann geht auch nix.

Bei dem if-Construct von dir steig ich nicht ganz durch. Ich würde es erstmal (in etwa) so schreiben:

```html
<f:if condition="{jawelchedenn} == {wasauchimmer}" >
    <f:then><x:link.action class="active" /></f:then>
    <f:else><x:link.action class="" /></f:else>   
</f:if>
```

Anstelle des 'ifCurrentRequest' muss diese Bedingung dann bei condition="..." rein, welche Bedingung das auch immer sein mag.

Wenn du allerdings die Methode "matchesCurrentRequest" aufrufen willst, musst du anders vorgehen.
Beim Aufruf des VH rufst du prinzipiell die render-Methode auf. Bevor du sagen kannst, was und wie du renderst, musst du von dort aus, alle Bedingungen prüfen.
Mir ist nicht bekannt, daß man eine bestimmte Methode direkt aus dem fluid-script aufrufen kann.

Schönen Tag noch!

P.S.: Ich seh noch was. Der Aufruf ...

```html
<f:link.action ... >
```

sucht bei den FLUID-VH (da steht f:...). Auch da solltest du deinen
namespace angeben)

### [#3](https://www.typo3.net/d/120093-wenn-action-true-link-class-aktiv/3) · harald1972 · 2015-04-20

Tag nochmal,

war wohl bischen früh... hab dein Problem nochmal durchgelesen :)
Und soweit ich das jetzt sehe...

Deine Punkte 1 und 2, die du gemacht hast, sind schonmal gut.

Punkt 3:
Ich vermute, der Link, also dein neuer frisch abgeleiteter Link sollte ungefähr so aussehen:

```html
<x:link.action action="foo" class="bar" >Link</x:link.action>
```

...hier eben x als deinen Namespace angeben und nicht den Standard f:link...

So.
Und was passiert, wenn du diesen VH so einbaust?
Oder was soll passieren?
-> Die render-Methode wird aufgerufen.
Und was macht die?
Falls matchesCurrentRequest(...) TRUE liefert, hängt sie deine css-Class (in dem Beispiel "bar" ) in den Link und noch ein active vornedran.
Und hier kommt dann deine eigentliche Aufgabe:
TODO compare arguments with $this->controllerContext->getRequest() and return TRUE if they match
Ich kann dir leider nicht sagen, wie deine arguments mit dem Request übereinstimmen müssen.
Aber das solltest du hier prüfen.

---

Quelle: „Wenn action TRUE, Link class aktiv“, typo3.net, https://www.typo3.net/d/120093-wenn-action-true-link-class-aktiv
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
