TalkPHP
 
 
Account Login
Latest Articles
» The basic usage of PHPTAL, a XML/XHTML template library for PHP
» Vulnerable methods and the areas they are commonly trusted in.
» Simple way to protect a form from bot
» The Basics On: How Session Stealing Works
» How to keep your forms from double posting data
IRC Channel
IRC Speech Bubble Join the friendly bunch on IRC...
(#TalkPHP on Freenode)

...Also available via a web interface.

See this thread for information on the TalkPHP Free Hugs Initiative™. Subject to availability.
Associates
Associates
CSS Tutorials
Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old 11-10-2007, 11:31 PM   #1 (permalink)
The Frequenter
Prolific Welcomer Upcoming Programmer 
 
Join Date: Sep 2007
Posts: 360
Thanks: 24
Haris is on a distinguished road
Default Includes problem

I have index.php which has $var = 1;

I'm using the following function to include the template file.

function/function.php
PHP Code:
    public function display($szView)
    {
        if (
file_exists('views/' $szView '.php'))
        {
            include(
'views/' $szView '.php');
        }
    } 
The code of index.php is now:
PHP Code:
include('function/function.php');
$var 1;
display('home'); 
home.php is
PHP Code:
echo $var
But it doesn't echo the variable.

Directory structure.

- Root
- - function/function.php display() function is located here
- - views/home.php
- index.php

Why is the variables in index.php is not being parsed by home.php? When I simply include the file with include and not the function, it works.
Haris is offline  
Reply With Quote
Old 11-10-2007, 11:51 PM   #2 (permalink)
The Prestige
Upcoming Programmer Inquisitive 
 
Tanax's Avatar
 
Join Date: Sep 2007
Location: Sweden, Stockholm
Posts: 1,080
Thanks: 115
Tanax is on a distinguished road
Default

Well, I believe you only use "public" function in classes.
And as far as I see, you're not using a class.

So it should only be:

function name($aArgs) { }
Tanax is offline  
Reply With Quote
Old 11-10-2007, 11:59 PM   #3 (permalink)
The Frequenter
Prolific Welcomer Upcoming Programmer 
 
Join Date: Sep 2007
Posts: 360
Thanks: 24
Haris is on a distinguished road
Default

Quote:
Originally Posted by Tanax View Post
Well, I believe you only use "public" function in classes.
And as far as I see, you're not using a class.

So it should only be:

function name($aArgs) { }
It is a class.
Haris is offline  
Reply With Quote
Old 11-11-2007, 12:56 AM   #4 (permalink)
Moderateur
RegEx Guru PHP Guru Top Contributor Advanced Programmer 
 
Salathe's Avatar
 
Join Date: Apr 2007
Posts: 1,393
Thanks: 5
Salathe is on a distinguished road
Default

Since the view file (views/home.php) is included within the class method (display) then all variables within that view file will be in the scope (PHP Manual page) of that class method.

To make it work you have a few options. Your first option is to define $var as global in your view (or the display method) with global $var (which is a nasty way of handling the situation). Secondly, you could replace $var with $GLOBALS['var'] in your view file (I don't like this way). A third way would be to pass along the 'template variables' into the display method and extract them to be used in your view. I like this last way.

PHP Code:
// class
    
public function display($szView$aVars = array())
    {
        if (
file_exists('views/' $szView '.php'))
        {
            
// See http://php.net/extract for usage
            
extract($aVarsEXTR_SKIP EXTR_REFS);
            include(
'views/' $szView '.php');
        }
    }

// index
include('function/function.php');
$aTplVars        = array();
$aTplVars['var'] = 1;  // $var in view file
$aTplVars['foo'] = 'bar'// $foo in view file
display('home'$aTplVars); 
There are lots more possibilities, but lets see if you're comfortable with the above first.
Salathe is offline  
Reply With Quote
Old 11-11-2007, 01:56 AM   #5 (permalink)
The Wanderer
 
Join Date: Nov 2007
Location: London
Posts: 6
Thanks: 0
Andy is on a distinguished road
Default

A quick hack may be to use:

PHP Code:
global $var;
echo 
$var
Both nasty and untested; but may work
__________________
Andy Millar
Andy is offline  
Reply With Quote
Old 11-11-2007, 10:00 AM   #6 (permalink)
The Prestige
Upcoming Programmer Inquisitive 
 
Tanax's Avatar
 
Join Date: Sep 2007
Location: Sweden, Stockholm
Posts: 1,080
Thanks: 115
Tanax is on a distinguished road
Default

Quote:
Originally Posted by Haris View Post
It is a class.
And how should we know that? You never said anything about it in your first post


....
Tanax is offline  
Reply With Quote
Reply



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


All times are GMT. The time now is 08:50 PM.

 
     

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0
Inactive Reminders By Icora Web Design