[TYPO3-german] Extbase: Model mit eigener Methode -> wie von array nach objext umwandeln?
Thomas Nussbaumer
typo3 at thomasnu.ch
Sat Sep 7 23:57:54 CEST 2013
Hi Robert
Für einen Kalender baute ich ein Array $weeks auf, das als Extbase
Objekt verwendet werden kann:
Controller:
$weeks = array();
for ($i = 0; $i < 3; $i++) {
$m = $month + $i;
if ($m > 12) {
$m -= 12;
if ($y == $year) $y++;
}
$first = mktime(0, 0, 0, $m, 1, $y);
$w = date('w', $first);
$monday = $first - 86400 * (($w == 0) ? 6 : $w - 1);
while (date('Ym', $monday) <= 100 * $y + $m) {
$weeks[] = array('monday' => $monday, 'month' => $m, 'first' => $first);
$monday += 7 * 86400;
}
}
$this->view->assign('weeks', $weeks);
View:
<f:groupedFor each="{weeks}" as="weekOfThisFirst" groupBy="first"
groupKey="first">
<tr>
<td width="160" align="right" bgcolor="#FFDDBB"
colspan="8"><b><tnu:term format="M Y">{first}</tnu:term></b></td>
</tr>
<f:for each="{weekOfThisFirst}" as="week" iteration="iter">
<f:if condition="{iter.isFirst}">
<tr>
<td width="13" class="mini" bgcolor="#EEEECC"> </td>
<f:for each="{0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6}" as="wday">
<td width="21" class="mini" align="right" bgcolor="#EEEECC"><font
color="#800000">
<tnu:term format="D2"><tnu:calendarDay
add="{wday}">{week.monday}</tnu:calendarDay></tnu:term></font></td>
</f:for>
</tr>
</f:if>
<tr>
<td width="13" align="right" class="mini" bgcolor="#EEEECC"><font
color="#800000"><tnu:term format="W">{week.monday}</tnu:term></font></td>
<tnu:calendarDay add="0" month="{week.month}"
links="{dayLinks}">{week.monday}</tnu:calendarDay>
<tnu:calendarDay add="1" month="{week.month}"
links="{dayLinks}">{week.monday}</tnu:calendarDay>
<tnu:calendarDay add="2" month="{week.month}"
links="{dayLinks}">{week.monday}</tnu:calendarDay>
<tnu:calendarDay add="3" month="{week.month}"
links="{dayLinks}">{week.monday}</tnu:calendarDay>
<tnu:calendarDay add="4" month="{week.month}"
links="{dayLinks}">{week.monday}</tnu:calendarDay>
<tnu:calendarDay add="5" month="{week.month}"
links="{dayLinks}">{week.monday}</tnu:calendarDay>
<tnu:calendarDay add="6" month="{week.month}"
links="{dayLinks}">{week.monday}</tnu:calendarDay>
</tr>
</f:for>
</f:groupedFor>
Ich hoffe du hast mit diesen Ausschnitten einige Anregungen für die
Lösung deines Problems.
LG Thomas
Am 07.09.2013 19:22, schrieb Robert Wildling:
> Hi, liebe ExtbaselerInnen,
>
> In meiner kleinen Event-Extension sieht es so aus, dass innerhalb eines
> Events (zB ein Theaterfestival) mehrere Veranstaltungen (theatre
> perfomances) sein können. Jede Performance wiederum kann aus einer
> Aneinanderreihung einzelner kleiner Stücke bestehen. Das ganze ist mit
> m:m-Realtionen gelöst:
>
> Event <-m:m-> Performaces <-m:m-> Pieces
>
> Schematische Darstellung des gewünschten Zielergebnisses:
>
> Event
> - Performance 2
> -- piece 1
> -- piece 2
> -- piece 3
> - Performance 2
> -- piece 1
> -- piece 2
> -- piece 3
>
> Nun sollen auf einer separaten Seite *alle* "pieces" angezeigt werden,
> möglichst in alphabetischer Reigenfolge (die Performances sollen *nicht*
> angezeigt werden):
>
> Event
> - piece 1
> - piece 2
> - piece 3
> - piece 4
> - piece 5
> - piece 6
>
> Dazu versuche ich nun, im Event-Model eine Methode einzubauen, die
> getPieces heißt und die aus allen zu diesem Event gehörnenden
> Performaces alle Stücke lesen und sortieren soll. Da häng ich jetzt
> aber: denn soweit ich weiß, muss das Objekt zunächst mal in ein Array
> umgewandelt, dann durch die Array-Funktionen geschickt und schließlich
> wieder in ein Objekt umgewandelt werden. Ich weiß nicht, wie das in
> Extbase 6.1 gehen soll. Bisher habe ich nur das - die Kommentare
> beschreiben meine Probleme:
>
> class Events extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
> /**
> * Performances that take place within this event
> * @var
> \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Rowild\Theaterevents\Domain\Model\Performances>
>
> */
> protected $performances;
>
> /**
> * pieces: get all the pieces from all the performances
> * @var
> \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Rowild\Theaterevents\Domain\Model\Pieces>
>
> */
> protected $pieces;
>
> [...]
> protected function initStorageObjects() {
> $this->performaces = new
> \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
> // muss hier für pieces noch ein eigenes storage initiiert
> werden??
> }
>
> /**
> * Returns the performaces
> * @return
> \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Rowild\Theaterevents\Domain\Model\Concerts>
> $performacesafter
> */
> public function getPerformaces() {
> return $this->performaces;
> }
>
> /**
> * Returns the pieces
> *
> * @ return
> \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Rowild\Theaterevents\Domain\Model\Compositions>
> $premieres
> */
> public function getPieces() {
> $pieces = $this->getPieces();
> // $pieces = $this->getPieces()->toArray(); // ? toArray scheint
> es nicht mehr zu geben in Extbase 6.*
>
> foreach ($pieces as $piece) {
> var_dump(get_object_vars($piece)); // spuckt nichts aus
> $array[] = json_decode(json_encode($piece), true); // detto
>
> //$ua[] = $this['pieces']['title']; // das ist der
> Array-Ansatz, der bei Objekten aber nicht funktioniert
> // TODO: Doppelte entfernen.
> }
> //print_r($array);
> return $pieces;
> }
> }
>
>
> Wie muss ich denn diese Funktion getPieces gestalten, um zunöchst ein
> Array und dann wieder ein Objekt zu bekommen?
> Ich bitte um Tipps, Links, etc!
>
> Vielen Dank!
> Beste Grüße
> Robert
More information about the TYPO3-german
mailing list