Kristian Köhntopp wrote:
> The following code is slow and very ad-hoc. Still, I'd like you
> to have a look at it and think about it - I'll gather reviews and
> opinions and probably turn it into C at some later time.
Your suggestions hits my needs to almost 100%. People say that I tend to
copy your ideas. This is not true actually. About a year ago you
started to work with XML/XSLT. I also looked at XML/XSLT that days,
bought a couple of books and decided not to use XSLT.
XSLT - nice, but....
The first time I read about XSLT in depth I was missing some callbacks
during the transformation process to perform certain actions. For
example I needed a <phpcode /> container to be translated into a
highlight_string() function call and - in certain cases an eval().
Using XSLT to do this I would have had to do the following:
XML -> XSLT -> PHP -> HTML
Really complicated. Guess I want this to be translated:
<phpcode eval="true" title="print example">
<php
$foo = 1;
print "Silly example, usually I put 20+ lines here";
?>
</phpcode>
Using XSLT my first step would be producing:
<?php
ob_start();
$foo = 1;
print "Silly example, usually I put 20+ lines here";
ob_end();
$content = ob_get_content();
$content = highlight_source($content);
$content = preg_replace("#f0f0f0", "#d0d0d0", $content);
print $content;
?>
or maybe:
<?php phpcode("..."); ?>
In the next step I would be executing this PHP script to generate an
HTML output. If you've ever written XSL containing if-else
(xsl:choose/xsl:when) and recursive template calls you know how much it
hurts to write the required XSL file. If not, here's a simple example
turning XML into PHP using XSLT:
http://www.ulf-wendel.de/projekte/menu/xmlmenu.php [sorry, german]
(http://www.ulf-wendel.de/projekte/menu/menu3.xsl)
As you can see this is a lot of almost unreadable stuff to do the job.
I decided not to use XSLT, but I used XML + preg_match()/callbacks +
regular HTML templates. Adding content to my homepage is really easy.
All I have to do was to fill out this XML fragment.
<homepage>
<title>...</title>
<keyords>...</keywords>
<content> XHTML goes here </content>
</homepage>
My framework adds all I need: menu, ...
So, tell me about the advantage of using XSLT for HTML generation? I
can't use my favourite HTML editor, generating HTML can't be done in one
step. In my case XSL was no more but overhead. Not powerful enough to
serve my needs.
Why the hell do I want XML and custom tags?
Rasmus might shake his head asking what's my point? Rasmus, the man that
can't be seen without wireless LAN and a notebook, started to add
"functions" to HTML many years ago. He wrote:
<html>
<head>
<title>Joke of the day, <?php print date("Y-m-d", time()); ?></title>
...
Maybe the syntax was slightly different, but that's roughly how it
looked like. Using templates we've turned this into:
<html>
<head>
<title>Joke of the day, {TODAY}</title>
...
[IT, PHPLib, ...]
or:
<html>
<head>
<title>Joke of the day, <{$today}></title>
[customized Smarty]
What we've done is wrapping a new syntax around PHP, hiding "<?php
today(); ?>". The usual argument to use templates is the separation of
design and logics. But these days we put lots of logic back into our
templates using Smarty (or XSL). Anyway.
Generally speaking we do no more but change the syntax of PHP. Having
callback functions associated with customs xml-tags is just another
version of the same game:
<html>
<head>
<title>Joke of the day, <today></title>
...
Why should one go this way? XML is just cool:
- XML is a world-wide accepted standard
for information interchange
- XML structures our content
- XML is ease to learn
- XML can be transformed (into CSV, XML, ...) using XSLT
- XML documents can be validated (well-formed, DTD, Schema)
- XML is plain text which can be understood by every
computer in this world.
These are only a _few_ arguments for XML. Having IT[X], PHPLib, Smarty -
whatever - templates I can't use XSLT to transform it into CSV file to
be processed by a database. But I can use XML for this.
Having an XML content files I can switch from PHP to Java without many
hurts. For eample I could use (properitary) Xalan XSL extensions to
emulate my PHP callbacks. Using XY-PHP-Template-Engine I would have to
write a parser before I can concentrate on the main issue.
More important: pixeldunker have no difficulties learning new tags. Most
of them know XHTML. It's easy for them to understand what's going on here:
<menu url="/contact" type="tree" />
<gtext label="send" />
Not only the webmonkey likes this syntax. Look at my first example: Do
you preferr:
<phpcode>
....
</phpcode>
Or do you want to type this:
<?php phpcode(" wow .... escaping all
double slashes ... puuh ...."); ?>
I like the first one: it's to simple.
Smarty: new, old ideas
Some customers are requesting full-fledged "templates" without PHP. No
problem with Smarty: if, else, functions, variables, ... But this is not
why I like Smarty. Smarty compiles it's templates into native
PHP-scripts which makes it damn fast (if compiling smarty's code itself
plays no role).
Compiling is no new idea, but it was new in the context of PHP and
templates. Now that we think on another "template engine" I'd like to
overtake the Smarty idea. I wan't a system that can:
- transform XML using PHP callbacks on-the-fly
and
- compile XML into PHP
The role of PEAR
Roxen would not be so fascinating if there would not be RXML. RXML
provides a set of built-in custom "HTML" tags, like <gtext />. All Joe
Dolittle needs to do to generate an image or a pie chart on the fly is
to run the Roxen installer script and use the approriate RXML tags.
Having function callbacks for XML tags is just half the way. Cool
feature, but not very helpful for Joe (also know as "customer"). It
starts to be extremly useful if there's a set of PEAR (which comes with
every PHP installation) classes that can be mapped to XML tags...
Conclusion
Kristian and I haven't talked on this issue for about one year. He once
mentioned it on the regional sailing event "Kieler Woche" when he meet
Thies, no more. Independely I came to a very similar wish: custom XHTML
tags without the need for XSLT.
XML is my favourite: it's easy, highly portable, an industrial standard.
Custom tags can be understood by almost everybody. Roxen Users know
about the power of them.
The success of Roxen is closely related to the availablility of built-in
RXML tags. Joe Dolittle can add <gtext> to his website and gets
dynamically built images. Simple. Advanced users can take the power of
XML and do whatever they want with Joe's content pages.
Who's gonna implement it ;)
Ulf
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]