Re: eval and HEREDOC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Peter!

In the first version of the template engine I had markers but now I
need more complex conditions or operations inside the template files,
like array of arrays and so on. I really like the freedom to be able
to just open a PHP tag <? ?> and use a foreach() or whatever PHP
function as I please.

Thanks again to all of you for your support! :)

Sorin

--
Sorin Buturugeanu
http://www.soin.ro



On Wed, Jul 21, 2010 at 9:47 AM, Peter Lind <peter.e.lind@xxxxxxxxx> wrote:
> On 21 July 2010 06:46, Sorin Buturugeanu <mail@xxxxxxx> wrote:
>> @Vincent: no, the short tags are not off.
>>
>> @Jim: This seamns to work fine:
>>
>> $template = file_get_contents(pathTemplates.$this->dir.$this->tpl);
>> ob_start();
>> $template = eval('?>'.$template);
>> $template = ob_get_clean();
>>
>> Thanks!
>>
>> Best wishes!
>>
>> Sorin
>>
>>
>> --
>> Sorin Buturugeanu
>> http://www.soin.ro
>>
>>
>>
>>
>> On Wed, Jul 21, 2010 at 1:45 AM,  <lists@xxxxxxxxx> wrote:
>>>
>>>
>>>
>>> On Wed, 21 Jul 2010 01:04:12 +0300, Sorin Buturugeanu <mail@xxxxxxx> wrote:
>>>> Hello Vincent and thank you for your reply :).
>>>>
>>>> That's true, I forgot to explain how I got to using HEREDOC, so ..
>>>>
>>>> Using eval(file_get_contents($file)) just outputs the result on the
>>>> spot and I need
>>>> to get the whole output (without echoing it) and do some more things with
>>>> it.
>>>>
>>>> require_once() doesn't fit here (from what I can tell), because it
>>>> would still just
>>>> include the file in echo the output.
>>>>
>>>> I think there must be a solution, but I'm missing something here  ..
>>>
>>>
>>> Check out the ob_* functions
>>>
>>> You could do this
>>>
>>> ob_start();
>>>
>>> include "/your/file.php";
>>>
>>> $output = ob_get_clean();
>>>
>>> echo $output;
>>>
>>> Jim
>>>
>>>>
>>>> Thanks again!
>>>>
>>>> --
>>>> Sorin Buturugeanu
>>>> http://www.soin.ro
>>>>
>>>>
>>>> On Wed, Jul 21, 2010 at 12:49 AM, Daevid Vincent <daevid@xxxxxxxxxx>
>>>> wrote:
>>>>>
>>>>> > -----Original Message-----
>>>>> > From: Sorin Buturugeanu [mailto:mail@xxxxxxx]
>>>>> > Sent: Tuesday, July 20, 2010 2:11 PM
>>>>> > To: php-general@xxxxxxxxxxxxx
>>>>> > Subject:  eval and HEREDOC
>>>>> >
>>>>> > Hello,
>>>>> >
>>>>> > I am having trouble with a part of my templating script. I'll
>>>>> > try to explain:
>>>>> >
>>>>> > The template itself is HTML with PHP code inside it, like:
>>>>> >
>>>>> > <div><?=strtoupper($user['name']);?></div>
>>>>> >
>>>>> > And I have the following code as part of the templating engine:
>>>>> >
>>>>> > $template = file_get_contents($file);
>>>>> > $template = "return <<<TEMPLATE\n".$template."\nTEMPLATE;\n";
>>>>> > $template = eval($template);
>>>>> >
>>>>> > The problem is that the eval() HEREDOC combination gives the
>>>>> > following output:
>>>>> >
>>>>> > <?=strtoupper(Array['time']);?>
>>>>> >
>>>>> > If in the HTML file (template) I use
>>>>> >
>>>>> > <div><?=strtoupper({$user['name']});?></div>
>>>>> >
>>>>> > I get  <?=strtoupper(username);?> as an output.
>>>>> >
>>>>> > I have tried closing the php tag like this:
>>>>> >
>>>>> > $template = "return <<<TEMPLATE\n?>".$template."\nTEMPLATE;\n";
>>>>> >
>>>>> > but the extra ?> only gets outputed as HTML.
>>>>> >
>>>>> > This is my first post to this mailing list, so I great you
>>>>> > all and thank you for any kind of solution to my problem.
>>>>>
>>>>> Why are you using HEREDOC to begin with? I personally find them to be
>>>> ugly
>>>>> and more trouble than they're worth.
>>>>>
>>>>> You can write the same thing as this I think (untested):
>>>>>
>>>>> $template = eval(file_get_contents($file));
>>>>>
>>>>> But you might also consider using "include_once" or "require_once"
>>>> instead
>>>>> of this "eval()" business.
>>>>>
>>>>> Also note, that a string can span more than one line and have variables
>>>> in
>>>>> it. It can even be used with code, so HEREDOC is again useless for most
>>>>> situations:
>>>>>
>>>>> $foo = "
>>>>> Hello $name,\n
>>>>> \n
>>>>> Today is ".date('Y-m-d')."\n
>>>>> \n
>>>>> Lorem ipsum dolor sit amet, consectetur adipiscing elit.
>>>>> \n
>>>>> Nulla eros purus, pharetra a blandit non, pellentesque et leo. In augue
>>>>> metus, mattis a sollicitudin in, placerat vitae elit.
>>>>> \n
>>>>> Quisque elit mauris, varius sit amet cursus sed, eleifend a mauris.
>>>>> ";
>>>>>
>>>>
>>>> --
>>>> PHP General Mailing List (http://www.php.net/)
>>>> To unsubscribe, visit: http://www.php.net/unsub.php
>>>
>>>
>>> --
>>> PHP General Mailing List (http://www.php.net/)
>>> To unsubscribe, visit: http://www.php.net/unsub.php
>>>
>>>
>>
>> --
>> PHP General Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>>
>
> 1) heredoc is great for not caring about escaping ' or ". Whether or
> not you like the syntax it's not hard to use in any way.
> 2) stay away from eval. Just don't use it unless you have no other choice
> 3) the include+output buffering solution is much better. Another
> option would be to use markers in your templates and then just replace
> them with content. Whether or not that would suit you depends on what
> kinds of templates you're making and for what purpose
>
> Regards
> Peter
>
> --
> <hype>
> WWW: http://plphp.dk / http://plind.dk
> LinkedIn: http://www.linkedin.com/in/plind
> BeWelcome/Couchsurfing: Fake51
> Twitter: http://twitter.com/kafe15
> </hype>
>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux