#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:

  1. Přidávání věcí do hlaviček jako jsou keywords, javascripty a css
  2. 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:

Screen

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

 

Zápatí