2011-01-14 32 views
1

我有一个菜单组件的页面。该菜单使用不同的CSS类标记活动元素。组件模板的上下文缓存

现在我想缓存每个菜单项页面。不同的页面来自同一模块/动作,差异仅在于ID​​。

问题是菜单只缓存一次,但我需要每个菜单项的缓存版本。

我刚刚尝试过缓存选项“contextual:true”,但我认为这不起作用,因为主模板(barSuccess)总是相同的。

你们有什么想法,该如何解决这个问题?

回答

2

您可以通过将sf_cache_key到分力缓存键:

include_component('menu', 'main', array('sf_cache_key' => $sf_params->get('item'))); 

这样组件将被缓存“项目”的每一个值。

的另一种方法是使用不同的参数集:

include_component('menu', 'main', array('item' => $sf_params->get('item'))); 

这样组件将用于项目的每一个值被缓存,以及。

在第一个解决方案中,您强制缓存密钥。当您需要自定义逻辑来决定是否生成缓存时,它非常有用。

第二种解决方案依赖于事实,即对传递给它的每个参数值组合都可以缓存组件(当然可以有多个组合)。

+0

Thx为您的答案。是否可以在组件操作中设置此参数? 我在问,因为我在layout.php中使用了一些组件,而且我不想在layout.php中生成缓存键。 – ownking 2011-01-17 09:21:16