Výpis článků závislý na jejich typu
- Fujerko
- Člen | 4
Mám vyvořené následující tabulky (+další, které nejsou momentálně podstatné):
- clanek (ID, uvodniText, text, datum, cas, typ, zobrazit, uzivatel_id)
- zapas (ID, datum, cas, typ, sdp, shp, sdk, shk, sezona_id)
- pratelskyzapas (ID, domaci, hoste, zapas_id)
- ligovyzapas (ID, kolo, domaci_id, hoste_id, zapas_id)
- textovyclanek (ID, nadpis, clanek_id)
- vysledkovyclanek (ID, zapas_id, clanek_id)
Potřebuju vypsat na hlavní stránku všechny články. A to tak, že
vyhledám všechny články, poté rozliším o jaký typ článku se jedná
(typ = 0 ⇒ textovyclanek, typ = 1 ⇒
vysledkovyclanek). Pokud se jedná o textovyclanek, jednoduše
články vypíšu. V opačném případě (vysledkovyclanek) musím rozlišit
zda se jedná o pratelskyzapas nebo ligovyzapas (abych mohl vyhledat a vypsat
data z dané tabulky).
Zkoušel jsem toho hodně, ale pořád je problém s výpisem vysledkových
článků. Buď vypíše jeden (poslední) pratelskyzapas + jeden (poslední)
ligovyzapas nebo najde jen pár z nich, ale ne všechny.
Když jsem zkoumal „Nette lištu“, nevim proč tak se mi postupně
„násobil“ where např. SELECT * FROM pratelsky zapas WHERE(zapas_id =
?) AND (zapas_id = ?) potom je tedy jasné, že nemůže nic najít. Ale
v čem je chyba?
Momentálně mám něco takového:
//presenter
$this->template->xclanek = $this->clanek->findAll();
$this->template->xpratelak = $this->pratelskyzapas->findAll();
$this->template->xmistrak = $this->ligovyzapas->findAll();
//šablona - zjednodušeně
{foreach $xclanek as $clanek}
{if $clanek->typ == 0}
{foreach $clanek->related('textovyclanek', 'clanek_id') as $tclanek}
{$tclanek->nadpis}<br />
{$clanek->text|truncate: 300}
{/foreach}
{else}
{foreach $clanek->related('vysledkovyclanek', 'clanek_id') as $vclanek}
{if $vclanek->zapas->typ == 0}
{foreach $xpratelak->where('zapas_id', $vclanek->zapas_id) as $pratelak}
{$pratelak->domaci} – {$pratelak->hoste}<br />
{$clanek->text|truncate: 300}
{/foreach}
{else}
{foreach $xmistrak->where('zapas_id', $vclanek->zapas_id) as $mistrak}
{$mistrak->domaci->tym} – {$mistrak->hoste->tym}<br />
{$clanek->text|truncate: 300}
{/foreach}
{/if}
{/foreach}
{/if}
{/foreach}
- vvoody
- Člen | 910
Treba zmeniť
{foreach $xpratelak->where('zapas_id', $vclanek->zapas_id) as $pratelak}
na niečo ako
{foreach $vclanek->zapas->related('pratelskyzapas', 'zapas_id') as $pratelak}
To iste aj mistrak. Možno by bolo prehľadnejšie si ten jeden riadok fetchnut do premennej, namiesto toho iterovania nad selectionom ktorý by aj tak mal mať vždy len jeden výsledok.
- Fujerko
- Člen | 4
vvoody Nevím jak bych se ti mohl odvděčit:) Funguje to tak jak má, mockrát díky;)
{foreach $vclanek->zapas->related('pratelskyzapas', 'zapas_id') as $pratelak}
Nenapadlo mě udělat takovou „vazbu“: $vclanek->zapas->related.. asi proto je tento příspěvek v dané kategorii začátečníci:) Ještě jednou, díky moc!