Smarty Forum Index Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon.

extending assign with not-cacheable flag or {assigndynamic}

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Feature Requests
View previous topic :: View next topic  
Author Message
JurgenD
Smarty Rookie


Joined: 20 Jul 2005
Posts: 12
Location: Belgium

PostPosted: Sun Jul 24, 2005 5:21 pm    Post subject: extending assign with not-cacheable flag or {assigndynamic} Reply with quote

Using the extended setup, I created my own object:
class Layout extends Smarty

In the admin section I created an Layout object, and I assigned a value
to admin_menu with TRUE In the user section, i created another Layout object and assigned the value of FALSE

I wrote a header in this way:
Code:

{if $admin_section}
   {include file="admin_menu.tpl"}
{else}
   {include file="user_menu.tpl"}
{/if}


However, if $smarty->caching = true You will not have the expected results, because smarty seems to use a cached value of $admin_section
or to parse the (cached) value inside the template.

So I used this:
http://smarty.php.net/manual/en/caching.cacheable.php

and wrote:
Code:

{dynamic}
   {if $admin_section}
      {include file="admin_menu.tpl"}
   {else}
      {include file="user_menu.tpl"}
  {/if}
{/dynamic}


So I wonder if it would not be good to extend the assign function with a boolean flag, cacheable much the same as You have with functions :
$this->register_function(...,..., false); or to create a new tag like
{assigndynamic} tag.
Back to top
View user's profile Send private message Visit poster's website
boots
Administrator


Joined: 16 Apr 2003
Posts: 5611
Location: Toronto, Canada

PostPosted: Sun Jul 24, 2005 7:35 pm    Post subject: Reply with quote

In this case, I think you are better off using a unique cache_id to differentiate from the two conditions.
Back to top
View user's profile Send private message
JurgenD
Smarty Rookie


Joined: 20 Jul 2005
Posts: 12
Location: Belgium

PostPosted: Mon Jul 25, 2005 11:55 am    Post subject: Reply with quote

I presume You reference to:
http://smarty.php.net/manual/en/caching.multiple.caches.php

It can be a workaround to use multiple caches, maybe I can resolve it in this way, but only for static sections which may be cached. For dynamic sections (not cacheable sections) the problem returns and in this case, I can not use two caches, so I need to take attention to the conditional statement which use cached values !

My opinion, it's quite a pitfall if You use caching and You are using conditional statements to show content, those statements could be using caching values (not intended in this sample), but most often they need to re-validate the condition. So caching should be set off for those conditional inserts and this could be done by what I have proposed ?

Correct me if I am wrong.
Back to top
View user's profile Send private message Visit poster's website
kills
Smarty Elite


Joined: 28 May 2004
Posts: 493

PostPosted: Mon Jul 25, 2005 12:17 pm    Post subject: Reply with quote

Hi JurgenD,

what about using a custom function?

Code:
{menu isAdmin=$admin_section}


So you can use
[php:1:18ff716fbe]$this->register_function(...,..., false);[/php:1:18ff716fbe]

to include the menu in a dynamic way.

Bye,
Markus
Back to top
View user's profile Send private message
JurgenD
Smarty Rookie


Joined: 20 Jul 2005
Posts: 12
Location: Belgium

PostPosted: Mon Jul 25, 2005 2:08 pm    Post subject: Reply with quote

kills wrote:
Hi JurgenD,
what about using a custom function?


Yes, Markus, this is a shorter workaround for dynamic sections and I will use this to shorten the template code.

Currently my conclusion is still the same, You have to consider the cached values into account when You use logic. And this should be put clearly into the documentation or people will get wrong results, because the template engine makes a static parse, based on cached values. Or the template tags should be extended with some flags, as explained above.

Thanks for the workaround.
Back to top
View user's profile Send private message Visit poster's website
boots
Administrator


Joined: 16 Apr 2003
Posts: 5611
Location: Toronto, Canada

PostPosted: Mon Jul 25, 2005 3:22 pm    Post subject: Reply with quote

I think I have a different view of the way the caching system should be viewed. Ideally, a cached image (ie. a static cache from a display/fetch request) will not have ANY dynamic content. Of course, there are situations where you would want to have dynamic sections but Smarty's design tends to put caching considerations into the control of the application rather than the template. In other words, it is the application that decides if a template needs multiple caches based on varying inputs rather than the template designer's choice of conditionals. There is a school of thought that the template designer is sometimes in the best position to make these determinations and it occurs to me that this is what you are getting at with your argumenet based on conditional sections. Perhaps you will like this thread: http://www.phpinsider.com/smarty-forum/viewtopic.php?t=1343
Back to top
View user's profile Send private message
messju
Administrator


Joined: 16 Apr 2003
Posts: 3336
Location: Oldenburg, Germany

PostPosted: Mon Jul 25, 2005 9:03 pm    Post subject: Reply with quote

JurgenD wrote:
My opinion, it's quite a pitfall if You use caching and You are using conditional statements to show content, those statements could be using caching values (not intended in this sample), but most often they need to re-validate the condition. So caching should be set off for those conditional inserts and this could be done by what I have proposed ?


If you use caching, you don't redo conditionals on cached values. If you use caching you are caching the *output* of your display()-call.

To solve your problem/example above, I'd just turn off caching entirely from the controller when in admin-mode.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Feature Requests All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP