---
title: "subpart in subpart"
url: "https://www.typo3.net/d/112055-subpart-in-subpart"
source: "typo3.net"
tags: ["Extensions","Entwicklung","Frage"]
created: "2012-09-10"
last_reply: "2012-10-01"
replies: 1
solved: false
page: 1
pages: 1
lang: "de"
---

# subpart in subpart

Extensions › Entwicklung · 1 Antwort · gestartet 2012-09-10

## Eröffnungsbeitrag

**Philipp88** · 2012-09-10 · [Beitrag #1](https://www.typo3.net/d/112055-subpart-in-subpart/1)

Hallo,
ich stehe vor einem Problem bei einer Extension. Ich will eine Art tabellarischen Terminkalender machen. Wenn zum Beispiel Januar keine Termine enthält, soll er auch nicht als Überschrift angezeigt werden.

Mein Template sieht so aus:

```html
<!--###EVENT_CALENDAR### begin-->
<div id="ecalendar">
  <table>  
    <!--###MONTHS###-->
    <tr>
      <th class="eheader" colspan="4">###MONTH###</th>
    </tr>
    <tr>
      <td>Datum</td>
      <td>Veranstaltung</td>
      <td>Veranstaltungsort</td>
      <td>Veranstalter</td>
    </tr>
    <!--###ROW###-->
    <tr>
      <td>###STARTDATE###<br />-<br />###ENDDATE###</td>
      <td>###TITLE###</td>
      <td>###LOCATION###</td>
      <td>###NAME###</td>
    </tr>
    <!--###ROW###-->
    <!--###MONTHS###-->
  </table>
</div>
<!--###EVENT_CALENDAR### end-->
```

Ein Teil des php-Codes sieht so aus:

```php
$subpart = $this->cObj->getSubpart($this->template, "###EVENT_CALENDAR###");
            $singlerow_month = $this->cObj->getSubpart($subpart, "###MONTHS###");
            $singlerow = $this->cObj->getSubpart($subpart_month, "###ROW###");

[...]

if(count($january) > 0) {
              $markerArray["###MONTH###"] .= "Januar";
              $month = $this->cObj->substituteMarkerArrayCached($singlerow_month, $markerArray);
              $subpartArray_month = $month;
                
              for($i = 0; $i < count($january); $i++) {
                $daten = explode("; ", $january[$i]);
                $uid = $daten[0];
                $startdate = $daten[1];
                $enddate = $daten[2];
                $title = $daten[3];
                $location = $daten[4];
                $web = $daten[5];          
                
                
                $markerArray["###STARTDATE###"] = $startdate;
                $markerArray["###ENDDATE###"] = $enddate;
                $markerArray["###TITLE###"] = $title;
                $markerArray["###LOCATION###"] = $location;
                $markerArray["###NAME###"] = $web;
                
                $list .= $this->cObj->substituteMarkerArrayCached($singlerow, $markerArray);
                
              }
            }
            $subpartArray["###MONTHS###"] = $month;
            $subpartArray["###ROW###"] = $list;
            $content = $this->cObj->substituteMarkerArrayCached($subpart, $markerArray, $subpartArray);
          }
```

Leider funktioniert es nicht wie es sollte.
Es werden alle Monate in den marker ###MONTH### nacheinander hineingeschrieben, ohne dazwischen die restlichen marker zu setzen.
Ich hoffe ihr versteht was ich meine.
Vielen Dank schonmal im Vorraus.
philipp

## Antworten

### [#2](https://www.typo3.net/d/112055-subpart-in-subpart/2) · froemken · 2012-10-01

Boah...ich habe ewig nicht mehr mit diesem Marker Gedöns gearbeitet. Das Problem ist, dass Du mit verschachtelten Subparts arbeitest und erwartest, dass dieses substituteMarkerArrayCached das schon irgendwie selbst feststellt. nene...das klappt so nicht. Das klappt nur, wenn Deine SubParts parallel zueinander sind.
Bei verschachtelten Subparts muss jede Verschachtelung selbst erstmal verarbeitet werden. Ohne es zu testen würde ich folgendes vorschlagen:

Ändere diese 3 Zeilen:

```php
$subpartArray["###MONTHS###"] = $month;
$subpartArray["###ROW###"] = $list;
$content = $this->cObj->substituteMarkerArrayCached($subpart, $markerArray, $subpartArray);
```

mal in diese:

```php
$month = $this->cObj->substituteMarkerArrayCached($month, array(), array('###ROW###' => $list));
$content = $this->cObj->substituteMarkerArrayCached($subpart, array(), array('###MONTHS###' => $month));
```

bzw. so wäre es noch besser:

```php
$month = $this->cObj->substituteSubpart($month, '###ROW###', $list));
$content = $this->cObj->substituteSubpart($subpart, '###MONTHS###', $month));
```

PS: Grundsätzlich rate ich von diesem substituteMarkerArrayCached ab. Das Teil ist ziemlich speicherhungrig und kann bei einer bestimmten Anzahl von Loops und Daten Deine DB zumüllen: <http://www.dmitry-dulepov.com/2008/07/why-subtitutemarkerarraycached-is-bad.html>

Stefan

---

Quelle: „subpart in subpart“, typo3.net, https://www.typo3.net/d/112055-subpart-in-subpart
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
