Autor | Zpráva | ||
---|---|---|---|
had Profil * |
#1 · Zasláno: 28. 10. 2013, 20:51:53
Dobrý večer,
rád bych si napsal vlastní šablonovací mini-systém, ale narazil jsem na malý problém. Potřeboval bych poradit, jakým způsobem vyřešit / jaký použít regulární výraz, abych zvládl zpracovat detekci vnořených bloků? Struktura: ======= {block #blok1} {block #blok2} odkaz... {block #blok3} vnořená část 3 {/block} nějaký text {/block} další texty {/block} {block #blok55} pejsek šel do světa... {/block} a potřeboval bych (nejspíš fcí preg_match_all()) dostat všechny obsahy bloků do pole... poradíte, prosím, jak na to? |
||
tiso Profil |
#2 · Zasláno: 28. 10. 2013, 22:06:51
$pattern = '/{(\/)*block([^}]*)}/'; PREG_OFFSET_CAPTURE
- následne v cykle spracuj výsledky |
||
Jan Tvrdík Profil |
#3 · Zasláno: 28. 10. 2013, 22:21:02
had:
„rád bych si napsal vlastní šablonovací mini-systém“ Máš nějaký důvod, proč nepoužít existující šablonovací systém? |
||
had Profil * |
#4 · Zasláno: 29. 10. 2013, 08:51:47
Jan Tvrdík:
„Máš nějaký důvod, proč nepoužít existující šablonovací systém?“ Ano. Latte, které používá Nette (přestože se načítá jen to, co je potřeba), je zbytečně moc složité (hlavně na zavádění), "vnucuje" svou strukturu a kvůli každé šabloně musím nastavovat Xkrát cachování, které (podle mě) není vůbec potřeba. Proč mít X tříd a souborů - nestačí jeden soubor a jedna třída? Další důvod proti je, že má otevřené zdrojové kódy - je vyladěné, ale zároveň všichni ví, jak lze aplikaci napadnout. Latte má silně vychytané helpery a syntaxi. To tam samozřejmě chci zachovat, ale pro mou potřebu není potřeba, abych měl "monstrózní" šablonovací systém, ikdyž chápu jeho výhody. Použil bych P.E.T., ale neumožňuje (alespoň pokud vím) dědičnost šablon a helpery. Proto chci skloubit tyhle dva dohromady. Tiso: děkuju, za chvíli to vyzkouším. |
||
Jan Tvrdík Profil |
had:
Tím složitým zaváděním a konfigurací máš na mysli, že musíš napsat jednu 17 řádkovou funkci? Pro Twig má ta funkce dokonce jen 10 řádků. „Další důvod proti je, že má otevřené zdrojové kódy - je vyladěné, ale zároveň všichni ví, jak lze aplikaci napadnout.“ V tom případě doufám, že nepoužíváš Linux, PHP, MySQL ani Apache =) |
||
had Profil * |
#6 · Zasláno: 29. 10. 2013, 09:24:36
A co třeba jednodušší provedení?
<?php $page = new Sablona("soubor.latte"); $page->promenna = "obsah"; $page->render(); ?> |
||
buchti Profil |
#7 · Zasláno: 29. 10. 2013, 09:29:19
já používám Twig, sice jako součást Symfony2. doporučuji
|
||
Jan Tvrdík Profil |
had:
„A co třeba jednodušší provedení?“ Mně připadá volání renderTemplate('soubor', ['promenna' => 'obsah']) jednodušší, ale klidně si na to tu třídu napiš.
Ono mimochodem, když tu funkci přejmenuješ na createTemplate a nakonec místo $template->render() dáš return $template , tak pak můžeš klidně psát
$page = createTemplate('soubor'); $page->promenna = "obsah"; $page->render(); |
||
had Profil * |
#9 · Zasláno: 29. 10. 2013, 09:43:54
Jan Tvrdík:
„Mně připadá volání renderTemplate('soubor', ['promenna' => 'obsah']) jednodušší, ale klidně si na to tu třídu napiš.“ Tomu ale předchází tvých 17 řádků konfigurace. Já tu žádnou konfiguraci před použitím ani nepotřebuju. :-) A napsat třídu do jednořádkového provedení není problém. |
||
Časová prodleva: 10 let
|
0