jak použít preg_match_all v latte

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Rellik
Člen | 104
+
0
-

Zdravím vespolek. Trápím se s „vycucnutím“ jedné hodnoty z vypsaného textu na stránce. Abych vysvětlil co potřebuju:
Mám stránku s textem, kde se může vyskytnout odkaz na soubor pdf. Pokud se tento odkaz objeví, potřebuju aby se dal nějak zjisit název souboru. To bych zvládl v presenteru pomocí

// odkaz je v DB ve formátu <a href="dokument.pdf">dokument.pdf</a>
preg_match_all("/pdf">(.*)</Us",$pdf,$match, PREG_SET_ORDER);
$this->template->pdf = $match['0']['1']; // tím dostanu název dokumentu

Bohužel se to vypíše pokaždé (mám na stránce takové texty 4 a tak se to oběví u všech) Takže bych tuto část, kde získávám ten název, chtěl použít v latte, kde jsou články vypisovány pomocí foreach. Bohužel, když sem ten preg_match_all dal přímo do šablony, tak už se to se mnou nebavilo. Poradí někdo jak to provést v latte? Potřebuju to pro vytvoření náhledu PDF s odkazem na stránku, kde bude možné PDF číst přímo.
Díky

Editoval Rellik (10. 10. 2012 18:48)

Filip Procházka
Moderator | 4668
+
0
-

Použij DomDocument a Xpath.

Rellik
Člen | 104
+
0
-

Díky ale moc moudrý z toho nejsem. 8-|

Filip Procházka
Moderator | 4668
+
0
-

Já z tvé otázky také ne.

Nox
Člen | 378
+
0
-

Imho to radši dej víckrát do presenteru (příp. vyčlenit do spešl funkce), než to plácat do šablony

Rellik
Člen | 104
+
0
-

Ok.
Mám vkládání příspěvků do DB pomocí textarey s TinyMCE nástavbou. Pokud do toho příspěvku přidám odkaz na dokument pdf, tak bych z něho na výstupu chtěl udělat náhled PDF (není nutné) a odkaz na stránku, kde by bylo možné číst PDF aniž bych ho musel sahovat (Mám hotové). Jen mě brzdí to, že z toho textu, kerý se vypíše z DB potřebuju získat název toho dokumentu. Jelikož ale těch příspěvků mám na jedné stránce několik, tak to musím nějak řešit až ve výstuptu v latte.
Kód:

{foreach $content as $news}
{!$news}
// tady potřebuju z toho $news dostat z odkazu na dokument název dokumentu, pokud je teda přiložen.
// odkaz je v DB ve formátu <a href="dokument.pdf">dokument.pdf</a>
{/foreach}

Když sem zkoušel zakomponovat tu funkci preg_match_all přímo do latte tak háže chybu Undefined offset 0

pokusný kód:

{foreach $content as $news}
{!$news}
{preg_match_all("/pdf">(.*)</Us",$news,$match, PREG_SET_ORDER)}
{var $pdf= $match[0][1]}
<img src="{$basePath}/nahled_pdf.php?pdf={$pdf}" alt="">
{/foreach}

No a právě proto se ptám… :)

EDIT: NOX ono ten počet příspěvků na stránce je různý od 1 po 10 + stránkování, tak myslím, že do presenteru to nebude to pravé ořechové…

Editoval Rellik (10. 10. 2012 21:59)

vvoody
Člen | 910
+
0
-

Preco to chces parsovat kazdy krat pri zobrazeni stranky? Ved to staci len raz, ked ho ukladas do db.

Nox
Člen | 378
+
0
-

Jaký je v tom rozdíl? Cykly přece znáš, ne?

Rellik
Člen | 104
+
0
-

vvoody napsal(a):

Preco to chces parsovat kazdy krat pri zobrazeni stranky? Ved to staci len raz, ked ho ukladas do db.

Tohle chci použít pro starší záznamy, které už existují…

Zítra na to kouknu ještě jednou… Dnes už toho mám plnů hlavu… :-(

Rellik
Člen | 104
+
0
-

Tak už sem to vyřešil, sice ne uplně přímo čistě, ale nicméně to funguje jak má… http://veletiny.cz/ – Kde je v článku příloha PDF, tak se přidá odkaz na online čtení dokumentu…
Takže díky všem co se snažili nějak pomoct. :)