Malý problém s podmínkou v šabloně – file_exist
- Rellik
- Člen | 104
Zdravím vespolek. Tak sem opět zde. Jak se tak nořím do hloubi nette a
latte, tak narážím na různé zádrhely, kterými teď jako nováček plním
toho fórum. Doufám, že to nikomu moc nevadí. Ale od toho fórum je, že ano?
:)
Pokouším se vytvořit fotogalerii s administrací (vytvoření galerie,
přidaní fotek, popisky… to už mám hotové) Teď sem se vrhl na veřejnou
část, kde bych chtěl na stránce výpis jednotlivých galerií a u každé
galerie náhodný obrázek z patřičné galerie. To bych jakž takž
vytvořil, jen tam mám jeden nedostatek. Mám pro tuto galerii 2 tabulky
v databázi, v jedné jsou názvy galerií a složka, ve které ta galerie je,
ve druhé nám opět záznam o složce, názvy jednotlivých fotek a jejich
popis. Pro tento výpis potřebuju pomocí tabulky „galerie“ vypsat fotky
z tabulky „foto“. Tak aby se u každého odkazu na patřičnou galerii
zobrazil náhodný obrázek. špatně se to vysvětluje. Na příkladu to snad
bude jasnější:
{foreach $galerie as $gal} {*procházení tabulky galerie*}
{var $br++}
<td>
{foreach $fotky as $foto} {*procházení tabulky foto*}
{*s následujícím řádkem mám problém kdyby fungoval, tak je to všechno ok*}
{if file_exists('./galery/{$gal->slozka}/nahledy/{$foto->fotka}')}
<img src="./galery/{$gal->slozka}/nahledy/{$foto->fotka}" alt="{$foto->fotka}" />
{else}
<strong>V galerii není zatím žádná fotka</strong>
{/if}
{*na následujícím řádku je pouze test jestli se fotka zobrazí - ano - pokud v dané galerii existuje*}
<img src="./galery/{$gal->slozka}/nahledy/{$foto->fotka}" alt="{$foto->fotka}" />
{/foreach}
<a href="{link FotoWiew:default folder=>$gal->slozka}">{$gal->galerie}</a>
</td>
{if $br%4>"2"}
</tr><tr>
{/if}
{/foreach}
náhodný obrázek funguje taky..
presenter:
$this->template->galerie = $this->model->getGalerie()
->order('id ASC')->where('verejna', '1'); // to verejna je výběr pouze povolených galerií 1,0
$this->template->fotky = $this->model->getFoto()
->order('rand()')->limit(1);
v modelu se pouze přiřazuje tabulka:
public function getGalerie()
{
return $this->database->table('galerie');
}
public function getFoto()
{
return $this->database->table('foto');
}
Zkoušel sem i spojení tabulek podle dokumentace, ale to mi nefungovalo,
nebo to neumím použít..
Tak kdyby mi někdo poradil s tím řádkem, kde je kontrola existece souboru,
byl bych moc vděčný..
Díky za odpověď..
- Rellik
- Člen | 104
No dyť jo. Je tam celá cesta k souboru. Jen to latte makro se nepřevede
jak má.. Převede se pouze {$gal->slozka} – usuzuju podle barevného
zvýraznění v editoru:
http://www.2i.cz/8fd13e14c7
- 22
- Člen | 1478
@Rellik: disková cesta nemůže být nikdy relativní, to ti nebude v životě fungovat. Musíš si do šablony nějak poslat i absolutní cestu k souboru, něco jako:
$this->template->absImagePath = $this->context->parameters['wwwDir'] . '/path_to_images';
//nebo
$this->template->absImagePath = $this->context->expand('%wwwDir%/path_to_images');
a v šabloně:
{if file_exists($absImagePath. '/nahledy/' .$foto->fotka)}
Editoval 22 (13. 1. 2012 19:35)
- Rellik
- Člen | 104
22 napsal(a):
@Rellik: disková cesta nemůže být nikdy relativní, to ti nebude v životě fungovat. Musíš si do šablony nějak poslat i absolutní cestu k souboru, něco jako:
$this->template->absImagePath = $this->context->parameters['wwwDir'] . '/path_to_images'; //nebo $this->template->absImagePath = $this->context->expand('%wwwDir%/path_to_images');
a v šabloně:
{if file_exists($absImagePath. '/nahledy/' .$foto->fotka)}
Díky za odpověď, ale jdeš na mě moc složitě… Podle mě to není
relativní cesta. Složka „galery“ je v rootu webu, pak se jen doplní
„podsložka“ a název souboru (složka nahledy se může vynechat).
Kdyby se to v tom latte makru převedlo jako u toho testovacího obrázku, tak
by to fungovalo. Tento postup sem používal u galerií už dřív v ručně
psaném PHP a vždycky fungoval. Tak proč by nefungoval teď?
- 22
- Člen | 1478
no dobře, tak s relativní cetou to asi funguje taky, pak máš chybu v tom, že uvnitř makra máš složené závorky:
{if file_exists('./galery/'.$gal->slozka.'/nahledy/'.$foto->fotka)}
edit: navíc bych tedy spíš použil funkci is_file()
, když
už.. je rychlejší.
Editoval 22 (13. 1. 2012 20:17)
- Rellik
- Člen | 104
Vyskytl se další problémek:
odkaz:
<a href="{link FotoWiew:default wiew=>$gal->slozka}">{$gal->galerie}</a>
vede na novou stránku místo aby se zobrazil v @layout.latte
ukázka:
http://nette.rellik.eu/?…
EDIT: vyřešeno zapoměl sem v šabloně na {block content}
Editoval Rellik (13. 1. 2012 21:15)