Jump to content

[SOLVED] Class Problem


pea

Recommended Posts

I'm installing the smarty templating system. I'm not familiar with classes and i'm stuck at something. The configuration file has a class with variables for you to assign directory paths to, the problem i have is that i need to assign a variable to one.

 

I'm getting the current template with an sql query. Then i'm doing this:

 

var $template_dir	=  "templates/$template";

 

I get the error: syntax error, unexpected '"'

 

I've read and read but i still don't understand classes  <_<

 

Pastebin: http://pastebin.com/m6060ab95

 

Edit: Sorry, this forum posted this twice for some reason.

Link to comment
Share on other sites

I'm installing the smarty templating system. I'm not familiar with classes and i'm stuck at something. The configuration file has a class with variables for you to assign directory paths to, the problem i have is that i need to assign a variable to one.

 

I'm getting the current template with an sql query. Then i'm doing this:

 

var $template_dir	=  "templates/$template";

 

I get the error: syntax error, unexpected '"'

 

I've read and read but i still don't understand classes  <_<

 

Pastebin: http://pastebin.com/m6060ab95

 

Edit: Sorry, this forum posted this twice for some reason.

 

I cant see a problem on that 1 line, and i am not reading through 2000 lines in your link...

 

But have you tried doing it a differant way, at times i find things fail 1 way, yet work randomly another...

 

try

var $template_dir	=  "templates/".$template;

 

 

Link to comment
Share on other sites

I've tried that before - same result.

 

That line is not the problem then...

 

Dont listen to much to line error reports....

 

Depending on what the error is, it may get that totally wrong...

 

I bet if you read every line of your code, you would find atleast 1 error...

 

Thats your job to read it, not anyone elses, try adding some more error handling reports

in, once you have identified the error, things will be hella easyer...

Link to comment
Share on other sites

The only part that's my code is the part that gets the template name from the database. I know this is working. The only line that i've changed is the line it's complaining about. If i don't change anything the script works fine. So i can assume it's that one line that's at fault.

Link to comment
Share on other sites

I've tried that before - same result.

 

That line is not the problem then...

 

Dont listen to much to line error reports....

 

Depending on what the error is, it may get that totally wrong...

 

I bet if you read every line of your code, you would find atleast 1 error...

 

Thats your job to read it, not anyone elses, try adding some more error handling reports

in, once you have identified the error, things will be hella easyer...

 

 

Ok 2 things, 1 i never ever used 'var', and 2, echo out the value of '$template' before using it, see if it is what you think it is...

Link to comment
Share on other sites

Youre trying to edit Smarty.class.php.

 

The Smarty class is fine as it is you can change the value like so.

//instantiate object
$smarty=new Smarty();
//change the value
$smarty->template_dir="what_ever_you_want";

 

I recommend not changing this class unless you know what youre doing. Instead read how to use the smarty template engine.

 

Link to comment
Share on other sites

Edit: i know how to bloody change variables, and if you looked at what i'm trying to do you'd see what you are asking isn't possible.

 

I think it's a class specific thing. Some people have told me i need to use something called a 'construct', not that i can get this construct to work.

 

I added this just below class Smarty { :

 

    function __construct () { 

        db_connect($dbhost, $dbuser, $dbpass, $dbname);

        $table = $db_label."_templates";
        $result = db_query("SELECT * FROM $table WHERE active = '1'");

        while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
            $template = $row['folder'];
        }

    }

 

Still gives me the same result though.

 

I think i understand how you're seeing it. $variable = "this".$that; works normally, but not in classes apparently.

Link to comment
Share on other sites

<?php
include(smartyclasshere);

$smarty = new Smarty;
$smarty->template_dir = "templates/$template";
?>

 

That should get you the desired results.

 

EDIT: decided to explain.

 

Once a class has been instantiated and it has a var of $x then you can assign any variable to $x by calling instantiated class (in this case $smarty) using the ->x. Using that you can read the variable or set the variable. The variable is a "property" of the smarty class with read/write access to it.

 

So if smarty had a var $x defined in the class, this would be the call to change it:

<?php
include(smartyclasshere);

$smarty = new Smarty;
$smarty->x = "bob";
echo $smarty->x; // should print bob (if $x was defined in the class chances are it wasnt but yea this is just demonstration purposes.
?>

 

EDIT EDIT:

Seeing that you are attempting to modify the class for no reason, I decided to help you understand something. I would not change the smarty class period, it works fine as it is as long as you invoke the right methods. I would revert back to the original version and use the above code to change the directory, as that is essentially what you want to do right?

 

If you do not want to change the directories (which I gathered is all you wanted to do from the initial post) then please restate your question exactly and clearly.

Link to comment
Share on other sites

Alright instead of doing a third edit I decided to post a possible answer for the young tyke, since he does not understand that smarty offered a way to set the template_directory without having to modify the original code.

 

#
define('SMARTY_PHP_PASSTHRU',   0);
#
define('SMARTY_PHP_QUOTE',      1);
#
define('SMARTY_PHP_REMOVE',     2);
#
define('SMARTY_PHP_ALLOW',      3);
define('SMARTY_MY_TEMPLATE', $template);
#

#
/**
#
* @package Smarty
#
*/
#
class Smarty
#
{        
#
    /**#@+
#
     * Smarty Configuration Section
#
     */
#

#
    /**
#
     * The name of the directory where templates are located.
#
     *
#
     * @var string
#
     */
#
    var $template_dir    =  "templates/" . SMARTY_MY_TEMPLATE;
#

 

That would solve your problem. But take my advice above and use the proper methods, cause if smarty comes out with a huge vunerability, you have to modify all that code again and remember what you did.

Link to comment
Share on other sites

The point I am trying to get acrossed is that you do not need to modify the smarty class. By using the example below you are setting the template_dir without changing the smarty class period.

 

<?php
include(smartyclasshere);

$template = "my/template/dir";
$smarty = new Smarty;
$smarty->template_dir = "templates/$template";
?>

 

Will set the template_dir to "templates/my/template/dir" without doing any modification to the class code of smarty.

 

The code I posted above with smarty, would be to show you the way you "wanted" to do it. But as I stated before it is uneseccary to do that since smarty offers the solution I just posted above $smarty->template_dir  to dynamically set the template_dir to what you want it to be.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.