Re: Re: Templating engines

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

 



Mattias Thorslund wrote:
Skrol 29 wrote:

What templating engines do you use with php and why?
Ive been using smarty (http://smarty.php.net)
Clive.



I just can't work with PHP the usual way.
Mixing business source and interface source is something too bastard for me.
Now that I know templates systems I totaly disagree to say that PHP is a
Template Engine. Ok, it has some basic template features, but they are too
poor to use it this way seriously.



Who says PHP itself is a template engine? I think nobody.

I do.

It comes down to whether you want the delineation between the template and the business logic enforced by the system or not. PHP is a general-purpose templating system that does not enforce this delineation. It lets you choose exactly how much logic you are going to allow in your templates. If you have no control over the people creating your templates, that may not be appropriate, but in many cases it is perfectly fine. It just takes a bit of discipline to use it correctly.

You also need to recognize that you are going to need presentation-layer logic. You simply can't get around that and you shouldn't confuse presentation-level logic, which can be quite complex, with the business logic behind your application. I often see people make the mistake of trying to separate their PHP code from their HTML which the article you referenced hinted at as well.

The approach I tend to point people at is something I have been calling a Template API. That is, when you build your application, you create a template api to go along with it. In essence you are creating a templating system for each application you write.

For example, I describe a simple such system here:

   http://talks.php.net/show/mtladv05/20

To me, this is a perfectly good template (from the slide):

  <?php
  start_poll(1);
  $os = array("FreeBSD","Linux","OSX","Windows","Other");
  ?>
  <p class="purpose">
  Please answer a couple of questions for us.
  </p>

  <p class="question">
  1. What is your name?
  </p>
  <?php text_answer('name',64)?>

  <p class="question">
  2. Which operating systems do you use on a daily basis?
  </p>
  <?php select_any_of($os)?>

  <p class="question">
  3. Which operating system do you prefer?
  </p>
  <?php select_one_of($os)?>

  <?php end_poll(); ?>

The end_poll() call could be eliminated as well to make it slightly cleaner, but otherwise this is straight-forward with no mixing of business-logic and content.

My main issue with general-purpose templating systems is that they always end up inventing a new language. It may start off as a subset of some other language, but eventually it turns into a new language. In Smarty, for example, you now have stuff like:

  {object->method p1="arg1" p2=$arg2 assign="output"}
  Result was {$output}

I fail to see how this is in any way better/easier/superior to:

  <?$output = $object->method("arg1",$arg2)?>
  Result was <?=$output?>

As far as I am concerned you shouldn't be dealing with any sort of objects from a template to begin with. There should be nothing but simple variables and straight function calls from a template, but this is a religious issue that people will never agree on. Hence PHP's neutral approach where the exact templating delienation is left up to the users.

-Rasmus

--
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