Variablen aus Funktion weitergeben?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aussehen
beitrag
bestimmte funktion
durchgang
eigene klasse
eintrag
entsprechenden funktionen
ergebnis
erstmal
fragen
funktion
gutes tutorial
klasse
null
platzhalter
speicher
test
variable
weiteres mal
-
Hi...
Ich entwickle jetzt ja gerade ein Template-System und h?tte dazu eine Frage:
Ich habe eine Funktion, in welcher die Variablen eines Blocks zusammengefasst werden.
Jetzt sind in dieser Funktion zwei Variablen enthalten, die nur an eine bestimmte Funktion weitergebenen werden sollen (also nicht global sein sollen).
Das Problem wenn sie global sind:
Wenn ich den Code f?r den Block ein weiteres mal ausf?hre, nimmt das Script die Variablen vom ersten Durchgang dazu und h?ngt sie vor den eigentlichen Block.
So sollte es aussehen:
Block 1: Das Men?.
Block 2: 4 Eintr?ge.
Men?link 1
Men?link 2
Men?link 3
Eintrag 1
Eintrag 2
Eintrag 3
Eintrag 4
So sieht es aus:
Men?link 1
Men?link 2
Men?link 3
Men?link 1
Men?link 2
Men?link 3
Eintrag 1
Eintrag 2
Eintrag 3
Eintrag 4
Kennt da jemand von euch vieleicht eine L?sung? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich vermute mal, der Quellcode sieht irgendwie so aus:
function blockvariablen(blablabla) { // Variablen filtrieren $blockvariablen = array("Men?link1","Men?link2","Men?link3"); $eintrag = array("Eintrag1","Eintrag2","Eintrag3"); blockersetzen($blockvariablen, $eintrag); } function blockersetzen($blockvariablen, $eintrag) { // blablabla }
Damit weitere keine weiteren Blockvariablen/Eintr?ge an das Array (oder Variable angeh?ngt werden, musst Du nur das Array/die Variable wieder auf null setzen:
function blockvariablen(blablabla) { // Variablen filtrieren $blockvariablen = array(); $eintrag = array(); $blockvariablen = array("Men?link1","Men?link2","Men?link3"); $eintrag = array("Eintrag1","Eintrag2","Eintrag3"); blockersetzen($blockvariablen, $eintrag); }
bzw. bei Variablen:
$variable1 = ""; $variable2 = "";
Beitrag ge?ndert am 29.07.2005 19:39 von compactdisc -
Genau hab ich ganz vergessen!
?ber diesen Code werden die Funktionen "angestuert":
$ergebnis = mysql_query("SELECT * FROM test"); while ($row = mysql_fetch_array($ergebnis)) { set_block("asdf"); set_block_var("url",$row['url']); set_block_var("urlname",$row['urlname']); parse_var(); } parse_block("asdf");
Und hier sind die entsprechenden Funktionen:
function set_block($bname) { global $templatefile; global $blockcode; global $block; $part1 = explode("[Block:$bname]",$templatefile); $part2 = explode("[/Block:$bname]",$part1[1]); $block = $part2[0]; $blockcode = $block; } function set_block_var($blockvar,$blockvarcont) { global $block; $block = str_replace("{".$blockvar."}",$blockvarcont, $block); } function parse_var() { global $block; global $blockstring; $blockstring .= $block; } function parse_block($bname) { global $blockcode; global $blockstring; global $templatefile; $templatefile = str_replace("[Block:$bname]".$blockcode."[/Block:$bname]",$blockstring, $templatefile); } function parse_all() { global $templatefile; echo $templatefile; }
-
Mhhh..
Mach es doch so, dass du die Funktion "return ()" verwendest.
$blockstring = ''; $ergebnis = mysql_query('SELECT * FROM test'); while ($row = mysql_fetch_array($ergebnis)) { $block = set_block('asdf'); $block = set_block_var('url',$row['url'], $block); $block = set_block_var('urlname',$row['urlname'], $block); $blockstring .= $block; } parse_block('asdf');
Und hier sind die entsprechenden Funktionen:
function set_block($bname) { global $templatefile; $part1 = explode('[Block:$bname]',$templatefile); $part2 = explode('[/Block:$bname]',$part1[1]); $block = $part2[0]; return ($block); } function set_block_var($blockvar,$blockvarcont, $block) { $block = str_replace('{'.$blockvar.'}',$blockvarcont, $block); return ($block); } function parse_block($bname) { global $blockcode; global $blockstring; global $templatefile; $templatefile = str_replace('[Block:$bname]'.$blockcode.'[/Block:$bname]',$blockstring, $templatefile); } function parse_all() { global $templatefile; echo $templatefile; }
Ok, es bringt nicht wirklich was, aber ich wollt auch mal was sagen.
Beitrag ge?ndert am 29.07.2005 20:43 von lucas9991 -
Eben, mit return klappte eben nicht...
Wollte ich ja machen, dass immer nur eine Variable weiter gegeben wird, aber wie geht das? -
Vllt solltest du ehrlich eine Klasse schreiben, denn dann kannste alles in einer Variable speichern und auch daruaf zugreifen.
class template () { var $block; function template ($bla) { $this -> block = $bla; } functon mach_was () { return ($this -> block); } } $template = new template ('Hallo'); echo $template -> mach_was ();
-
OK, das mit Klassen kling vern?nftig, aber ich wei? nicht genau, wie das geht...
Theoretisch kann ichs mir schon vorstellen, aber ein gutes Tutorial w?re gut...
V.a. wie ich die einzelenn Funktionen dann ?ber die Index.php ansteuern kann, wei? ich nicht...
Ich hab nur mal irgendwo gelesen, dass das so ?hnlich gehen muss:
$template->set_file();
in meinem Fall jetzt halt...
Bzw. wie initalisiere ich die Klasse? -
Hallo!
Erstmals herzlichen Gl?ckwunsch zu Deinen 6666 Gulden!
Ich hab nur mal irgendwo gelesen, dass das so ?hnlich gehen muss:
$template->set_file();
in meinem Fall jetzt halt...
Ja, das ist richtig. Allerdings reicht Dir das noch nicht, um eine eigene Klasse zu schreiben
Bzw. wie initalisiere ich die Klasse?
Das funktioniert so:
class schrottis_template_engine { var $platzhalter = array(); var $text = array(); function set_text($text, $platzhalter) { // dummdidum $this->platzhalter[] = $platzhalter; $this->text[]= $text; } }
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage