[PHP] Smarty assigning gaat fout?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Bananenspin
  • Registratie: December 2008
  • Laatst online: 13-08 15:52

Bananenspin

Omdat het kan

Topicstarter
Excuses voor de titel, kon niets beters verzinnen. Ben hier al sinds gister avond mee bezig geweest maar wil het niet werkend krijgen. Ik krijg de volgende 2 error's bij het uitvoeren van de index.php. Alle bestanden staan ook hieronder.

Notice: Undefined variable: _smarty in C:\wamp\www\project2\templates\home.php on line 3
Fatal error: Call to a member function assign() on a non-object in C:\wamp\www\project2\templates\home.php on line 3

Kan iemand mij vertellen wat ik hier fout doe, over het hoofd zie en veel frustaties aan beleef voor een simpel experiment?

index.php
PHP: filename
1
2
3
4
5
require_once('includes/smt.class.php');

$_smarty = new SMTemplate();

$_smarty->render('home');


includes/smt.class.php
PHP: filename
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
require_once('./templates/lib/Smarty.class.php');
require_once('./smtconfig.php');

class SMTemplate{

    public $_smarty;

    function __construct(){
        $this->_smarty = new Smarty();

        global $smtemplate_config;
        $this->_smarty->template_dir = $smtemplate_config['template_dir'];
        $this->_smarty->compile_dir = $smtemplate_config['compile_dir'];
        $this->_smarty->cache_dir = $smtemplate_config['cache_dir'];
        $this->_smarty->configs_dir = $smtemplate_config['configs_dir'];
    }
    
    function render($template){
        require('./templates/' .$template. '.php');
        $this->_smarty->display($template. '.tpl');
        }

}


templates/home.tpl
HTML:
1
2
3
4
5
6
7
8
9
10
11
<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <title>Home</title>
        <link rel="stylesheet" href="/css/master.css" type="text/css" media="screen" title="no title" charset="utf-8" />
      
    </head>
    <body>
        <p>Hello {$Name}</p>
    </body>
</html>


templates/home.php
PHP: filename
1
$_smarty->assign('Name', 'Fred');



smtconfig.php
PHP: filename
1
2
3
4
5
6
7
$smtemplate_config =  
    array(  
        'template_dir' => 'templates/',  
        'compile_dir' => 'templates/lib/templates_c/',  
        'cache_dir' => 'templates/lib/cache',  
        'configs_dir' => 'templates/lib/configs/',  
        );

HOI.


Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Nu online
De foutmelding zegt toch echt genoeg dacht ik. "Notice: Undefined variable: _smarty in C:\wamp\www\project2\templates\home.php on line 3"

Jij roept daar $_smarty aan terwijl PHP hem niet eens kent, logisch dat je dan meer foutmeldingen krijgt. Het lijkt mij verstandig eerst $_smarty te defineren voordat je hem gaat gebruiken.

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 16:21
Wat je wilt doen in home.php:

PHP:
1
$smarty -> $_smarty -> assign('Name', 'Fred');

Alhoewel je dat ook simpeler zou kunnen oplossen natuurlijk. Verdiep je nog eens goed in variabele scope, want nu probeer je in home.php een interne variabele van de SMTemplate aan te roepen alsof het een global is.

//edit

Overigens zou je ook iets dergelijks kunnen toevoegen aan je SMTemplate class:
PHP:
1
2
3
4
public function __set ($field, $value) 
{
    $this -> _smarty -> assign($field, $value);
}


Vervolgens kun je dan hippe dingen doen als dit:
PHP:
1
$smarty -> Name = 'Fred';

[ Voor 65% gewijzigd door FragFrog op 09-03-2011 14:45 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Bananenspin
  • Registratie: December 2008
  • Laatst online: 13-08 15:52

Bananenspin

Omdat het kan

Topicstarter
Sorry had even moeten melden dat ik wat dingen heb geprobeerd met index.php heb de code nu aangepast boven. Ik defineer daar nu toch $_smarty door te zeggen $_smarty = new SMTemplate(); en dat gebeurd voordat home.php word geinclude.

HOI.


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 16:21
Je SMTemplate class heeft geen assign method, die zit in je Smarty class. Je haalt ze doorelkaar doordat je ze dezelfde naam geeft (al dan niet met underscore). Zorg voor duidelijke variabele namen, dan heb je het hele probleem niet :)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Nu online
^^

Zie ook de reactie van FragFrog.

[ Voor 73% gewijzigd door Manuel op 09-03-2011 14:48 ]


Acties:
  • 0 Henk 'm!

  • Bananenspin
  • Registratie: December 2008
  • Laatst online: 13-08 15:52

Bananenspin

Omdat het kan

Topicstarter
Achja heb er inderdaad een beetje een dom zooitje van gemaakt. Heb het even over een andere boeg gegooid. Een assign functie dacht ik ook aan maar dat is alleen handig wanneer je bijvoorbeeld een naam assigned. Zodra er array's bv. bij komen kijken word het gelijk weer een ander verhaal. Thx for the help!

[ Voor 3% gewijzigd door Bananenspin op 09-03-2011 15:25 ]

HOI.

Pagina: 1