+1 Having $content$ is much better IMHO. I'm using the other approach currently as a work-around, but it doesn't feel as clean or as easy as having $content$. I'm adding a commentblock to the elements to make clear what is happening there so future developers on the project don't get confused.
regards, Onno 2008/8/18 Alex Kotchnev <[EMAIL PROTECTED]> > Ivan, > thank you for offering your suggestion, indeed the solution you propose > for this particular case is straightforward enough and solves the problem. > > I guess the reason that I was bringing this up for consideration (despite > it being discussed in the past), is that the lack of $content$ equivalent > functionality introduced a couple of not very desirable things into my > setup: > > 1. In order to solve this problem, I had to introduce an "unnecessary" > element into my layout, namely the <t:parameter /> & <t:delegate /> > elements, in order to account for the possibility that the user might want > to have a previewable template. In order for a "client" page to use my > layout component, it not only need to know about the layout component, but > also need to know that "the content" needs to be included in a particularly > named element. One could certainly say that this is the "API" for using the > layout component. The thing is that if I go this route, all pages that want > to use the layout will have to have the extra <t:parameter /> included, and > that doesn't seem very clean. > > 2. I had to declare the component at the top of the page, making it wrap > around a whole bunch of things that I don't care for (although, from a > different point of view, it indeed makes sense to declare the t:layout > component at the top as it affects the whole page). So, while previously, > the declaration (e.g. where I specify the t:layout) and providing the > content for the component (e.g. seeing what actually ends up in the > "content" area of my output) were very close together e.g. > > <html ...> > ... stuff stuff stuff..... > <t:layout > THe content that I care for </t:layout> > ... more stuff stuff stuff ... > </html> > > > whereas now, the two are very much far apart and much more difficult to > distinguish from the "other stuff", e.g. > > <html t:type="layout"> > .... stuff stuff stuff ... > <t:parameter> the content that I care for </t:parameter> > ... more stuff.... stuff... stuff ... > </html> > > So, in summary I guess I'm bringing up the more conceptual problem of how > the lack of the equivalent of $content$ just makes two very common usages > (e.g. having a layout component, having a previewable page based on that > content) just a little harder to get started with. When you add to that the > fact that most "layout" component examples in T5 do not include the > solution > you propose (e.g. most use t:body), it just adds a little bit of extra > complexity (which is generally against what I understand is one of the main > goals of T5). > > In one of the previous posts it was suggested that patching the parser was > the way to add $content$ equivalent functionality. Would that be a > desirable > feature for other members (or is it just all in my head) ? Are there are > any > reasons adding such a feature would be unwanted ? Are there any special > issues that I need to be aware of in implementing this ? > > Thanks, > > Alex Kotchnev > > On Sat, Aug 16, 2008 at 11:31 PM, Ivan Dubrov <[EMAIL PROTECTED]> wrote: > > > Alex Kotchnev wrote: > > > > I also found this solution : > >> > >> > http://www.nabble.com/Re-%3A-Re-%3A-T5%3A-Layout-question-to16448904.html#a16448904 > >> , > >> but life just becomes a little uglier with it. I see that we're > >> jumping > >> through these hoops to prevent template previewability and so if it > >> becomes > >> too much of a hassle to deal with I can scrap previewability. However, > >> it's > >> such a pity when it was nice and elegant in T4, and not it's a little > >> worse. > >> > >> > >> > > What are the problems with the last option? You just mark <html> tag with > > t:type="layout" and wrap the $content$ area with <t:parameter > > name="body">...page content...</t:parameter>. Simple. Inside the layout > you > > use <t:delegate t:to="body"/> instead of <t:body/> and that's all (there > > "body" is the component parameter). > > > > Like this: > > > > Layout.tml > > <html> > > <head> ... </head> > > <body> > > <div id="header"> ...</div> > > <div id="content"> <t:delegate t:to="body" /> </div> > > <div id="footer"> .. </div> > > </body> > > </html> > > > > Page1.html: > > > > <html t:type="layout"> > > <head> ... </head> > > <body> > > <div id="header"> ...</div> > > <div id="content"><t:parameter name="body"> Foo, bar baz > > </t:parameter></div> > > > > <div id="footer"> .. </div> > > </body> > > </html> > > > > -- > > WBR, > > Ivan S. Dubrov > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > >