[Frage] Korrekter Namespace für (TCA) UserFunc? TYPO3-Version: 6.1.0

  • bberger bberger
    Padawan
    0 x
    33 Beiträge
    0 Hilfreiche Beiträge
    31. 03. 2014, 10:41

    Hi Leute,

    leider finde ich hierzu keine Dokumentation. Ich habe eine UserFunc, welche im TCA einen Custom-Title generiert. Wie wäre hier unter TYPO3 6+ der Namespace zu definieren bzw wo waere die UserFunc-Klasse abzulegen?

    a) Vendor/ExtName/Classes/UserFunc/ClassName
    b) Vendor/ExtName/Configuration/TCA/UserFunc/ClassName
    c) Vendor/ExtName/Classes/UserFunc/TCA/ClassName
    d) was ganz anderes?

    Gibt es hierfür eine Dokumentation bzw. ein Cheat-Sheet?

  • Hilfreichster Beitrag

  • jenses jenses
    Flash Gordon
    1 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    01. 04. 2014, 09:24 - Hilfreichster Beitrag

    Zitiert von: JBrooks

    Hab in der verlinkten Dokumentation keine Information dazu gefunden dass ich zwingend einen eigenen Namensraum schaffen muss.


    Die Gesetze der Logik sollten dir aber sagen, daß dies mehr als sinnvoll ist, oder nicht?
    "TYPO3\ContentTeaser" ist ja nicht wirklich originell, auf die Idee kommen sicherlich auch andere.


  • 1
  • JBrooks JBrooks
    R2-D2
    0 x
    96 Beiträge
    0 Hilfreiche Beiträge
    31. 03. 2014, 17:04

    Hab mich auch gerade damit beschäftigt und das ganze folgendermaßen gelöst bekommen...

    1) Im Extverzeichnis im Ordner "Classes" einen Unterordner "UserFunc" anlegen. Dort legen wir dann die PHP-Datei "ContentTeaserRelations.php" an. Der Code darin sieht ganz vereinfacht z.B. so aus:

    1. <?php
    2. namespace TYPO3\ContentTeaser\UserFunc;
    3.  
    4. class ContentTeaserRelations {
    5.  
    6. public function renderOverview($PA, $fObj) {
    7. return 'Test';
    8. }
    9.  
    10. }
    11. ?>

    Der vollständige Pfad lautet also: typo3conf/ext/content_teaser/Classes/UserFunc/ContentTeaserRelations.php

    Leider habe ich auch keine Dokumentation darüber gefunden, ob ein bestimmter Ordername für UserFunc-Dateien vorgesehen ist. Das einzige was ich in der folgenden Doku finden konnte, dass der Ordner bzw. die UserFunc Datei zwingend im Ordner Classes angelegt sein muss:
    [url]http://docs.typo3.org/TYPO3/CoreApiReference/ApiOverview/Namespaces/Index.html[/url]

    2) Im TCA tragen wir dann noch folgendes ein:

    1. <?php
    2. ...
    3. 'relations' => array(
    4. 'exclude' => 0,
    5. 'label' => 'Seiten:',
    6. 'config' => array(
    7. 'type' => 'user',
    8. 'size' => 30,
    9. 'userFunc' => 'TYPO3\ContentTeaser\UserFunc\ContentTeaserRelations->renderOverview',
    10. )
    11. ),
    12. ...
    13. ?>

    Der Teil "TYPO3\ContentTeaser\" entspricht der Namespace-Logik "Vendor\Extname\". Der Extname ist in diesem Fall "content_teaser" und wird in upper camel-case Schreibweise geschrieben.

    Beim restlichen Teil geben wir dann den kompletten Pfad zur userFunc Datei an (ohne den Ordner "Classes" und ohne ".php" beim Dateinamen). Siehe auch hier die Anmerkungen innerhalb der Namespace Doku die oben verlinkt ist ;-)

    Hoffe das hilft dir weiter

  • bberger bberger
    Padawan
    0 x
    33 Beiträge
    0 Hilfreiche Beiträge
    31. 03. 2014, 18:07

    So habe ich das auch gelöst.

    Finde es etwas schade, dass es hier keine offzielle Guideline gibt in welchem Namesapce man welche Sachen anlegen soll.

  • Julian.Hofmann Julian.Ho...
    Flash Gordon
    0 x
    2940 Beiträge
    115 Hilfreiche Beiträge
    31. 03. 2014, 19:37

    Namespaces sind zum einen an ein package bzw. Extension geknüpft, zum anderen an einen Vendor. Daraus ergibt sich eigentlich schon, in welchem Namespace sich etwas befinden sollte...

    Für den TYPO3 Core ist der Vendor bspw. "TYPO3\CMS". Innerhalb dieses Namespaces gehören [b]nur[/b] Core-Bestandteile hin.

    [b]The TYPO3\CMS vendor name is reserved and may not be used by extensions![/b]
    (Quelle: [url=http://docs.typo3.org/TYPO3/CoreApiReference/ApiOverview/Namespaces/Index.html]TYPO3 Core APIs 6.2.0[/url])

    D.h. als Programmierer solltest Du Dir einen Vendor ausdenken, den [u]Du[/u] fortan verwendest, und der [u]Dein[/u] Namensraum für [u]Deine[/u] Projekte (Extension/Packages) ist.

    Etwas umfangreicher als die TYPO3 Core API-Doku gehen die Guidelines von FLOW auf Namespaces ein: http://docs.typo3.org/flow/TYPO3FlowDocumentation/stable/TheDefinitiveGuide/PartV/CodingGuideLines/PHP.html

  • bberger bberger
    Padawan
    0 x
    33 Beiträge
    0 Hilfreiche Beiträge
    31. 03. 2014, 19:48

    Darum geht's hier ja garnicht. Es geht um den Namensraum INNERHALB meines Vendor/ExtName-Namespaces.

    also: Vendor/ExtName/###????###

  • Julian.Hofmann Julian.Ho...
    Flash Gordon
    0 x
    2940 Beiträge
    115 Hilfreiche Beiträge
    31. 03. 2014, 20:04

    Ups, ok. Dann war das Beispiel oben nur ungünstig (und darauf bin ich eher angesprungen).
    Die Copy&paste-und-dann-vielleicht-nachdenk-Fraktion bastelt sich anhand solcher Schnipsel vermutlich doch gerne mal Methoden in geschützen Namensräumen.

  • JBrooks JBrooks
    R2-D2
    0 x
    96 Beiträge
    0 Hilfreiche Beiträge
    31. 03. 2014, 22:12

    @Julian. Interesse halber würde mich interessieren ob mein Beispiel denn grundsätzlich falsch so ist?

    Hab in der verlinkten Dokumentation keine Information dazu gefunden dass ich zwingend einen eigenen Namensraum schaffen muss. Vielleicht habe ich aber auch nur etwas übersehen.

    In der Doku gab es folgendes Beispiel, was meinem Vorschlag (Vendor\ExtensionName\) von oben entsprechend würde:
    So a test class in EXT:foo_bar_baz/Tests/Unit/Bla/ will have as namespace \Vendor\FooBarBaz\Tests\Unit\Bla.

  • jenses jenses
    Flash Gordon
    1 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    01. 04. 2014, 09:24

    Zitiert von: JBrooks

    Hab in der verlinkten Dokumentation keine Information dazu gefunden dass ich zwingend einen eigenen Namensraum schaffen muss.


    Die Gesetze der Logik sollten dir aber sagen, daß dies mehr als sinnvoll ist, oder nicht?
    "TYPO3\ContentTeaser" ist ja nicht wirklich originell, auf die Idee kommen sicherlich auch andere.

  • JBrooks JBrooks
    R2-D2
    0 x
    96 Beiträge
    0 Hilfreiche Beiträge
    01. 04. 2014, 18:20

    Ok, danke für den Hinweis

  • 1