NorskFirefox Skrevet 3. juni 2006 Del Skrevet 3. juni 2006 Hei, bruker nå følgende funksjon i template systemet mitt. <?php function template($file) { if($file) { echo preg_replace('/\{(.*?):(.*?)\}/e', 'ReplaceVar(\'${1}\', \'${2}\')', file_get_contents('templates/'. admin('template') .'/'. $file .'.tpl')); } } ?> Men vil loope noe som ligger i en fil. Hvordan kan jeg enklest klare det? Det som skal loopes ligger mellom /* Loop */ og /* /Loop */. (Helst uten eller en annen metode hvis det ikke er store problemet..) Lenke til kommentar
robgar Skrevet 3. juni 2006 Del Skrevet 3. juni 2006 (endret) hmm, en ide som kanskje kunne funket er noe lignende dette: FIL: html mer html /loop Det du vil "loope" /loop ferdig resten av html php $fil = file("filen.htm"); $GetFile = ""; $GetLoop = array(); $LoopIndex = 0; foreach ($fil as $linje => $innhold) { $check = str_replace(" ", "", $innhold); // fjerner "ny linje" tegnet som kommer med på hver linje. if ($check == "/loop") { $catchLoop = 1; } if ($check == "/loop ferdig") { $catchLoop = 0; } $GetFile .= $innhold if ($catchLoop == 1) { $GetLoop[$LoopIndex] = $innhold; $LoopIndex++; } } $i = 1; // hopper over første linje i det som skal kopieres (fordi dette er /loop) while ($i < sizeof($GetLoop)-1) { // hopper over siste linje (-1) $theLoop .= $GetLoop[$i]; $i++; } //Så har du innholdet som du kan loope så mye du vil med. Kanskje ikke en så altfor enkel og forklarende kode jeg har skrevet, men får håpe den hjalp. Endret 3. juni 2006 av robgar Lenke til kommentar
NorskFirefox Skrevet 4. juni 2006 Forfatter Del Skrevet 4. juni 2006 Forstod ikke helt den. Det som skal "loopes" skal "loopes" x ganger ut ifra en variabel som tidligere er satt. Filen ser noe slik ut: <table width="687" border="0" cellspacing="0" cellpadding="0"> <!-- loop --> <tr> <td>{DATA:forum_name}</td> </tr> <!-- /loop --> </table> (Endret start og avsluttningstaggen, det endret jeg også i koden du viste). Alt mellom { og } skal også byttes ut ved hjelp av funksjonen over. Har funnet en enkel løsning, men det er helt sikkert ikke den beste metoden. Så om noen da kunne hjulpet meg med å optimalisere den? $fil = file_get_contents("forum.tpl"); $loop = explode("<!-- loop -->", $fil); $loop_del = explode("<!-- /loop -->", $loop[1]); echo $loop[0]; $i = 0; while($i < 10) { echo $loop_del[0]; $i++; } echo $loop_del[1]; Lenke til kommentar
robgar Skrevet 4. juni 2006 Del Skrevet 4. juni 2006 (endret) <table width="687" border="0" cellspacing="0" cellpadding="0"> <!-- loop --> <tr> <td>{DATA:forum_name}</td> </tr> <!-- /loop --> </table> $fil = file("filen.htm"); $GetFile = ""; $GetLoop = array(); $LoopIndex = 0; foreach ($fil as $linje => $innhold) { $check = str_replace(" ", "", $innhold); // fjerner "ny linje" tegnet som kommer med på hver linje. if ($check == "<!-- loop -->") { $catchLoop = 1; $GetFile .= "{loopaSkalByttesUtHer}"; } elseif ($check == "<!-- /loop -->") { $catchLoop = 0; } else { $GetFile .= $innhold } if ($catchLoop == 1) { $GetLoop[$LoopIndex] = $innhold; $LoopIndex++; } } $i = 1; // hopper over første linje i det som skal kopieres (fordi dette er /loop) while ($i < sizeof($GetLoop)-1) { // hopper over siste linje (-1) $theLoop .= $GetLoop[$i]; $i++; } // Så kommer funksjonen din som bytter ut hvert forum : // Fiktiv løkke.... Hvet ikke funksjonen din;) $i = 0; $antall = 10; while ($i < $antall) { $byttesUT = "data fra sql"; $FINISHED_LOOP .= str_replace("{DATA:forum_name}", $byttesUT, $theLoop); $i++; } // Nå har 2 viktige stringer, template stringen, uten loop delen, og selve loopdelen (med alt som skal "loopes". Disse setter vi nå sammen og printer. $output = str_replace("{loopaSkalByttesUtHer}", $FINISHED_LOOP, $GetFile); print $output; Mener denne her skal funke nå... Det den gjør er 1. hente inn template filen i en string ($GetFile) 2. Sjekke at tegnet for loop kommer 3. Og når det kommer, setter den det som skal loopest i egen array ($GetLoop)* 4. Legger til {loopaSkalByttesUtHer} på $GetFile for å bytte ut den ferdige listen i slutten av scriptet. 5. Når loop slutt tegnet kommer, henter den inn resten av temp. filen i $GetFile. 6. Gjør arrayet($GetLoop) om til en string ($theLoop), men hopper over første og siste linje, da disse linjene er tegnet i templaten. 7. så må du legge inn alle forumnavnene, og derreter: 8. Erstater den {loopaSkalByttesUtHer} med hele listen, i template stringen, og du har en output noe alla denne: <table width="687" border="0" cellspacing="0" cellpadding="0"> <tr> <td>Generell diskusjon</td> </tr> <tr> <td> Off topic </td> </tr> </table> Håper jeg nå klarte å gjøre koden forståelig.. Endret 4. juni 2006 av robgar Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå