f:link.action nutzt man, um eine Controller-Action zu verlinken -
ist das, was du erreichen willst?
Ansonsten ist f:link.page dein Freund, im Fluid-Template wohlgemerkt.
Du mußt halt nur dafür sorgen, deine ID's zu übergeben und f:link.page als z.B. additionalParams anzubieten.
Julian hat dazu ja eigentlich schon alles gesagt...
Link in eigenem ViewHelper
Moin Jenses,
ja, das ist mir grundsätzlich natürlich bekannt. So nutzt man das, wenn man einen einzelnen Link generieren möchte.
In meinem Fall muss/will ich aber die Erzeugung eines Listenmenüs in einen Viewehelper übergeben und gebe dazu ein multidimensionales Array hinein. Dieser muss also während des Listenaufbaus schon die Links erzeugen, denn hinterher ist es ja zu spät.
Das heißt ich benötige eine 'ordentliche' Funktion zur Erzeugung von Links innerhalb MEINES Viewehelpers.
Oder ist das der ganz falsche Ansatz?
Grüße vom Rhein, Stefan
Ich versteh noch nicht ganz, warum Du ganze HTML-Codeblöcke in einem Viewhelper erzeugen willst. Mit passenden Schachtelungen, Bedingungen und ViewHelpern lässt sich doch nahezu jedes Menü/jede Liste mit Fluid generieren.
Wozu ein PHP-Array erst an Fluid übergeben, um es dann wieder an PHP zu übergeben? IMHO kann dann gleich wieder wie früher der HTML-Code direkt aus dem PHP der Extension erzeugt werden. Dann ist die Trennung von Logik-Code und Darstellung eh für die Katz.
Ich muss aus Kategorien mit vorab nicht festgelegter Verschachtelungstiefe ein Menü ausgeben.
Das habe ich bis jetzt nur mittels Viewhelper hinbekommen, in dem ich das rekursiv durchlaufe und die entsprechende Liste / Sublist ausgebe.
Deshalb müsste ich hier schon den Link ausgeben und dachte, irgendwie müsste man das kombinieren können.
Das lässt sich aber prinzipiell auch mittels Fluid lösen.
Beispiel:
$testArray => array(
array('title' => 'Element 1'),
array('title' => 'Element 2'),
array('title' => 'Element 3',
'array' => array(
array('title' => 'Element 3.1'),
array('title' => 'Element 3.2'),
array('title' => 'Element 3.3',
'array' => array(
array('title' => 'Element 3.3.1'),
array('title' => 'Element 3.3.2'),
array('title' => 'Element 3.3.3',
'array' => array(
array('title' => 'Element 3.3.3.1'),
array('title' => 'Element 3.3.3.2'),
array('title' => 'Element 3.3.3.3',
'array' => array(
array('title' => 'Element 3.3.3.3.1'),
array('title' => 'Element 3.3.3.3.2'),
array('title' => 'Element 3.3.3.3.3'
)
)
)
)
)
)
)
)
);
Template:
<f:render partial="showList" arguments="{testArray: testArray}" />
Partial showList:
<ol>
<f:for each="{testArray}" as="entry">
<f:if condition="{entry->f:count()}==1">
<f:then>
<li>{entry.title}</li>
</f:then>
<f:else>
<f:render partial="showList" arguments="{testArray: entry.array}"/>
</f:else>
</f:if>
</f:for>
</ol>
Willst du denn die Links aus Actions einer Extension/Plugins generieren ?
Ich weiß nicht, ob man's auch im VieHelper nutzen kann, aber im ActionController einer Extension könntest du den UriBuilder nutzen, um die Links zu generieren.
Willst du denn die Links aus Actions einer Extension/Plugins generieren ?
Ich weiß nicht, ob man's auch im VieHelper nutzen kann, aber im ActionController einer Extension könntest du den UriBuilder nutzen, um die Links zu generieren.
Eingangspost schon mal richtig gelesen? 😉
Ja habe ich. Solltest du auch mal tun, spart dann solche Posts 😉
Was ist deiner Meinung nach so verkehrt daran, den URI Builder zu nutzen, um URLs zu generieren?
Also nochmal - der Eingangspost:
use TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper as ActionLink;
[...]
$link = new ActionLink();
Dann riskierst du mal einen Blick in TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper:
public function render(...dreissigundelfparameter...) {
[b]$uriBuilder = $this->controllerContext->getUriBuilder();[/b]
...
}
Offensichtlich nutzt der TS also bereits den UriBuilder, gelle?
Dann tut er das offenbar nicht richtig. Julian's Lösung tut es ja aber wie du schon sagst auch.
Und falls nicht, dann habe ich tatsächlich offenbar nicht ganz verstanden, was dem TE auf dem Herzen liegt.
Passiert, gelle?