Gilbert Skrevet 25. desember 2005 Del Skrevet 25. desember 2005 Tusen takk til Torbjørn for svar på det forrige problemet mitt. Jeg prøver ut forskjellige template-ideer, og sitter fast når det kommer til regexp. Det er virkelig noe jeg sliter med, men av det jeg leser i tuts og fora ser jeg at jeg heldigvis ikke er alene. <html> <body> {TEMP:header} <div class="main"> {LABEL:welcome} </div> {TEMP:bottom} </body> </html> Jeg vil altså skifte ut {TEMP:header} med $templates->get_template('header') og {LABEL:welcome} med $functions->language('welcome'); Mine forsøk har vært så langt lærerike men utrolig langt fra svaret, og jeg spør så ærbødigst om noen kan hjelpe meg videre. Lenke til kommentar
Beethoven Skrevet 25. desember 2005 Del Skrevet 25. desember 2005 Kan du ikke bruke str_replace da? Eks: <?php $str = str_replace('{TEMP:header}', $templates->get_template('header'), $str); ?> Kan hende jeg er på jorde... Lenke til kommentar
Gjest Slettet+6132 Skrevet 25. desember 2005 Del Skrevet 25. desember 2005 Tror han er ute etter en dynamisk funksjon, slik at den kan brukes som et fullverdig templatesystem. Ain't I right? Lenke til kommentar
Gilbert Skrevet 25. desember 2005 Forfatter Del Skrevet 25. desember 2005 Det stemmer nok det ja For øvrig er jo Beethovens forslag godt, men det fungerer altså ikke til min idé dessverre. Lenke til kommentar
Zic0 Skrevet 25. desember 2005 Del Skrevet 25. desember 2005 Jeg lagde en templatemotor en gang. SKal se om jeg finner den fram. Så kan du se litt på den. Lenke til kommentar
Gilbert Skrevet 25. desember 2005 Forfatter Del Skrevet 25. desember 2005 (endret) Topp saker! Det nærmeste jeg har kommet er... /(.*)?({\[([\w]+)[^\]}]*\]})(.*)({\[\/\\3\]})(.*)?/sU ...men den er ikke optimal, og jeg skjønner ikke hva det står sånn uten videre. edit: Den er fra et templatescript som utfører omtrent det jeg er ute etter, derfor vil jeg tro den var nær. Ut fra mitt eget hode ville noe sånt som... \{LABEL_([A-ZÆØÅ0-9]*)[^}]\} ...være mer naturlig. Endret 25. desember 2005 av fjartan Lenke til kommentar
kilogram Skrevet 26. desember 2005 Del Skrevet 26. desember 2005 Det enkleste regexpet vil vel være noe slikt som dette; /\{LABEL_([^\}]*)\}/i Denne leter, uten å gjøre forskjell på store og små bokstaver, etter noe som starter med "{LABEL_" og blir avsluttet med en "}", hvor det imellom ikke inneholder "}". Om du vil ha det case-sensitivt, fjerner du bare den aller siste bokstaven. Legg merke til at denne godkjenner mellomrom og linjeskift i navnene, og om du vil unngå dette, kan du bruke følgende; /\{LABEL_([^\}\s]*)\}/i Lenke til kommentar
Gilbert Skrevet 26. desember 2005 Forfatter Del Skrevet 26. desember 2005 Enklest er av og til mer enn nok brukbart. Tusen takk alle sammen Lenke til kommentar
Ultrag Skrevet 27. desember 2005 Del Skrevet 27. desember 2005 Hvordan blir dette i funksjonsform? Hvordan erstatter man det i mellom med en funksjon? Lenke til kommentar
kilogram Skrevet 27. desember 2005 Del Skrevet 27. desember 2005 Hvordan blir dette i funksjonsform? Hvordan erstatter man det i mellom med en funksjon? 5342358[/snapback] Om det er snakk om å erstatte det med resultatet frå ein funksjon, er dette svært enkelt; $nytekst = preg_replace('/\{LABEL_([^\}\s]*)\}/i', funksjon(), $gammeltekst); Lenke til kommentar
Ultrag Skrevet 27. desember 2005 Del Skrevet 27. desember 2005 Hvordan får man resultatet inn i funksjonen? Altså: $nytekst = preg_replace('/\{LABEL_([^\}\s]*)\}/i', funksjon('resultat'), $gammeltekst); Lenke til kommentar
jorgis Skrevet 27. desember 2005 Del Skrevet 27. desember 2005 (endret) Resultat lagres i variabelen $1 eller \\1. EDIT: Men forresten: hvorfor gjøre det så tungvindt? I et prosjekt jeg sysler litt med (Vikingboard), skriver vi templatene slik: {$data['variabelnavn']}, og bruker en løkke til å hente ut alle variablene, og bytte dem ut med et array. Gjør det mye lettere å skrive nye templates med tilhørende filer (slipper en haug med regexper eller str_replace()), samt at det er temmelig raskt i forhold til regexp eller annet tøys. Det som gjør selve byttingen av dataene er PHP selv, siden {$variabel} i en string blir automagisk byttet med verdien til $variabel når du kjører det gjennom eval(). Fordelen med dette er at det blir utrolig raskt, mens ulempen er da selvsagt at vi må bruke eval(). Bruk av eval() bør selvfølgelig unngås, men i dette tilfellet er det umulig. Siden det bare er interne data som håndteres vil jeg si at det er sikkert nok å bruke eval(). Ta en titt på kildekoden vår om du lurer på noe. Endret 27. desember 2005 av jorgis Lenke til kommentar
Ultrag Skrevet 27. desember 2005 Del Skrevet 27. desember 2005 Ah, ok, skal titte på det. Problemet blir jo løkker som må løses på en annen måte. Men bør jeg evale hele fila, eller dele den opp? I så fall hvordan? 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å