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