Avatar billede elskermad.dk Nybegynder
20. september 2005 - 21:18 Der er 9 kommentarer og
1 løsning

udskifte tekst med nogle dynamiske funktioner

hej eksperter!

jeg går i tankerne om om det er muligt at lave en funktion der kan udskifte tekst på en avanceret måde....
nemmest at forklare hvad jeg mener med et eksempel:

Jeg har noget tekst jeg henter fra en fil der bliver oploadet:

Bla jfdss fjdsk nfjkdsa fas <[menu type=liste width=250]> jifs kfdsa afadsm klfds <[indhold width=100% class=txt_rod]> nfs nfjndas jfkas

så vil jeg gerne at funktionen skal udskifte de forskellige steder <[ ... ]> er, med noget tekst der bliver hentet fra en funktion som skal bruge indholdet af det der står mellem <[ og ]> ...

den skal så udskifte det med outputtet fra funktionen design() som skal kaldes med type og arg (design($type,$arg); )

den skal kalde funktionen design() fyldt ud med første del efter <[ altså i første tilfælge design("menu"); og derefter smide paramenterne efter menu i et array og derefter i funktionen - altså design("menu",array('type=liste','width=250'));

den næste skal så hente indholdet via design("indhold",array('width=100%','class=txt_rod'));

den skal selv kunne finde ud af hvordan den skal kalde design-funktionen... altså teksten kan også hedder:

fdnsjf nfdjsan fkjds <[blah ghj=fgds ggre=hfds bncbdf=fds]> fndjsnk

også skal den så udskifte <[ ... ]> med outputtet fra design("blah",array('ghj=fgds','ggre=hfds','bncbdr=fds'));


Jeg håber det er til at forså hvad jeg mener... Ret svært at forklare :) Ellers prøver jeg at uddybe mig / starte forfra med min formulering...

På forhånd mange tak...
Avatar billede erikjacobsen Ekspert
20. september 2005 - 21:24 #1
Du kan bruge preg_replace med /e-modifieren. Se http://php.net/preg_replace
Avatar billede elskermad.dk Nybegynder
20. september 2005 - 21:28 #2
er det noget du vil hjælpe med?
jeg kan desværre ikke se logikken i reg.exp. og andre af de ting der er brugt på linket, og jah, nok lidt lost lige på dette område :)
blot så jeg kan komme i gang og se fidusen...
Avatar billede erikjacobsen Ekspert
20. september 2005 - 21:44 #3
Ja, det må jo siges at være en fejl i din opdragelse. Man burde lære regulære udtryk i 1. klasse...  Men få inspiration af dette:

<?

  $s="Her er noget tekst\nmed en [menu type=liste width=250] indeni";

  print preg_replace('/\[(\w+) type=(\w+) width=(\w+)\]/ie','f($1,$2,$3)',$s);

  function f($p1,$p2,$p3) {
    return "$p1-$p2-$p3";
  }

?>
Avatar billede coderdk Praktikant
20. september 2005 - 21:45 #4
Et andet eksempel:

<?php

    $text = "Bla jfdss fjdsk nfjkdsa fas <[menu type=liste width=250]> jifs kfdsa afadsm klfds <[indhold width=100% class=txt_rod]> nfs nfjndas jfkas";
    $text = preg_replace( "/<\[(.+?) ((.+?)=([^ ]+))( (.+?)=([^ ]+))?\]>/e", "doMe('\\1','\\3','\\4','\\6','\\7')", $text );
    echo $text;
   
    function doMe($cmd, $par1, $par1v, $par2, $par2v)
    {
        return "<span style='background-color: yellow;'>###Kommando: $cmd Parameter 1: $par1 Value: $par1v Parameter 2: $par2 Value: $par2v###</span>";
    }
   
?>
Avatar billede elskermad.dk Nybegynder
20. september 2005 - 22:32 #5
coderdk, det ser meget fornuftigt ud... dog skal jeg meget gerne have lagt det i et array de forskellige paramenter grundet det ikke er fast hvormange ting man skal vælge... altså nogengange er det måske kun <[top]> også skal den bare indsætte en tom array og andre gange er der måske 12 værdier, og det skal den selv kunne forudsige (skal ikke være hardcodet i funktionen) hvordan gør  man det?
Avatar billede coderdk Praktikant
20. september 2005 - 22:50 #6
Den eksisterende, lidt ændret:

Én tilføjet:

$text = preg_replace( "/<\[(.+?)( (.+?)=([^ ]+))?( (.+?)=([^ ]+))?( (.+?)=([^ ]+))?\]>/e", "doMe('\\1','\\3','\\4','\\6','\\7','\\9','\\10')", $text );

Altså tilføj ( (.+?)=([^ ]+))? til expression'en for at tilføje en, og tilføj '\\n+2','\\n+3' til parametrene

Funktionen kan du så ændre til at bruge func_get_args()/func_get_arg()
Avatar billede elskermad.dk Nybegynder
20. oktober 2005 - 14:11 #7
smider i nogen svar? :)
Avatar billede erikjacobsen Ekspert
20. oktober 2005 - 14:37 #8
Ingen point til mig, tak.
Avatar billede coderdk Praktikant
20. oktober 2005 - 15:09 #9
Tag lidt selv :)
Avatar billede elskermad.dk Nybegynder
20. oktober 2005 - 15:18 #10
nej tak, jeg udlovede jo så meget for et svar jeg havde brug for - så er det jo ikke fair kun at give halvdelen :)

tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester