Malý problém s podmínkou v šabloně – file_exist

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Rellik
Člen | 104
+
0
-

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ěď..

Jan Tvrdík
Nette guru | 2595
+
0
-

Ach jo, file_exists přece pracuje s „diskovými cestami“.

Rellik
Člen | 104
+
0
-

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
+
0
-

@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
+
0
-

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
+
+1
-

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
+
0
-

Díky, díky moc. Už to funguje. Tak sem to taky zkoušel, ale nechával sem právě ty proměnné v závorkách. A to byl ten problém… :)
Jinak všechno co teď dělám je pouze na zkoušku abych se naučil aspoň základy s nette. Zatím se mi to celkem začíná líbit… :)

Rellik
Člen | 104
+
-1
-

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)