Seite 1 von 1

loop mit Variable

Verfasst: 17.01.2008 21:33
von webazubi
Hallo.
Ich will mir über eine Funktione eine Variable ausgeben und mit dieser einen Loop definieren. MEINE_VARIABLE wird durch eine Funktion erzeugt, ist also dynamisch.
Geht das irgendwie? So jedenfalls nicht:

Code: Alles auswählen

<!-- BEGIN {MEINE_VARIABLE} -->
...
<!-- END {MEINE_VARIABLE} -->
ergibt:
Parse error: parse error, unexpected T_STRING in meinedatei.php(175) : eval()'d code on line 25

Verfasst: 17.01.2008 21:37
von Pyramide
[php:foreach]

Variablen müssen in PHP übrigens mit $ beginnen.

Verfasst: 17.01.2008 22:22
von mgutt
Das ist ein HTML Kommentar:
<!-- BEGIN {MEINE_VARIABLE} -->
Das kannst Du nicht zwischen <?php ?> einfügen, außer Du gibst es z.B. mit echo aus.

z.B. kannst Du mit foreach sowas machen:

Code: Alles auswählen

<?php
foreach ( $array as $element )
{
?>
<!-- BEGIN {<?= $element ?>} -->
<?php
}
?>
Ansonsten stell mal ein bisschen mehr Code zur Verfügung oder erklär was Du machen willst.

Gruß
Marc

Verfasst: 18.01.2008 01:38
von webazubi
mgutt hat geschrieben: Ansonsten stell mal ein bisschen mehr Code zur Verfügung oder erklär was Du machen willst.
Okay, versuche iche es mal kurz zu erklären.
Es geht um eine Termindatenbank. Eine MySQL-Abfrage gibt alle Termine sowie jeweils die Zusatzinformationen aus. Diese Zusatzinformationen selektiere ich anschließend mit php.
Beispiel: Alle Termine, wo die TERMIN_ART = 12 (für Konzert) ist, sollen an der enstprechenden Stelle meiner HTML-Template-Datei ausgegeben werden.
Also ganz normal:

Code: Alles auswählen

$template->assign_block_vars('konzerte', array(
'T_ANF_AM' => anfangsdatum,
'T_ANF_UM' => anfangszeit
 ...)
Jetzt kommt aber die nächste Veranstaltungskategorie, von mir aus Kino. Wieder mache ich wie oben assign_block_vars('kino', array( ...

In der entsprechenden Html-Datei muss nun ich alle Veranstaltungskategorien aufführen:

Code: Alles auswählen

<!-- IF konzerte --><!-- BEGIN konzerte --><!-- END konzerte -->
<!-- IF kino --><!-- BEGIN kino --><!-- END kino -->
Da ich viele Kategorien und Zusatzinfos habe, habe ich viel Code und hoffte, eine Schleife machen zu können, so dass ich nicht jede Veranstaltungskategorie einzeln in die Html-Datei schreiben muss.

Deine PHP-Lösung schaue ich mir mal näher an, vielleicht komme ich damit weiter. Danke.

Verfasst: 18.01.2008 12:57
von S2B
Wenn ich das richtig verstanden habe:

Code: Alles auswählen

foreach ($items as $item)
{
  $template->assign_block_vars('items', array(
    'TITLE' => $item['title'])
  );

  foreach ($items['subitems'] as $subitem)
  {
    $template->assign_block_vars('items.subitems', array(
      'TITLE' => $subitem['title'])
    );
  }
}
und im Template:

Code: Alles auswählen

<!-- BEGIN items -->
<h1>{items.TITLE}</h2>
<ul>
  <!-- BEGIN subitems -->
  <li>{items.subitems.TITLE}
  <!-- END subitems -->
</ul>
<!-- END items -->
Daraus solltest du dir einen entsprechenden Code basteln können. :wink:

Verfasst: 22.01.2008 01:30
von webazubi
S2B hat geschrieben: Daraus solltest du dir einen entsprechenden Code basteln können. :wink:
Danke. Das mit subloops hatte ich schon gelesen aber nicht hinbekommen.
Habe folgendes versucht und stoße auf das Problem, das unter der jeweiligen Terminart alle Termine, also auch die ohne die entsprechende Terminart, angezeigt werden.
Gruppiert werden soll nach dem Feld [Art].
Mein Array $termine :

Code: Alles auswählen

array(12)
 { 
 [0]=>  array(9) 
 { 
 ["titel"]=>  string(37) "Schmetterlinge" 
 ["sortierdatum"]=>  string(8) "20080123" 
 ["id"]=>  string(3) "268" 
 ["art"]=>  string(2) "21" 
 } 
 [1]=>  array(9) 
 { 
 ["titel"]=>  string(101) "Testtermin2" 
 ["sortierdatum"]=>  string(8) "20080124" 
 ["id"]=>  string(3) "505" 
 ["art"]=>  string(2) "23" 
 } 
 }
meine PHP:

Code: Alles auswählen

foreach ($termine as $item)
{
  $template->assign_block_vars('items', array(
    'ART' => $item['art'])
  ); 

foreach ($termine as $subitem)
  {
    $template->assign_block_vars('items.subitems', array(
      'TITLE' => $subitem['titel'])
    );
  }
}	
Meine html

Code: Alles auswählen

	<!-- BEGIN items -->
<h1>{items.ART}</h2>
<ul>
  <!-- BEGIN subitems -->
  <li>{items.subitems.TITLE}</li>
  <!-- END subitems -->
</ul>
<!-- END items -->
Mein Ergebnis:
21
* Schmetterlinge
* Testtermin2

23
* Schmetterlinge
* Testtermin2


Wie kann ich das gruppieren, so das unter der ART 21 nur der Termin Schmetterlinge und nicht die anderen (23) erscheint?

Verfasst: 22.01.2008 15:25
von mgutt
Bau Dein Array besser auf. Und zwar im Format:

Code: Alles auswählen

array('angabe von art' => sub_array())
dann macht das mit zwei foreachs auch mehr sinn.

Verfasst: 06.02.2008 04:06
von webazubi
mgutt hat geschrieben:Bau Dein Array besser auf. Und zwar im Format:

Code: Alles auswählen

array('angabe von art' => sub_array())
Kannst Du mir einen Tipp geben - ich kriege das nicht hin.

Bislang hatte ich nach der SQL-Abfrage und innerhalb einer for-Schleife mein Array mit array_push gefüllt.
Jetzt müsste ich also ein Unterarray erstellen? Also etwa sowas:

Code: Alles auswählen

array($art => array_push($termine,array
(
titel => $titel, 
sortierdatum => $anfam2,
...
	)
)
Leider klappt das nicht.