You don't have to do anything with caching at the render API level. Just turn on block caching, and it works by default.
Shameless plug about render api resources, though: The render example in Examples for Developers shows how to do render-api caching and any number of other cool thinks with the render API. And http://drupal.org/node/930760 gives an introduction to the whole thing.
-Randy
Ah, what a slap-in-the-forhead-moment :) Thank you.On a side note, and in regards to my original secon question about best practice:The '#cache' property in the render array used for the block content is not necessary then, if I understand the mechanics correctly? This would only add a superfluous extra layer of caching?-fredrikFra: Randy Fay <randy@randyfay.com>Emne: Re: [development] Block caching in D7
Hi Fredrik -
I think you may have been testing as user 1. I started testing your problem and noticed the same thing and started debugging and then noticed this code:
function _block_get_cache_id($block) {
global $user;
// User 1 being out of the regular 'roles define permissions' schema,
// it brings too many chances of having unwanted output get in the cache
// and later be served to other users. We therefore exclude user 1 from
// block caching.
My testing (after I logged in as a different user) did show caching work correctly, at least in casual testing.
As a result of your note I've added a timestamp into one of the blocks provided by the Block Example module, part of the Examples project (http://drupal.org/project/examples) so that one can easily explore whether caching is happening or not. When http://drupal.org/node/995316 goes in (maybe tonight) it will make an easier way to explore block caching.
-Randy