Gå til innhold

Regexp i templates - hvordan gjenkjenne {code}


Anbefalte innlegg

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
Videoannonse
Annonse

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 av fjartan
Lenke til kommentar

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

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 av jorgis
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...