Zum Inhalt springen

Bestehende Extensions erweitern

Erstellt am 11. März 2014 · 3 Antworten · letzte Antwort am 20. März 2014

Tags: TCA, Frage

Alissa ·

Hallo zusammen,

ich möchte gerne eine bestehende extbase+fluid extension erweitern. auf dem hardcoded-weg bekomme ich das auch hin, aber die "zu erweiternde" extension soll auch wirklich durch eine installation einer weiteren extension erweitert werden.

kurz zu dem was ich bisher habe:
- eine selbsterstellte vorhandene extension (news) die zu erweitern ist - nennen wir sie mal ext1
- eine selbsterstellte vorhandene extension (veranstalter) die die daten liefert - nennen wir sie mal ext2
- eine leere extension (newsdetails) die ext1 erweitern soll - nennen wir sie mal ext3

ext1 und ext2 funktionieren alleine wunderbar. jetzt möchte ich in der ext1 die veranstalter aus ext2 per selectbox wählen (diese habe ich vorher angelegt und sie sind in einer tabelle gespeichert).

also habe ich durch den extension builder eine leere extension erstellt und in der ext_tables.php das in ext1 dazukommende feld (selectbox mit m:m-beziehung) deklariert (funktioniert). im backend sehe ich in ext1 das feld und die daten aus ext2 (wunderbar, wird auch gespeichert, top).

jetzt muss ich also nur noch ext1 im model erweitern, damit er auf das model und das repo aus ext2 zugreift um die daten im FE anzuzeigen... und da hakt es leider. schreibe ich das ins ext1-model direkt (hardcoded), funktioniert es, aber es soll ja durch die installation von ext3 automatisch erweitert werden.

kann mir jemand sagen wie ich das realisieren kann? model und repo aus ext2 sind ja vorhanden und funktionieren. nur was schreibe ich in ext3 damit das ext1-model dementsprechend erweitert wird?

freshman17 ·

Hi,

wie du schon sagst muss das Model aus der Ext3, das Model aus der Ext1 um die Eigenschaften erweitern (inkl. Getter/Setter).
Evtl. muss man im TypoScript die Tabelle/Felder aus Ext2 mappen. Hier ein Beispiel:

config.tx_extbase {
  persistence {
    storagePid = {$plugin.tx_myplugin.persistence.storagePid}
    classes {
      Tx_MyExt1_Domain_Model_Foo {
        mapping {
          tableName = static_countries
          recordType = Tx_MyExt1_Domain_Model_Foo
          columns {
            cn_short_en.mapOnProperty = name
          }
        }
      }
    }
  }
}

Aber ohne Code alles sehr schwierig 😉

Alissa ·

Hallo freshman17,

im endeffekt sieht das ganze so aus, dass die ext2 eine tabelle enthält und befüllt, die mehrere datensätze von veranstaltern und referenten verwaltet.

mit dem ext.-builder habe ich eine leere extension (ext3) erstellt und manuell dann der ext1 zwei selectboxen eingefügt und die ext1 tabelle dementsprechend erweitert.

die ganzen getter und setter für die veranstalter und referenten sind ja bereits in ext2 vorhanden. durch das mapping aus der ext_tables.php in ext3 funktioniert die verwaltung aus dem backend ja bereits wunderbar, die daten werden in einer m:m tabelle gespeichert.

soweit ich das jetzt verstehe, müsste doch nur noch eine "verknüpfung" von ext1 und ext2 durch die ext3 erstellt werden, damit die getter und setter aus ext2 in der ext1 bekannt werden.

nur genau diese bekomme ich irgendwie nicht hin. leider sind die ganzen tutorials im inet immer auf die fe_users ausgelegt, was mir bisher nicht sonderlich geholfen hat.

ich gehe davon aus, dass ich in ext3 folgendes machen muss a) das mapping in der typoscript setup.txt erstellen damit es die daten aus der mm-tabelle holt (irgendwie ähnlich deinem obigen beispiel) und b) in meinem model, welches in ext3 geladen wird, dem ext1-model welches die daten holt, die getter und setter aus ext2 bekannt machen. nur daran scheitere ich irgendwie aktuell immer.

theoretisch soll ext3 nichts anderes machen, als der ext1 die selectbox zu geben und die relationen zwischen ext1 und ext2 erstellen, da ja bereits getter und setter (in ext2) vorhanden sind.

ich hoffe du kannst mich jetzt etwas besser verstehen, wenn du code brauchst, sag mir bitte auch welchen du brauchst 🙂

edit: hier noch mal kurz zur veranschaulichung:

ext1 - blog
- tabelle entries
- tabelle kommentare

ext2 - veranstalter/referenten
- tabelle veranstalter
- tabelle referenten

ext3 - verknüpfung ext1 mit ext2
- tabelle m:m zwischen ext1-tabelle einträge und ext2-tabelle veranstalter
- tabelle m:m zwischen ext1-tabelle einträge und ext2-tabelle referenten
- erweitert ext1-tabelle einträge um 2 felder für veranstalter und referenten