Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]+OPT foreach
Forum PHP.pl > Forum > Przedszkole
Malas
Ok, w tabeli match mam kolumny: id,name,date,fixture
Chodzi o to, że za pomocą OPT chcę sobie wyświetlić terminarz, który wyglądałby mniej więcej tak:
Kolejka nr 1:
zespol1 vs zespol2
zespol3 vs zespol4
Kolejka nr 2
zespol3 vs zespol2 itd..
Mniej więcej do wiem jak to mam zrobić. Pozostaje mi w kodzie szablonu(tym drugim), użyć pętli foreach, tylko zbytnio nie wiem jak w opt się pętli używa i prosiłbym o wasza pomoc.
  1. <?php
  2. // Kolejki
  3. $fixtures = array();
  4.  
  5. foreach($db->query('SELECT * FROM `match` ORDER BY `fixture` ASC LIMIT 10', PDO::FETCH_ASSOC) as $row)
  6. {
  7.    // Istnieje?
  8.    if(!isset($fixtures[$row['fixture']]))
  9.    {
  10.        $fixtures[$row['fixture']] = array('fixture' => $row['fixture'], 'matches' => array());
  11.    }
  12.  
  13.    // Dodaj mecz
  14.    $fixtures[$row['fixture']]['matches'][] = array
  15.    (
  16.        'name' => $row['name'],
  17.        'date' => $row['date']
  18.    );
  19. }
  20.  
  21.  
  22. // Przypisujemy
  23. $tpl->assign('fixtures', $fixtures);
  24.  
  25. // Parsujemy liste
  26. $tpl->parse('match_index.tpl');
  27. ?>


Cytat
{section=fixtures}
<h1>Kolejka nr {$fixtures.fixture}</h1>
{section=fixtures.matches}
{$fixtures.matches.name} {$fixtures.matches.date}<br />
{/section}
{/section}


Nikt nie umie pomóc? sad.gif
megawebmaster
Niestety, musisz poczekać na Zyx'a - on Ci zapewne pomoże. Ja niestety nie bardzo znam OPT'a 1 (staram się testować OPT2), dlatego niewiele pod tym względem pomogę. Zobacz jednak do dokumentacji (dostępna na stronie www.invenzzia.org) jak zrobić drzewo w OPT1.
Malas
http://static.invenzzia.org/docs/opt/1_1/b...ns.foreach.html
znalazłem tylko to, ale teraz z kolei nie wiem jak to ma wyglądać(kod)
Cytat
{section=fixtures.matches}? {$fixtures.matches.name} {$fixtures.matches.date}<br />? {/section}

to muszę mieć w pętli.

może ktoś jednak zna rozwiązanie?
Zyx
To, co stosujesz, to jest sekcja, a nie foreach (nawet jeśli od strony generowanego kodu PHP jest to to samo smile.gif). Dałeś nieprawidłową nazwę sekcji zagnieżdżonej - wystarczy samo słowo "matches", tj. uzyskujesz:

Kod
{section=fixtures}
<h1>Kolejka nr {$fixtures.fixture}</h1>
{section=matches}
{$matches.name} {$matches.date}<br />
{/section}
{/section}


OPT łączy wszystko automatycznie. Pamiętaj jeszcze, że skoro zapisałeś dane kolejek i ustawek do jednej wielkiej tablicy, to musisz mieć wybrany format OPT_SECTION_SINGLE: w konfiguracji musi być $tpl->sectionStructure = OPT_SECTION_SINGLE. Niestety, ustawienie to dotyczy wszystkich sekcji i jeśli gdzieś indziej masz jeszcze sekcje zagnieżdżone przyjmujące dane rozbite na osobne tablice, to musisz się jednoznacznie określić: albo tak, albo tak.

Wersja kodu PHP generująca osobną tablicę dla każdej sekcji (domyślne ustawienie):

  1. <?php
  2. $matches = array();
  3. foreach($db->query('SELECT * FROM `match` ORDER BY `fixture` ASC LIMIT 10', PDO::FETCH_ASSOC) as $row)
  4. {
  5.   // Istnieje?
  6.   if(!isset($fixtures[$row['fixture']]))
  7.   {
  8.       $fixtures[$row['fixture']] = array('fixture' => $row['fixture']);
  9.   }
  10.  
  11.   // Dodaj mecz
  12.   if(!isset($matches[$row['fixture']]))
  13.   {
  14.      $matches[$row['fixture']] = array();
  15.   }
  16.   $matches[$row['fixture']][] = array
  17.   (
  18.       'name' => $row['name'],
  19.       'date' => $row['date']
  20.   );
  21. }
  22. $tpl->assign('fixtures', $fixtures);
  23. $tpl->assign('matches', $matches);
  24. ?>


Ogólnie to jednak zachęcam do przesiadki na OPT 2.x, jeśli jest to możliwe.

PS. Odpisałbym szybciej, gdybyś umieścił temat tam, gdzie jest jego miejsce, tj. Gotowe rozwiązania -> Systemy szablonów. W "Przedszkolu" zbyt szybko migają tematy, by je w rozsądnym czasie zauważyć smile.gif.
Malas
Wielkie dzięki za pomoc, działa oczywiście;)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.