Autor Zpráva
mzk
Profil *
Zdravím,
potřeboval bych poradit, jakým způsobem bych měl postupovat.
Mám pole s odkazy a jednoduchou šablonu:
..
nějaké html
..
{začátek cyklu - pole odkazy}
    <li><a href="{url}">{text}</a></li>
{konec cyklu}
..
nějaké html
..
poraďte jak mám vyhledat ten cyklus a nahradit to polem aby výsledek byl "seznam odkazů"
..
nějaké html
..
    <li><a href="odkaz.htm">text odkazu</a></li>
    <li><a href="odkaz.htm">text odkazu</a></li>
    <li><a href="odkaz.htm">text odkazu</a></li>
    <li><a href="odkaz.htm">text odkazu</a></li>
..
nějaké html
..
Dědeček
Profil
Budu předpokládat, že v key máš odkaz a v value máš text odkazu

<?php
$polesodkazy=array("http://example.com"=>"Example.com","http://example.eu"=>"Example.eu");
foreach($polesodkazy as $key => $value)
{
echo '<li><a href="'.$key.'">'.$value.'</a></li>';
}
?>
mzk
Profil *
Dědeček:
díky za odpověď, ale bohužel jsem to špatně popsal.. {začátek cyklu - pole odkazy} <li><a href="{url}">{text}</a></li> {konec cyklu} je šablona, kterou potřebuji jednoduše měnit. Např. <li> vyměním za <br> atd. jsou na to šablonovací systémy, ale z nich jsem nepochopil, jak tuto operaci provádí
Alphard
Profil
mzk:
A tam není {foreach}?
Třeba v Latte by to šlo snadno, ale my fakt nevíme, co používáte.
mzk
Profil *
Alphard:
nepoužívám nic, to je příklad.. Potřeboval bych to jako jednoduchej šablonovaci system.. A prave nevim, jak to vyřešit. Jestli to nějak projít reg. výrazem a najít to mezi {cyklus} a {konec.. ale nevím, jak s tím dál pracovat.. Výsledek chci ukládat pak do souboru.
Alphard
Profil
Aha, už zase :-) Má rada je použít hotový mocný (a velký) šablonovací systém.
Jinak viz Systém šablon, jsou tam zmíněny i menší systémy a následně hned problém, že nejde cyklus zanořit...
mzk
Profil *
Alphard:
jojo, už zase.. na to jsem se díval, ale je tam k mému "problému" zmíněno jen to, že vycucnout reg. výrazem <li><a href="{url}">{text}</a></li> když budu mít toto, tak to zvládnu nahradit podle potřeb, ale nevím jak to nahrazené dostat do toho html.
Alphard
Profil
mzk:
Už minuje jsem slíbil, že uvedu jednoduchý příklad, takže:

menu.tpl
<ul>
    {foreach #menu}
    <li><a href="{#url}">{#name}</a></li>
    {/foreach}
<ul>

index.php
<?php

$replace['menu'] = array(
  array('url' => 'http://djwp.cz', 'name' => 'Diskuse jak psat web'),
  array('url' => 'http://php.net', 'name' => 'Manual PHP net'),
);

$tpl = file_get_contents('menu.tpl');

preg_match_all('~{foreach #(\w+)}(.+){/foreach}~isU', $tpl, $loops);


foreach ($loops[1] as $key => $name)
{
    $temp = '';
    foreach ($replace[$name] as $dic)
    {
        $t = $loops[2][$key];
        foreach ($dic as $k => $v)
        {
            $t = str_replace("{#$k}", $v, $t);
        }
        $temp .= $t;
    }
    $tpl = preg_replace('~{foreach #'.$name.'}(.+){/foreach}~isU', $temp, $tpl);
}


echo $tpl;

A výstup
<ul>
    
    <li><a href="http://djwp.cz">Diskuse jak psat web</a></li>
    
    <li><a href="http://php.net">Manual PHP net</a></li>
    
<ul>

Víc se s tím zabývat nebudu. Když vás baví vynalézat kolo, je to vaše věc.
mzk
Profil *
Alphard:
díky moc! kolo vynalézat nebudu, jen jsem chtěl vědět, jakým způsobem se to řeší. moc mi to pomohlo. ještě jednou díky!
Alphard
Profil
[#9] mzk
Právěže se používají kompilované šablony a řeší se to jinak...
mzk
Profil *
Alphard:
tak zas nic :-D ale aj tak dik!
Ugo
Profil
mzk:
řeší se to takto ...
if(neni nakesovanej soubor) {
$text = file_get_contents(SABLONA);
$text = preg_replace({foreach} za <?php foreach(); ?>);
file_put_contents(nakesovanej soubor, $text);
}
include(nakesovanej soubor);

je to lehčí než procházení regulárama což by šlo taky, ale zbláznil by ses z toho a přitom ti to dává víc možností, jedinej problém je - musíš mít práva zápisu, ale zatim sem se nesetkal s tim že by nebyly a zbytek webu by šel, asi vždycky sou někde potřeba

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: