Hallo Freunde,
ich bin gerade dabei meine erste Extension mit ExtBase und Fluid zu entwickeln und stoße auf Probleme. Ich komme ohne zu fragen einfach nicht weiter. Folgende Problemstellung (ist glaub ich recht simpel)
Ich habe mir im Ext-builder drei models erstellt: das Root ist Movie, das zweite Model ist Audiolink und das dritte Videofile. Die beiden letzten stehen in einer 1:n Bez. zum Movie. Also jeder Movie kann mehrere Audiolinks (Externe Links gespeichert als string) und mehrere Videofiles (gespeichert auf dem Server) enthalten. Der Name der Relationen ist tatsächlich audiolink und videofile.
ich möchte nun in keine getrennte list und show action haben, sondern in der List action, wo alle Movies gelistet sind, soll unter jedem movie auch gleich alle dazu gespeicherten audiolinks und Videofiles angegeben werden. erstere als string und letzteres als Link zum hochgeladenen Videofile im uploadfolder.
Und ich komme mit den Bezeichnern völlig durcheinander. So sieht mein Controller aus (immer noch Standard wie von Extbase eingerichtet):
/**
* action list
*
* @return void
*/
public function listAction() {
$movies = $this->movieRepository->findAll();
$this->view->assign('movies', $movies);
}
und mein list.html
<f:for each="{movies}" as="movie">
<div class="movie">
<span>{movie.title}</span>
<span> {movie.year}</span>
<span><f:render partial="Movie/Properties" arguments="{movie:movie}" /></span>
<span>{movie.description}</span>
</div>
</f:for>
(Das dritte span soll bewirken dass die properties.html ausgegeben wird, was auch funktioniert)
und hier wird noch die propertis.html bzw. folgender entscheidender Teil gebraucht:
<f:for each="{movie.audiolink}" as="alink">
<td>
{audiolink.audioLink}
</td>
</f:for>
Keine Ahnung ob das eine ausreichende Beschreibung meines Problems ist. ich weiß an ich muss den Controller anpassen und die Fluid templates. Aber ich habe so GARKEINEN Plan wie.
Liebe Grüße, Falk
Änderung: ich habe zur besseren Übersicht die Relationen umbenannt in videorel und audiorel.
Gibt es im Model der Movies Getter und Setter für Audio und Videofile und sind diese beiden als ObjectStorage angelegt? Wichtig ist für Extbase auch, dass die Datenbankfelder und insbesondere die Schlüsselfelder richtig bezeichnet sind, damit das Repository die zugehörigen Datensätze finden kann.
Hi,
ja die getter und Setter gibt es würd ich behaupten:
/**
* Returns the videorel
*
* @return Tx_Extbase_Persistence_ObjectStorage<Tx_OswaldPortfolio_Domain_Model_Video> videorel
*/
public function getVideorel() {
return $this->videorel;
}
/**
* Sets the videorel
*
* @param Tx_Extbase_Persistence_ObjectStorage<Tx_OswaldPortfolio_Domain_Model_Video> $videorel
* @return Tx_Extbase_Persistence_ObjectStorage<Tx_OswaldPortfolio_Domain_Model_Video> videorel
*/
public function setVideorel(Tx_Extbase_Persistence_ObjectStorage $videorel) {
$this->videorel = $videorel;
}
/**
* Adds a Audio
*
* @param Tx_OswaldPortfolio_Domain_Model_Audio $audiorel
* @return Tx_Extbase_Persistence_ObjectStorage<Tx_OswaldPortfolio_Domain_Model_Audio> audiorel
*/
public function addAudiorel(Tx_OswaldPortfolio_Domain_Model_Audio $audiorel) {
$this->audiorel->attach($audiorel);
}
/**
* Removes a Audio
*
* @param Tx_OswaldPortfolio_Domain_Model_Audio $audiorelToRemove The Audio to be removed
* @return Tx_Extbase_Persistence_ObjectStorage<Tx_OswaldPortfolio_Domain_Model_Audio> audiorel
*/
public function removeAudiorel(Tx_OswaldPortfolio_Domain_Model_Audio $audiorelToRemove) {
$this->audiorel->detach($audiorelToRemove);
}
/**
* Returns the audiorel
*
* @return Tx_Extbase_Persistence_ObjectStorage<Tx_OswaldPortfolio_Domain_Model_Audio> audiorel
*/
public function getAudiorel() {
return $this->audiorel;
}
/**
* Sets the audiorel
*
* @param Tx_Extbase_Persistence_ObjectStorage<Tx_OswaldPortfolio_Domain_Model_Audio> $audiorel
* @return Tx_Extbase_Persistence_ObjectStorage<Tx_OswaldPortfolio_Domain_Model_Audio> audiorel
*/
public function setAudiorel(Tx_Extbase_Persistence_ObjectStorage $audiorel) {
$this->audiorel = $audiorel;
}
}
Die Bezeichnung der DB Felder scheint mir soweit auch in Ordnung.
Für mich tut sich eher die Frage auf wie ich die Fluid-templates anpasse um die Ausgabe so zu bekommen wie ich es gern hätte. Die Standard list und show die von Extbase angelegt wird, funktioniert ja.
Hi! Also meiner Meinung nach ist deine List-Datei so in Ordnung.
Wenn deine properties.html schon korrekt eingebunden ist und angezeigt wird, müsste folgende Anpassung eigentlich funktionieren:
propertis.html:
<f:for each="{movie.Audiorel}" as="alink">
<td>{alink.audioLink}</td>
</f:for>
Wichtig ist, dass du in dem <td> auf "alink" zugreifst (was du bei "as" in der foreach-Schleife definiert hast) und nicht auf "Audiorel".
Für die Videos sollte es dann genau so laufen (eigenes Partial-Template + Einbindung des Partials in deiner list.html)
Oh, es muss natürlich "movie.audiorel" heißen und nicht "movie.Audiorel" (das a wird klein geschrieben)...
Hey, besten Dank dafür. So ein doofer Denkfehler.aber ok, das funktioniert jetzt. 🙂
Auch beim Video funktioniert das, allerdings ist die Ausgabe des Videos falsch.
ich lade eine Datei meinVideo.ogv hoch. Da diese schon vorhanden war, setzt er eine Nummerierung hinten dran. Dann wird da meinVideo_01.ogv. das ist nicht so gut. ich bräuchte richtig den Dateinamen. ich möchte das video dann in einem html5 videotag abspielen. Das würde ich dann mit jQuery realisieren denke ich.
Es gibt wie ich sehen konnte auch keinen video viewhelper. oder doch?