[Frage] Link in eigenem ViewHelper

  • 0 x
    90 Beiträge
    0 Hilfreiche Beiträge
    13. 11. 2014, 20:48

    Hallo,

    ich finde nirgendwo eine Information, wie ich einen Link in meinem eigenen ViewHelper erstelle.

    Ziel ist eine aus einem übergebenen Array erstellte Liste, die dann jeweils mit den IDs verlinkt ist. Eigentlich was ganz simples also...

    1. use TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper as ActionLink;
    2.  
    3. [...]
    4.  
    5.  
    6. $link = new ActionLink();
    7.  
    8. $url = $link->render('categorylist',array('category'=>$uid), 'Articles');

    endet in einem
    Call to a member function getUriBuilder() on a non-object ...

    Einen 'handgeschriebenen' <a href=".."> möchte ich natürlich nicht verwenden, wozu hat man FLUID.

    Denke ich völlig falsch oder geht das nicht?

    Gruß vom Rhein, Stefan

    40236


  • Julian.Hofmann Julian.Ho...
    Flash Gordon
    0 x
    2845 Beiträge
    105 Hilfreiche Beiträge
    14. 11. 2014, 15:32

    Hallo Stefan.

    Warum willst Du im ViewHelper Link-HTML-Code erzeugen? Gibt dafür nicht der link-ViewHelper?

    Ich würde eher ansetzen, dass für die Parameter, die an den Linkviewhelper übergeben werden ggf. ein eigener ViewHelper Datenaufbereitet, die Link-Erzeugung aber in Link-ViewHelper bleibt.

    Sind jetzt aber eher Gedanken bzgl. "Denke ich völlig falsch". Vielleicht hast Du ja Gründe.

    Viele Grüße
    Julian

    P.S: Hast Du Dir \TYPO3\CMS\Fluid\ViewHelpers\Link\PageViewHelper schon angeschaut. IMHO dürfte sich dieser Code doch anpassen lassen, um einen URI zu erzeugen.

  • 0 x
    90 Beiträge
    0 Hilfreiche Beiträge
    14. 11. 2014, 15:57

    Hallo Julian,

    im Grunde hast Du mein Problem besser beschrieben als ich: Ich würde gerne einfach auf den Linkviewhelper zugreifen, aber genau das bekomme ich nicht hin.
    Und wenn ich meine Linkliste zurückgebe ist es ja zu spät.
    Im Vorgang der Zusammenstellung (also der Verarbeitung des übergebenen Arrays in meinem ViewHelper) müsste ich den Link drumherumbauen.

    Man kann das <f:link.action.../> Ding ja nicht einfach reinschreiben, das wird ja nach der Rückgabe nicht mehr verarbeitet.

    Viele Grüße, Stefan

    40236

  • jenses jenses
    Flash Gordon
    0 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    15. 11. 2014, 13:32

    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...

  • 0 x
    90 Beiträge
    0 Hilfreiche Beiträge
    17. 11. 2014, 05:38

    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

    40236

  • Julian.Hofmann Julian.Ho...
    Flash Gordon
    0 x
    2845 Beiträge
    105 Hilfreiche Beiträge
    17. 11. 2014, 08:48

    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.

  • 0 x
    90 Beiträge
    0 Hilfreiche Beiträge
    17. 11. 2014, 09:00

    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.

    40236

  • Julian.Hofmann Julian.Ho...
    Flash Gordon
    0 x
    2845 Beiträge
    105 Hilfreiche Beiträge
    17. 11. 2014, 09:36

    Das lässt sich aber prinzipiell auch mittels Fluid lösen.

    Beispiel:

    1. $testArray => array(
    2. array('title' => 'Element 1'),
    3. array('title' => 'Element 2'),
    4. array('title' => 'Element 3',
    5. 'array' => array(
    6. array('title' => 'Element 3.1'),
    7. array('title' => 'Element 3.2'),
    8. array('title' => 'Element 3.3',
    9. 'array' => array(
    10. array('title' => 'Element 3.3.1'),
    11. array('title' => 'Element 3.3.2'),
    12. array('title' => 'Element 3.3.3',
    13. 'array' => array(
    14. array('title' => 'Element 3.3.3.1'),
    15. array('title' => 'Element 3.3.3.2'),
    16. array('title' => 'Element 3.3.3.3',
    17. 'array' => array(
    18. array('title' => 'Element 3.3.3.3.1'),
    19. array('title' => 'Element 3.3.3.3.2'),
    20. array('title' => 'Element 3.3.3.3.3'
    21. )
    22. )
    23. )
    24. )
    25. )
    26. )
    27. )
    28. )
    29. );

    Template:

    1. <f:render partial="showList" arguments="{testArray: testArray}" />

    Partial [i]showList[/i]:

    1. <ol>
    2. <f:for each="{testArray}" as="entry">
    3. <f:if condition="{entry->f:count()}==1">
    4. <f:then>
    5. <li>{entry.title}</li>
    6. </f:then>
    7. <f:else>
    8. <f:render partial="showList" arguments="{testArray: entry.array}"/>
    9. </f:else>
    10. </f:if>
    11. </f:for>
    12. </ol>


  • 0 x
    17. 11. 2014, 16:54

    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.

  • jenses jenses
    Flash Gordon
    0 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    18. 11. 2014, 10:06

    Zitiert von:
    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 [b]UriBuilder[/b] nutzen, um die Links zu generieren.

    Eingangspost schon mal richtig gelesen? ;)