[PHP] variabelen parsen niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer op eenvoudige wijze PHP code te scheiden van HTML. Onderstaande twee scripts zij een afgeleide van het artikel op http://www.massassi.com/php/articles/template_engines/ en werken voor mij goed genoeg.
Ik heb alleen een probleem met de variabelen die vanuit een form op een pagina, of gewoon in index.php worden gedefinieerd. Het lukt niet om de te parsen.

In index.php zie je de variabele $lang. Omdat die niet alleen voor één template geldt, maar voor alle templates op een pagina wil ik die niet steeds hoeven te definieren. Vandaar in global.php de code: $this->set('lang', $lang);
Dat werkt dus niet!
Maak ik daarvan: $this->set('lang', "uk"); werkt het wel.

Kennelijk wordt de waarde van $lang niet meegegeven.
Iemand een idee, want ik wordt er gek van!


------------------
index.php
------------------
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

if (!$lang) {$lang = "uk";} // even aangepast :-)

require_once('global.php');

$tpl = & new Template('templates/default.tpl');
$tpl->set('title', $page);

$content = & new Template('content/' .$lang . '/' . $page. '.inc');

$tpl->set('content', $content);

echo $tpl->fetch('templates/default.tpl');
?>


------------------
global.php
------------------
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Template {
  var $vars;

  function Template($file = null) {
    $this->file = $file;
    $this->set('lang', $lang);
  }

  function set($name, $value) {
    $this->vars[$name] = is_object($value) ? $value->fetch() : $value;
  }

  function fetch($file = null) {
    if(!$file) $file = $this->file;
      extract($this->vars);
      ob_start();
      include($file);
      $contents = ob_get_contents();
      ob_end_clean();
      return $contents;
  }
}

[ Voor 9% gewijzigd door Verwijderd op 07-07-2004 16:47 ]


Acties:
  • 0 Henk 'm!

  • Shedman
  • Registratie: November 2000
  • Laatst online: 05-07 15:38

Shedman

Met het hart op de goede plek

Zowiezo lijkt me de laatste ; hier overbodig ...
PHP:
1
if (!$lang) {$lang = "uk";} else {$lang = "nl";};


Wat is $lang na deze regel? Dus wat is hij als je hem hierna zou printen?

[ Voor 15% gewijzigd door Shedman op 07-07-2004 16:40 ]

Hier stonden al heel lang linkjes naar sites die het allang niet meer deden ...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Deze regel heb ik er voor deze post even bijgezet... laatste ; idd te veel :-)
Normaal wordt de waarde van $lang meegegeven door de link op de pagina waar je vandaarn kwam: www.domein.nl/index.php?lang=uk

Als er geen waarde voor $lang is moet dit "uk" zijn.

Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

$lang is leeg in je constructor. :)

Sundown Circus


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb hem in de eerste post even aagepast... nu pakt ie de waarde die wordt meegegeven, anders is $lang "uk"...

Wat mij dus niet duidelijk is, is dat de waarde van $lang in de regel $content = & new Template('content/' .$lang . '/' . $page. '.inc') wel wordt meegegeven naar de class. Andere variabelen die gedefinieerd zijn in index.php laat ie achterwege.

[ Voor 20% gewijzigd door Verwijderd op 07-07-2004 16:50 ]


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Doh. Check de parameters ff die je aan je constructor meegeeft. :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// klein voorbeeldje

$koe = "Clara";
$eend="Quack";

class Koe
{
    function Koe($koe, $eend="Dagobert")
    {
        echo $koe;
        echo $eend;
    }
}

$object = new Koe($koe);
Drie keer raden wat er hier word geechoed. :)

[ Voor 67% gewijzigd door RedRose op 07-07-2004 17:03 ]

Sundown Circus


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat begrijp ik, maar dan krijg je in index.php:
PHP:
1
$tpl = & new Template($lang , 'templates/default.tpl');


en in global.php:
PHP:
1
2
3
4
  function Template($lang , $file = null) {
    $this->file = $file;
    $this->set('lang', $lang);
  }


En dan blijf ik dus voor iedere template $lang mee geven... alleen nu op een andere plek, want ik kan natuurlijk ook $tpl->set('lang' , $lang) gebruiken.

[ Voor 60% gewijzigd door Verwijderd op 07-07-2004 17:11 ]


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Verwijderd schreef op 07 juli 2004 @ 17:08:
Dat begrijp ik, maar dan krijg je: $tpl = & new Template($lang , 'templates/default.tpl');
En dan blijf ik voor iedere template $lang mee geven...
Dan heeft die $lang in je constructor ook weinig zin. :)

Definieer de taal dan als constante, dan is hij wel beschikbaar:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// klein voorbeeldje 

$koe = "Clara"; 
define ('EEND','Quack'); 

class Koe 
{ 
    function Koe($koe) 
    { 
        echo $koe; 
        echo EEND;
    } 
} 

$object = new Koe($koe);
En $tpl->set kan je uiteraard ook rechtstreeks gebruiken ja. :)

[ Voor 16% gewijzigd door RedRose op 07-07-2004 17:12 ]

Sundown Circus


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dank RedRose ik kom eruit zo!

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:52

crisp

Devver

Pixelated

is dit niet gewoon een globals probleem?

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

crisp schreef op 07 juli 2004 @ 18:50:
is dit niet gewoon een globals probleem?
Waarschijnlijk wel. :) En een probleem met gemis aan kennis omtrent scopes. ;)

Sundown Circus

Pagina: 1