On Fri, Sep 15, 2000 at 03:17:00PM -0400, Shane Hathaway wrote:
lalo@hackandroll.org wrote:
The only thing I _don't_ feel good about this kind of template is that, in practice, we will probably lose the benefits of things like <dtml-var standard_html_header> - meaning, when you want to change the header of your site, you'll have to edit all your templates.
I agree this is a problem, and speaking from experience, changing all templates is not an acceptable compromise. For www.zope.org that would mean including the standard template in nearly every page, everywhere, because the pages on www.zope.org are nearly all "templates" themselves. We would lose one of the primary benefits of Zope.
But using external fragments ("includes") is not a natural idea for web designers. One of the main points of this fuss is to allow them to create the templates in something like Dreamweaver.
Another unacceptable compromise is including a variant of standard_html_header and _footer on every page (as is done now). One reason is because it is not possible to write standard_html_header/_footer using well-formed XML. The header begins the "html" tag, while the footer ends it. In fact, most sites these days put the beginning of a table in _header and the end of the table in _footer. Objects containing non-well-formed XML aren't compatible with a DOM-based solution.
I hadn't thought of this. Of course you can already use "includes" which are valid XML, such as a single row or cell of a table (for example, the navbar of a complex site).
This has been one of the points of discussion here at DC. The only reasonable solution we've come up with is automatically wrapping the results of the rendering in an acquired object with a fixed name such as standard_page_template.
I don't like fixed names :-) what if I don't want to wrap a particular template? One sollution that could possibly work: HiperDOMDocument at /foo/bar/somepage: <html hdom:wrapper="site_template"><head> <title>This will be overridden by the wrapper template</title> </head><body> This will not appear in the document. <div hdom:id="someVariableName"> This will appear in the document. </div> </body> </html> HiperDOMDocument at /site_template: <html><head> <title hdom:text="title">Document title goes here via aquisition</title> <link rel=stylesheet href="http://yoursite.com/site_css" type="text/css"/> </head> <body bgcolor="white"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td bgcolor="#6699cc" hdom:text="navbar"> Here goes the site navbar, which can be replaced by a subsite-specific navbar thanks to aquisition</td> <td hdom:text="someVariableName"> Here goes the actual body of the template, acquired from the calling (wrapped) template via the hdom:id attribute</td> </tr> </table> </body> </html> To add even more sugar, there could be a button in the management interface of the "somepage" document to automagically merge it with the (current) wrapper so that it reads: <html hdom:wrapper="site_template"><head> <title hdom:text="title">Document title goes here via aquisition</title> <link rel=stylesheet href="http://yoursite.com/site_css" type="text/css"/> </head> <body bgcolor="white"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td bgcolor="#6699cc" hdom:text="navbar"> Here goes the site navbar, which can be replaced by a subsite-specific navbar thanks to aquisition</td> <td hdom:text="someVariableName" hdom:id="someVariableName"> This will appear in the document. </td> </tr> </table> </body> </html> This would make the Dreamweaver freaks happy, I think. BTW, please don't call the solution "xHTML Template"; it's not xHTML, it's generic XML - it can easily be used for RSS or WML or MathML or NewsML for example. []s, |alo +---- -- Hack and Roll ( http://www.hackandroll.org ) News for, uh, whatever it is that we are. http://zope.gf.com.br/lalo mailto:lalo@hackandroll.org pgp key: http://zope.gf.com.br/lalo/pessoal/pgp Brazil of Darkness (RPG) --- http://zope.gf.com.br/BroDar