[prev in list] [next in list] [prev in thread] [next in thread] 

List:       smarty-general
Subject:    Re: [SMARTY] Re: smarty include tags always cache?
From:       Daniel Cummings <dan () dbmscan ! com>
Date:       2004-11-16 15:28:23
Message-ID: BDBF86C7.F7BFA%dan () dbmscan ! com
[Download RAW message or body]

Hi Matthew,

Thank you for your swift reply.
replies inline below...

On 11/15/04 12:14 PM, "Matthew Weier O'Phinney" <matthew@garden.org> wrote:

> * Daniel Cummings <dan@dbmscan.com>:
>> i have a typical website serving left menu block, top block, center block...
>> etc.
>> 
>> i currently use smarty include tags to pull in these other blocks to a main
>> index template. 
>> 
>> i have just realized that the data output from include tags is cached along
>> with the index page's cache - there seems to be no way to keep the include
>> tags dynamic. i want to be able to have each block be independent -
>> specifically the center block should be able to have new data while the left
>> menu block still build from cache.
>> 
>> what is the best approach to this problem?
> 
> Do you need to be caching at all? If not, turn off caching, and you
> should should be okay.

yes, i need caching to help deal with some database speed issues. that is
the primary reason i use smarty. that, and the way it helps me keep HTML out
of my PHP code.

> Alternatively... 
> 
> I would create a page template that has placeholder variables for the
> various content blocks, and then templates for each type of content
> block. Then, in your script, grab content, pass it to the appropriate
> content block's template, and use the fetch() method to grab the
> compiled template contents into a variable. Then pass these variables to
> the main page template.

so i should use fetch() and pass the returned text to a template variable
placed directly in the index template? if i get you right, fetch() in my PHP
code can take the place of an include tag AND i get cache control over it?
cool. i'll give it a try.

i assume that in this technique, i can no longer cache the index template's
output, but should feed it out 'raw' each request. am i correct in that
assumption? if i left the index template caching in place smarty would just
use the final rendered output text from the display() call and ignore the
fresh/uncached text fetched into template variables. should i turn off
caching just before calling display() as you do in the code below?
 
> Using this system, you could turn caching on and off within your script
> based on the content type.
> 
> As an example, if $content_blocks contains an array of various content
> block objects, then:
> 
>   foreach ($content_blocks as $block) {
>       // $block->cache indicates whether or not to cache the block
>       if ($block->cache) {
>           $smarty->caching = 1;
>       } else {
>           $smarty->caching = 0;
>       }
> 
>       // do some processing, assign some variables...
> 
>       // $block->template_file is the name of the block's template
>       // file
>       $block_content = $smarty->fetch($block->template_file);
> 
>       // $block->template_var is the name of the Smarty variable into
>       // which the blocks content will be placed in the main page
>       // template
>       $smarty_page->assign($block->template_var, $block_content);
>   }
> 
>   // Process the main page's content...
> 
>   // Now display the main page
>   $smarty->display('page_template.tpl');

Oh this looks super! I like the idea of organizing my blocks into objects!
Thanks for the tip.

if you don't hear from me again, that means this advice took care of my
problem...

dan

-- 
Smarty General Mailing List (http://smarty.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic