Zum Inhalt springen

subpart in subpart

Erstellt am 10. September 2012 · 1 Antwort · letzte Antwort am 1. Oktober 2012

Tags: Frage

Philipp88 ·

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:

<!--###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:

$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

froemken ·

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:

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

mal in diese:

$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:

$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