kostenloser Webspace werbefrei: lima-city


Variablen aus Funktion weitergeben?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    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?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. c*********c

    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
  4. Autor dieses Themas

    schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    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;
    }
  5. 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. :biggrin:



    Beitrag ge?ndert am 29.07.2005 20:43 von lucas9991
  6. Autor dieses Themas

    schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    Eben, mit return klappte eben nicht...
    Wollte ich ja machen, dass immer nur eine Variable weiter gegeben wird, aber wie geht das?
  7. 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 ();

  8. Autor dieses Themas

    schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    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?
  9. c*********c

    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 :wink:

    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;
    }
    
    }
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!