Autor Zpráva
had
Profil *
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
$pattern = '/{(\/)*block([^}]*)}/';
- použi flag PREG_OFFSET_CAPTURE
- následne v cykle spracuj výsledky
Jan Tvrdík
Profil
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 *
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 *
A co třeba jednodušší provedení?

<?php
$page = new Sablona("soubor.latte");
$page->promenna = "obsah";
$page->render();
?>
buchti
Profil
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 *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: