Давайте представим, что у меня есть такой код ...
if (!$data = $cache->load("part1_cache_id")) {
$item_id = $model->getItemId();
ob_start();
echo 'Here is the cached item id: '.$item_id;
$data = ob_get_contents();
ob_end_clean();
$cache->save($data, "part1_cache_id");
}
echo $data;
echo never_cache_function($item_id);
if (!$data_2 = $cache->load("part2_cache_id")) {
ob_start();
echo 'Here is the another cached part of the page...';
$data_2 = ob_get_contents();
ob_end_clean();
$cache->save("part2_cache_id");
}
echo $data_2;
Насколько вы можете видеть, мне нужно передать переменную $ item_id в never_cache_function, но если первая часть кэшируется (part1_cache_id), у меня нет способа получить значение $ item_id. Я вижу единственное решение - сериализовать все данные из первой части (включая значение $ item_id); затем кэшировать сериализованную строку и десериализовать ее каждый раз при выполнении скрипта ...
Как то так ...
if (!$data = $cache->load("part1_cache_id")) {
$item_id = $model->getItemId();
$data['item_id'] = $item_id;
ob_start();
echo 'Here is the cached item id: '.$item_id;
$data['html'] = ob_get_contents();
ob_end_clean();
$cache->save( serialize($data), "part1_cache_id" );
}
$data = unserialize($data);
echo $data['html']
echo never_cache_function($data['item_id']);
Есть ли другие способы сделать такой трюк?
Я ищу самое высокопроизводительное решение.
Спасибо
ОБНОВЛЕНО
И еще вопрос - как реализовать такое кэширование в контроллере, не разделяя страницу на два шаблона? Возможно ли это?
PS: Пожалуйста, не предлагайте Smarty, я действительно заинтересован в реализации пользовательского кэширования.