Žádný komplexní framework se nehodí pro jednoduché weby. Výhody se totiž projeví až od určité míry složitosti webové aplikace. V opačném případě práci spíš komplikuje.
Nette je framework, který se výborně hodí i pro tvorbu statických stránek. Ano, čtete dobře! Obyčejných statických stránek. Pojďme se na to podívat.
Vezměme si jednoduchou stránku homepage.en.html
:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title id="_title">Welcome!</title>
</head>
<body>
<div id="menu">
<ul>
<li><a href="...">Products</a></li>
<li><a href="...">Testimonials</a></li>
<li><a href="...">FAQ</a></li>
<li><a href="...">About us</a></li>
</ul>
</div> <!-- /menu -->
<div id="breadcrumbs">
<a href="./">Home</a> > Products
</div>
<div id="main">
<h1>Welcome!</h1>
<p>Lorem ipsum dollar sit.</p>
</div> <!-- /main -->
<div id="footer">
<p>All rights reserved.</p>
</div>
</body>
</html>
Jednotlivé stránky v rámci jednoho serveru se hodně podobají. Liší se sice v textu titulku, hlavním obsahu, ale mají stejné (či podobné) hlavičky, patičky atd. Jak jsem zmiňoval dříve, primární zásada Nette zní Nic nepsat dvakrát. Tak si ukažme v praxi, jak bez dvojího psaní vytvoříme stránku „kontakty“:
Soubor contacts.en.html
:
<?nette extends="homepage"?>
<title id="_title">Contacts</title>
<body>
<div id="breadcrumbs">
<a href="./">Home</a> > Contacts
</div>
<div id="main">
<h1>Contacts</h1>
<p>Duane Dibley, <i>director</i></p>
</div>
</body>
Prvním řádkem Nette oznámíme, že tato stránka je potomkem
stránky homepage
. Ano, jde přesně o tentýž mechanismus, jako
když dědíme třídy. Prostě Objektově Orientovaný Webdesign.
A následují prvky, které chceme přepsat, stejně jako když
predefinováváme metody v OOP. Rozhodující je identifikátor
id
. Prvek se stejným id
přepíše prvek
rodičovský.
Volitelným atributem override
lze navíc upřesnit, jestli se
bude dědit jen element samotný (a obsah zůstane nezměněn), nebo naopak jen
vnitřní obsah elementu, nebo obojí (což je výchozí stav).
Všimněte si, že <title>
má jako identifikátor uvedeno
_title
. Zavináč Podtržítko nám říká, že atribut
id se ve výsledném HTML nezobrazí. Tedy zbude jen
<title>Contacts</title>
.
Dále v souboru contacts
vidíte značky
<body>
. Protože nemají id
, tak se při
zpracování ignorují. Zde slouží jen jako ukázka, že ve zděděné
stránce můžete použít i doplňující kód, pokud vám to kupříkladu
zpříjemní editaci ve WYSIWYG editorech (například
přilinkováním CSS).
Za zmínku také stojí ono en
v názvech obou souborů. Jde
o určení jazyka. Pokud při dědění neexistuje předchůdce
v požadovaném jazyce, použije se podle preferencí jiný. Což skýtá
řadu dalších obrovských výhod. Stačí překládat jen stránky skutečně
obsahující text, a to jen jednou. Také chybějící překlad lze doplnit
kdykoliv později (výsledná stránka pak bude přeložena až na
malou část).
O tom, jak tento prostý trik zjednodušší správu webů (multijazyčných obzvlášť) snad ani nemusím psát.
Dokáže tohle váš framework?
Pro snadné ladění takovýchto stránek je připraven jednoduchý prohlížeč. Jako parametr dostane jméno stránky, poskládá ji a pustí na výstup (tedy editujete zděděný soubor a v prohlížeči sledujete výsledek).
Pokud na začátek každé takovéto stránky přidáme jednořádkový PHP skript, který spustí onen prohlížecí mechanismus na prováděný soubor, mohu takové stránky nahrát naostro na server a statický web je na světě. Není to paráda?
Již brzy se pokusíme statickým stránkám vdechnout život. Mechanismus dědění tak získá nový netušený rozměr.
Komentáře
rarouš #1
A jedná se potom o statické stránky? Pamatuju dobu, kdy slova statické stránky měla jiný význam. Ale dobrá, vypadá to velice zajímavě, je to celé jako Mastery v ASP.NET 2.0 :) Takže v tomto případě, pokud budu někdy „muset“ něco v PHP, vzpomenu si na Nette :)
A jedna připomínka závěrem. Nebylo by lepší přidělit Nette tagům nějaký xml namespace, aby bylo hned zřejné, o co jde?
David Grudl #2
#1 rarouši, „Statickou stránku“ bych definoval jako stránku, na jejíž obsah nemá vliv stavu serveru ani parametry předané HTTP protokolem a je tudíž vždy stejná. Způsob generování stránky s tím dle mého nemá nic společného.
Ale to snad ne. Master page je trošku něco jiného, lépe řečeno výrazně primitivnějšího. Žádný polymorfismus či předefinovávání, jen se vkládá obsah do předem připravených kontejnerů
asp:Content
.Ano, má to tam být, do článku jsem to doplnil. Téma syntaxe mám ještě docela otevřené.
error414 #3
Takze nejdrive nas s Nette naucis pracovat, a pak ho teprve pustis do obehu. Zajimave.
Ivan #4
Nikdy jsem to prakticky nedělal (proto prosím o shovívavost, jestli plácám nesmysly ;), ale jak se tento přístup liší od Transform View (Fowler)? Tedy vytvořím si xml, a pomoci xslt z něj udělám html stránku?
xom #5
#3 error414, Ano, přijde mi to i logické, nevím nakolik dal David Nette k testování svým známým, ale tím, že bude zveřejňovat syntaxi a čtenáři mu ji budou komentovat, ptát se na detaily, na nejasnosti, bude mít dostatečný feedback, který pomůže výsledek dotvořit.. (viz. třeba otevřenost syntaxe #2 David Grudl)
Tak a po drobném nakousnutí jsem zvědavý, co bude dál, co to bude ještě všechno umět.. Dobře nás, čtenáře, napínáš.. ;o)
JersyWoo #6
Mě tak napadá, jestli Nette není další z tvých „výstřelků“ ?
Milf #7
Najde se někdo ochotný, kdo by dokázal interpretovat
contacts.en.html
pro jinou jazykovou mutaci, třeba češtinu? dgx, prosím.Shippy #8
To by tedy byl dost krutý žert 🙂
Shippy #9
#8 Shippy, Tedy, to byla reakce na #6 JersyWoo, omlouvám se 🙂
Filda #10
#8 Shippy, třeba to neni legrace, může to bejt nějakej druh workshopu nebo brainstormingu. A po pár dalších dílech seriálu bude mit David dost informací aby to Nette skutečne přes víkend napsal ;)
David Grudl #11
#7 Milfe, nazveš to
contacts.cs.html
a těch několik slov napíšeš česky.#4 Ivane, Transform View neznám, tedy můžu porovnat. Jak se liší tento přístup od XML → XSLT → XHTML je celkem zřejmé. První dvě X* se nepoužívají, vstupem i výstupem je už hotové XHTML. Tento přístup mi více vyhovuje, připadá mi srozumitelnější. Nakonec XSLT si ani po 7 letech existence nezískalo takovou přízeň (ani dostupnost), jak se očekávalo, tedy asi nejsem sám, komu úplně nesedí.
Protože celou skládačku odkrývám postupně, tak na tento princip budou ještě navazovat další techniky a teprve pak se framework ukáže v plné síla.
Ale docela by mě zajímalo, jak by se přes XSLT právě tento princip polymorfismu realizoval, víte to?
#10 Fildo, to by bylo skvělé, jenže koloběh nápad → článek → komentáře se prostě obrátit nedá.
Zdenda #12
Nepište prosím o ASP.NET – dokud si to alespoň trošku neprozkoumáte. Třída MasterPage je vlastně potomkem třídy Page (o třídě Page dle mého názoru nelze napsat, že je primitivně udělaná…), a je rozšířená právě o ty ContentPlaceHoldery…
…dosti ale o asp.net…
Upřímě gratuluji k myšlence Nette – takovýto přístup jsem ještě neviděl. Podobně navržené „systémy“ (záměrně nepíši to sprosté slovo fw) totiž mohou vykazovat jistou známku vnitřní inteligence – jejich využitelnost nikdy není přesně určena.
Milf #13
#11 Davide Grudle, Ok, díky – pak zřejmě mnou citovanou primární zásadu Nic nepsat dvakrát vnímáš poněkud odlišně, respektive ji aplikuješ na jiné části tvorby.
IMHO pokud budu chtít (z jakéhokoliv důvodu) pozměnit šablonu pro kontakty, budu tak činit Nkrát, kde N je počet jazykových mutací.
Nebude se samozřejmě jednat o obsah, který je napříč mutacemi odlišný.
p.s. … že by v dalších dílech? 😉
Stalker #14
#2 Davide Grudle, K tým namespacom: ja by som to predsalen ešte vylepšil takto:
<title nette:id="title">
BTW, ako spracúvaš tie „šablony“? Regulármi alebo parserom?
David Grudl #15
#12 Zdendo, Prosím rozporujte konkrétní omyly a nesuďte mou znalost ASP.NET! Je možná mizerná, ale ASP.NET mám v úctě a určitě mu nechci křivdit. Co je tedy nepravdy na tom, že MP obecně nelze dědit
(tedy jakoby jen jednou, z master na page)a že lze pouze naplňovat předpřipravené kontejnery? Jistě, Master pages jsou super. Ale ve srovnání s mým způsobem je to primitivní.#13 Milfe, Asi moc nerozumím. Samozřejmě, že pokud existuje N jazyků, mělo by existovat i N šablon. Pokud se tedy nepoužije jiný způsob internacionalizace. Ale v každé je zapsáno něco jiného (Kontakty, Contacts, Kontakte, contatto atd..). A pokud dědím šablonu, abych ji rozšířil o nějaký grafický (tedy nepřekládatelný) prvek, stačí mi dědit jen jednou v jednom souboru, bez určení jazyka.
Ivan #16
#11 Davide Grudle, Aha většinu jsem zamlčel :). Sled úvah byl:
XSLT jsem bohužel viděl z rychlíku, ale mám (pouze) pocit, že by to jít mělo (a možná motivaci se na to mrknout).
Každopáně výhodu vašeho přístupu (nemusím znát XSLT) beru. Na druhou stranu XSLT je zaimplementováno ve více jazycích, váš způsob je (zatím?) jen pro php. Je tu i výhoda (otázkou je jak často by byla využívaná), že když bych chtěl (je to příklad, nechtěl bych to :) ), aby místo
<p>Duane Dibley, <i>director</i></p>
bylo
<div>Duane Dibley, <i>director</i></div>
bylo by třeba toto upravit v teoreticky spoustě soubrů. Ale to už je hodně teoretická úvaha. A asi zbytečná.
Zatím se mi přístup Nette líbí. Líbilo se mi i vaše pseudoSQL, které jste však opustil.
pete #17
líbí se mi to, konečně vidím elegantní využití polymorfismu/dedičnosti v php. nicméně, zajímaly by toto:
Ivan #18
#15 Davide Grudle, Nic dvakrát dle mě předpokládá, že není nutné psát:
<li><a href="...">Products</a></li>
a
<li><a href="...">Produkty</a></li>
Myslím, že #13 Milf očekával něco jako:
<li><a href="...">Products</a></li>
Products : Products
Products : Produkty
rarouš #19
#15 Davide Grudle, Zanoření másterů je, myslím, neomezené :) Takže tento princi se podle mého shoduje, jde jen o trochu jinou syntaxi :) V content page neni nutné přepisovat jednotlivé placeholdery (stejně jako v nette DIVy), a obsah se zachová takový jaký byl v Masteru :) Takže více násobná dědičnost vzhledu je možná :)
Díky Davide za inspiraci na další díl, máš to u mě.
noname #20
#18 Ivane, no jak já to chápu, tak tento díl je o „statických stránkách“. To co vy popisujete je chování dynamických stránek a to předpokládám bude Nette umět také a bude to asi i častější. Ale tento díl je o statických stránkách, kdy jde právě o to, že chcete napsat do jinak databázově tvořeného webu nedatabázově tvořené záležitosti. Možná mě dgx ale opraví
Zdenda #21
#15 Davide Grudle, Možná dochází k informačnímu šumu – já jsem myslel MasterPage jako třídu – z čehož samozřejmě dědit jde (o což samozřejmě ve vašem příspěvku nešlo = moje nepochopení).
Jak psal #19 rarouš rarouš – zanoření masterů je zřejmě neomezené. Veškeré vlastnosti a metody dané konkrétní mp jsou přístupné z vlastní stránky – (od všech ovládacích prvků, vlastních metod a vlastností po jánevímcoještě) – ale to se jedná čistě o komunikaci mezi instancemi objektů – tady o žádném dědění nemůže být řeč (i když to možná vzdáleně připomíná).
To by mě právě zajímalo, jestli je to v Nette jinak (pochopení objektů na html stránce, v requestu atd). jinak než v .net (třída Page).
Nicméně přeji hodně zdaru, váš přístup se jeví nekonvenční, jak jsem již výše napsal.
JersyWoo #22
#9 Shippy, No Nette je pěkný název. Podobně se proslavil tenkrát i takzvaný Sodor nebo Český sen a na další podobné vychytávky si už nevzpomínám. hihihi
Milf #23
#15 Davide Grudle, Co se týče jak jsem to myslel zde za mě již napsal někdo jiný, konkrétně Ivan v #16 Ivan a #18 Ivan.
Jinak samozřejmě respekt, jen jsem si chtěl vyjasnit problematiku Nic nepsat dvakrát, těším se na další díly, držím palce. Můj zájem o Nette jsem nasdílel již v začátcích, myslím to upřímně.
Ivan #24
#20 noname, Rozumím, já jen reagoval na #15 David Grudl
:)
David Grudl #25
#16 Ivane,
A přitom taková blbost, že? 🙂 Fakt nevím, nejspíš jo, ale nikde jsem to ještě neviděl.
To není problém, pokud
<p id="blokX">
zaměním za<div id="blokX">
#3 error414,
Ono to jinak nejde. Ty mechanismy jsou velmi prosté a snadno pochopitelné, ale až po předvedení.
Ad ostatní: Tento článek popisuje extrém – ryze statický web. Nette je stavěné především na dynamické weby. Takže berte to spíš jako ukázku techniky dědění stránek, kterou budeme ještě dále rozvíjet.
#19 rarouši, ad Master Page: Omlouvám se, vyjádřil jsem se úplně špatně. Berme to zpět. Samozřejmě, že lze vytvářet více úrovní zanoření kontejnerů a také dědit ze třídy Master. Myslel jsem to docela jinak, v souvislosti s tímto článkem a uvedenou technikou.
Master&Page je něco jakoby
<IFRAME>
. Mohu zanořovat libovolně, to je jasné. Ale žádným frejmem nemůžu upravit jeho okolí na master page. Rozumíte mi? Princip, který funguje v Nette, to je jakoby každý prvek s ID byl takový mini-IFRAME. I když ani to není ono, protože bych musel v každé generaci znovu všechny prvky opakovat. Zkrátka, připouštím, že na první pohled to může vypadat podobně, ale je to něco jiného. A protože Nette může snadno simulovat Master Page z ASP.NET, zatímco obráceně to nelze, označil jsem MP za primitivnější.rarouš #26
#25 Davide Grudle, OK, je to hodně podobný, ale nette v tom jde dál :) Dobrá práce. Mě se to líbí.
Ondřej Pohorský #27
Mám ryze praktický dotaz, jak se to Davide vyslovuje?
Nette = [nete] nebo [net]
??
Ondřej Pohorský #28
a ještě jeden na Rarouše..
Na tom avataru, je to Nick Cage, nebo se mi to jen zdá?
David Grudl #29
#17 pete,
Je to trošku složitější. Používám preprocesor, který je připraví pro PHP DOM a tím je pak parsuju. Na kompatibilitu s PHP4 začínám zvolna kašlat…
To už je dynamika. S ní je možné celou stránku přeházet k nepoznání.
#21 Zdendo,
Velký rozdíl je v tom, že Nette chápe jako objekty všechny HTML prvky na stránce. Tedy nejen komponenty. Ale obecně popisovat rozdíly si netroufám, to nechám pak na tobě jakožto zkušeném ASP.NETaři 🙂
#27 Ondřeji Pohorský, Tos mě dostal já to zatím jen psal 🙂
Zdenda #30
#25 Davide Grudle, Ještě drobná poznámka – ovlivňovat chování na masterpage z cílové stránky (jakkoli zanořené) samozřejmě lze – každá stránka zná svého Mastera 🙂 – zná a může ho měnit se vším všudy. Změny mohu ovšem provádět jen v kódu na pozadí. V nette to zřejmě jde jaksi deklarativně.
Ondřej Pohorský #31
#29 Davide Grudle, – Aha :) , no, chtělo by to možná pomoc nějakého lingvisty.
Je to prozatím asi nedůležité, ale každý ví, že [gůgl] není [gogle], tak by i u Nette pro případ, že na něj třeba někde u sklenice piva přijde řeč bylo jasné, jak to vyslovovat
David Grudl #32
#30 Zdendo, ovlivňovat chování nebo statický HTML obsah? Držme se tématu.
#31 Ondřeji Pohorský, já asi budu používat u sklenice piva [nete] 🙂
Ondřej Pohorský #33
Ty jsi pan architekt, my se podřídíme :), čili budiž [nete].
rarouš #34
#28 Ondřeji Pohorský, It's me ;)
#32 Davide Grudle, Z jistého úhlu pohledu (jako že v nette stačí přidat atribut
id
, v dotnetu musíš navíc připrat irunat="server"
) dosáhneš stejného. V nette to uděláš deklarativně, v dotnetu programově (pokud neberu v úvahu contentplaceholdery). To chování je do značné míry podobné. Podle toho, co ale píšeš, jde nette o kousek dál.Ondřej Pohorský #35
#34 rarouši, neuvěřitelná podoba. možná kvůli tak malé velikosti toho avataru
Lukáš Lánský #36
#2 Davide Grudle,
No, takže po téhle diskusi z tohoto způsobu zbylo navíc co? Jestli polymrfismem myslíš co si myslím, tak CPHoldery můžu dědit a Mastery vnořovat v .NETu stejně. Předefinovávání funguje taky stejně, pokud od CPHolderu umístím obsah, bere se jako default při neuvedení šablony.
Takže: místo ASP.NETích contentplaceholderů používáš id=„…“, což je teda kratší, a navíc… ? Pokud nic, bylo by dobré ten tvůj úvodní příspěvek proškrtat. Možná se ale mýlím, nevím…
rarouš #37
#35 Ondřeji Pohorský, to dělaj ty brejle :) o něco větší ;)
#36 Lukáši Lánský, viz #25 David Grudl
Ondřej Pohorský #38
#37 rarouši, – jj, je to těmi brýlemi :)
https://web.archive.org/…news/hat.jpg
TimJ #39
#37 rarouši, opravdu hegeš (jsi snad první koho tohle slovo vidim používat – vyjma mý rodiny ;)).
Jinak nette vypadá víc než luxusně, těším se. Super práce.
mrzout #40
Prvek se stejným id přepíše prvek rodičovský.
Proc je v te sablone
<body>
kdyz nema ID a teda nic neprepisuje?David Grudl #41
#36 Lukáši Lánský, Po diskuzi se nezměnila ani čárka, jen jsme si ujasnili, že jeden o voze a druhý o koze. Abych jasně demonstroval rozdíl, ukážu jednoduchý příklad:
stranka1.html
:stranka2.html
:stranka3.html
:Zkus přesně tohle udělat v ASP.NET. Pak pochopíš, o jak zásadní rozdíl jde.
(a to ještě není použita významná podpora pro multijazyčné šablony)
David Grudl #42
#40 mrzoute, V článku je tomu věnován celý odstavec.
Pin007 #43
#31 Ondřeji Pohorský, a jeste jedna vec, je to zenska, kluk nebo dite?
:D
Pin007 #44
pardon… nejak se mi vytratil prvni radek… ptal jsem se jestli to je zenska, chlap nebo dite ;)
Leo #45
„A následují prvky, které chceme přepsat, stejně jako když predefinováváme metody v OOP. Rozhodující je identifikátor id. Prvek se stejným id přepíše prvek rodičovský.“
Jak budou (jsou) v Nette osetrene chyby – naprklad kdyz v souboru contacts.en.html zapomenu uzavrit nejaky div, nebo napisu spatne id? Leo
llook #46
A pak že Nette nebude šablonovací systém…
#43 Pin007, Já bych řekl dégéixovo nete
Pachollini #47
Jen takové poznámka k syntaxi: nebylo by pěkné, když už to jako XML vypadá, aby to taky XML bylo? Dalo by se pak např. kontrolovat správné ststavení pomocí standardních nástrojů.
A pokud by tam nebylo pro id, které se mají vynechat, „@“, ale třeba „_“, dalo by se to za jistých okolností i validovat. Ale to asi vtéto fázi stejně nebude potřeba.
Leo #48
„dalo by se to za jistých okolností i validovat“
Validovat tenhle meziprodukt musi Nette samotne a tomu je jedno jaky symboly se pouziji, ne?
Adam Hošek #49
#43 Pin007, #46 llook Pozor na jazyk! El Degeixo, obávaný obchodník s drogou LCD, hýčká si své dítko Nette. Jistě se mu nebude líbit, když si z něj budeme dělat šoufky 😉.
(z tajného zdroje z ostrova Haiti)
johno #50
Ako spravím v tom hlavnom menu v zdedených stránkach nejako jednoducho klasickú fintu
class="selected"
nali
, ktorý je práve aktuálny?medden #51
#50 johno, Celkom zaujímavá otázka, síce neviem či to dgx implementoval, ale mal by som návrhy ako by sa to mohlo spraviť: stačilo by určiť, že nejaký div je menu, a potom ak adresa odkazu je zhodná s aktuálnou stránkou a je to v menu povolené/nakonfigurované, pridalo by sa jednoducho do li class selected.
johno #52
#51 meddene, Obávam sa, že menu nebude jediné „problematické“ miesto. Použil som to len ako príklad.
Osobne skôr tipujem menu ako jeden zo základných komponentov, ale nie som si vôbec istý, tak sa pýtam. Nejaké dohady tu môžeme riešiť donekonečna a úplne zbytočne, takže túto otázku tentokrát smerujem priamo na DGX.
Adam Hošek #53
#52 johno, Obávám se, že El Degeixo má vše dostatečně promyšlené. Tedy vlastně snad už implementované. 🙂
johno #54
#53 Adame Hošku, Citujem sám seba.
David Grudl #55
#50 johno, správná otázka, čekal jsem ji mnohem dřív 🙂
Preferoval abych asi dynamické řešení, tedy skriptováním. Během inicializace stránky (něco jako Page_Load pro ASPáky) se prostě nastaví (něco jako)
$document->getElementById('menu')->ul->li[xx]['class'] = 'active';
, kde xx bude určeno podle požadované stránky.Lze to řešit i na čistě statické bázi, a to přiřazením ID jednotlivým položkám
<li>
(napřid="_menu1" až "_menu4"
) a tu jedinou položku pak předefinovat:<li id="_menu2" class="active" override="tag" />
Volitelný atribut override říká, že se přepíše pouze značka samotná, nikoliv její obsah. Tedy případná změna názvu položky v menu se pak provede jen na jednom místě. I v případě multijazyčného webu.
johno #56
#55 Davide Grudle, Prepáč, ale bol som na lyžovačke.
Osobne by som to menu asi riešil komponentou. Neviem však ako sa to v Nette robí, tak tápam. Ja menu a zďaleka nie len to riešim cez niečo ako komponent.
To riešenie s
menu1
ažmenuN
napadlo aj mňa, ale úprimne čakal som teda lepšiu fintu.Tento zápis je však skvelý. Teda ani nie tak v tomto kontexte, ale skôr všeobecne ako nápad.
$document->getElementById('menu')->ul->li[xx]['class'] = 'active';
Kde som také niečo videl? 😉
David Grudl #57
#56 johno, Jasně, komponenta je asi nejlepší způsob. Ale to už jsme o dva kroky dál.
Nechci framework zaplevelovat fintami pro řešení okrajových úloh. Návrh by měl být čistý. Nastavení aktivní položky menu je úkol jak dělaný pro skript a pak stačí skutečně jeden příkaz.
Jinak ten zápis
$menu->ul->li[xx]['class'] = 'active';
jsem použil podle konvencí SimpleXML. Ale některé problémy mě od něj trošku odrazují…johno #58
Jasné! KISS. Keď to pôjde komponentou, nie je problém.
Položka v menu bol len akýsi príklad problému, čo sa mi na demonštráciu hodil. Také okrajové to všeobecnejšie teda nevidím, ale to už som zase pri komponentách, ktoré to väčšinou riešia. Teda aspoň mne sa to zatiaľ darí.
Inak to prevedenie dedenia šablón (ak to môžem nazvať tak vulgárne) sa mi pozdáva.
Prvé čo ma pri pohlade na to napadlo, bolo to, že či nebudeš potrebovať niekedy niečo ako mixiny. Dá sa to použiť na lepšie rozbitie a znovupoužitie spoločného správania. Čo však môže znamenať „správanie“ v šablóne netuším takže toto je len taký prvotný nočný výkrik.
rarouš #59
#39 TimJi, Hegeš je diskotéka – to není z mé hlavy ;) (i stránky maj hegeš)
#48 Leo, Samozřejmě, že Nette by to mělo validovat, ale proč mu neusnadnit práci tím, že mu hodíme validní XML – dá se s tim pak lépa pracovat a vymejšlet nad tím různé fičůrky. Nejen na straně serveru, ale někdo to musí i editovat, a když se do Editoru hodí jen schema Nette, mělo by to být v poho…
Leo #60
„Ako spravím v tom hlavnom menu v zdedených stránkach nejako jednoducho klasickú fintu class="selected“ na li, ktorý je práve aktuálny?"
Pokud jde jen o vzhled, proc to nevyresit na urovni CSS? Napriklad: Znacce body kazde stranky date id podle toho jaka polozka v menu se ma zvyraznit, kazde polozce v menu vlastni id:
Leo
johno #61
#60 Leo, Tak za prvé: Nejde len o vzhľad. Väčšinou je aktuálna položka už nie je linka.
Za druhé: Aj keby to bol len vzhľad, tak aj to id musí generovať nejaká logika. Potom to id ešte treba vkladať do šablóny. Takže žiadna veľká sláva.
Leo #62
#61 johno, Vsak jsem psal pokud jde o vzhled.
„Väčšinou je aktuálna položka už nie je linka.“
S tim, ze vetsinou znamena zridka, pokud vubec, osobne takovych webu moc neznam.
„Aj keby to bol len vzhľad, tak aj to id musí generovať nejaká logika.“
Jasne, ale odkazy se musi lisit uz ruznym href, ktere generuje nejaka logika, takze o nic nejde.
Leo
Filip Minárik #63
Zaujimavá myšlienka s dedením html súborou, predpokladám, že používaš na nahradzovanie tagov DOMDocument.
Čo sa týka jazykových verzií, ma napadlo to riešiť cez stringy, v joomle je to xml subor pre každú stránku, čo je dost nešikovné(vznikajú duplicitné stringy).
Druhé riešenie je pred parsovanim vytiahnúť všetky stringy z documentu <?lang value=‚nazov stringu‘ ?>, kde pri definovaní lang dokumentu dostaneš druhý parameter jazykovú mutáciu($_SESSION, $_REQUEST), ked ich vyzbieraš do pola z dokumentu dáš iba dotaz na databázu/súbor, nech ti vytiahne predmetné stringy.
lang je názov triedy s unikátnou inštanciou(vzor singleton) kde jednotlivé vytiahnuté stringy sú property objektu. V prípade projektu s jazykovou mutáciou, keď budeš upravovať stránky, tak jednoducho si zvolíš na začiatku jazykovú mutáciu a sa ti natiahnú stringy. Ak string neexistuje vráti false a ty ho pak môžeš zeditovať. Ale to by mohla byť len extension pri jazykových mutáciach do nette(čiže v jednojazyčnom webe sa použije klasika viď. tvoj príklad).
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.