#1 20. 2. 2010 10:54
- Jack06
- Člen
- Registrovaný: 13. 2. 2010
- Příspěvky: 37
postupné přidávání do šablony
Dobrý den, chtěl bych se zeptat, jak řešíte tento problém rozdělil bych to asi na 2 části:
- Přidávání věcí do hlaviček jako jsou keywords, javascripty a css
- Přidávání do bloků ( něco v bloku mám a chci k němu jen další věc přidat )
Ke dvojce jsem se dočetl asi nějaké odpovědi jakože:
{block #mujBlok}
{include #parent}
...můj přidaný obsah
{/block}
k jedničce jsem zatím k nejlepšímu řešení nedošel… Přemýšlel jsem že by bylo nejlepší přidávat věci do hlavičky vždy pomocí presenteru dané stránky, jenže při mých pokusech mi vyhodila chybu třída SmartCachingIterator Díky za rady.
Offline
#2 20. 2. 2010 10:57
- Honza Kuchař
- Moderator

- Místo: Brno
- Registrovaný: 12. 8. 2007
- Příspěvky: 1285
- Web
Re: postupné přidávání do šablony
Buťo použij HeaderControl nebo tam naflákej taky blocky.
Offline
#3 20. 2. 2010 11:36
- Jack06
- Člen
- Registrovaný: 13. 2. 2010
- Příspěvky: 37
Re: postupné přidávání do šablony
Nevím co dělám špatně. Začínám s nette asi bych potřeboval u všeho napsat i kam skopírovat dané addony.
Zkusil jsem to a nevím proč, nicméně mi to jakoby nemůže najít generované soubory přestože existuji:
Offline
#4 20. 2. 2010 12:31
- Honza Kuchař
- Moderator

- Místo: Brno
- Registrovaný: 12. 8. 2007
- Příspěvky: 1285
- Web
Re: postupné přidávání do šablony
viz WebLoader – tam je podrobnější popis jak nakonfigurovat ty $header[„css“] a $header[„js“]
Offline
#5 20. 2. 2010 12:48
- Jack06
- Člen
- Registrovaný: 13. 2. 2010
- Příspěvky: 37
Re: postupné přidávání do šablony
Mno já to nakonfigurované mám snad dobře.. i ten soubor se mi v tempu vytvoří, ten který to pak hledá do šablony
vygenerovaná hlavička ke stylu:
<link rel="stylesheet" type="text/css" href="temp/generated-93c536c9920592b098619be09beb5d1e.css">
Taky souhlasí. Mám root webu a pak hned temp/ten soubor co to hledá Generuji to takto v basepresenteru
protected function createComponentHeader() {
$header = new HeaderControl(HeaderControl::HTML_5, 'cs', self::$site->site_name);
$header->setTitleSeparator(' | ')
->setTitlesReverseOrder(true)
->addKeywords(self::$site->keywords)
->setDescription(self::$site->description)
->setRobots('index,follow');
//CssLoader
$css = $header['css'];
$css->sourcePath = APP_DIR . '/static/css';
$css->sourceUri = Environment::getVariable('baseUri') . 'static/css';
$css->tempUri = Environment::getVariable('baseUri'). 'temp';
$css->tempPath = APP_DIR . '/temp';
//JavascriptLoader
$js = $header['js'];
$js->sourcePath = APP_DIR . '/static/js';
$js->tempUri = Environment::getVariable('baseUri') . 'temp';
$js->tempPath = APP_DIR . '/temp';
return $header;
}
APP_DIR definuji v indexu define('APP_DIR', dirname(__FILE__));
přičemž vše co bylo v app mám přímo v rootu.
Jediné co nechápu je proč to ten soubor nenajde, když cesta k ennalezenému souboru co ukazuje firebug je shodná s destinací, kde soubor je.
// A taky nechápu, kde to vezme ten vygenerovanej kód od nette, když to soubor nenašlo nebo co to píše… Viz screen
Editoval Jack06 (20. 2. 2010 13:01)
Offline
#6 20. 2. 2010 13:02
- Honza Kuchař
- Moderator

- Místo: Brno
- Registrovaný: 12. 8. 2007
- Příspěvky: 1285
- Web
Re: postupné přidávání do šablony
Ty soubory co lezou z WebLoaderu musí být viditelné z internetu. Tzn. musí se ukládat do document_root/ nikoli do app/. Tzn. ve výstupních složkách zkus nahradit APP_DIR za WWW_DIR
Offline
#7 20. 2. 2010 13:03
- Honza Kuchař
- Moderator

- Místo: Brno
- Registrovaný: 12. 8. 2007
- Příspěvky: 1285
- Web
Re: postupné přidávání do šablony
Tedy alespoň za předpokladu, že tvůj index.php vypadá takto:
// absolute filesystem path to the web root
define('WWW_DIR', dirname(__FILE__));
// absolute filesystem path to the application root
define('APP_DIR', WWW_DIR . '/../app');
// absolute filesystem path to the libraries
define('LIBS_DIR', WWW_DIR . '/../libs');
// load bootstrap file
require APP_DIR . '/bootstrap.php';
Offline
#8 20. 2. 2010 13:07
- Jack06
- Člen
- Registrovaný: 13. 2. 2010
- Příspěvky: 37
Re: postupné přidávání do šablony
honzakuchar napsal(a):
Ty soubory co lezou z WebLoaderu musí být viditelné z internetu. Tzn. musí se ukládat do document_root/ nikoli do app/. Tzn. ve výstupních složkách zkus nahradit APP_DIR za WWW_DIR
Nemám složku app.. moje struktura je:
4mate/
+-libs
- Dibi
- Nette
+-log
+-models
+-presenters
+-static
- css
screen.css
- js
+-temp
+-templates
config.ini
index.php
.htaccess
index.php vypadá:
<?php
define('APP_DIR', dirname(__FILE__));
define('LIBS_DIR', APP_DIR.'/libs');
require_once LIBS_DIR .'/Nette/loader.php';
Debug::enable();
Environment::loadConfig();
$application = Environment::getApplication();
dibi::connect(Environment::getConfig('database'));
$session = Environment::getSession();
if (!$session->isStarted()) $session->start();
$application->errorPresenter = 'Error';
$router = $application->getRouter();
$router[] = new Route('robots.txt', array('presenter' => 'Feed', 'action' => 'robots'));
$router[] = new Route('sitemap.xml', array('presenter' => 'Feed', 'action' => 'sitemap'));
$router[] = new Route('<presenter>/<action>/<id>/', array('presenter' => 'Homepage', 'action' => 'default', 'id' => NULL));
$application->run();
Editoval Jack06 (20. 2. 2010 13:08)
Offline
#9 20. 2. 2010 13:22
- Jack06
- Člen
- Registrovaný: 13. 2. 2010
- Příspěvky: 37
Re: postupné přidávání do šablony
No tak už vím proč to nejde teda nevím proč, ale vím kde se to fláká… Prostě to nechce načítat ze složky temp… když to vygeneruji a vytáhnu třeba ze složky static, tak to funguje… Nevíš proč?
// ještě jedna věc, když pak budu chtít jen přidat do hlavičky něco, jak to napíšu v šabloně a jak v presenteru?
Editoval Jack06 (20. 2. 2010 13:58)
Offline
#10 21. 2. 2010 14:49
- Jack06
- Člen
- Registrovaný: 13. 2. 2010
- Příspěvky: 37
Re: postupné přidávání do šablony
Nevíte někdo prosím, proč mi to nechce brát ten cache soubor z tempu, ale ze složky static mi to v pohodě vezme? Celkem mi to vadí že bych měl ten soubor hrnout do složky, kterou pro to určenou defaultně nemám.
Další věc je to přidávání scriptů z prezenteru dané stránky a nebo přímo v šablonách. Do základní šablony jsem to vložil a funguje to, ale nejšpíše to dělám špatně dále, protože přidat pak další soubor mi už nejde.
Offline
#11 21. 2. 2010 15:49
- Mikulas Dite
- Nette guru

- Místo: Praha
- Registrovaný: 18. 11. 2009
- Příspěvky: 320
- Web
Re: postupné přidávání do šablony
Tak je možné, že jsou buď špatně nastevená práva (je jenom zápis) tý složky, ale pravděpodobněji je to pro to, že se ten soubor po ukládání neuvolní a tedy nedovolí čtení.
Offline
#12 21. 2. 2010 19:20
- Jack06
- Člen
- Registrovaný: 13. 2. 2010
- Příspěvky: 37
Re: postupné přidávání do šablony
Nojo, ale co s tím? A k druhé části otázky nevíš jak prosím?
Offline
#13 21. 2. 2010 20:45
- Mikulas Dite
- Nette guru

- Místo: Praha
- Registrovaný: 18. 11. 2009
- Příspěvky: 320
- Web
Re: postupné přidávání do šablony
Ještě mě napadá, v tý struktuře máš htaccess, tak
zkontroluj, jestli tam nemáš Order Allow Deny: – deny
all nebo něco na ten způsob. To druhé jsem úplně nepochopil,
myslíš normální html js include, nebo něco sofistikovanějšího?
Offline
#14 22. 2. 2010 15:58
- Jack06
- Člen
- Registrovaný: 13. 2. 2010
- Příspěvky: 37
Re: postupné přidávání do šablony
Normálně v základním layoutu mám hlavičku nadefinouvanou přímo:
{widget header:begin}
{widget header:css 'screen.css'}
{widget header:end}
to je přímo v layoutu.. ale třeba přijdu na stránku registrace, kde mám dělanej presenter pro registraci, a v tom presenteru bych chtěl, aby to poslalo do hlavičky ještě krom odkazu na css ještě odkaz na soubor js. zjednodušeně: <script src=odkaz na soubor"></script> – což to si zase generuje ten headercontrol, ale nějak mi to nejde zavolat z presenteru, a ještě bych rád věděl jak to má být když to budu chtít přidat přímo z šablony.. u bloků se to dělalo přes include parent a jen se dopsalo a u widgetu?
Editoval Jack06 (22. 2. 2010 17:55)
Offline
#15 22. 2. 2010 16:11
- Mikulas Dite
- Nette guru

- Místo: Praha
- Registrovaný: 18. 11. 2009
- Příspěvky: 320
- Web
Re: postupné přidávání do šablony
//máš tam špatný lomítko
Můžeš například přepsat ten odkaz pomocí assign, viz. http://forum.nette.org/…ckets-assign
Editoval Mikulas Dite (22. 2. 2010 16:11)
Offline
#16 22. 2. 2010 17:17
- Ola
- Nette guru
- Registrovaný: 21. 10. 2008
- Příspěvky: 477
Re: postupné přidávání do šablony
Nebo možná půjde využít dědičnosti šablon (not sure):
@layout.phtml:
{widget header:begin}
{widget header:css 'screen.css'}
{block #headerFiles}{/block}
{widget header:end}
.. šablona:
{block #headerFiles}{widget header:js 'something.js'}{/block}
{block #content}
....
Offline
#17 22. 2. 2010 17:57
- Jack06
- Člen
- Registrovaný: 13. 2. 2010
- Příspěvky: 37
Re: postupné přidávání do šablony
Ola napsal(a):
Nebo možná půjde využít dědičnosti šablon (not sure):
@layout.phtml:
{widget header:begin} {widget header:css 'screen.css'} {block #headerFiles}{/block} {widget header:end}.. šablona:
{block #headerFiles}{widget header:js 'something.js'}{/block} {block #content} ....
Mno jenomže to se mi zdá už jako slátávání.. přijde mi, nebo si to alespoň myslím že autor addonu to řeší základně nějak úplně jednoduše a tady v tom hledáme strašnýho brouka.
Offline
#18 22. 2. 2010 18:10
- Ondřej Mirtes
- Moderator

- Místo: Praha
- Registrovaný: 8. 1. 2009
- Příspěvky: 1357
- Web
Re: postupné přidávání do šablony
Proč nepoužíváš doporučenou adresářovou strukturu? Mít zdrojáky v app/ se hodí, nemusíš psát složitej .htaccess, ale jen v něm skryješ složku app (order allow, deny; deny from all).
Dědičnost se na tohle hodí.
Layout:
{widget header:begin}
{block #css}{widget header:css 'screen.css'}{/block}
{block #js}{widget header:js 'web.js'}{/block}
{widget header:end}
A pokud pak chceš v šabloně něco doplnit, tak:
{block #js}
{include #parent}
{widget header:js 'dalsi.js'}
{/block}
Ale popřemýšlej, jestli není lepší uvést všechny soubory už v layoutu, webloader to spojí do jednoho, navíc to můžeš gzipovat a prohlížeč si to nacachuje, takže práce se stránkou může být rychlejší, než když na každé podstránce budeš přidávat další CSS soubor.
Editoval Ondřej Mirtes (22. 2. 2010 18:11)
Offline
#19 22. 2. 2010 18:14
- Jack06
- Člen
- Registrovaný: 13. 2. 2010
- Příspěvky: 37
Re: postupné přidávání do šablony
Jde mi třeba o přidávání scriptů jako live validation, které nebudu používat všude.. A když budu chtít v presenteru přímo přidat do hlavičky něco? lze to nějak udělat?
Offline
#20 22. 2. 2010 19:08
- Ondřej Mirtes
- Moderator

- Místo: Praha
- Registrovaný: 8. 1. 2009
- Příspěvky: 1357
- Web
Re: postupné přidávání do šablony
Jde o to, že zápis v šabloně nejde kombinovat s přidáváním souborů v Presenteru – šablona má přednost.
Jak se přidávání soubory v továrničce, to už je čistě věc webloaderu, takže si ho vytáhni pomocí $header[‚css‘] nebo $header[‚js‘] a pracuj nad tím.
Offline
#21 27. 2. 2010 11:28
- Jack06
- Člen
- Registrovaný: 13. 2. 2010
- Příspěvky: 37
Re: postupné přidávání do šablony
No, tak jsem zjistil že načítání toho souboru mi to nepovoluje .htaccess protože složku /app mám pod ochranou:
Order Allow,Deny
Deny from all
Nicméně se mi nechce vytvářet další složka na soubory, které jsou jen cachované, takže mě napadá, nejspíše jedině povolit číst soubory ze složky, které budou začínat na generate. Nicméně nevím jak to udělat v této složce mám i config.ini, takže bych ho nechtěl ohrozit aby ho někdo četl
Offline
#22 27. 2. 2010 12:50
- Ondřej Mirtes
- Moderator

- Místo: Praha
- Registrovaný: 8. 1. 2009
- Příspěvky: 1357
- Web
Re: postupné přidávání do šablony
Rozhodně neodkrývej složku app, viz tohle vlákno. (Koukám, že to vlastně ve svém příspěvku zmiňuješ :))
Já mám na generované soubory složku document_root/temp. Nevidím v tom žádný problém.
Offline


