| 
	
 | 
 Posted by boots on 07/30/05 22:37 
Interesting. My solution (also a PHP5 class) is called SmartyDocInfo 
(although I think that SmartyDoc might be more appropriate) and works 
in a similar way except that I use some filter magic and have just two 
addins/api methods to inject content into the header. Again, I wanted 
to provide control to template users to be able to inject head 
directives rather than forcing that in code. Take a look at the wiki if 
you wish. I wouldn't mind seeing your code either if you want to mail 
it to me or post it somewhere. 
 
BTW: I like the idea of: 
 
> $tpl->pageDisplay('defaultbikeparts.tpl', 'SimpleIntranetPageBase'); 
 
it is something I have been looking at adding in to my class but am 
still wondering on the best way of doing so. 
 
--- Jochem Maas <jochem@iamjochem.com> wrote: 
> boots wrote: 
> > The way I see it, how you organize is going to be largely dependant 
> on 
> > whether you choose to associate requests with actions or you rather 
> > associate requests with views. 
> >  
>  
> ... 
>  
> >  
> > I am moving away from that because there is ever more creep of 
> > presentation concerns into my business logic API. I am not quite 
> back 
> > to associating requests with views (though I am getting closer) and 
> am 
> > presently in a hybrid quagmire. The main barrier to associating 
> views 
> > with requests is that sub-templates typically can not add 
> processing 
> > information to the <head> of the rendered document meaning that an 
>  
> [what's below could get very boring very quickly for some people ;-)] 
>  
> I solved this problem with a subclass of Smarty (a php5 class I 
> call SmartyPage). this class takes care of diplaying a header (the 
> doc HEAD 
> + opening TAG) the content (the actual viewable page) and a footer. 
>  
> my class has a pageDisplay() method which wraps 3 calls to 
> Smarty::display/fetch() 
> the content template is fetched first then the header is displayed, 
> there after 
> the fetched output from the content tpl is output and lastly the 
> footer is 
> displayed. 
>  
> My subclass class has 3 methods for injecting 'stuff' into the HEAD: 
>  
> SmartyPage::addJavascript( <url to js file> ); 
> SmartyPage::addStyleSheet( <url to css file>, <css media relevance 
> e.g. 'screen' or 'print'> ); 
> SmartyPage::addJavascriptGlobalVar( <js var name>, <js var value> ); 
>  
> I then have a few custom plugins that allow 'content' templates (and 
> any 
> subtemplates) to add stuff to the HEAD (which is actually always 
> diplayed 
> by way of the header tpl after the content tpl is fetched) e.g: 
>  
> {addjavascript file="/js/core/selectoptions.js"} 
>  
> In addition I have developed a class PageBase which is used to define 
> default DOCTYPE, js files, css files, global js vars, header tpl, 
> footer tpl - the PageBase 
> class can be subclassed and the definitions in the superclass can be 
> either augmented or overridden as required - the upshot is that I can 
> create a 
> small set of PageBase subclasses (very simple classes without 
> methods) that specify how 
> different kinds of pages (e.g. stdpages, popup pages, order 
> transaction pages, etc) 
> for a project to diplay a page with a given content template I call 
> my subclass like so: 
>  
> $tpl->pageDisplay('defaultbikeparts.tpl'); 
>  
> or 
>  
> $tpl->pageDisplay('defaultbikeparts.tpl', 'SimpleIntranetPageBase'); 
>  
> I started using Smarty in Nov2003 - and I have been developing my 
> class ever since then... 
> and it's being successfully used in various projects including a site 
> which 
> won the people's vote for 'best webshop 2005' in Holland (not really 
> as 'big' as it sounds 
> - but I'm proud to say I built it, not the graphic design btw!, and 
> that Smarty plays no 
> small part!) 
>  
> --- 
>  
> If any of the core Smarty guys is interested in looking 
> at my code I would be prepared to spend a bit of time rolling a zip 
> file 
> that contains all the relevant files needed to make it work (it forms 
> part 
> of my custom framework so there quite a few dependencies, some of 
> which are 
> only relevant to me, which I would have to work thru/check)... php5 
> is a 
> requirement. 
>  
> If others want to look, I might consider it too - but really if you 
> do want to 
> look your php(5) skills will have to be pretty good and you will have 
> to want to 
> take the time - which is why I offer it to the core/dev guys - I know 
> they have the 
> skill and that they do research (otherwise they would never have been 
> able to write 
> such a consistent, solid piece of code!) - regardless if my offer is 
> taken up I will 
> place the files somewhere everyone who is interested can grab it. 
>  
> any takers? (I have no config/setup documentation but the code itself 
> is quite heavily documented) I'll say up front that I am very willing 
> to answer any 
> questions that may arise from people who investigate what I have 
> done. 
>  
> (if it's not obvious... I would love to give back a little code to 
> the community 
> that I have received so much from!) 
>  
> rgds, 
> Jochem. 
>  
> > outside process needs to co-ordinate that -- and this is the main 
> > reason I had been tending towards associating requests with 
> actions. I 
> > recently submitted a new Addon at the forum and posted at the Wiki 
> that 
> > I am hoping will help me streamline the process. The main thing 
> with 
> > this approach is that the plugins you provide must be able to 
> > introspect the application to some degree (or at least query 
> > application objects) in order to determine state and 
> appropriateness. 
> > In many cases, I am favouring having the plugins accept a rendering 
> > template as a parameter so as to not push the templating directly 
> into 
> > the plugin code and thereby maintaining the abstraction. 
> >  
> > I should note that there are pros and cons to both types of 
> > associations and I am not trying to suggest that one is better than 
> the 
> > other. On-the-other-hand, I do try to stick with approaches that 
> are 
> > flexible and easy to manage and develop. I have found that 
> associating 
> > requests with actions leads to more developer involvement and tends 
> to 
> > give less flexibility to designers and trusted template users. 
 
 
__________________________________________________ 
Do You Yahoo!? 
Tired of spam?  Yahoo! Mail has the best spam protection around  
http://mail.yahoo.com
 
  
Navigation:
[Reply to this message] 
 |