Mam taki kod (w widoku):
{foreach=$godzinyWizyt; godzina; minutyWizyt} <tr> <th>{@godzina}</th> {foreach=@minutyWizyt; minuta; czyDostepne} <td {if not @czyDostepne}class="zajete"{/if}> {if @czyDostepne}<input type="radio" name="godzina" value="{@godzina}:{@minuta}" />{/if} </td> {/foreach} </tr> {/foreach}
(te klamerki to szablon OPT)
Otóż potrzebuję teraz dopisać kod (w kontrolerze), który sprawi, że powyższy kod wyświetli mi na stronie w przeglądarce tabelkę:
pierwsza kolumna: to godziny wizyt (wartości pobierane z bazy poprzez odpowiednie zapytanie);
kolejne kolumny: to minuty wizyt.
Jeśli w danej godzinie lekarz może przyjmować co 15min, to tych kolumn "minuty wizyt" będzie 4 (bo 60/15=4).
Opisowo: jest sobie lekarz, który dzisiaj przyjmuje od 10 do 15 (czyli ma być 5 wierszy - 10, 11, 12, 13, 14). Wizyta u niego trwa 15min (więc nagłówki kolumn przyjmują wartości 0-15, 15-30, 30-45, 45-60).
Ostatecznie powstanie tabelka 5x4, czyli posiadająca 20 komórek.
Wartość w drugim foreachu czyDostepne przekazuje informację, czy dana godzina jest wolna (wtedy rysuje radiobuttona i daje możliwość rejestracji wizyty), natomiast w przeciwnym wypadku kropki nie ma (zastosowany jest styl zmieniający tło komórki na czerwony).
Kod, który mam napisać trzeba ogarnąć arrayami.
Poniższy kod (wartości wpisane na sztywno) dają zamierzony rezultat:
);
Teraz muszę zrobić to dynamicznie, wartości mają być pobierane zgodnie z kilkoma czynnikami, np. od/do której lekarz dzisiaj przyjmuje ($harm_godz_od/do), ile trwa wizyta ($minuty), czy dana godzina (komórka z godziną) znajduje się w harmonogramie lekarza (funkcja czyWPrzedziale(), np. czyWPrzedziale(10:30,10:45) zwraca true, a czyWPrzedziale(16:00,16:15) zwraca false).
for ($godzina = $harm_godz_od; $godzina < $harm_godz_do; $godzina++) { for ($minuta = 0; $minuta <= 60 - $minuty; $minuta = $minuta + $minuty) { $koniecWizyty = $minuta + $minuty; $czyDostepne = false; if ($harmonogramLekarza->czyWPrzedziale($godzina . ':' . $minuta, $godzina . ':' . $koniecWizyty)) { $czyDostepne => true)); } else { $czyDostepne => false)); } } }
Powyższy kod jest nieprawidłowy: wyświetla w tabelce tylko jedną komórkę (ostatnią, czyli z wartością "14:45").
Jak zrobić, żeby wyświetlone zostały wszystkie komórki (w tym przypadku 20)?