Zum Inhalt springen

Erste Schritte mit Extbase - Wie füttere ich das Plugin mit Daten?

Erstellt am 12. Februar 2013 · 30 Antworten · letzte Antwort am 21. Februar 2013 · Seite 1 von 2

Tags: Frage

martinibianco007 ·

Hi ich bräuchte wieder mal eure Hilfe.

Vorweg, das verwende ich:
- Typo3 6.0.1
- Extension Builder 2.5.1

Was will ich:
Eine simple Extension. Es gibt ein Showcase (Schaufenster) welches mehrere Showcase Items beinhalten soll.
Das Showcase kann beliebig viele Showcase Items beinhalten.
Showcase Item bestehen aus einem Bild, Text, Link....

Was habe ich bis jetzt gemacht:
1. Domain Modelling
2. Extesnion im Extension Manager installieren
- Die erfreuliche Nachricht, unter Liste -> neuen Datensatz erstellen kann ich ein Showcase anlegen und darin die Showcase Items

3. Plugin auf Seite einfügen
4. Game Over #angry# nun stehe ich an, wie kann ich dem Plugin beibringen dass er die auf der Seite eingefügtn Daten verwenden soll?

Laut Mittwald Extbase Doku soll man einen sysfolder anlegen und im Plugin dann auf diesen verlinken. Klingt logisch aber wie kann ich im Plugin ein Feld hinzufügen wo ich dann auf die Datensätze verlinke?

domain-modelling.jpg

fan66766 ·

Hey,

ich blick da nicht ganz genau durch.

Bekommst Du die im Backend angelegten Datensätze im Frontend nicht ausgegeben?

Gut wäre noch gewesen zu sehen, was dein Frontend-Plugin für "Advanced Options" hat. Denn dort steht ja welcher Controller mit welcher Methode aufgerufen werden soll.

Zeige uns das bitte mal.

martinibianco007 ·

richtig meine Frontend Ausgabe bleibt, leer!
bzw. die typo3 seite mit dem plugin ist eine white page :o

Aber das vertehe ich ja auch weil woher soll den das Plugin wissen welche Datensätze es verwenden soll?
Oder checkt das Plugin automtisch, dass es das Showcase, welches sich auf der Seite in der das Plugin sich befindet
ausgibt?

hier der screenshot meiner Advanced Options

advanced.jpg

fan66766 ·

Ich bin so froh, dass es nicht nur mir so geht mit diesem System.. #giggle#

"... woher soll den das Plugin wissen welche Datensätze es verwenden soll? ..."

Nene, dazu kommen wir jetzt.

Ne kurze Erklärung:
Das Frontend-Plugin lädt nun den gewünschten Controller, in diesem Fall die list()-Function ( listAction() ), wenn in der URL nichts weiter steht, welche Action geladen werden soll. Es wird dann die Funktion zuerst geladen, die Du im Extension Builder angegeben hast.
Der Controller stellt fest, dass er nun Datensätze ausgeben muss und kann aber nicht wissen, wo Du die in Deinem Backend angelegt hast, weil es ja frei strukturierbar ist.

Die Lösung:
Gehe nochmal im Backend in das Frondend-Plugin, dass Du bereits verknüpft hast (wie im Bild zu sehen). Beim Reiter "Verhalten" mappst Du dann auf den Ordner, in der sich die zu ladenen Datensätze befinden sollen.

Probiere es mal bitte aus. Das müsste es gewesen sein.

Gruss

fan66766 ·

Dann folgendes:
1. Cache leeren und erneut schauen.
2. Screenshot im Vollbild machen von dem erstellten Datensatz, der angezeigt werden soll (bitte kein Ausschnitt wie im ersten Bild). Ich vermute Du hast den Datensatz nicht Bei Web->Liste sondern bei Web->Seite angelegt.

martinibianco007 ·

eine verständnisfrage hinterher:

wenn ich mit dem extension builder das modelling beendet habe
und ein plugin einfüge ohne den datensatz angelegt zu haben
müsste im frontend zumindest die layout.html ausgegeben werden oder nicht?

