[Frage] Extension mithilfe des Extensionbuilder erweitern [Gelöst]

  • HH HH
    Jedi-Meister
    0 x
    347 Beiträge
    0 Hilfreiche Beiträge
    14. 12. 2014, 14:11

    Hallo,
    ich möchte eine eigene Testextension durch eine andere Extension erweitern. Das ganze unter typo3 6.2.8

    1. neue Etxension mit dem Extension builder erstellen (vendor: TEST, extension key: mytest1)
    2. Neue Tabelle erstellen "table1"
    3. neue Eigenschaft in table1 mit Name "title1"
    4. speichern
    5. Installieren

    Im Backend kann ich jetzt einen einene Datensatz erstellen und title1 eingeben

    Jetzt möchte ich gerne meine Extension mytest1 erweitern und zwar mit einer weiteren Extension mytest2.

    6. ich erstelle wieder eine Extension (vendor: TEST, extension key: mytest2)
    7. Estelle eine Tabelle "table1"
    8. gebe im Feld "Extend existing model class" meine Klasse ein "\TEST\Mytest1\Domain\Model\Table1"
    9. Erstelle eine Eigenschaft "title2"
    10. Speicher das Ganze
    11. Installiere die Extension

    Schau ich mir die Tabelle der Extension mytest1 an (mit phpmyadmin) sehe ich das dieser Extension ein Feld title2 hinzugefügt wurde.

    Lege ich im Backend einen Datensatz mytest1 an wird leider das feld title2 nicht angezeigt.

    Der Extension Builder generiert mir diese Datei.

    1. <?php
    2. if (!defined('TYPO3_MODE')) {
    3. die('Access denied.');
    4. }
    5.  
    6. \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile($_EXTKEY, 'Configuration/TypoScript', 'mytest2');
    7.  
    8. if (!isset($GLOBALS['TCA']['tx_mytest1_domain_model_table1']['ctrl']['type'])) {
    9. if (file_exists($GLOBALS['TCA']['tx_mytest1_domain_model_table1']['ctrl']['dynamicConfigFile'])) {
    10. require_once($GLOBALS['TCA']['tx_mytest1_domain_model_table1']['ctrl']['dynamicConfigFile']);
    11. }
    12. // no type field defined, so we define it here. This will only happen the first time the extension is installed!!
    13. $GLOBALS['TCA']['tx_mytest1_domain_model_table1']['ctrl']['type'] = 'tx_extbase_type';
    14. $tempColumns = array();
    15. $tempColumns[$GLOBALS['TCA']['tx_mytest1_domain_model_table1']['ctrl']['type']] = array(
    16. 'exclude' => 1,
    17. 'label' => 'LLL:EXT:mytest2/Resources/Private/Language/locallang_db.xlf:tx_mytest2.tx_extbase_type',
    18. 'config' => array(
    19. 'type' => 'select',
    20. 'items' => array(),
    21. 'size' => 1,
    22. 'maxitems' => 1,
    23. )
    24. );
    25. \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tx_mytest1_domain_model_table1', $tempColumns, 1);
    26. }
    27.  
    28. $tmp_mytest2_columns = array(
    29.  
    30. 'title2' => array(
    31. 'exclude' => 1,
    32. 'label' => 'LLL:EXT:mytest2/Resources/Private/Language/locallang_db.xlf:tx_mytest2_domain_model_table1.title2',
    33. 'config' => array(
    34. 'type' => 'input',
    35. 'size' => 30,
    36. 'eval' => 'trim'
    37. ),
    38. ),
    39. );
    40.  
    41. \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tx_mytest1_domain_model_table1',$tmp_mytest2_columns);
    42.  
    43. $GLOBALS['TCA']['tx_mytest1_domain_model_table1']['types']['Tx_Mytest2_Table1']['showitem'] = $TCA['tx_mytest1_domain_model_table1']['types']['1']['showitem'];
    44. $GLOBALS['TCA']['tx_mytest1_domain_model_table1']['types']['Tx_Mytest2_Table1']['showitem'] .= ',--div--;LLL:EXT:mytest2/Resources/Private/Language/locallang_db.xlf:tx_mytest2_domain_model_table1,';
    45. $GLOBALS['TCA']['tx_mytest1_domain_model_table1']['types']['Tx_Mytest2_Table1']['showitem'] .= 'title2';
    46.  
    47. $GLOBALS['TCA']['tx_mytest1_domain_model_table1']['columns'][$TCA['tx_mytest1_domain_model_table1']['ctrl']['type']]['config']['items'][] = array('LLL:EXT:mytest2/Resources/Private/Language/locallang_db.xlf:tx_mytest1_domain_model_table1.tx_extbase_type.Tx_Mytest2_Table1','Tx_Mytest2_Table1');
    48.  
    49. \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('tx_mytest1_domain_model_table1', $GLOBALS['TCA']['tx_mytest1_domain_model_table1']['ctrl']['type'],'','after:' . $TCA['tx_mytest1_domain_model_table1']['ctrl']['label']);

    Der Extesnionbuilder fügt bereits ein addToAllTCAtypes hinzu, trotzdem seh ich nichts im Backend.
    Der TCA wird aus irgendeinem Grund nicht erweitert.
    Ich habe das ganze aus einem englisch Sprachigen Forum, dort wird darauf hingewiesen, dass wenn man den Eintrag "after:....." komplett löscht das ganze funktionieren sollte. Machts leider nicht.
    Bin für jeden Tipp dankbar!!!!

  • HH HH
    Jedi-Meister
    0 x
    347 Beiträge
    0 Hilfreiche Beiträge
    24. 01. 2015, 21:46 - Lösung

    so, habs hinbekommen,
    an alle die mal auf ein ähnliches Problem stoßen:

    1. Fehler: Ich hatte vergessen (im Extensionbuilder) bei Map to existing Table, die Tabelle anzugeben (tx_mytest1_domain_model_table1)
    2. Fehler: ich hatte vergessen bei "Abhängig von" meine mytest1 extesnion einzutragen (entweder man nutzt den extension builder oder in der ext_emconf.php 'depends' => array('typo3' => '6.2', 'mytest1' => '0.0', eintragen)
    3. Fehler (mal außnahmweise nicht von mir, da macht der Extensionbuilder irgendwas komisches. In die letzte Zeile der ext_tables.php abändern: \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('tx_mytest1_domain_model_table1', 'title2','','after:title1');
    4. Extensions deinstallieren cache leeren wieder installieren, erst dann werden die Änderungen übernommen.

    Jetzt funkionierts aber, genau wie erwartet!
    Danke nochmals an ALLE!


  • Schweriner Schwerine...
    Jedi-Ratsmitglied
    0 x
    554 Beiträge
    60 Hilfreiche Beiträge
    15. 12. 2014, 08:45

    Sind die Felder vielleicht nur sichtbar wenn Du beim erweiterten Datensatz den neuen Typ auswählst?

  • HH HH
    Jedi-Meister
    0 x
    347 Beiträge
    0 Hilfreiche Beiträge
    15. 12. 2014, 10:35

    Danke, für die Antwort,
    aber wie wähle ich den Typ aus?

    Hab ich vielleicht vergessen zu erwähnen, im TCA der mytest1 Extension ist auch nicht der "title2" zu sehen (Konfiguration im backend -> TCA)
    Dort müsste die Column ja hinzugefügt werden. Machts aber nicht, damit kann natürlich auch nicht angezeigt werden.
    Mach ich das genauso bei fe_users funktioniert das ohne Probleme!
    Danke!

  • boOgiE boOgiE
    T3PO
    0 x
    31 Beiträge
    0 Hilfreiche Beiträge
    14. 01. 2015, 17:30

    du solltest vor dem installieren prüfen ob du in der emconf die abhängigkeit zu mytest1 eingetragen hast, damit die zweite extension und dessen tca nach der ersten geladen wird.
    Ansonsten in der emconf von ext2 eintragen, deinstallieren und neu installieren.
    hört sich stark nach dem problem an das aich auch vor ein paar Tagen hatte und bin erst nach einer gefühlten ewigkeit drauf gekommen zu überprüfen in welcher reihenfolge die extension-tca's geladen werden.
    Die Lösung habe ich hier gefunden:
    http://www.typo3.net/forum/thematik/zeige/thema/118292/


  • 0 x
    16. 01. 2015, 08:06

    Moin,

    nur für den Fall, dass ich dich nicht richtig verstanden habe. Du willst Model1 als Basis nutzen, das durch Model2 erweitert werden soll ?

    In dem Fall ist es doch klar, dass Model1 nicht die Attribute von Model2 bekommt.
    Model2 bekommt die Attribute von Model1 + die Attribute von Model2.

    In dem Fall solltest du mit Model2 arbeiten, und nicht mit Model1.

  • HH HH
    Jedi-Meister
    0 x
    347 Beiträge
    0 Hilfreiche Beiträge
    21. 01. 2015, 21:22

    Hallo BoOgiE,
    ok, das hört sich logisch an, werde ich mal checken,
    Ich dachte was bei einer Erweiterung der fe_users automatisch funktioniert, sollte bei meinen eigenen Extensions auch funktionieren,
    aber das sieht genau danauch aus, als würde der TCA der 2. Extension nicht von der 1.Extension berücksichtig werden.
    Danke!

  • HH HH
    Jedi-Meister
    0 x
    347 Beiträge
    0 Hilfreiche Beiträge
    24. 01. 2015, 13:22

    Hallo,
    hab jetzt in die ext_emconf.php
    'dependencies' => 'mytest1',
    'priority' => 'bottom',
    eingetragen, die mytest2 deinstalliert und wieder installiert,
    kann das Feld table2 trotzdem nicht in mytest1 finden.
    in der tabelle von mytest2 ist es zwar hinzugefügt, der tca bleibt aber unangetastet....
    ?!?!
    danke!


  • 0 x
    24. 01. 2015, 14:11

    Wie gesagt, das was du vorhast dürfte prinzipiell gar nicht funktionieren. Kann es eigentlich auch gar nicht. Kann da nur auf meinen vorherigen Post verweisen ;)

  • HH HH
    Jedi-Meister
    0 x
    347 Beiträge
    0 Hilfreiche Beiträge
    24. 01. 2015, 15:44

    hallo,
    danke für deine Antwort,
    ich versteh sie leider nur nicht o.O
    :-)

    wieso kann ich meine eigene extension nicht einfach durch eine weitere eigene extension erweitern?
    so wie ich ja auch die fe_user durch eine eigene extension erweitern kann, dort überschreibe füge ich durch eine eigene extension ja auch tabellen felder hinzu und überschreibe den fe_isers tca so dass die erweiterten felder beim anlegen eines neuen fe users auch auftauchen?!?!?

    klar, prinzipiell ist das ganz insofern unnötig, da ich ja meine eigene extension direkt erweitern kann, ich würds trotzdem gern verstehn....
    danke!!!!


  • 0 x
    24. 01. 2015, 16:21

    Edit: Ich hab das ganze jetzt mal selbst ausprobiert und bin zu folgendem Ergebnis gekommen ;)

    Wenn ich eine ExtA mit ModelA mit dem Attribut nameA anlege und entsprechend eine ExtB mit Abhängigkeit zu ExtA, mit ModelB mit Attribut nameB, welches die Klasse ModelA erweitert und auch auf die Tabelle modela gemappt wird, dann sehe ich in der Listenansicht im Backend nur einen Eintrag für ModelA. Wähle ich den aus, wird mir erstmal nur das Attribut nameA angezeigt und ein Auswahlfeld, in dem ich nur ExtB ModelB auswählen kann. Klicke ich nun auf speichern, erhalte ich einen weiteren Tab neben "General" und "Access" namens "ModelB". Unter diesem Tab finde ich nun die zusätzlichen Attribute von ModelB und kann dieses auch speichern.

    Vom Ablauf her ExtA erstellt, gespeichert, installiert. ExtB erstellt, gespeichert, installiert.