Cachování / Necachování šablony s linky na soubory

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

Dobrý den,

mám aplikaci kde si kodéři vkládají do šablon spoustu odkazů na soubory. K tomu mají adresář dokumenty. Tam soubor umístí a použijí makro {file_link Název dokumentu:název souboru}. Např.:

<ul>
  <li>{file_link Seznam pravidel pro vytváření pravidel:pravidla.pdf}</li>
</ul>

Makro {file_link} ověří existenci souboru, pokud existuje vrátí link (<a href>), pokud neexistuje, napíše, že neexistuje. To funguje. Problém ale je, že tím, že soubor nahrajete nebo nenahrajete do adresáře se šablona nezmění a nepřegeneruje se. Makro se znovu nezavolá. Takže uživatel

  • napíše makro do šablony, ale zapomene nakopírovat soubor do vyhrazeného adresáře
  • nakopíruje soubor aby to napravil, obnoví stránku a nic, protože šablona je cachnutá a nezměnila se

Můžete mi prosím poradit co s tím? Můžu nějak určit, aby se části šablony necachovaly? Nebo musím nějak (jak?) vypnout cachování celé šablony (to by asi podstatně snížilo výkon).

Našel jsem makro {cache}, ale to dělá opak – cachuje. Šablony se ale cachují sami, je to jejich základní vlastnost, takže nevím proč. A makro {noCache} podle toho co jsem našel na fóru asi neexistuje.

Díky.

Filip Procházka
Moderator | 4668
+
0
-

Šablony se automaticky přegenerují když v souboru něco změníš. Co se týče tvého makra, nenapsal jsi jak ho máš implementované. Můžeš to mít dvě způsoby.

  1. překlad makra při překladu šablony – hloupé makro
{file_link nazev:soubor}

se přeloží jako

<a href="/dokumenty/soubor.pdf">nazev</a>

a může dělat problémy, protože ti vznikne HTML a to, jak víme, kontrolovat existenci souborů neumí :)

  1. chytré makro

přeloží se jako

<?php echo Document::link("nazev", "soubor.pdf"); ?>

A třída Document pak soubor kontroluje a dělá co potřebuješ.

jarks
Člen | 94
+
0
-

HosipLan napsal(a):
…hloupé makro

Díky moc. Měl jsem hloupé makro. Napsal jsem třídu Document a v ní statickou metodu file_link a ta vrací ty odkazy. Funguje (tedy po tom, co jsem smazal cache/_Nette.FileTemplate). To mě vůbec nenapadlo.

Patrik Votoček
Člen | 2221
+
0
-

Pokud pracuješ s makry (upravuješ / přidáváš) je bohužel nutné promazávat cache ručně aby se změny projevili.