Gebruik van template

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Onbekend onbekend

onbekend onbekend

29/08/2009 21:18:00
Quote Anchor link
Hi,

Ik heb een template class gemaakt. Daarin zit een functie waarin de inhoud van een html bestand wordt opgehaald, en alle tags (voorbeeld in html tekst: {tag}) worden vervangen door de waardes van variabelen $value.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
foreach ($this->vars as $varname => $value) {
    
    $data = preg_replace("/\{". $varname ."\}/", $value, $data);
    
}

?>


Nu gaat dit goed zolang je elke keer maar 1 variabele hoeft te plaatsen. Maar hoe gaat dit in zijn werk met tabellen of lijsten e.d.? Ik wil het liefst geen keiharde html code (zoals <td> of <option>) in m'n template class hebben.

Heeft iemand tips?
Gewijzigd op 01/01/1970 01:00:00 door Onbekend onbekend
 
PHP hulp

PHP hulp

20/04/2024 02:42:21
 
Jesper Diovo

Jesper Diovo

29/08/2009 21:22:00
Quote Anchor link
Ik begrijp je niet helemaal, of dat moet aan mij liggen?
 
Onbekend onbekend

onbekend onbekend

29/08/2009 21:26:00
Quote Anchor link
Wat begrijp je niet helemaal? Als je iets specifieker bent dan kan ik mijn vraag misschien verduidelijken voor je.


... edit

Wellicht dat dit helpt;

Bovenstaande script vervangt elke keer een tag door de waarde van een variabele. Das goed.

Stel het volgende html template voor:

<h2>{PAGE_TITLE}</h2>
<p>Welkom op deze website {USER_NAME}!</p>

<table border=1>
<tr>
<td>{naam}</td>
<td>{adres}</td>
<td>{aantalbewoners}</td>
</tr>
</table>

page_title en user_name worden goed vervangen. Maar de tabel, die bestaat uit meerdere rijen. En het aantal kolommen kan natuurlijk ook variabel zijn.

Ik wil graag weten hoe je kan zorgen dat je in een html template ook tabellen kan vullen.
Gewijzigd op 01/01/1970 01:00:00 door onbekend onbekend
 
Pim -

Pim -

29/08/2009 23:01:00
Quote Anchor link
Dus een foreach zoals Smarty die gebruikt...
Ik ga wel even kijken...

Edit: zoiets?
In vars heb je dan zoiets $array = array(array('peer'=>'groen', 'citroen'=>'geel'), array('peer'=>'paars', 'citroen'=>'turkoise'));

$template->assign('appel', $array);

en dan in je template {foreach appel}Een peer = {peer} en een citroen = {citroen}{/foreach}

Let wel op dat je zo maar in 1 dimensie een foreach kan doen, dus geen 2 binnen elkaar, maar dit kan zelfs bij smarty volgens mij niet.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

    public function display($data)
    {

        if(preg_match_all('/\{foreach [a-zA-Z\_]+\}.*\{\/foreach\}/s',$data, $results))
        {

            foreach($results[0] as $result)
            {

                $arrayname = substr($result, strpos($result, ' ')+1, strpos($result, '}')-strpos($result, ' ')-1);
                if(!isset($this->vars[$arrayname]) || !is_array($this->vars[$arrayname]))
                    continue;
                $inner = substr($result, 14+count($arrayname), strpos($result, '{/foreach}')-14-count($arrayname));
                
                $together = '';
                
                foreach ($this->vars[$arrayname] as $temparray)
                {

                    $tempstr = $inner;
                    
                    foreach ($temparray as $varname => $value)
                        $tempstr = preg_replace("/\{". $varname ."\}/", $value, $tempstr);
                        
                    $together .= $tempstr;
                }

                
                $data = str_replace($result, $together, $data);
                
            }
        }

        
        foreach ($this->vars as $varname => $value) {
            if(is_array($value))
                continue;
            $data = preg_replace("/\{". $varname ."\}/", $value, $data);
        }

        
        echo $data;
    }


?>
Gewijzigd op 01/01/1970 01:00:00 door Pim -
 
Onbekend onbekend

onbekend onbekend

30/08/2009 12:37:00
Quote Anchor link
Dank je! Daar ga ik er wel mee uit komen denk ik.

Alleen hoe zit dat met deze regex?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if(preg_match_all('/\{foreach [a-zA-Z\_]+\}.*\{\/foreach\}/s',$data, $results))
?>


Dat stukje in het midden .* kijkt toch naar alle karakters, behalve nieuwe regels enzo? Welk teken kan ik gebruiken zodat ook nieuwe regels zijn toegestaan?
Gewijzigd op 01/01/1970 01:00:00 door onbekend onbekend
 
Pim -

Pim -

31/08/2009 18:16:00
Quote Anchor link
Dat is al zo, de s aan het eind van de regex geeft aan dat de punt ook newlines bevat.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.