Mapping von Tabellen - So klappts TYPO3-Version: -

  • getit getit
    Jedi-Ritter
    1 x
    137 Beiträge
    4 Hilfreiche Beiträge
    12. 07. 2014, 11:38

    TYPO3-Version: 6.2.3

    In diesem Beispiel wird die Pages-Tabelle ausgelesen.
    Der Inhalt in spitzen Klammer ('<>') muss entsprechend ersetzt werden.

    1. in der setup.txt folgende Zeilen hinzufügen

    1. plugin.tx_<extkey> {
    2. persistence {
    3. storagePid = 2
    4. classes {
    5. <Vendor>\<Extkey>\Domain\Model\Page {
    6. mapping {
    7. tableName = pages
    8. }
    9. }
    10. }
    11. }
    12. }

    2. Das Model anlegen

    1. namespace <Vendor>\<Extkey>\Domain\Model;
    2.  
    3. /**
    4.  * Class Page
    5.  * @package <Vendor>\<Extkey>\Domain\Model
    6.  */
    7. class Page extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
    8.  
    9. /**
    10.   * @var string
    11.   */
    12. protected $title;
    13.  
    14. /**
    15.   * @var string
    16.   */
    17. protected $subtitle;
    18.  
    19. public function getTitle() {
    20. return $this->title;
    21. }
    22.  
    23. public function getSubtitle() {
    24. return $this->subtitle;
    25. }
    26. }

    WICHTIG: Die Annotations bei den Eigenschaften.

    3. Das Repository

    1. namespace <Vendor>\<Extkey>\Domain\Repository;
    2.  
    3. /**
    4.  * Class PageRepository
    5.  *
    6.  * @package <Vendor>\<Extkey>\Domain\Repository
    7.  */
    8. class PageRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {
    9.  
    10. public function findPages() {
    11. $query = $this->createQuery();
    12. // $query->getQuerySettings()->setRespectStoragePage(FALSE);
    13.  
    14. return $query->execute();
    15. }
    16. }

    Würden die Kommentarzeichen in Zeile 2 der Fkt. entfernt werden, würden alle Tabellenzeilen (nicht nur unterhalb von id = 2 - in setup.txt festgelegt) gelesen werden.

    Vielen Dank an Herrn Lobacher.


  • getit getit
    Jedi-Ritter
    0 x
    137 Beiträge
    4 Hilfreiche Beiträge
    24. 11. 2014, 10:32

    >> Der extension builder legt fürs mapping jedoch im root-ordner der Extension eine ext_typoscript_setup beginnend mit config.tx_extbase an. Was ist der Unterschied, bzw. was ist besser? Oder ist das völlig egal?

    Kann ich dir leider nicht beantworten. Aber ich habe das Buch von Patrick Lobacher "TYPO3 Extbase" gelesen und da wird das Mapping immer über die setup.txt gemacht:
    "Die Konfiguration über TypoScript erfolgt meist in der Datei setup.txt im Verzeichnis Configuration/TypoScript/ der Extension — kann aber natürlich auch an jeder anderen Stelle geschehen.
    Verwendet man diese Datei, muss man selbst dafür sorgen, dass sie im TypoScript-Template der Website inkludiert ist (Include from static)."

    Aber da steht ja "...wird meist in der Datei setup.txt..." und ".. muss man selbst dafür sorgen, dass sie ... inkludiert ist" - s. dazu meinen 2. Post hier.

    Vielleicht ist das mit der Datei ext_typoscript_setup eine weitere Möglichkeit bei der man das Template nicht inkludieren muss ?

  • Ako3004 Ako3004
    Jar Jar Binks
    0 x
    1 Beiträge
    0 Hilfreiche Beiträge
    10. 12. 2018, 15:57

    Update von 2018:

    Der "Extension Builder" legt das alles auch "fast" schon so an. Funktioniert aber nicht, daher Folgendes beachten:

    config.tx_extbase {
    persistence {
    classes {
    FMD\MyExt\Domain\Model\Pages {
    mapping {
    tableName = pages
    // recordType = Tx_MyExt_Pages
    }
    }
    }
    }
    }

    Der recordType darf nicht gesetzt sein, sonst kommt nix zurück. Hat mich nen halben Tag gekostet das zum Laufen zu bekommen.

    Weitere Hinweise:
    * Die "storagePid" musste ich bei mir nicht setzen.
    * Wenn man nur die TYPO3 Standardfelder braucht (uid, pid...) können Model und Repository leer bleiben, ansonsten braucht man die Variablendefinitionen und Getter Methoden für die notwendigen Felder