Re: [SMARTY] Seperation of Logic and Presentation
Vicente Werner <[email protected]>
| Newsgroups | gmane.comp.php.smarty.general |
|---|---|
| Message-ID | <[email protected]> |
My setup lacks any directory structure since the templates are stored in a db, and as such templates are categorized: MASTER: they define the basic layout of the site load the css, etc... BASE: They're the actual nodes with content, calls to components EXTRA: Small regions that being static themselves are repeated all over the site, they're invoked by master or base templates COMPONENT: They're the templates that actually belong to a "gui" component of the site (forms, workflows, etc..) Both component & extra are outside the hierachy and are called where needed Every template type can contain any other type and form a hierachy, of it's own. On 7/29/05, Monte Ohrt <[email protected]> wrote: > OK while we're sharing, here is my setup (or rather some of its basics) > > We have an environment with multiple sites (clients) that can have > multiple "themes", or look-and-feel to their site that they can swap > with the change of one variable. Then there are "modules" such as news, > calendar, classifieds, etc. The top-level client/site directory > structure is as follows (these are not under doc root!): > > /templates/ > /theme1/ > init.tpl > header.tpl > footer.tpl > layout.tpl > /mod1/ > location_top.tpl > location_left.tpl > location_main_content.tpl > /images/ > /theme1/ > masthead.gif > /mod1/ > module.gif > /css/ > /theme/ > /mod1/ > /configs/ > /theme/ > lang_en.conf > lang_de.conf > /mod1/ > > > templates, images, css and config files are broken down to global, > theme-specific and module-specific directories. We keep > language-specific config files under each theme. > > I have one "controller" PHP script that acts as the controller (see the > guestbook example app for complete example) > > This script will do something like this (crude example): > > index.php: > > $smarty = new Smarty; > > // set from config file > $smarty->theme = 'bluestuff'; > > // set by running module > $smarty->mod = 'calendar'; > > // do some stuff to figure out what page we are displaying > // do whatever necessary tpl var assignments here > > $smarty->assign('page','main_menu'); > $smarty->display("init.tpl"); > > > The init.tpl acts as the template controller, it basically loads the > global init.conf then loads the theme-specific init.tpl: > > init.tpl: > > {config_load file="init.conf"} > {include file="$theme/init.tpl"} > > $theme/init.tpl then loads theme-specific stuff, then decides if we're > loading the main layout or something else: > > {config_load file="$theme/init.conf"} > {config_load file="$theme/lang_$lang.conf} > {if $page eq "showimage"} > {include file="$theme/showimage.tpl"} > {elseif $page eq "printable"} > {include file="$theme/printable.tpl"} > {else} > {include file="$theme/layout.tpl"} > {/if} > > The $theme is set in the constructor for the current "theme". There is > an init.conf that contains global config vars, and also an init.conf for > each theme for theme-specific settings. layout.tpl contains the > framework for each page, it minimally contains location cells that can > be controlled per module. Notice that the layout can be skipped, such as > an "image-only" or "printable" page. Here is a watered-down example of a > layout.tpl: > > layout.tpl: > > {include file="$theme/header.tpl"} > <table> > <tr> > <td colspan="2">{include file="$theme/$mod/location_top.tpl"}</td> > </tr> > <tr> > <td>{include file="$theme/$mod/location_left.tpl"}</td> > <td>{include file="$theme/$mod/location_main_content.tpl"}</td> > </tr> > </table> > {include file="$theme/location_footer.tpl"} > > That is a very crude example, but basically you put your HTML/CSS here > to make the theme look how you want. Each module can control what shows > up in the location templates. location tpls are useful for banners, > module navigation, etc. The location_main_content.tpl is what shows up > in the center of the page, it minimally includes module-specific content > and templates for whatever page we are on, such as: > > {include file="$theme/$mod/$page.tpl"} > > Then you have a template for each module page in that directory. > > That should be enough to put everyone to sleep :) > > Monte > > -- > Smarty General Mailing List (http://smarty.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > -- Vicente Werner y Sánchez Lead Developer at Dinahosting S.L. -- Smarty General Mailing List (http://smarty.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php