#1 před 3 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
HeaderControl – konec trápení s HTML hlavičkou!
Diskuse ke stránce HeaderControl
Už mě nebavilo vždy někde shánět, kopírovat a přepisovat údaje v HTML hlavičce, tak jsem si na to napsal komponentu :)
Co to umí?
- nastavovat DOCTYPE (HTML 4.01, HTML 5 a XHTML 1.0) všech tří úrovní (Strict, Transitional, Frameset) a posílat i kontroverzní (jediný správný a také značně problémový) Content-Type pro XHTML – application/xhtml+xml.
- nastavovat jazyk dokumentu
- hrátky s
<title>– v konstruktoru předáte výchozí (např. Zdroják.cz) a pak ho můžete přepisovat/přidávat kaskádovitě další (např. kategorii a jméno článku – title pak bude mít podobuNadpis článku - Kategorie - Název webu(pořadí a oddělovač jsou volitelné) - favikonu (kontroluje, zda soubor existuje)
- RSS kanály
- libovolné meta tagy (obsahuje zvláštní metody pro ty
nejčastější – author, description, keywords, robots)
- keywords lze přidávat kaskádovitě podobně jako title
- elegantní volání setterů pomocí fluent rozhraní
- propojení s WebLoaderem Honzy Marka – využívá ho pro přidávání CSS a JS skriptů, včetně widgetového volání
Příklad továrničky
protected function createComponentHeader() {
$header = new HeaderControl(HeaderControl::HTML_5, 'cs', 'Example title');
$header->setTitleSeparator(' | ')
->setTitlesReverseOrder(true)
->addKeywords('one')
->addKeywords(array('two', 'three'))
->setDescription('Our example site')
->setRobots('index,follow') //of course ;o)
->addRssChannel('News', 'Rss:')
->addRssChannel('Comments', 'Rss:comments');
//CssLoader
$css = $header['css'];
$css->sourcePath = APP_DIR . '/templates/WebModule/css';
$css->sourceUri = Environment::getVariable('baseUri') . 'temp';
$css->tempUri = $css->sourceUri;
$css->tempPath = WWW_DIR . '/temp';
//JavascriptLoader
$js = $header['js'];
$js->tempUri = Environment::getVariable('baseUri') . 'temp';
$js->tempPath = WWW_DIR . '/temp';
$js->sourcePath = APP_DIR . '/templates/WebModule/js';
return $header;
}
Příklad šablony
{widget header}
Příklad šablony s widgetovým přidáváním RSS kanálů, CSS stylů a JS skriptů
{widget header:begin}
{widget header:rss 'News' => 'Rss:', 'Comments' => 'Rss:comments'}
{widget header:css 'reset.css', 'default.css', 'screen.css'}
{widget header:js 'jquery.js', 'jquery.nette.js', 'jquery.antispam.js', 'web.js'}
{widget header:end}
Výstup
<!DOCTYPE html>
<html>
<head>
<meta content="cs" http-equiv="Content-Language">
<meta content="text/html" http-equiv="Content-Type">
<title>Example title</title>
<link rel="shortcut icon" href="/favicon.ico">
<meta name="keywords" content="key,words,nette">
<meta name="description" content="Site description">
<meta name="robots" content="index,follow">
<link rel="stylesheet" type="text/css" href="/temp/cssloader-649fdaaa20fcd9f828ad9c25ac8d1596.css">
<script type="text/javascript" src="/temp/jsloader-367b76d07fd0a00b4316125595e1635d.js"></script>
<link rel="alternate" type="application/rss+xml" title="Sample RSS Channel" href="/rss/sample">
</head>
Díky za každou reakci!
Editoval Ondřej Mirtes (25. 1. 2010 23:28)
#2 před 3 lety
- Inza
- Nette guru

- Registrovaný: 8. 7. 2008
- Příspěvky: 368
Re: HeaderControl – konec trápení s HTML hlavičkou!
Vypadá nádherně! Prosím prosím, přidáš ji i do Nette/Extras? – http://addons.nette.org/cs Děkuji…
V rámci ŠkoleníRails.cz školím Ruby on Rails. Přijďte se podívat…
#3 před 3 lety
- Honza Marek
- Moderator

- Registrovaný: 31. 3. 2007
- Příspěvky: 1632
Re: HeaderControl – konec trápení s HTML hlavičkou!
Dobré… Může tam být i více těch WebLoaderů? Třeba styly pro tisk, komprimované a nekomprimovatelné js a tak.
Online
#4 před 3 lety
- Oggy
- Nette guru

- Registrovaný: 7. 4. 2009
- Příspěvky: 314
Re: HeaderControl – konec trápení s HTML hlavičkou!
Honza M. napsal(a):
Dobré… Může tam být i více těch WebLoaderů? Třeba styly pro tisk, komprimované a nekomprimovatelné js a tak.
Připojuji se k dotazu..
jinak jak headerControl tak WebLoader super věci :-)
#5 před 3 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
Odpovídám :) Není problém to tam dodat, ale nefunguje to (zatím) dynamicky. Každopádně to beru jako feature request a nějak se o to pokusím :)
Až tam tohle přidám (a možná ještě nějaké widgetové volání pro title) + phpDocy, tak to dám do extras. Možná bych se pokusil i o unit testy, abych věděl, že vše funguje jak má.
#6 před 3 lety
- Honza Marek
- Moderator

- Registrovaný: 31. 3. 2007
- Příspěvky: 1632
Re: HeaderControl – konec trápení s HTML hlavičkou!
Odhodlal jsem se lehce prozkoumat zdroják a měl bych pár nápadů.
Možná by nebylo problém, kdyby tato komponenta s WebLoaderem nebyla integrovaná vůbec. O „integraci“ by se postaral komponentový model Nette.
Továrnička by vypadala třeba takto:
public function createComponentHeader() {
$header = new HeaderControl;
// nastavení HeaderControlu
$header->...
$header["css"] = new CssLoader;
// nastavení CssLoaderu
$header["printCss"] = clone $header["css"]; // snad funguje klonování komponent, nezkoušel jsem
$header["printCss"]->media = "print";
$header["js"] = new JavaScriptLoader;
// nastavení JavaScriptLoaderu
return $header;
}
Akorát by se musely pořešit metody renderCss, renderPrintCss atd. kvůli widgetům. Mohlo by to jít přes __call. Taky se mi nelíbí, že konstruktor této komponenty kompletně přepisuje konstruktor rodiče, takže tahle komponenta se chová jinak než všechny ostatní v Nette.
Pak bych řek, že je asi zbytečné mít na headerEnd vlastní šablonu :-D
Neber to jako kritiku, já jsem prostě náročnej. Pokud mi něco nevyhovuje na 100%, tak si to napíšu znova, pokud to jde. Ulehčit tvorbu hlavičky je ale výborný nápad!
Online
#7 před 3 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
Jojo, dobrý nápad, že by to nemuselo být závislé na WebLoaderu (i když, co jiného by tam uživatel přidával?), ale nevím, jestli zápis s $header[‚css‘] = new CssLoader bude fungovat. Ale s addComponent asi jo. Pokud ne, tak přidám metodu addLoader, která bude přijímat instance typu WebLoader a pořeším ty render metody. Taky jsem nad nimi přemýšlel a došel ke stejnému závěru :) Akorát nevím, jak bych měl pořešit převod mezi camelCaps a PascalCaps, jestli stačí kapitalizovat první písmeno, nebo tam může vzniknout nějaký problém. Podívám se do zdrojáků Nette.
Šablona pro end – jak bych to měl řešit, echo
</head> přímo v kódu třídy? Jsem radši pro systémové
řešení, i když je možná zbytečné :)
Stále se bojím, že je tam nějaký příšerný bug a že mě pak zastřelíte, holt to chce ty unit testy :)
#8 před 3 lety
- Honza Marek
- Moderator

- Registrovaný: 31. 3. 2007
- Příspěvky: 1632
Re: HeaderControl – konec trápení s HTML hlavičkou!
LastHunter napsal(a):
Jojo, dobrý nápad, že by to nemuselo být závislé na WebLoaderu
Především to umožní větší variabilitu, člověk tam bude mít kolik WebLoaderů, kolik bude chtít a pokud si vymyslí nějakou vlastní zázračnou komponentu, tak ji tam může přidat taky.
Šablona pro end – jak bych to měl řešit,
echo </head>přímo v kódu třídy? Jsem radši pro systémové řešení, i když je možná zbytečné :)
Ano :-D Myslim, že šablony by měly být jen pomocníkem. Ve WebLoaderu taky šablony nejsou, protože by věc jen komplikovaly.
Stále se bojím, že je tam nějaký příšerný bug a že mě pak zastřelíte, holt to chce ty unit testy :)
Předpokládám i bez unit testů, že tvoje metoda renderJs se chová jinak než metoda render u JavaScriptLoaderu :-D
P.S.: Ještě bych prosil vyjádření k tomu konstruktoru… Jednak je tam ta výhrada, kterou už jsem přednesl a druhak mi ani ty parametry nesedí. Jazyk já obvykle třeba vůbec nenastavuju (doufám, že odpovědí nebude, že jsem dobytek…)
Další věc, přišlo by mi přirozenější nastavovat doctype jako celek. XHTML1_STRICT a tak.
Online
#9 před 3 lety
- bazo
- Nette guru

- Registrovaný: 28. 9. 2009
- Příspěvky: 303
Re: HeaderControl – konec trápení s HTML hlavičkou!
zdravim,
da sa s tymto urobit takato vec?
v hlavnej sablone layout budem mat napriklad
{control header:begin}
{control header:css 'reset.css', 'default.css'}
{control header:js 'jquery.js', 'jquery.nette.js'}
{control header:end}
a v sablone pre nejaky konkretny prezenter bude
{control header:begin}
{control header:css 'dalsie.css'}
{control header:js 'dalsie.js'}
{control header:end}
a vysledok na stranke prezenteru bude
<head>
<link rel="stylesheet" type="text/css" href="reset.css" />
<link rel="stylesheet" type="text/css" href="default.css" />
<link rel="stylesheet" type="text/css" href="dalsie.css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.nette.js"></script>
<script type="text/javascript" src="dalsie.js"></script>
</head>
#10 před 3 lety
- Honza Marek
- Moderator

- Registrovaný: 31. 3. 2007
- Příspěvky: 1632
Re: HeaderControl – konec trápení s HTML hlavičkou!
Jednak nedá a druhak header:css a header:js dělají něco trochu sofistikovanějšího
Online
#11 před 3 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
No, imho by to přes dědičnost bloků a volání {include #parent} (dělá se to takhle?) šlo.
layout:
...
{block #css}{control header:css 'screen.css'}{/block}
...
šablona:
{block #css}{include #parent}{control header:css 'dalsi.css'}{/block}
#12 před 3 lety
- bazo
- Nette guru

- Registrovaný: 28. 9. 2009
- Příspěvky: 303
Re: HeaderControl – konec trápení s HTML hlavičkou!
kedze sa to neda tak je tato komponenta dost zbytocna pretoze ten spakovany js a css si tam mozem vlozit len pomocou toho webloaderu. bolo by fajn keby to vedelo aj takuto vec, lebo potom skript, ktory chcem pouzit napr. iba na jednom formulari sa musi tahat pri vsetkych strankach
LastHunter: presne toto som chcel dosiahnut, funguje to. dik!
Editoval bazo (30. 9. 2009 22:01)
#13 před 3 lety
- Honza Marek
- Moderator

- Registrovaný: 31. 3. 2007
- Příspěvky: 1632
Re: HeaderControl – konec trápení s HTML hlavičkou!
Ani pomocí WebLoaderu nemusíš skript pro jeden formulář tahat po všech stránkách. Buď je tam možnost vypnout spojování souborů anebo
{control js 'jquery.js', 'nette.js'}
{control js 'form.js'}
vloží ty skripty dva, jeden se zbalenýma prvníma dvěma souborama a druhý s tím třetím souborem.
// EDIT: LastHunterův příklad s dědičností bloků vlastně taky zobrazí dva WebLoadery pod sebou.
Editoval Honza M. (30. 9. 2009 22:03)
Online
#14 před 3 lety
- bazo
- Nette guru

- Registrovaný: 28. 9. 2009
- Příspěvky: 303
Re: HeaderControl – konec trápení s HTML hlavičkou!
ale toto ten skript nevlozi medzi <head></head> ale vypise to na miesto kde sa to widgetove volanie nachadza.
mne ide o to, ze v @layout mam napevno nalinkovane napr jquery a na jednej stranke chcem zobrazit napriklad editor. alebo nemat css pre vsetky presentery natahane naraz v jednom subore ale kazdy presenter, action si stiahne vlastny css a prida to medzi <head></head>
#15 před 3 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
bazo napsal(a):
ale toto ten skript nevlozi medzi <head></head> ale vypise to na miesto kde sa to widgetove volanie nachadza.
mne ide o to, ze v @layout mam napevno nalinkovane napr jquery a na jednej stranke chcem zobrazit napriklad editor. alebo nemat css pre vsetky presentery natahane naraz v jednom subore ale kazdy presenter, action si stiahne vlastny css a prida to medzi <head></head>
Ano, to ti ty bloky zařídí. Stačí mít ten {block #css} v layoutu v <head>. A v šabloně to volat:
{block #css}{include #parent}{control header:css 'dalsi.css'}{/block}
{block #content}
text dané šablony...
Editoval LastHunter (30. 9. 2009 22:24)
#16 před 3 lety
- Honza Kuchař
- Moderator

- Registrovaný: 12. 8. 2007
- Příspěvky: 1588
Re: HeaderControl – konec trápení s HTML hlavičkou!
Ahoj, je nějaká jednoduchá možnost, jak to co se mi vypíše mezi <title> získat jako string?
#17 před 3 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
honzakuchar napsal(a):
Ahoj, je nějaká jednoduchá možnost, jak to co se mi vypíše mezi <title> získat jako string?
Máš to tam :)
Jinak se omlouvám, že jsem zatím neudělal ty slíbená todo, nebyl zatím čas :)
#18 před 3 lety
- Honza Kuchař
- Moderator

- Registrovaný: 12. 8. 2007
- Příspěvky: 1588
Re: HeaderControl – konec trápení s HTML hlavičkou!
Jinak se omlouvám, že jsem zatím neudělal ty slíbená todo, nebyl zatím čas :)
Myslím, že se nemáš za co omlouvat.
Máš to tam :)
Díky ;)
#19 před 2 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
Tak jsem dnes v komponentě provedl divoké změny – podle požadavku jsem spojil doctype + level doctype a také jsem přepsal renderování (na mix vypisování Html objektů a čistého textu) a založil ji stránku v addonech.
Co pro HeaderControl chystám do budoucna?
- dopsání phpDoců (udělal bych to dnes, ale bohužel mě zlobí Netbeans a vůbec mi při psaní komentářů nepomáhají :))
- zvážit návrh Honzy Marka na univerzální připojování komponent
- zvážit přepsání renderování na čisté vypisování stringů, přecijen při zakládání X Html objektů se PHP může zbytečně zadýchat
#20 před 2 lety
- Honza Kuchař
- Moderator

- Registrovaný: 12. 8. 2007
- Příspěvky: 1588
Re: HeaderControl – konec trápení s HTML hlavičkou!
Paráda! A až bude tohle:
zvážit návrh Honzy Marka na univerzální připojování komponent
Tak to teda bude opravdu super!
#21 před 2 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
Přemýšlel jsem nad tím a šlo by to zpracovat jako univerzální předek, něco jako RenderableComponentContainer :))
#22 před 2 lety
- p3s
- Člen

- Registrovaný: 14. 11. 2008
- Příspěvky: 11
Re: HeaderControl – konec trápení s HTML hlavičkou!
Caute, s Nette zacinam, pomaly prenikam do tajov controlov, tovarniciek a pod. Chcem pouzit v mojom prvom projekte HeaderControl. Potrebujem nakopnut ako doplnit dalsiu cast title. Postupoval som podla prikladu, vsetko funguje tak ako ma, teraz chcem ale v dalsom presentri ktori dedi od BasePresenter doplnit nieco do title aby vyzeral nasledovne: WebTitle | PageTitle. Zatial mam len ten WebTitle. Diky.
BasePreseneter obsahuje metodu
protected function createComponentHeader()
{
$header = new HeaderControl(HeaderControl::XHTML_1_STRICT, 'sk', Environment::getConfig('web')->title);
$header->setTitleSeparator(' | ')
->setTitlesReverseOrder(FALSE)
->setRobots('index,follow'); //of course ;o)
....
return $header;
}
v sablone @layout.phtml mam
{widget header:begin}
{widget header:css 'screen.css', 'print.css'}
{widget header:end}
#23 před 2 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
Ahoj,
kdekoli v Presenteru můžeš zavolat $this['header']->addTitle('Moje
stránka'); :)
#24 před 2 lety
- p3s
- Člen

- Registrovaný: 14. 11. 2008
- Příspěvky: 11
Re: HeaderControl – konec trápení s HTML hlavičkou!
Diky, to je ono, zasa som sa posunul dalej a naucil nieco nove. Mam este jednu otazku. Ako dostat do meta tagu s Content-type aj charset, aby vyzeral napr takto
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250" />
Charset sa negeneruje.
Ako som si vsimol, vzdy sa posiela header pre utf-8 kodovanie, nie vzdy vsak
stranky musia byt v UTF-8.
#25 před 2 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
V Nette platí, že by stránky v UTF-8 měly být (proto v této komponentě ani jinou možnost nedávám), už kvůli práci s formuláři. Nevidím důvod používat nějaké jiné kódování, UTF-8 je standard několika posledních let.
#26 před 2 lety
- p3s
- Člen

- Registrovaný: 14. 11. 2008
- Příspěvky: 11
Re: HeaderControl – konec trápení s HTML hlavičkou!
OK, diky za vysvetlenie.
#27 před 2 lety
- Honza Kuchař
- Moderator

- Registrovaný: 12. 8. 2007
- Příspěvky: 1588
Re: HeaderControl – konec trápení s HTML hlavičkou!
Ahoj, jak to vypadá s tou registrací komponent?
//EDIT: Nijak na to nespěchám. Jen se ptám.
Editoval honzakuchar (18. 2. 2010 0:19)
#28 před 2 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
Ahoj,
hmatatelně zatím nijak, ale udělám to jako univerzálního předka
RenderableContainer, do kterého si budeš moci přidávat vlastní komponenty a
ty pak renderovat přes renderNazevKomponenty (udělané přes __call).
V přístích dnech na to snad kouknu :)
#29 před 2 lety
- iguana007
- Nette guru

- Registrovaný: 3. 11. 2009
- Příspěvky: 485
Re: HeaderControl – konec trápení s HTML hlavičkou!
Mě by se třeba líbila feature, kdy by šlo přepínat mezi development a produkční verzí – kde by to u produkční při použití nějakého přepínače udělalo automatickou komprimaci CSS a JS – myslím, že to dělá WebLoader – nebo mi něco uniklo a tyto dva addony jde mixovat?
Omne Principium Grave
#30 před 2 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
HeaderControl pracuje ‚uvnitř‘ s WebLoaderem, tohle nastavení jde bez problému realizovat.
V továrničce:
$header = new HeaderControl(HeaderControl::HTML_5, HeaderControl::CZECH, 'Example title');
...
$webConfig = Environment::getConfig('web');
$css = $header['css'];
if ($webConfig->strip->css) {
$css->filters[] = array('MyTools', 'minifyCss');
}
#31 před 2 lety
- pekelnik
- Nette guru

- Registrovaný: 14. 2. 2009
- Příspěvky: 372
Re: HeaderControl – konec trápení s HTML hlavičkou!
Chtěl bych se zeptat jak to vypadá s widgetovým voláním HeaderControl::addTitle() ideální by bylo kdyby to ten text taky propouštělo:
<h1>{widget header title Fooooooooooo}</h1>
_ _ _ _ _ _ _ _ _ __(_) |_| |____ _
/ _` | || | '_| || | | '_ \ | _| / / _` |
\__, |\_,_|_| \_,_| | .__/_|\__|_\_\__,_|
#32 před 2 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
Nemyslím si, že by to takhle hezky fungovalo. Nejsem si úplně jistý, v jakém pořadí by Nette takhle zapsané kódy volalo.
Dokonce si myslím, že volat $this[‚header‘]->addTitle() v render metodě je praktičtější, nemusíš si tu proměnnou předávat do šablony. A v šabloně (layoutu) můžeš do místa nadpisu dát tento kód:
<h1>{$presenter['header']->getTitle()}</h1>
{* metoda getTitle může jako parametr přijímat index,
podle kterého se dostaneš i k dříve přidaným titlům, nejen k tomu poslednímu *}
#33 před 2 lety
- LiborM
- Člen

- Registrovaný: 15. 3. 2010
- Příspěvky: 13
Re: HeaderControl – konec trápení s HTML hlavičkou!
Zdravím,
jsem absolutní začátečník s PHP i Nette. Použil jsem HeaderControl
komponentu (moc pěkná práce), ale když chci pak v HomePresenteru (úvodní
stránka webu – použit standardní skeleton) použít např. echo
"Text";, tak dostanu hlášku z laděnky: InvalidStateException –
Cannot send header after HTTP headers have been sent.
HeaderControl mám zapracovaný do BasePresenteru :
abstract class BasePresenter extends Presenter
{
//public $oldLayoutMode = FALSE;
//private $skinName="blue";
private $skinName;
public function beforeRender(){
$skin = Environment::getConfig('skin');
$this->skinName=$skin['skin'];
}
protected function createComponentHeader() {
$header = new HeaderControl(HeaderControl::XHTML_1_STRICT, 'cs', 'Nette - CMS');
$header->setTitleSeparator(' | ')
->setTitlesReverseOrder(true)
->addKeywords('one')
->addKeywords(array('two', 'three'))
->setDescription('Our example site')
->setRobots('index,follow') //of course ;o)
->addRssChannel('News', 'Rss:')
->addRssChannel('Comments', 'Rss:comments');
$css = $header['css'];
if ($this->skinName==""){
$css->sourcePath = WWW_DIR . '/css';
}
else {
$cesta='/skin/'.$this->skinName.'/css';
$css->sourcePath = WWW_DIR . $cesta;
}
$css->sourceUri = Environment::getVariable('baseUri') . 'temp';
$css->tempUri = $css->sourceUri;
$css->tempPath = WWW_DIR . '/temp';
return $header;
}
}
V @layout.phtml mám :
{widget header:begin}
{widget header:css 'style.css', 'paginator.css'}
{widget header:end}
Dělám něco špatně nebo jak použít např. echo "Text";
v HomePresenteru ?
Díky
LiborM
Editoval LiborM (15. 3. 2010 15:57)
#34 před 2 lety
- iguana007
- Nette guru

- Registrovaný: 3. 11. 2009
- Příspěvky: 485
Re: HeaderControl – konec trápení s HTML hlavičkou!
Od ceho jsou sablony? Aby si oddelil prezentacni logiku od ostatniho .. tj. vystupy davame do sablon, ne do presenteru.
Omne Principium Grave
#35 před 2 lety
- LiborM
- Člen

- Registrovaný: 15. 3. 2010
- Příspěvky: 13
Re: HeaderControl – konec trápení s HTML hlavičkou!
Děkuju za rychlou odpověď.
OK to chápu, ale stejně se to chová i při Debug::dump
($cokoliv).
Jak to mám teda správně použít ? Můžeš mi ukázat, moc prosím, kus
kódu ?
Dík
LiborM
#36 před 2 lety
- iguana007
- Nette guru

- Registrovaný: 3. 11. 2009
- Příspěvky: 485
Re: HeaderControl – konec trápení s HTML hlavičkou!
Ja osobně používám buďto:
Debug::consoleDump($nejakyVystup);
nebo
Debug::fireLog($nejakyVystup);
Omne Principium Grave
#37 před 2 lety
- LiborM
- Člen

- Registrovaný: 15. 3. 2010
- Příspěvky: 13
Re: HeaderControl – konec trápení s HTML hlavičkou!
SUPER,
díky moc za pomoc – Funguje to
LiborM
#38 před 2 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
Ahoj,
pokud nepoužiješ HeaderControl, dělá ti to taky nebo ne? Sice bys před
jejím vykreslením neměl nic vypisovat, aby se provedl správně tento řádek,
ale i přesto jsem nikdy s dumpováním z Presenteru neměl problém :)
BTW: V tvém kódu vidím problém. Pokud bys náhodou instanci HeaderControl vytvořil ještě před render fází (čemuž továrnička nijak bránit nebude), tak se ti nastaví cesta ještě podle nenaplněné hodnoty $this->skinName, protože to bude ještě před provedením metody beforeRender().
Editoval Ondřej Mirtes (15. 3. 2010 16:57)
#39 před 2 lety
- LiborM
- Člen

- Registrovaný: 15. 3. 2010
- Příspěvky: 13
Re: HeaderControl – konec trápení s HTML hlavičkou!
Ahoj,
pokud nedám widget do @layout.phtml , tak to funguje normálně :-(
Jěště mne napadlo, že mám poslední dev verzi…může to být
tím ?
Zkoušel jsem to v stable 0.9.3 pro PHP 5.2 a chová se to stejně
Děkuju za připomínku o $this->skinName…zkusím ji dát jinam
LiborM
Editoval LiborM (16. 3. 2010 15:24)
#40 před 2 lety
- Foowie
- Nette guru

- Registrovaný: 26. 6. 2009
- Příspěvky: 250
Re: HeaderControl – konec trápení s HTML hlavičkou!
Nešla by odstranit pevná závislost na WebLoaderu?
<?php
např místo
protected function createComponentCss() {
return new CssLoader;
}
udělat něco jako
protected $cssLoaderClass = "CssLoader";
protected function createComponentCss() {
return new $cssLoaderClass;
}
public function setCssLoaderClass($className) {
$this->cssLoaderClass = $className;
}
nebo nějak podobně ...
?>
Vím, že můžu skrátka přepsat třídy v továrničce, ale tohle by bylo variabilnější řešení .)
#41 před 2 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
Můžeš si to podědit a ty továrničky přepsat ;)
#42 před 2 lety
- Honza Marek
- Moderator

- Registrovaný: 31. 3. 2007
- Příspěvky: 1632
Re: HeaderControl – konec trápení s HTML hlavičkou!
Foowie napsal(a):
Nešla by odstranit pevná závislost na WebLoaderu?
…
Vím, že můžu skrátka přepsat třídy v továrničce, ale tohle by bylo variabilnější řešení .)
Online
#43 před 2 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
Trošku jsem si máknul a opravil pár broučků, co tuhle komponentku trápili.
Přidal jsem taky možnost zvenku
modifikovat <html> tag, aby se do něj daly přidávat
definice namespace, které jsou potřeba např. při přihlašování přes
Facebook.
A konečně jsem vytvořil třídu RenderableContainer,
která slouží jako zkratka k volání
$component['subcomponent']->render() pomocí
$component->renderSubcomponent();, což se hodí ve {widget} makru
v šablonách a HeaderControl tenhle mechanismus využívá :)
#44 před 2 lety
- jtousek
- Nette guru

- Registrovaný: 17. 11. 2009
- Příspěvky: 603
Re: HeaderControl – konec trápení s HTML hlavičkou!
S dovolením si trochu rýpnu. Oficiálně je „HTML5“, ne „HTML 5“. :)
Opakování je matkou chyb, raději tedy dělám vše pořádně napoprvé.
#45 před 2 lety
- h4kuna
- Nette guru

- Registrovaný: 16. 3. 2009
- Příspěvky: 287
Re: HeaderControl – konec trápení s HTML hlavičkou!
Ahoj,
prosím tě druhy parametr konstruktoru odpovida
Environment::getVariable(‚lang‘); ??
Pokud ano bylo by dobre to tam dat nativně.
Nebo jako volitelný, pokud nebude vyplnen vezme si ho z Environment.
Editoval matata (3. 7. 2010 11:03)
#46 před 2 lety
- dj.kure
- Člen

- Registrovaný: 12. 7. 2010
- Příspěvky: 13
Re: HeaderControl – konec trápení s HTML hlavičkou!
Zkouším, zkouším a stále mám jeden problémek :D … nevíte náhodou, jestli se HeaderControl neperes ConfirmationDialogem ? Je tu totiž problémek, že se HEAD vypíše až za tímto Dialogem, takže mám příklad:
<div id="ConfirmDialog">
...
...
...
</div>
// a až zde začíná Head
<!DOCTYPE html>
<html lang="en" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
....
nesetkali jste se s tím už někdo ?
Edit: Nette verze 1.0 pro PHP5.3.
Editoval dj.kure (12. 7. 2010 23:49)
#47 před 2 lety
- assassik
- Člen

- Registrovaný: 24. 10. 2009
- Příspěvky: 43
Re: HeaderControl – konec trápení s HTML hlavičkou!
Ani jednu komponentu sice nepoužívám, ale na první pohled mě napadá zavináčová magie u toho ConfirmationDialogu.
Vše co začne musí jednou zkončit.
$application->run(); $this->terminate();
#48 před 2 lety
- dj.kure
- Člen

- Registrovaný: 12. 7. 2010
- Příspěvky: 13
Re: HeaderControl – konec trápení s HTML hlavičkou!
assassik napsal(a):
Ani jednu komponentu sice nepoužívám, ale na první pohled mě napadá zavináčová magie u toho ConfirmationDialogu.
Zavináčová magie ? Pokud máš na mysli zavináče v layout.phtml, tak tam není ani jeden a po pravdě, ani při jeho vložení se nic nezmění.
{widget header:begin}
{widget header:end}
Takhle vypadá současný default.phtml
#49 před 2 lety
- maarlin
- Nette guru

- Registrovaný: 20. 8. 2009
- Příspěvky: 204
Re: HeaderControl – konec trápení s HTML hlavičkou!
Nevím proč, ale nefunguje mi to:
Jako první argument konstruktoru je vyžadována instance
IComponentContainer, což je už podle příkladu trochu
nereálné:
$header = new HeaderControl(HeaderControl::HTML_5, 'en', 'Example title');
Argument 1 passed to HeaderControl::__construct() must implement
interface IComponentContainer,
string given, called in ...\app\presenters\BasePresenter.php on line 16
and defined
Kde dělám chybu?
Editoval maarlin (5. 9. 2010 9:34)
#50 před 2 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: HeaderControl – konec trápení s HTML hlavičkou!
Příklad na wiki je zastaralý. Konstruktor nepoužívej vůbec, použij settery.