[Frage] Content-Elemente per IRRE einbinden [Gelöst] TYPO3-Version: 7.6.12

  • buzz-dee buzz-dee
    Padawan
    0 x
    44 Beiträge
    1 Hilfreiche Beiträge
    14. 11. 2016, 17:41

    Hallo Leute,

    ich versuche, in einer Extension (für Reiseberichte) Inhalte als tt_content-Elemente einzubinden. Habe dazu ein Model "Content" erzeugt und mappe das auf tt_content. Im Backend funktioniert das ganze auch. Ich kann die Inhalte per IRRE anlegen. Die Uids der Reiseberichte werden auch korrekt in tt_content abgespeichert und im Reisebericht steht auch die richtig Anzahl der zugehörigen Content-Elemente.

    Das Problem ist, dass ich keinen Zugriff im FE-Plugin habe. Dort wird mir beim Debuggen der inhalte-Eigenschaft nur ein leeres ObjectStorage ausgegeben.

    Habe in der Reisebericht Klasse die Eigenschaft angelegt und entsprechende Getter/Setter:

    1. /**
    2.   * Inhalte
    3.   *
    4.   * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\SGMultimedia\SgEducataidreiseberichte\Domain\Model\Content>
    5.   * @cascade remove
    6.   */
    7. protected $inhalte = null;
    8.  
    9. /**
    10.   * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage
    11.   */
    12. public function getInhalte(){
    13. return $this->inhalte;
    14. }
    15.  
    16. /**
    17.   * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $inhalte
    18.   */
    19. public function setInhalte($inhalte){
    20. $this->inhalte = $inhalte;
    21. }
    22.  
    23. /**
    24.   * Adds a Content
    25.   *
    26.   * @param \SGMultimedia\SgEducataidreiseberichte\Domain\Model\Content $inhalt
    27.   */
    28. public function addInhalt(\SGMultimedia\SgEducataidreiseberichte\Domain\Model\Content $inhalt){
    29. $this->inhalte->attach($inhalt);
    30. }
    31.  
    32. /**
    33.   * Removes a Content
    34.   *
    35.   * @param \SGMultimedia\SgEducataidreiseberichte\Domain\Model\Content $inhaltToRemove
    36.   * @return void
    37.   */
    38. public function removeInhalt(\SGMultimedia\SgEducataidreiseberichte\Domain\Model\Content $inhaltToRemove){
    39. $this->inhalte->detach($inhaltToRemove);
    40. }
    41.  
    42. /**
    43.   * __construct
    44.   */
    45. public function __construct(){
    46. //Do not remove the next line: It would break the functionality
    47. $this->initStorageObjects();
    48. }
    49.  
    50. /**
    51.   * Initializes all ObjectStorage properties
    52.   * Do not modify this method!
    53.   * It will be rewritten on each save in the extension builder
    54.   * You may modify the constructor of this class instead
    55.   *
    56.   * @return void
    57.   */
    58. protected function initStorageObjects(){
    59. $this->inhalte = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
    60. }

    Im TS-Setup habe ich das mapping so vorgenommen:

    1. plugin.tx_sgeducataidreiseberichte_pi1 {
    2. view {
    3. templateRootPaths.0 = {$plugin.tx_sgeducataidreiseberichte_pi1.view.templateRootPath}
    4. partialRootPaths.0 = {$plugin.tx_sgeducataidreiseberichte_pi1.view.partialRootPath}
    5. layoutRootPaths.0 = {$plugin.tx_sgeducataidreiseberichte_pi1.view.layoutRootPath}
    6. }
    7.  
    8. persistence {
    9. storagePid = {$plugin.tx_sgeducataidreiseberichte_pi1.persistence.storagePid}
    10. classes {
    11. SGMultimedia\SgEducataidreiseberichte\Domain\Model\Content{
    12. mapping{
    13. tableName = tt_content
    14. columns {
    15. uid.mapOnProperty = uid
    16. }
    17. }
    18. }
    19.  
    20. }
    21. }
    22. }

    Was muss ich noch tun, um auch im Plugin an die Inhalte zu kommen?

  • buzz-dee buzz-dee
    Padawan
    1 x
    44 Beiträge
    1 Hilfreiche Beiträge
    17. 11. 2016, 19:47 - Lösung

    Hab's herausgefunden ;-)

    (1) In der Content-Klasse habe ich einen leeren Konstruktor eingefügt:

    1. public function __construct() {
    2. }


    (2) Das TS-Setup habe ich wie folgt geändert:
    1. config.tx_extbase.persistence.classes {
    2. SGMultimedia\SgEducataidreiseberichte\Domain\Model\Content {
    3. mapping {
    4. tableName = tt_content
    5. recordType =
    6. }
    7. }
    8. }

    Wichtig ist hier, dass recordType angegeben und leer ist.


    In der Klasse des Models, das die Content-Objekte enthalten soll (die oben aus dem Thread) konnte ich "setInhalte", "addInhalt" und "removeInhalt" entfernen, da ich die Inhalte im FE ja nur auslesen möchte.


  • 1
  • buzz-dee buzz-dee
    Padawan
    1 x
    44 Beiträge
    1 Hilfreiche Beiträge
    17. 11. 2016, 19:47

    Hab's herausgefunden ;-)

    (1) In der Content-Klasse habe ich einen leeren Konstruktor eingefügt:

    1. public function __construct() {
    2. }


    (2) Das TS-Setup habe ich wie folgt geändert:
    1. config.tx_extbase.persistence.classes {
    2. SGMultimedia\SgEducataidreiseberichte\Domain\Model\Content {
    3. mapping {
    4. tableName = tt_content
    5. recordType =
    6. }
    7. }
    8. }

    Wichtig ist hier, dass recordType angegeben und leer ist.


    In der Klasse des Models, das die Content-Objekte enthalten soll (die oben aus dem Thread) konnte ich "setInhalte", "addInhalt" und "removeInhalt" entfernen, da ich die Inhalte im FE ja nur auslesen möchte.

  • BastianBalthasarBux BastianBa...
    Jedi-Ratsmitglied
    0 x
    754 Beiträge
    9 Hilfreiche Beiträge
    18. 11. 2016, 12:09

    Nur so als kurzen Hinweis: verwende doch englisch bei funktions- und klassennamen. ;)
    dieses denglisch gemisch ist ja schauderhaft. ;)

    To err is human; to really screw things up requires the root password.
    https://www.Riccabona.IT/
    https://T3BOARD19.TYPO3.org/

  • 1