více metod vykreslenych na jedné stránce
- kolaloka
- Člen | 69
Chápu jednoduchý systém v nette – v presenteru vysledky.Presenter mám metodu(funkci) renderListopad() ktera udela dotaz na databazi a přes listopad.latte vykreslí výsledek listopadoveho souctu na cestě /mujweb/vysledky/listopad.
Ale jak to udělat, když chci na strance /mujweb/vysledky/poslednitrimesice
vidět výsledek metod:
renderZari()
renderRijen()
renderListopad()
Poradí někdo?
- kolaloka
- Člen | 69
O to vůbec nejde. Já mám data v databázi. Každá ta metoda je jeden dotaz. Mým cílem je vidět kolik toho mám za minulý měsíc oddělené čárou od toho, kolik toho mám za tento měsíc a to na jedné stránce. Horní půlka stránky aktuální data, dolní půlka stránky fakturační data a pod tím pod čarou ještě pro srovnání předchozí měsíc.
- ZahorskyJan
- Člen | 59
@kolaloka místo renderListopad udělej metodu renderMesic a v parametru si predavej který měsíc to má být. To je jeden render = dělá jednu věc (vykresluje jeden měsíc). A pak druhá metoda renderPosledniTriMesice a tam do latte pošleš data za poslední 3 měsíce. To je takový nástřel jakým směrem jít.
Edit: a pokud má v šabloně být vypsaných víc věcí, různé měsíce nebo prostě víc souvisejících dát, tak ti nic nebrání v té metodě render do latte šablony nasypat víc dát a ty potom zobrazit jak potřebuješ.
Editoval ZahorskyJan (4. 12. 2016 13:49)
- kolaloka
- Člen | 69
NO, jsem z toho jelen, vůbec nechápu, jak to myslíš. Ještě jednou to
zkusím definovat. Jak mám udělat, abych na jedné stránce viděl data za
listopad i říjen 2016?
když si napíšu renerMěsíc() a parametr mu předám třeba 11, tak mi to
v laté vykreslí jen renderMěsíc(11). Když dám dotaz na tři měsíce,
vykreslí to dohromady tři měsíce.
Jak mám udělat, abych mohl na jedno laté hodit dva dotazy? Díky.
- Mysteria
- Člen | 797
Napiš čeho přesně chceš dosáhnout, protože jinak se bude řešit to, když budeš chtít na jedné stránce mít zobrazen vždy jenom jeden měsíc a na jedné speciální poslední tři měsíce a jinak se bude řešit to, když budeš chtít, aby si třeba lidi sami mohli naklikat, jaké konkrétní měsíce na dané stránce uvidí a už je to jedno, jestli to budou poslední tři nebo třeba leden, červen a prosinec.
- kolaloka
- Člen | 69
jasně, hodně to zjednoduším a humpolácky to popíšu úplně přesně:
1. data za aktuální měsíc vypsaná po jednom na řádky
pak čáru
2. data za minulý měsíc sečtená dohromady (podklad pro fakturu)
pak čáru
3. data za minulý měsíc vypsaná po jednom (tisknu jako přílohu
faktury)
asi takto:
výpis aktuálně:
11. listopad 10 hodin práce 100 Kč
5. listopad 2 hodiny práce 20 Kč
......
součet za říjen: 15 hodin 150 Kč
......
výpis říjen:
13. října 10 hodin práce 100 Kč
8. října 5 hodin práce 50 Kč
Tak nějak žiju v domění, že by to tři funkce render měly vykreslit do jednoho late, ale nevím, jak toho docílit.
Editoval kolaloka (6. 12. 2016 0:43)
- Mysteria
- Člen | 797
Co třeba takhle?
public function renderLastThreeMonths() {
$this->template->firstMonth = // Dotaz do DB, který ti vybere data za aktuální měsíc
$this->template->firstMonthGroup = // Dotaz do DB, který ti vybere součet hodin a Kč za aktuální měsíc
$this->template->secondMonth = // Dotaz do DB, který ti vybere data za minulý měsíc
$this->template->secondMonthGroup = // Dotaz do DB, který ti vybere součet hodin a Kč za minulý měsíc
$this->template->thirdMonth = // Dotaz do DB, který ti vybere data za předminulý měsíc
$this->template->thirdMonthGroup = // Dotaz do DB, který ti vybere součet hodin a Kč za předminulý měsíc
}
No a v šabloně už každou z těch proměnných projedeš foreachem a vypíšeš ve formátu, jaký potřebuješ.
- Šaman
- Člen | 2666
Možností je víc.
- Použít komponenty. Je to asi nejčistější, ale taky náročnější způsob a na takovou drobnost možná overkill.
- Předat množství proměnných z presenteru do šablony, jak psal Mysteria.
- Já bych si v modelu vytvořil entitu (objekt)
Vysledky
, který bude obsahovat metoduspoctiMesic($mesic, $rok)
a tu bych předal do šablony. A taky bych si to pojmenoval anglicky, ale na funkci to nemá vliv…
<?php
# presenter - render metoda
$vysledky = … # vytvořit a nastavit, nebo získat z kontejneru službu počítající výsledky
$this->template->vysledky = $vysledky;
?>
<b>Výsledky za listopad 2016:</b> {$vysledky->spoctiMesic(11, 2016)}
<b>Výsledky za tento měsíc:</b> {$vysledky->spoctiMesic(date('n'), date('Y'))}
Výhoda je, že pak pro přidání dalšího měsíce stačí upravit šablonu a nemusíš sahat do odladěného presenteru. Není problém si jen v šabloně udělat přehled třeba za posledních 12 měsíců.
Editoval Šaman (6. 12. 2016 14:48)
- kolaloka
- Člen | 69
Ano ano, tato možnost mne taky napadla, když jsem viděl, co poslal Mysteria, proto jsem psal o modelu a renderingu. Každopádně děkuju, žes mi to předepsal, protože mě to vše jako začátečníkovi trvá :-D
Já totiž nejdřív přepisuju do nette tu nejjednodušší appku, co mám (ve špagetikódu) a čtyři další jsou výrazně složitější, tak tam to takhle rozhodím.