I'm not 100% sure this is what you're looking for, but I had a similar
requirement I worked out quick and dirty as so:
border-template.htm:
<html>
<!-- common headers, title etc. -->
<body>
<!-- common elements like menu and page frame, etc. -->
#parse($subPath)
</body>
</html>
BorderPage class (note the dynamic class assignment for getPagePath):
public class BorderPage extends Page {
public BorderPage(){
String subPath = getContext().getPagePath(this.getClass());
addModel("subPath", subPath);
}
}
In the constructor or onInit method of a particular page, you can override the
subPath to use a particular template at any point within the chain of
inheritance. For example, I have an IntranetPage class that I use as the base
class for all my intranet pages and I override the subPath in the constructor
for IntranetPage so they all use the same "sub-template":
intranetpage.htm:
<div class="column-container">
<div class="left-column">
$accordion
</div>
<div class="right-column" >
#parse($path)
<div class="clear"></div>
</div>
<div class="footer">
</div>
</div>
IntranetPage class (note the static class assignment for getPagePath):
public class IntranetPage extends BorderPage {
public IntranetPage(){
String subPath = getContext().getPagePath(IntranetPage.class);
addModel("subPath", subPath);
}
}
I haven't had to extend it further (subPath, subSubPath, etc.) so I haven't
thought about it. I believe this simple approach will meet your needs, though.
Hope this helps,
John
-----Original Message-----
From: Andrei Ionescu [mailto:[email protected]]
Sent: Wednesday, September 01, 2010 6:53 AM
To: [email protected]
Subject: Page Decoration with the Border vs. Page inclusion in the Border?
I guess this question was asked a few times, but I haven't seen an
answer/solution with Click that works :( :
Is it possible to Decorate Click pages with the border-template.htm vs.
the actual "inclusion" of the page in the border-template.htm using the
#parse($page) Velocity macro?
The actual Click approach works very well for simple
templates(border-template.htm ), but more complex ones are hard to
make/maintain, hence the requirement to "decorate" (inject their content).
One framework that allows to arbitrarily decorate web pages (even remote
ones) is Sitemesh (the new sitemesh3 http://www.sitemesh.org/)
http://www.opensymphony.com/sitemesh/
but unfortunately I have no idea how to use it with Click it a way that
Click still keeps all it's fantastic functionality :(.
The "decoration" (like Sitemesh does) requirement is quite common where
the Template needs to change (e.g. in the case of the CMS, Blog, or
applications that allow customer branding), and it might have a strange
structure and requires several insertion points for the content from
pages - e.g. left column, right column, etc.
E.g. for the EditUserPage.java page edit-user.htm:
-------------
$form
$addUserButton
-------------
the $form needs to go in one DIV of the border-template.htm, but the
$adduserButton needs to go to another div (e.g. on the right) - those
DIVs might be separated from another with several DIVS or nested or
contain some more things, or there might be a table there, so I can't
write in edit-user.htm something like:
---------
<div id="center"> $form </div>
<div id="left"> $addUserButton </div>
--------
because that would break and mess up with the structure of the
border-template.htm (that should be the only place the layout takes place).
Click allows only one insertion point: in the DIV where
#parse($page) takes place :(.
Using "decoration" it would be possible to insert different parts of
edit-user.htm to different places of the border-template.htm, but how?
Any ideas how to achieve this with Click would be highly appreciated.
regards,
Andrei.