[Frage] Viewhelper in ext_autoload.php?

  • Kaimane Kaimane
    T3PO
    0 x
    20 Beiträge
    0 Hilfreiche Beiträge
    07. 02. 2014, 13:01

    Ich benötige einen einfachen Viewhelper, der Javascript Inline am Ende des <body>-Tags erzeugt. Der Viewhelper funktioniert jedoch nur dann, wenn ich ihn in der ext_autoload.php bekannt mache:

    1. <?php
    2. $extensionClassesPath = t3lib_extMgm::extPath('myext') . 'Classes/';
    3.  
    4. $default = array(
    5. 'tx_myext_viewhelpers_scriptviewhelper' => $extensionClassesPath . 'ViewHelpers/ScriptViewHelper.php'
    6. );
    7.  
    8. return $default;
    9. ?>

    Passiert dies nicht, erhalte ich im Log die Ausgabe:

    Core: Exception handler (WEB): Uncaught TYPO3 Exception: #1289386765: Could not analyse class:Tx_Myext_ViewHelpers_ScriptViewHelper maybe not loaded or no autoloader? | Tx_Extbase_Object_Container_Exception_UnknownObjectException thrown in file /var/www/clients/client1/web308/private/typo3_src-4.5.32/typo3/sysext/extbase/Classes/Object/Container/ClassInfoFactory.php in line 45

    Core: Error handler (FE): PHP Warning: in_array() expects parameter 2 to be array, boolean given in /var/www/clients/client1/web308/private/typo3_src-4.5.32/typo3/sysext/extbase/Classes/Object/Container/Container.php line 259

    Core: Error handler (FE): PHP Warning: class_implements(): Class Tx_Myext_ViewHelpers_ScriptViewHelper does not exist and could not be loaded in /var/www/clients/client1/web308/private/typo3_src-4.5.32/typo3/sysext/extbase/Classes/Object/Container/Container.php line 259

    Auf die Groß- und Kleinschreibung der Ordner und Dateien habe ich penibelst geachtet.
    TYPO3 4.5.32 ist im Einsatz, Extbase 1.3.4 und Fluid 1.3.1.

    Normalerweise müsste Extbase den Viewhelper doch selber laden.
    Warum muss ich ihn in der ext_autoload.php laden lassen, worauf habe ich nicht geachtet?

    Vielen Dank für eure Hilfe!


  • 1
  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    07. 02. 2014, 15:37

    Ich benötige einen einfachen Viewhelper, der Javascript Inline am Ende des <body>-Tags erzeugt. Der Viewhelper funktioniert jedoch nur dann, wenn ich ihn in der ext_autoload.php bekannt mache

    Soll es sich um ein FE-Plugin handeln und soll das heißen: außerhalb des Plugins?

    1. <!-- Plugin inserted: [begin] -->
    2. <div class="tx-myextension">
    3. hier steht Plugin-Code
    4. <!-- Plugin inserted: [end] -->
    5. </div>
    6. hier soll javascript hin
    7. </body>

    Da wüsste ich gar nicht, wie das mit einem VH gehen soll. Denn dieser wird aus dem fluid-template heraus aufgerufen und was dieser ausgibt, erscheint an der Stelle des Aufrufs.
    Die Ausgabe des VH ist Teil des fluid-scripts, welches Teil des Plugin ist. Ich wüsste nicht, wie ich mit einem Plugin eine Ausgabe außerhalb des <div class="my-plugin"> erzeugen soll.

    Ansonsten gibt es nur zu beachten, den Namespace des VH im fluid-script bekannt zu machen.
    Ungefähr so...

    1. {namespace xyz=Tx_myext_ViewHelpers}
    2. <xyz:script arguments="..." />

  • Velletti Velletti
    R2-D2
    0 x
    83 Beiträge
    3 Hilfreiche Beiträge
    07. 02. 2014, 15:46

    Zitiert von: harald1972
    Ich wüsste nicht, wie ich mit einem Plugin eine Ausgabe außerhalb des <div class="my-plugin"> erzeugen soll.

    das geht doch auf 2 Arten:
    z.b. im layout unterhalb von

    <f:render section="main"/>
    <script ... ></script>

    oder via Javascript analog wie es der FlashMessagedisplay Controller in der Community extension macht:

    im Template:

    [code]<script type="text/javascript">
    jQuery('{settings.flashMessagesDisplayer.where}').append('<f:flashMessages renderMode="div"/>');
    </script>
    [/code]

    und im setup.txt
    [code]settings.flashMessagesDisplayer.where = #DivID_des_PageWrappers[/code]

    Typo3 seit 2010. Multilinguale (> 8 ) , Multi-Domain Installation aktuell unter 4.5.x LTS:
    Main used Extension: DAM, REAL URL, Powermail, tt_address, tt_news, cal, MM_forum (fork), Community (fork), Diversen eigenen extbase/Fluid extension

  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    07. 02. 2014, 16:59

    Ok, danke Velletti!

    Das beantwortet meine Frage - obwohl ich gar keine gestellt, sondern nur Unwissen ausgedrückt hab ;) - wenn ich das richtig verstanden hab...
    Ein VH könnte z.B. ein javascript mit append 'hinten anhängen'.

  • Velletti Velletti
    R2-D2
    0 x
    83 Beiträge
    3 Hilfreiche Beiträge
    07. 02. 2014, 17:42

    gern geschehen. Die eigentliche Frage hattest du nach meinem Empfinden mit dem Hinweis
    [code]{namespace xyz=Tx_myext_ViewHelpers}[/code]
    (vermutlich) ohnehin schon beantwortet ..

    Grüße
    Jörg
    PS: kannst ja bei mir auf "war hilfreich" drücken :-)

    Typo3 seit 2010. Multilinguale (> 8 ) , Multi-Domain Installation aktuell unter 4.5.x LTS:
    Main used Extension: DAM, REAL URL, Powermail, tt_address, tt_news, cal, MM_forum (fork), Community (fork), Diversen eigenen extbase/Fluid extension

  • Kaimane Kaimane
    T3PO
    0 x
    20 Beiträge
    0 Hilfreiche Beiträge
    07. 02. 2014, 18:04

    Zunächst erstmal vielen Dank für eure Hinweise und Antworten.

    Der ViewHelper greift auf den pageRenderer->addJsFooterInlineCode bzw. $GLOBALS['TSFE']->additionalFooterData zurück (ne nachdem ob Caching oder nicht), wodurch es möglich ist dynamisch generiertes JavaScript aus dem Fluid-Template ans Ende (also vor dem </body>-Tag) zu platzieren, auch außerhalb des Plugin-HTMLs.

    Aber das ist überhaupt nicht mein Problem, denn der VH funktioniert einwandfrei.
    Meine Frage bezieht sich viel mehr darauf, warum ich den VH in der ext_autoload.php bekannt machen und laden lassen muss. Und, wenn ich es nicht tue, Extbase mir die im ersten Post gezeigten Errors auswirft ( [...] Could not analyse class:Tx_Myext_ViewHelpers_ScriptViewHelper maybe not loaded or no autoloader? [...] ).

    Kann mir jemand einen Hinweis dazu geben?
    Warum muss der VH über die ext_autoload.php geladen werden? Das ist doch unüblich.
    Warum lädt Extbase den VH nicht selber, wenn er benötigt wird? Ordner- und Dateibenennung sowie die Schreibweise in der VH-Klasse ist nach Extbase-Vorgabe.

    Nochmals vielen Dank für eure Unterstützung!

  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    07. 02. 2014, 19:55

    Warum muss der VH über die ext_autoload.php geladen werden? Das ist doch unüblich.

    Ich denke auch, dass das unüblich ist... hab ich glaub auch noch nie so gemacht.
    Aber wie kommst du denn eigentlich auf eine so unübliche Lösung?

    Could not analyse class:Tx_Myext_ViewHelpers_ScriptViewHelper maybe not loaded or no autoloader?

    Den Fehler hab ich immer, wenn ich mich bei der Benutzung eigener VH irgendwo vertippt hab.
    Deswegen der Hinweis, den Namespace zu definieren

    1. {namespace xyz=Tx_Myext_ViewHelpers}
    2. <xyz:script arguments="..." />

    und das sollte tun, wenn im Ordner myext/Classes/ViewHelpers
    die Datei ScriptViewHelper.php steht und darin die Klasse Tx_Myext_ViewHelpers_ScriptViewHelper definiert ist.
    Bei mir heißt der Ordner übrigens ViewHelper (Singular) - wie im Core auch.

  • 1