God kveld
Har et selvlaget CMS der jeg har muligheten til å hente opp funksjoner/plugins i WYSIWYG editoren ved å taste inn {function::FUNKSJON(VARIABLER)}. Skal forsøke å forklare hvordan det fungerer under.
Slik skriver jeg ut en nyhet, der $output er diverse markup samt nyheten.
Denne funksjonen leser igjennom markupen for å lete etter funksjoner "{function::}"
Finner den treff så sender den en callback til funksjonen "page_functions"
Her er et eksempel som ikke fungerer.
Denne skal da kalle opp php-funksjonen email (selvlaget funksjon) med stringen "user@domain.tld" som første parameter.
Jeg har debugget litt og funnet ut at den fungerer strålende om jeg kun har èn funksjon per p-element. Men nå som jeg har to funksjoner i ett p-element går det dårlig. Her er en output av $match i page_functions-funksjonen:
Som dere ser på $match[2] så har den tatt med mer enn den skal. Den tar med mer tekst selv etter siste }. Det må derfor være noe galt med det regulære uttrykket som fisker ut funksjonene fra editoren, da den ikke klarer å skille mellom en eller flere funksjoner.
Jeg må innrømme at jeg fortsatt har mye å lære innen regulær-uttrykk, men her har jeg prøvd og feilet lenge nå, og kommer ingen vei. Dette er litt kritisk da funksjonen email konverterer mail-adressen til et format som ikke script/spambotter leser av. CMSet er også i bruk på et større nettsted, så svakheten bør rettes opp i raskt.
Tillegg: <p> må være med i uttrykket da TinyMCE liker å wrappe ALT i p-tagger. Disse må være med så de kan fjernes om de ligger rundt en funksjon.
Tusen takk på forhånd - håper noen forstår problemstillingen og har noen tips!
Har et selvlaget CMS der jeg har muligheten til å hente opp funksjoner/plugins i WYSIWYG editoren ved å taste inn {function::FUNKSJON(VARIABLER)}. Skal forsøke å forklare hvordan det fungerer under.
Slik skriver jeg ut en nyhet, der $output er diverse markup samt nyheten.
Kode
<?php parse_output_functions($output) ?>
Kode
<?php function parse_output_functions($content, $pattern='/(\<p\>)?\{function::(.*)\((.*)\)\}(\<\/p\>)?/') { return preg_replace_callback($pattern, 'page_functions', $content); } ?>
Kode
<?php function page_functions($match) { $function = $match[2]; $parameter = $match[3]; return $function($parameter); } ?>
Kode
<p>{function::email(user@domain.tld)} eller {function::email(user@domain.tld)}</p>
Jeg har debugget litt og funnet ut at den fungerer strålende om jeg kun har èn funksjon per p-element. Men nå som jeg har to funksjoner i ett p-element går det dårlig. Her er en output av $match i page_functions-funksjonen:
Kode
Array ( [0] => <p>{function::email(user@domain.tld)} eller {function::email(user@domain.tld)}</p> [1] => <p> [2] => email(user@domain.tld)} eller {function::email [3] => user@domain.tld [4] => </p> )
Kode
/(\<p\>)?\{function::(.*)\((.*)\)\}(\<\/p\>)?/
Tillegg: <p> må være med i uttrykket da TinyMCE liker å wrappe ALT i p-tagger. Disse må være med så de kan fjernes om de ligger rundt en funksjon.
Tusen takk på forhånd - håper noen forstår problemstillingen og har noen tips!
Sist endret av ma10as; 19. juli 2010 kl. 23:35.