######### Overview ######### getlayout_str() är en Smarty-liknande osmart template engine. Instllation är i alla fall enklare än Smarty: det är bara klistra in i din PHP skrift (koden finns i slutet av den här filen). Programmet har tre funktioner: 1) söka textsträck i templatefilen och ersätta den med en Array-faktor vars key har samma textsträck. 2) if konstruktion: persa templatefilen och ange olika resultat när det finns "if konst- ruktion" i filen. 3) foreach konstruktion: persa templatefilen och outputtera rader som kläms av {foreach} taggar. foreach konstruktionen i det här programmet funkar utmärkt och när det gäller foreach är den här skriften mer användbar än Smarty tycker jag. Angående funktionerna ska jag förklara senare. Instruktionen är mycket dåligt skriven så jag är inte säker om man förstår, men då är det bara att du följer exemplen som anges. ####### System Requirement ####### PHP5.03 Men det funkade också PHP4.xx. ####### Instruktion ####### 1.Ersätta texter med variabel 2.if 3.foreach ########################################################### 1. Ersätta texter med variabel ########################################################### getlayout_str($array,$tmp) $array måste vara en skala som innehåller faktor(er) med olika keynamn. $tmp är sökväg till templatefilen som innehåller ramar. En templatefil är alltså textfil(fast ni kan ange vilken extention som helst) med HTML taggar plus template taggar. Att skriva template taggar är inte så svårt. Det är bara att följa följande exempel. Ifall getlayout_str() defineras i "tpl.php": ::::::innehållet av templatefilen(example.tpl):::::::: {title} {abc} ::::::::innehållet av (test.php)::::::::: $var1,"abc"=>$var2) echo getlayout_str($var,"example.tpl"); ?> ##### förklaring ##### {key} Definera en array som har olika keynamn. I templatefilen måste keynamnet(eller keynamnen) kläms av {}. Blank , "" eller '' behövs inte. ########################################################### 2. if ########################################################### if-konstruktionen används ungefär såhär: :::::::innehållet av templatefilen(example.tpl)::::::::: {title} Nu är nr.{number}.
{if number==1} {abc} {elseif number==2} {def} {/elseif number} {elseif number==3} {ghi} {/elseif number} {else number} {jkl} {endif number} :::::::::::innehållet av (test.php)::::::::::::: $var1,"number"=>"1","abc"=>$var2,"def"=>$var3,"ghi"=>$var4,"jkl"=>$var5); echo getlayout_str($array,"example.tpl"); ?> ##### Förklaring ##### {if key==value(sifflor)}...{elseif key==value}...{/elseif key}{else key}?{endif key} I konstruktionen behövs{elseif key==value}...{/elseif key} åtminstone en gång pga en teknisk skäl. Annars blir resultatet något konstigt. ex: {if var==1}{elseif var=värdet som aldrig används}{/elseif var}{endif var} I det här fallet, outputteras endast när $array[var] innehåller 1. if-konstruktionen slutar alltid med{endif key}. Och {elseif key}slutar med{/elseif key}. Man måste tillägga alltid keynamn också efter /elseif ,else ,endif . "==" är den enda Comparison operator som det här programmet stöder(jag beklagar!). Och som värdet kan man använda bara sifflor som ett komparationellt betyngelse. Resultatet blir något taskigt om man sättertextsträck in i värdet. Om du vill klämma if-taggar med andra if-taggar, skriv det keynamn som kommer den lägre nyvån först när du definerar array. ex: $var = array("if2"=>$level2,"if1"=>$level1); ########################################################### 3.foreach ########################################################### foreach är den mest användvara funktionen i det här programmet när du vill skriva ram till anslagstavla, dagbok ed. :::::::innehållet av templatefilen(example.tpl)::::::::: {title}
{title}

{if contents==1} {foreach article} {/foreach article}
No.{f:no}{f:date}{f:title}
{f:text}
{elseif contents==0} Min dagbok har inte börjat än. {/elseif contents} {endif contents}
:::::::::::::: test.php :::::::::::::::: $tmp[0],"date"=>$tmp[1],"title"=>$tmp[2],"text"=>$tmp[3]); } $con=1; } else{$con=0;} $array = array("article"=>$result,"contents"=>$con,"title"=>$head); echo getlayout_str($array,"example.tpl"); ?> :::::::::::::: innehållet av logfil till dagboken (diary.dat) ::::::::::::: 1,2003-5-1,Börjar dagbok,Ska försöka uppdatera varjedag för att få miljontals besökare i framtiden! 2,2003-5-5,ingenting å göra,Jaa har inte så mycket å skriva:S
Under helgen läste jag bara Mangor. 3,2003-7-11,Om dig,Å du
Så skönt du är
Jag tänker om dig jämt
och funderar om vår framtid hade bestämt
Du är som lilja 4,2004-2-3,No Title,det är bara skit i världen. 5,2005-6-7-,Information,Hemsidan stängs inom kort. Nu är min dagbok slut.
Tackar för besöket. [EOF] ##### Förklaring ##### {foreach key(1)}...{f:key(2)}...{f:key(3...)}...{/foreach key(1)} Skriftet öppnar key(1)och ersätter{f:key(2...)} med key(2...) som $array[key(1)] innehåller. Man måste skriva "f:" intill keynamn i foreach taggar. I exemplet finns två keynamn,{title} och {f:title}. Här syftar {title} $array[title] i php skriftet, och {f:title} skyftar alltså $array[article][0?][title] (se till att det inte är $array[article][title]!). Hur många gånger foreach upprepas beror på hur många faktorer $array[article] innehåller. Men kan inte sätta foreach taggar eller if taggar i andra foreach taggar. ########################################################### ######### källcod ######### function getlayout_str($var,$tmp){ $tpl = file_get_contents($tmp); $i = 0; $r = array(); $r[0]=$tpl; foreach($var as $key=>$val){ $e = $i+1; if(is_array($val)){ $fstart = "{foreach ".$key."}"; $fend = "{/foreach ".$key."}"; $tplf = explode($fstart,$r[$i]); $result = ""; foreach($tplf as $key2 => $val2){ $result2 = ""; if(strstr($val2,$fend)){ $tplf2 = explode($fend,$val2); foreach($val as $val3){ $iii = 0; $r3 = array(); $r3[0]=$tplf2[0]; foreach($val3 as $key4 => $val4){ $eee = $iii+1; $assign = "{f:".$key4."}"; $r3[$eee] = str_replace($assign,$val4,$r3[$iii]); $iii++; } $result2.=$r3[$eee]; } $result .= $result2.$tplf2[1]; } else{$result .= $val2;} } $r[$e] = $result; } else{ $assign = "{".$key."}"; $ifassign = "{if ".$key; $endifassign = "{endif ".$key."}"; $elseassign = "{else ".$key."}"; while(eregi("{if +(".$key.")([=\!]{1,})([A-Za-z0-9]{1,})+}",$r[$i],$array)){ $ifstr = explode($array[0],$r[$i]); //[A0]if[A1] $ifstr_b = explode($endifassign,$ifstr[1]); //[A0]if[A1][B0]endif[A1][B1] if(strstr($ifstr_b[0],$elseassign)){ $elsestr = explode($elseassign,$ifstr_b[0]); //[A0]if[A1][B0][E0]else[A1][B0][E1]endif[A1][B1] $ifstr_c = $elsestr[0]; //[A0]if[C]else[E1]endif[B1] } else{ $ifstr_c=$ifstr_b[0]; //[A0]if[C]endif[B1] } while(eregi("{elseif +(".$key.")([=\!]{1,})([a-zA-Z0-9]{1,})+}",$ifstr_c,$array_e)){ $elseifstr = explode($array_e[0],$ifstr_c); //if[ES0]elseif[ES1]else,endif if($val == $array[3]){ $ifstr_c = $elseifstr[0]; $ok = 1; } else{ $elseifstr_2 = explode("{/elseif ".$key."}",$elseifstr[1]); if($val==$array_e[3]){ $ifstr_c = $elseifstr_2[0]; $ok = 1; } else{ array_shift($elseifstr_2); $ifstr_c=""; foreach($elseifstr_2 as $eik => $eival){ $ifstr_c .= $eival."{/elseif ".$key."}"; } } } } if($ok!=1){$ifstr_c = $elsestr[1];} $r[$i] = $ifstr[0].$ifstr_c.$ifstr_b[1]; } $r[$e] = str_replace($assign,$val,$r[$i]); } $i++; } return $r[$e]; } ######### Upphovsrätten, villkor osv. ######### Jag har upphovsrätten till den här skriften men det är absolut inga problem att ändra, kopiera eller förmedla om källkoden. Men vad god och förstå att jag inte kan komplettera förlusten ifall den här skriften orsarker forlust eller något negativt hos användaren. Muneo Takemoto http://pannkaka.txt-nifty.com/pp/