Hallo, Thomas,

Danke für's Teilen deines Code-Snippets! Definitiv etwas, das ich mir merken werde! Welche ViewHelper verwendest du da? Eigene?

Im deinem Beispiel allerdings wird nicht ein Objekt in ein Array verwandelt, wenn ich das richtig erkenne. Zusätzlich wäre es mir wichtig, dass sich diese Arbeitsschritte alle im Model (oder Repository? wo ist's besser?) befinden, weil ich keinen extra Controller anwerfen kann (zuviele andere Daten, Zerstückelung der View).

So eine Anforderung hast du wohl nicht zufällig auch schon mal gehabt??

Jedenfalls danke! Dein Snippet schau ich mir mal ganz unäbhängig davon an. (Kannst du mir vielleicht noch etwas zu den ViewHelpern verraten? Was macht tnu:calendarDay? Das Attribut "add"?)

Beste Grüße!
Robert

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">&nbsp;</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


_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an