Here's a few tips from my learning curve with caching:
http:
//smarty.incutio.com/?page=CacheAndCompile
and a thread from 18 months ago that talks to what messju
mentioned
about creating your own caching logic:
--------------------------------------------------
>
>>>> 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.
-----------------------------------------------------------
I hope that that helps! It took a long time for me to fully
understand
the caching system in Smarty - take your time.
Oh yeah, and don't forget $smarty->caching=2; to get
non-expiring caches
which is the only way to properly control them. The default
is to expire
in 1 hour!
<minorrant>I don't really understand why the default
is to expire
caches, but that's the way it is. To me, expiring caches is
a
specialized use of caching that should be the result of a
request, not
the default. If you turn on caching, it should just turn on
and stay on
- not turn off in an hour. But, then again, I'm not the one
who built
smarty and it is easy enough to change it. But, it sure
stumped me for a
few days until i read the fine print in the
manual.</minorrant>
dan
messju mohr had written:
> On Tue, May 02, 2006 at 05:17:11PM +0200, Jochem Maas
wrote:
> [...]
>
>>hopefully you see that it's not your docs at fault
so much as I have got a
>>rather complex codebase and I'm finding it:
>>
>>a, hard to fully understand the compiling/caching
paradigm in smarty per se
>>
>>and
>>
>>b, harder still to take the examples in the docs and
extrapolate the
>>concepts
>>into a design for flexible,generic production
quality caching mechanism
>>which
>>i can actually implement (and would work: in terms
of the clients'
>>requirements
>>for dynamic content - i.e. that 'truely' dynamic
stuff doesn't get cached,
>>etc).
>
>
> my experience with smarty's caching is, that it's
>
> a, works best if the whole system is built with caching
in mind, and
> built around smarty's caching mechanisms.
>
> and that you can
>
> b, use any caching with smarty that you like: just
leave smarty's
> caching off, and fetch the cached contents with your
cache logic and
> assign them to template variables which are displayed
templates.
>
>
>>regards,
>>Jochem.
>
>
--
Smarty General Mailing List (http://smarty.php.net/)
To unsubscribe, visit: http://www.php.net/unsub
.php
|