[PHP]Simpele Template Parser, replaced niet m'n vars

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 17-09 20:43
Ik ben bezig met een simpel template parsertje. Waarom? Nou ik heb aan +/- 4 functies genoeg (template openen, de records parsen, ifjes parsen, en dan de template op het scherm weergeven).

Nu ben ik dus bezig met de records, alleen die lijkt hij niet te pakken. De regex schijnt dus nie te werken. Ik heb dus ff alles getest zonder meuk en gewone waarden (statisch), en dat werkt gewoon. Er is dus waarscheinlijk wat mis met m'n waardes.

om te openen heb ik dit geschreven:
PHP:
1
2
3
4
5
6
7
8
9
function readTemplate( $templateFile ) 
{ 
    // open the template 
    $fp = @fopen($templateFile, "r"); 
    $theFile = fread($fp, filesize($templateFile)); 
    fclose($fp); 
     
    return $theFile; 
}


Dit werkt 100%

daarna gaaat ie de records parsen:
PHP:
1
2
3
4
5
function parseRecords ( $vars, $values, $templateName) 
{ 
    $templateName = str_replace($vars, $values, $templateName); 
    return $templateName; 
}


Hier gaat het mis, hij replaced ze helemaal niet, maar met statische content wel.

En hiermee echo ik de template:

PHP:
1
2
3
4
5
// parse the template 
function viewTemplate ( $templateName ) 
{ 
    echo $templateName; 
}


voorbeeld van gebruik:

PHP:
1
2
3
4
// parsing the template shit :) 
$hoi = readTemplate("register.tpl"); 
parseRecords ("[VAR1]", "heyyy", $hoi); 
echo viewTemplate ($hoi);


Ik heb samen nog ff met Excru lopen debuggen, maar die komt er ook niet echt uit samen met mij. Het zal wel weer een heel klein dingetje zijn :'(

Ik zelf vermoed dat de $templateName niet goed is... :/ Misschien kan iemand mij helpen dit probleem op te lossen.

Eventuele hele source + uitput: Source+Uitput

Dan is er ook nog dat hij volgens mij steeds de hele file doorloopt op waarden, volgens mij kan ik het beter allemaal in een array gooien en hem dan pas doorlopen (de hele array).

Daarna de IF block nog. Ikzelf dacht aan {IF:conditie}iets{ELSE}iets{/IF}
en dan de conditie gewoon in een $string omzetten, met explode of een regex

[ Voor 21% gewijzigd door RedHat op 08-02-2003 12:37 ]


Acties:
  • 0 Henk 'm!

  • stylee
  • Registratie: December 2000
  • Laatst online: 04-09-2021

stylee

blah zeg ik je

Ik wierp een hele korte blik en zag dat je

code:
1
2
$templateName = str_replace($vars, $values, $templateName);  
return $templateName;


deed, en vervolgens

code:
1
2
3
$hoi = readTemplate("register.tpl");  
parseRecords ("[VAR1]", "heyyy", $hoi);  
echo viewTemplate ($hoi);


$templateName bevat nu waarschijnlijk je geparste template maar zo te zien sla je dit nergens op.

Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 17-09 20:43
hmmmm nu je het zegt. Wat kan ik dan het beste veranderen?
Ikzelf denk beter de functie parseRecords gebruiken om alles in een array te zetten, en dan in viewtemplate de hele array replacen, dan loopt ie ook maar 1x de file af om te replacen.
Dus dan doet parseRecords voor de rest niets, alleen alles in een array zetten.

Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Ik zou van template een class bouwen, en dan alles intern regelen.
Dus
PHP:
1
2
3
4
$hoi = new template();
$hoi->read("register.tpl");
$hoi->parse("[var1]","hey");
$hoi->view();

[ Voor 19% gewijzigd door Nielsz op 08-02-2003 13:52 ]


Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 17-09 20:43
dat _zou_ kunnen, maar wat zijn de 'technische' voordelen ervan (programmeertechnisch)?
Die zijn volgens mij erg nihil.

Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
PHP:
1
2
3
$hoi = readTemplate("register.tpl");  
parseRecords ("[VAR1]", "heyyy", $hoi);  
echo viewTemplate ($hoi);


Nou, dit werkt dus niet.
Je moet dus
PHP:
1
2
3
$hoi = readTemplate("register.tpl");  
$hoi = parseRecords ("[VAR1]", "heyyy", $hoi);  
echo viewTemplate ($hoi);

doen, of
PHP:
1
2
3
4
function parseRecords ( $vars, $values, &$templateName)  
{  
    $templateName = str_replace($vars, $values, $templateName);  
}


Of op mijn manier, waarbij je eerst alles in een interne variabele gaat zetten, en er een mooie 'blackbox' van kan gaan maken.

Acties:
  • 0 Henk 'm!

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 20-08 21:38
Hmmm deze 2: [] die moeten toch met slash ervoro worden geschreven bij regular expressions?!

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 17-09 20:43
Hij werkt nu al ja... met de &-flag.
Thanks iig... Ik ga vanaaf werken aan arrays... :) Thanks!

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
en nog iets toe voegen, Je hebt de functie viewTemplate(). Daarin echo je iets. Waarom hebt je dit stukje dan zo?
PHP:
1
echo viewTemplate ($hoi);

aangezien viewTemplate() niets returned echo je dus niets. Een beetje verwarrend.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 17-09 20:43
Ja is het ook, foutje van mij ;) gefixxed.
Thanks Michali :)

Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 17-09 20:43
Oke, ik ben nu aan't stoeien gegaan met classes. Ik vind sommige dingen nogal moeilijk (zoals records parsen ({BLAAT} in $blaat omzetten b.v.), zonder classes kon je een string van iets maken en dat dan parsen, dat lukt nu niet. Ik heb php.net er even bijgepakt, maar in de notes die mensen daar posten ( _/-\o_ goede informatie bdw ) kon ik niets vinden wat echt dieper inging op mijn probleem. Ik heb ook maar even de tutorial van phpfreakz.nl voor m'n neus gepakt, omdat classes voormij nieuw zijn, maar ik kon niet echt workarounds voor dit probleem vinden.

Het gaat erom dat sommige dingen iets moeten returnen (functies als templates lezen/ records omzetten / en parsen). Dit stukje code parsed nog niets, moet alleen laten zien of er records zijn ja of nee. Iemand nog suggesties waar ik op moet letten? Hier is m'n kleine stukje code (classes!)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class myTemplate    {

    // function to open templates
    function readTemplate ( $template )
    {
        // open the template
        $theFile = @fopen($template,"r");
        $theData = fread($theFile, filesize($template));
        fclose($theFile);

        // return the template
        return $theData;
    }

    // function to add the arrays
    function doRecords ( $vars, $vals )
    {
        // make array for records
        $thisTemplate["vars"]       = $vars;
        $thisTemplate["vals"]       = $vals;

        // return the array
        return $thisTemplate;
    }

    // function to parse the template
    function viewTemplate ( $oneTemplate )
    {
        // check if $thisTemplate is set
        if (isset($thisTemplate))
        {
            // there are records to parse
            echo "there are records to parse";
        }
        else
        {
            // there are no records to parse
            echo "there are no records to parse";
        }
    }
}


Ik moet nog stoeien met de return waarde van doRecords.
Bijbehorende code:

PHP:
1
2
3
4
$myTemplate = new myTemplate;
$myTemplate->readTemplate("register.tpl");
$myTemplate->doRecords("{VAR2}", "hoi");
$myTemplate->viewTemplate();


zoiets zou het dan moeten worden? bij $myTemplate->viewTemplate(); zou ook een string moeten worden aangegeven lijkt mij? Of denk ik nou verkeerd (dus $myTemplate->viewTemplate($string); ).

In ieder geval bedankt voor de reakties, ti's in ieder geval leerzaam :+

Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 17-09 20:43
Een klein kickje in de hoop dat iemand me kan helpen.
Iemand geeft me tips om het toch met classes te doen, dus dit heb ik gedaan maar ik kom er niet helemaal uit, uitleg staat hierboven :+

Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Niet return maar in private vars zetten.
$this->varname;

Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 17-09 20:43
Nielsz schreef op 11 February 2003 @ 22:02:
Niet return maar in private vars zetten.
$this->varname;
ja, dat kan, ook even getest, het probleem is alleen dat het niet in een array komt te staan oid.

voorbeeld:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    function viewTemplate ( )
    {
        // check if $thisTemplate is set
        if (isset($this->val))
        {
            // there are records to parse
            echo "there are records to parse";
            $blaat1 = count ($this->var);
            $blaat2 = count ($this->val);

            echo "$blaat1 - $blaat2";
        }
        else
        {
            // there are no records to parse
            echo "there are no records to parse";
        }
    }


Geeft nu als output "There are records 1-1"

PHP:
1
2
3
$myTemplate->doRecords("{VAR24}", "hoi");
$myTemplate->doRecords("{VAR233}", "hoi");
$myTemplate->doRecords("{VAR23333}", "hoi");

zouden er 3 moeten zijn... Dit is een object neem ik aan? Ik weet niet wat de verdere mogelijkheden zijn met objecten, dus maar evenkijken nog. Maar hulp zou uiteraard fantastisch zijn. In ieder geval allemaal al bedankt voor jullie reakties _/-\o_
Pagina: 1