[Frage] TCA Feld Wert an eigenen Viewhelper übergeben

  • Stigi90 Stigi90
    T3PO
    0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    27. 05. 2015, 09:33

    Hallo Leute, ich steh gerade vor einem kleinen oder für mich vor einem großen Problem.

    Es gibt doch in der Ext. TX_News von Georg Riger das Feld "Author", diesen eingetragene Wert möchte ich gerne an einen eigenen Viewhelper übergeben.

    Ich habe bereits einen eigenen Viewhelper erstellt und dort gibt es eine Variable $meinesearchid, diese ist momentan fest definiert z.b: $meinesearchid = "123456", aber ich möchte gerne statt 123456 immer den Wert des TCA Felds von Author verwenden.

    Ich brauch immer diesen Wert als Variable zum weiterverarbeiten und dadurch ergibt sich dann eine Ausgabe - aber diese Ausgabe soll hald je nach Newseintrag unterschiedlich sein. Daher dieser Weg!

    Ich hoffe Ihr versteht was ich ereichen möchte.

    Danke schonmal für eure Tipps oder sogar für den Lösungsweg.

    Das mit dem Autorfeld ist nur ein Beispiel, ich habe dafür ein eigenes TCA Feld erstellt :)

    Gruß Florian


  • 1
  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    27. 05. 2015, 10:11

    Moin,

    ich verstehe zwar nicht wirklich, was du erreichen willst, allerdings kann ich dir sagen:
    Wenn du aus einem Fluid Script heraus - wie in deinem Beispiel einem VH - Werte (Variablen) geben willst, muss das Script diese Werte (Variablen) kennen.
    Dazu musst du vorm Aufruf dieses Scripts den Wert übergeben:
    $this->view->assign('foo',$foo);

    Oder du hast in deinem Model eine entsprechend Get-Methode, die dir liefert, was du willst:
    getFoo();
    Dann kannst du im fluid
    {object.foo} ansprechen - vorausgesetzt, object ist dem Script bekannt.

    Ich hoffe, es hilft, was ich dir sagen wollte ;)

    Gruß
    Harald

  • Stigi90 Stigi90
    T3PO
    0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    27. 05. 2015, 10:31

    Danke schonmal, werd ich mir mal etwas näher anschauen, aber das hört sich leider für mich etws kompliziert an. Bin leider kein PHP Programierer!

    Was ich damit erreichen will, kann ich dir kurz erklären.

    Es gib eine externe Bilddatenbank auf einem anderen Server mit vielen Bilder und es gibt Bilderserienen die nach IDs sortiert sind (wie Kategorien). Wenn ich die ID 123456 eingebe erhalten ich z.b: 50 Bilder. Nun habe ich einen Script der mir nach der ID immer 10 verschiedene Bilder dieser Serie ausgiebt. Da das alles mit News verbunden ist wird die ID in dem Newseintrag eingetragen und diese ID soll in den PHP Script verarbeitet werden, um somit die Bilder dieser ID auszugeben. Hoffe du verstehst was ich meine :)

  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    27. 05. 2015, 11:14

    Mir ist zwar nicht wirklich klar, was du willst oder was dein Problem ist.
    - Es fehlt auch die Fragestellung.
    Aber ich versuch mal, detaillierter zu werden...

    Prinzipiell erfolgt der Aufruf deines Scripts aus dem Controller, z.B.:

    1. public function showAction(\YOUR\Extension\Domain\Model\Foo $foo) {
    2. $this->view->assign('foo', $foo);
    3. }

    Dadurch kennt deine Show-View ein Objekt mit dem Namen 'foo'.
    Dort kannst du dann

    1. {foo}
    2. {foo.bar}

    ansprechen - letzteres nur, wenn in deinem Model\Foo.php
    auch eine Methode getBar() vorhanden ist.

    Auf dein Problem angewendet, musst du aus dem Controller die News übergeben (assignen) und solltest dann in fluid auf {news.author} zugreifen können oder auch auf {news.id}, wenn es die uid sein soll, eben {news.uid}

    Verstanden?

  • Stigi90 Stigi90
    T3PO
    0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    27. 05. 2015, 12:01

    Tut mir leid, aber so wie ich das verstehe ist das die Ausgabe in Fluid.
    Die Ausgabe des TCA Feldes in Fluid ist ja kein Problem, aber ich möchte den Wert im Viewhelper ausgeben. Diesen Wert benötige ich dort als eine Variable.

    Fangen wir mal anders an, vielleicht bin ich ja damit schon auf dem falsche weg für mein vorhaben.

    Ich habe eine PHP Datei (in dieser PHP Datei wird noch eine weitere PHP Datei inkludiert), diese will ich gerne bei jedem News ausgeben aber ein Wert einer Variable soll dynmaisch sein und immer den eingetragenen Wert(z.b: TCA FELD Author) dessen Newseintrags sein. Ich hab mich daher mal im Internet schlaugemacht, wie das am besten zu lösen ist und bin darauf gestoßen, einen eigenen Viewhelper zu erstellen, dieser inkludiert dann die PHP Datei und gibt sie auch aus.

    Mein Viewhelper sieht so aus:

    1. <?php
    2. /**
    3.  * This file is part of the TYPO3 CMS project.
    4.  *
    5.  * It is free software; you can redistribute it and/or modify it under
    6.  * the terms of the GNU General Public License, either version 2
    7.  * of the License, or any later version.
    8.  *
    9.  * For the full copyright and license information, please read the
    10.  * LICENSE.txt file that was distributed with this source code.
    11.  *
    12.  * The TYPO3 project - inspiring people to share!
    13.  */
    14.  
    15. /**
    16.  * ViewHelper
    17.  *
    18.  * # Example: Basic Example
    19.  * # Description: Render the content of the VH as page title
    20.  * <code>
    21.  * <n:photoslider />
    22.  * </code>
    23.  * <output>
    24.  *
    25.  * </output>
    26.  *
    27.  */
    28. class Tx_News_ViewHelpers_PhotosliderViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
    29.  
    30.  
    31.  
    32. /**
    33. * Ausgabe
    34. *
    35. * @return void
    36. */
    37. public function render() {
    38. include("slider.php");
    39.  
    40. $photoid = "WERT AUS TCA FELD AUTHOR?";
    41.  
    42. get_slider($photoid);
    43. return $photoid;
    44. }
    45.  
    46.  
    47.  
    48.  
    49. }
    50. ?>

    Außerdem hab ich das Problem, dass die PHP Datei ganz oben ausgegeben wird und nicht wo der VHelper im Template gesetzt ist.

    Aber vielleicht sollte man das doch über TS regeln?

    Vielen Dank schonmal für deine bemühungen :)

  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    27. 05. 2015, 12:53

    Was es ganz genau mit include auf sich hat und wie sich das konkret verhält, kann ich dir grad nicht sagen... gehört glaub auch nicht in dieses Forum (extbase/fluid).

    Aber wenn der VH so heißt:
    class Tx_News_ViewHelpers_PhotosliderViewHelper
    sieht das ganz nach einem VH der Extension Tx_News aus - deine Extension heißt doch anders.
    DEIN VH muss mit Tx_DEINEEXTENSION_ViewHelper beginnen.
    Allerdings verwendest du die Domain-Schreibweise. Dann sollte dein VH ungefähr so aussehen:

    1. class MyViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
    2. public function render() {
    3. // do something;
    4. return $eine_zeichenkette;
    5. }
    6. }

    Diese Klasse muss sich dann in der Datei Classes/ViewHelper/MyViewHelper.php befinden.
    Um den aufzurufen, musst du den Namespace im Fluid-Script bennenen:
    1. {namespace xyz=YOUR\Extension\ViewHelper}
    2. <xyz:my param1="{$var1}" param2="value2" />

    Die Parameter sind hier nur beispielhaft. Wie ich soweit sehe, benötigst du die hier nicht, oder doch?

    Nochmal von hinten nach vorne:
    xyz ist der Ordner (Namespace) , in dem sich dein VH befindet.
    my bedeutet dann, in diesem Namespace wird der MyViewHelper gesucht und dessen render-Methode aufgerufen.

    Edit: Wenn dein VH PhotosliderViewHelper heißen soll, musst du (aus meinem Beispiel) 'My' durch 'Photoslider' ersetzen und 'my' durch 'photoslider'

    Edit2: Hab grad nochmal deine Überschrift gesehen "Wert an eigenen Viewhelper übergeben".
    Sollte das deine Frage sein...
    In dem Beispiel hab ich gleich 2 Parameter: param1 und param2.
    Im ViewHelper müssen die auch bekannt sein. Entweder du deklarierst sie direkt in der render-Methode, oder in der initializeArguments()

  • Stigi90 Stigi90
    T3PO
    0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    28. 05. 2015, 08:13

    Guten Morgen,

    ich habe den Viewhelper (Photoslider) in der Tx_News erstellt. Ist das dann quasi falsch? Ich musste sowieso das komplette newsmodul ummbauen und hab zusätzlich mir eine eigene erweiterungsextension für die Tx_News geschrieben für neue TCA Felder.

    Um die TCA Felder mittels VH auszugeben ist ja kein Problem.

    Aber langsam versteh ich garnichtsmehr :(

    Meine Frage ist nur, wie kann mein VH den Wert des TCA-Feldes auslesen, es geht im VH und nicht um die Ausgabe des VH im Fluid.

    Danke

  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    28. 05. 2015, 08:44

    Guten Morgen,

    nichts interessantes in der Zeitung - also komm ich hierher ;)
    Theoretisch ist es schon machbar, eine bestehende t3x aufzubohren. Schließlich ist es freier Code.
    Solltest du allerdings mal ein Update (der Tx_News) aufspielen, kann es zu Komplikationen kommen.
    Alles machbar, Herr Nachbar, aber ich denke, [i]man sollte[/i] es besser nicht tun.

    Ich selbst habe bisher - mit extbase/fluid - noch keine t3x erweitert. Wenn nötig, habe ich von bestehenden Klassen abgeleitet. Die abgeleiteten Klassen befinden sich in meiner Ext... siehe Beispiel "MyViewHelper".

    Um die TCA Felder mittels VH auszugeben ist ja kein Problem.
    Meine Frage ist nur, wie kann mein VH den Wert des TCA-Feldes auslesen

    Jetzt versteh ich dich nicht mehr.

    Vielleicht suchst du auch sowas:
    http://tinyurl.com/pgyfld3
    http://tinyurl.com/3etp275

  • 1