[Frage] Verständnisprobleme bei eigener Extensionentwicklung.

  • MrLight MrLight
    Padawan
    0 x
    35 Beiträge
    1 Hilfreiche Beiträge
    30. 07. 2014, 20:24

    Hallo Forum, hallo ihr Mitstreiter,

    Es ist wirklich schwer, das DDD Model vollkommen zu verstehen. Ich habe schon einiges gelesen und mir auch paar Videos angeschaut. Doch nun drehe ich mich ein wenig im Kreis, und bräuchte mal ein Tip, um da rauszukommen.

    Ich habe mal mit dem "Extension builder" eine einfache Erweiterung gebaut, mit zwei (Model) Objekten: Store und Product, und ein Frontend - Plugin angelegt, mit dem Namen StoresList. Wenn ich das richtig verstanden habe, entspricht StoresList dem damaligen pi1, also dem zentralen "Ding" (entschuldigt die etwas saloppe Bezeichnung) von wo aus alles geregelt wird.

    So direkt aus der Kiste funktioniert das Teil prima, nur was ich nicht verstehe, ist, dass mir der "Extension builder" einen ProductController.php und einen StoreController.php angelegt hat, aber keinen StoresListController.php. Also keinen zentralen Code, von wo aus ich mein Plugin steuere.

    Das einzige was da ist, ist in der ext_localconf.php ist dieser Eintrag:

    1. if (!defined('TYPO3_MODE')) {
    2. die('Access denied.');
    3. }
    4.  
    5. \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    6. 'NaO.' . $_EXTKEY,
    7. 'Storeslist',
    8. 'Store' => 'list, show, new, create, edit, update, delete, searchMe',
    9. 'Product' => 'list, show, new, create, edit, update, delete',
    10.  
    11. ),
    12. // non-cacheable actions
    13. 'Store' => 'create, update, delete, ',
    14. 'Product' => 'create, update, delete',
    15.  
    16. )
    17. );

    Und je nach dem, ob ich nun die Zeilen 9 und 10 vertausche, kommt entweder eine Liste der Stores, oder der Products.

    Das ganze erinnert mich irgendwie an Objektiv C, da war/ist es auch so, dass es von Hause aus keinen zentralen Code gibt.

    Nun hier meine Frage, ich möchte ein Plugin machen, welches dem Benutzer die Möglichkeit gibt, nach stores zu suchen. (Formular, Ausgabe, usw...)

    Nur wie lege ich das Ding an. denn wenn ich noch ein Model Objet anlege, dann bekomme ich auch eine neue Tabelle, tx_naostores_domain_model_suchestore, die ich nicht brauche, also was mache ich falsch.

    Einen Tip, wie ich aus dem Karussell heraus komme, währe echt nett. Ich sehe, dass ich ein kleines Problem habe und in der alten linearen Programmierung gefangen bin. :-(

    Hilft mir jemand da raus?

    LG


  • 1
  • Jan.S Jan.S
    Padawan
    0 x
    38 Beiträge
    0 Hilfreiche Beiträge
    06. 08. 2014, 10:23

    Du hast in deiner Extension ein Plugin Storeslist welches eine Action aufruft.
    Diese Action ist Standardmäßig die erste in der Liste der erlaubten Actions (wie du selbst herrausgefunden hast).

    Jetzt ganz du entweder ein zweites Plugin erstellt um eine andere action aufzurufen oder du benutzt eine Flexform wo du die Action einstellen kannst welche du brauchst.

    Hier ein Beispiel wie eine Flexform eingebunden wird:

    1. Tx_Extbase_Utility_Extension::registerPlugin(
    2. $_EXTKEY,
    3. 'Whiteheader',
    4. 'Neu erschienen - Überschrift'
    5. );
    6.  
    7. $pluginSignature = str_replace('_','',$_EXTKEY) . '_whiteheader';
    8. $TCA['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
    9. t3lib_extMgm::addPiFlexFormValue($pluginSignature, 'FILE:EXT:' . $_EXTKEY . '/Configuration/FlexForms/flexform_whiteheader.xml');

    Oder war deine Frage eine andere?


  • 0 x
    27. 08. 2014, 10:51

    Moin,

    also wenn ich dich richtig verstehe, verstehst du glaube ich den "Sinn" des Plugins (StoreList) nicht ganz richtig.

    Richtigerweise müsste/könnte dein Plugin einfach "Stores"/"StorePlugin" heißen. Mit diesem Plugin steuerst du prinzipiell die Frontend-Ausgabe deiner Extension.

    Über das Plugin kannst du quasi deine Extension zur Ausgabe bringen, das Plugin bestimmt, welche Action aufgerufen/angezeigt werden soll.

    Deine eigentliche StoreList hast du schon in deinem StoreController. Sie heißt dort "listAction". Diese Action macht genau das, was du von deinem "StoreList"-Plugin erwartest. Es zeigt dir eine Liste der Stores an. Da "list" als erste Action in deinem Plugin genannt ist, ist dies die Standard-Action und wird immer aufgerufen, sofern keine anderen Aufrufe explizit definiert sind.

    Du könntest nun ein zweites Plugin erstellen, und dort die "show" action an erste Stelle setzen. Dadurch hättest du quasi eine "Store Detail/Einzel-Ansicht".

    Deine "zentrale Codebasis" ist dein Controller. Hier kannst du definieren, was passieren soll.

    Um auf deine eigentliche Frage zurückzukommen ( Suchformular ):
    Du benötigst nicht zwingend eine eigene Action oder ein eigenes Plugin für das Suchformular ( du KANNST allerdings eine eigene action dafür anlegen). In dieser View wäre dann eben nur das Suchformular angezeigt.
    Ich binde beispielsweise solch ein Suchformular meist als Partial in die Views ein, wo ich es benötige. In dem Formular-Partial kannst du dann die list-action mit entsprechenden Such-Filtern aufrufen. Denn dein Suchergebnis ist ja nichts anderes, als eine gefilterte Listen-Ansicht ( in der Regel ;) ).

    Ich hoffe das hilft dir ein wenig weiter, wenn du noch Fragen hast, hier oder PN ;)

  • 1