muss das statische template hinzugefügt werden?

hat jemand den extension builder unter typo3 6.0 im einsatz?

hoffentlich birngt der morgige tag etwas licht ins dunkle.

fan66766 ·

Folgendes ist mir aufgefallen:
- Du möchtest Dir Datensätze von ShowcaseItem anzeigen lassen.
- Du hast dem Frontend-Plugin (FP) gesagt, er soll die list() laden.
- Du hast das FP auf einer Seite eingerichtet.
- Du hast im Backend dem FP gesagt, aus welchem Ordner er die Daten hernehmen muss.
- Du hast jedoch nicht nachgeschaut, ob Du auch eine ShoecaseItemRepository.php erstellt bekommen hast, oder?

Das ist wahrscheinlich das Problem. Im Extension Builder ist die Tabelle nicht auf "aggregate root" gesetzt. Demnach wird kein Repository erstellt und die Schnittstelle zur Datenbank fehlt.

Bitte um Überprüfung.

beo6 ·

Hallo.

Falls ich das richtig verstanden habe:

Du musst natürlich das Static Template einbinden.

Wenn du dir das nämlich einmal von dem erstellten Plugin anschaust. (per default zu finden unter typo3conf/ext/deinplugin/Configuration/TypoScript/*)

wirst du feststellen das dort sowohl das Template-Verzeichnis als auch die storagePid gesetzt werden.

Fügst du also das Static Template ein, kannst du ganz einfach über den Constant-Editor die Storage PageID angeben wo die Daten hinterlegt sind und sie sollten dir dann auch angezeigt werden.

martinibianco007 ·
fan66766 schrieb

Folgendes ist mir aufgefallen:
1 Du möchtest Dir Datensätze von ShowcaseItem anzeigen lassen.
2 Du hast dem Frontend-Plugin (FP) gesagt, er soll die list() laden.
3 Du hast das FP auf einer Seite eingerichtet.
4 Du hast im Backend dem FP gesagt, aus welchem Ordner er die Daten hernehmen muss.
5 Du hast jedoch nicht nachgeschaut, ob Du auch eine ShoecaseItemRepository.php erstellt bekommen hast, oder?

1 ich möchte den Showcase anzeigen dieser ist der Container der Shwocase Items
z.B. <div class="showcase">
<h2>showcasetitle</h2>
<div class="showcaseItem">ITEM</div>

2 Model Object ist wie folgt eingestellt
ShowcaseItem=>list,show,new,create,edit,update,delete
Showcase=>list,show,new,create,edit,update,delete
Passt das nicht so?

3 FP ist eingefügt ja statische Template ebenfalls

4 richtig

5 richtig unter ws_showcase -> Classes -> Domain -> Model -> Repository liegt nur ShowcaseRepositry.php
Da es kaum brauchbare Docs gib weiß ich ja nicht was ich eigentlich alles brauche.

martinibianco007 ·
<f:layout name="Default" />

This Template is responsible for creating a table of domain objects.

If you modify this template, do not forget to change the overwrite settings
in /Configuration/ExtensionBuilder/settings.yaml:
  Resources:
    Private:
      Templates:
        List.html: keep

Otherwise your changes will be overwritten the next time you save the extension in the extension builder

<f:section name="main">
<h1>Listing for ShowcaseItem</h1>

<f:flashMessages />

<table  class="tx_wsshowcase" >
	<tr>
		<th><f:translate key="tx_wsshowcase_domain_model_showcaseitem.itemtitle" /></th>
		<th><f:translate key="tx_wsshowcase_domain_model_showcaseitem.category" /></th>
		<th><f:translate key="tx_wsshowcase_domain_model_showcaseitem.description" /></th>
		<th><f:translate key="tx_wsshowcase_domain_model_showcaseitem.link" /></th>
		<th> </th>
		<th> </th>
	</tr>

	<f:for each="{showcaseItems}" as="showcaseItem">
		<tr>
			<td><f:link.action action="show" arguments="{showcaseItem : showcaseItem}"> {showcaseItem.itemtitle}</f:link.action></td>
			<td><f:link.action action="show" arguments="{showcaseItem : showcaseItem}"> {showcaseItem.category}</f:link.action></td>
			<td><f:link.action action="show" arguments="{showcaseItem : showcaseItem}"> {showcaseItem.description}</f:link.action></td>
			<td><f:link.action action="show" arguments="{showcaseItem : showcaseItem}"> {showcaseItem.link}</f:link.action></td>
			<td><f:link.action action="edit" arguments="{showcaseItem : showcaseItem}">Edit</f:link.action></td>
			<td><f:link.action action="delete" arguments="{showcaseItem : showcaseItem}">Delete</f:link.action></td>
		</tr>
	</f:for>
</table>

<f:link.action action="new">New ShowcaseItem</f:link.action>
</f:section>
fan66766 ·

Scheint alles gut auszusehen.

Setze mal bitte im Extension Builder für diese Tabelle das "aggregate root" Häkchen -> abspeichern -> Datenbank aktualisieren lassen über Menüpunkt "Adminwerkzeuge -> Installation" und erneut aufrufen. Eventuell Cahce leeren.

Achtung: Falls Du Änderungen am Controller, der Repository, oder am Fluid Template gemacht hast, speichere Sie Dir vorher seperat ab. Diese werden gelöscht.

martinibianco007 ·

Wenn ich is aggregated Root bei ShowcaseItem anhake (verstehe zwar nicht warum das soll ja nicht die root sein)
bekomme ich eine Ausgabe und zwar sieht die ca. wie folgt aus

Listing for ShowcaseItem
Itemtitel (nur Intern) category Beschreibungstext link
schaufensteritem 1 test 1 beschreibung 1 http://www.gmx.net Edit Delete
item 2 test 2 descr 2 http://www.xxx.at Edit Delete
New ShowcaseItem

mhhh sobald ich das Häckchen mit der Root wieder entferne is alles futsch.

@fan66766 hast meine PM gelesen?

beo6 ·

Du greifst anscheinend direkt auf die Showcase Items zu. Wo du jedoch im ersten Posting schreibst das es Showcases gibt (dein Root) das mehrere Showcase Items beinhalten soll.

Daher möchtest du doch sicher eher eine Liste aller Showcases in denen wiederrum alle Showcase Items angezeigt werden.

Dann ist wohl auch laut deinem späteren Posting die ext_localconf falsch. Hier wird immer die controller->action als Default verwendet was als erstes eingetragen ist. Bei dir also showcaseitem=>list

es sollte aber am Anfang wohl eher showcase=>list stehen.

im Template kannst du dann wenn die Verknüpfung im Model richtig eingerichtet ist mit {showcase.showcaseitem.0.beschreibungstext}
z.B. auf das erste showcaseitem in einem showcase zugreifen.

Hoffe ich habe alles richtig verstanden.

Unbekannter Benutzer ·

Was dir fehlt ist eine Möglichkeit im Plugin ein Showcase auszuwählen, dass dan angezeigt wird. Du könntest natürlich auch die Logik so bauen, dass das von der aktuellen Seite genommen wird. Ich denke dieser Punkt fehlt dir im Moment.

D.h. in deiner listAction() musst du irgendwie ein Showcase object bekommen und das dann nach seinen items fragen...

Um eine Auswahlmöglichkeit im Plugin einzubauen würde ich mal nach Beispielen für Flexforms und Extbase suchen, da gibts welche.

martinibianco007 ·

zu früh gefreut,

der extension builder kann mein modul nun nicht mehr laden.
es wird angezeigt nur bei klick darauf passiert nichts.

anders gefragt, welche dateien darf ich im code verändern ohne
die funktionalität des extensions builders zu zerstören?

habe die ext_localconf und default.html geändert kann das der grund sein?

kann mir jeman eine lektüre empfehlen sonst werde ich hier alt. :o