Re: templating engine options

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

 



On Tuesday 26 May 2009 01:44:43 am Nathan Rixham wrote:
> Stuart wrote:
> > 2009/5/25 Robert Cummings <robert@xxxxxxxxxxxxx>:
> >> I continued the discussion with Nathan.
> >
> > I too have had an off-list discussion with Nathan on this topic, and a
> > productive one at that.
>
> which would probably be a good time for me to step back in; having had a
>   nice little inside in to both Robert and Stuarts template systems, and
> indeed way(s) of doing things. Also thanks to everybody else who made
> suggestions and gave input - it was all appreciated.
>
> I'm far from making a final decision, as I've decided to approach this
> by setting a few guidelines and a wishlist, then either finding /
> modifying something to do the job, or creating something from scratch.
>
> Both Rob and Stuarts systems were more in common than they may think,
> focus in both was on performance, and only making set data available to
> the templates (whether pushing or pulling).
>
> The syntax did differ though, and functionality aside this is probably
> one of the most important aspects (imho).
>
> Markup & XML sits well with me (and most) because we are web developers
> and use it daily.
>
> PHP syntax also sits well because we also use it daily.
>
> The fact remains though that this "feels like" (and possibly is) a
> different job which requires something different. Both XHTML and PHP do
> their job well - just as ecma(java)script and css do theirs.
>
> However none of these technologies / languages are suited and dedicated
> to converting provided data in to specified output; specifically, and
> only, xhtml.
>
> XSL Templates are near perfect, built for the job, and very powerful -
> but time hasn't favoured them well; and until (if ever) a wide spread
> adoption happens something else needs to fill the gap.
>
> Template Specific Thoughts:
>
> Smarty, Stuarts Engine, Robs Engine, PHPLIB and many more had one common
> theme, they all limited the data available. My terminology of limited
> perhaps sounds wrong, so maybe "make specified selected data available"
> or "provide access to the view" will make more sense. Inline with
> layered and tiered application design this makes perfect sense; thus..
>
> A template /should/ only be able to access the data made available to
> it, nothing else. Whether it requests the data or the data is provided
> is covered later. If it doesn't have all the data needed then this needs
> reviewed and the application needs changed to provide it. Not the
> template engine bastardized to accommodate a limited app.
>
> A template ~should~ have unique yet easy to understand syntax, something
> that complements xhtml and provides all needed functionality. (IMHO it
> should not be php syntax)
>
> A template engine must stick within it's role boundaries, it's not a
> cache engine, its not php, its not xhtml, its not for implementing
> functionality - it is simply and purely to do its job - take data,
> populate an xhtml template with it and return the result - nothing more,
> nothing less.
>
>
> Push vs Pull.
>
> This is a much bigger issue than I thought, and perhaps is the crux of
> the whole thing. I can see two clear approaches;
>
> Firstly, (the common one)
> - app passes data and a template to the template engine
> - template engine merges it together and passes back
> - app does as it pleases with data (sends it to client, caches it, fires
> it in an email - whatever)
>
> Secondly, (uncomment)
> [think modular]
> - app provides an api / gateway to views of data
> - template engine requests view(s) specified in template from app
> - template engine populates template modules with data & sends output to
>
> I guess the first is template engine as a Util / Service - and the
> second is template engine as a Layer / App.
>
> There are pros and cons in each design, concentrating on the second
> design for now - this brings in a lot of scope which seems to fit well
> both practically and architecturally.
>
> The freedom to be able to specify in template that...
>
> this is template module "latest posts", it is bound to the data view (or
> data provider) "latest posts(8)"
> whilst overall combining template (page) is comprised of modules x,y and
> z - here, here and here.
>
> ...really appeals to me; certainly in this scenario where you request
> (pull) from the application rather than make it all available. This way
> you only ever perform the business logic required for the information
> available. The counter part of making everything available incase it may
> be used is ridiculous (and makes me think coldfusion for some reason??).
>
> Architecturally this appears to be good - it's the presentation tier
> being a presentation tier, the logic tier knows nothing of the
> presentation tier and simply serves up what is requested. However thats
> only on the one side of the tier - on the other side we have a huge
> gaping hole where functionality should be (cache, compilation, delivery)
> etc, which would require another, as yet unknown layer (or 2).
>
> The abstraction and separation of concerns in this setup really appeals
> - but practically I'm not sure if the time spent implementing on a small
> or even medium sized project would be worth it. Still appeals massively
> though - pull makes more logical sense to me.
>
> Meanwhile, we have the first option, the way it's done, "push" the data
> - specify a template for that data and let template engine X do the
> merging. IMHO a clean, simple, lightweight implementation wouldn't be
> the hardest thing to make, and hundreds of apps are freely available all
> ready.
>
>
> Push vs Pull Conclusion
> Mentally I'm sticking with "pull" for a long term goal, however
> practically I'm going to look at creating "push"; which isn't hard and
> focussing specifically on template syntax, which is were I'm going next :p
>
>
> Syntax
>
> As mentioned previously I strongly feel all the current offerings I've
> seen are not ideal, the syntax is just a bit wrong
>
> preference goes to smarty/phplib style of syntax {$var.child} for only
> one reason.. because it's not as intertwined as:
> echo '<li>'. $var->child . '</li>';
> //simple example but you know how messy this can get
> likewise it's not as ..?.. as xslt nor is it as potentially confusing as
> two versions of markup in the same document.
>
> however, I still don't like it - it's just a workaround imho, a
> temporary measure.
>
> between the last line and here there is a massive trail of thought I
> can't even begin to type out, and it'd be v boring. BUT it leads me to
> the following..
>
> An extended version of xhtml, with a simple dtd, specifically for
> templates. This isn't intertwined or alternative markup, it's enhanced
> with more attributes.. consider
>
> <div id="comments" datasource="blog.recentcomment">
>    <p>
>      <strong data="title" /><br /> ..PROBLEM..
>    </p>
> </div>
>
> and here in and there in lies the great big feckin problems which means
> we'll never have a proper solution.
>
> ..PROBLEM.. how do we specify what the content of problem area is?
> without introducing a new tag rather than just an attribute?
>
> making a template syntax is simple, while you do block elements, the
> second you hit inline elements you are stuffed.
>
> <b> is the bane of our lives, because we can't represent inline elements
> in any language bar xhtml, we work with blocks of everything. Consider
> drawing API's, you can draw a circle inside a square easily, the code is
> just:
> object.drawSquare( x , y , w , h );
> object.drawCircle( x , y , r);
> it's never
> object.drawSquare( x ,{object.drawCircle( x , y , r)} y , w , h ); //lol
>
> back in xhtml world, to mark off a segment as <b> without using the
> syntax or sending an xhtml fragment in a var we'd have to do it using an
> instruction with offsets and positions.
> $string = 'some content here';
> $boldBit = substr( $string , 5 , 7);
> // .. more code
>
> so the syntax of xhtml doesn't really fit any programming language (?)
>
> interestingly I finished that ..PROBLEM.. off mentally and came up with
> a tag like <data data="whatever" /> which may as well just be <value-of
> data="whatever" /> which is just xslt.
>
> square one.
>
> sub thought.. is that an xslt pre processor which figured out what data
> the xsl needs, then provides it as xml and delivers client side ready
> for rendering would be nice.
>
> ultimately though, I feel I'm getting no-where, syntax syntax syntax - I
> re-iterate, I'll have the solution to this when this can be accomplished
>
> <?php
>
> if( isset($comments) && is_array($comments) && count($comments) > 0 ) {
>    echo '<h2>Comments</h2>';
>    echo '<div id="comments">';
>    foreach( $comments as $index => $comment ) {
>      echo '<a href="' . $comment->link . '">';
>      echo $comment->title;
>      echo '</a>';
>    }
>    echo '</div>';
> } else {
>    echo '<h3>No Comments</h3>';
> }
> ?>
>
> without php and without xml style markup (unless it's by extension of
> xhtml with data attributes)
>
> that was a big one!
>
> regards & any thoughts more than welcome.

Well I try to follow with my limited English knowledge.

My offer is.

template.php;

<?php
$content = 'No Comments';
if(isset($comments) and is_array($comments) and count($comments) > 0 ) {
	$content = '';
	foreach( $comments as $index => $comment ) : $content. = "<a href='".
$comment->link."'>".$comment->title."</a>"; endforeach;
}
?>

<h2>Comments</h2>
<div id="comments">
	<?=$content?>
</div>

index.php
ob_start();
require('template.php');
echo ob_get_clean();


I'm still do not understand for complex template system requirement.

Why it have to be very complex system.

Large data array, some conditions, lots of loops, and What else ?

http://www.flytag.de/
http://urlaub-finder.de/
http://airportdirekt.de/

All same system. With different css designs.

Regards.



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