Larry nice proposal. but doesn&#39;t module_invoke_all already do basically what you&#39;re describing without the caching and naming enforcement? I agree with the naming convention, but not the enforcement.<br><br>Maybe we just need a module_invoke_all_cacheable($expire, $hook, ....) {<br>
&nbsp; // expire is same as cache_set, only CACHE_STATIC indicates use a static var, no db.<br>&nbsp; static $cache;<br>&nbsp; $cid = $hook .&#39;:&#39;. md5(serialize(args));<br>&nbsp; <br>&nbsp; // test static cache<br>&nbsp; if (!isset($cache[$cid])) {<br>
&nbsp;&nbsp;&nbsp; // test db cache if necessary, CACHE_STATIC indicates no DB cache<br>&nbsp;&nbsp;&nbsp; if ($expires == CACHE_STATIC || !$cache[$cid] = cache_get(&#39;cache_hook_all&#39;, $cid)) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $cache[$cid] = module_invoke_all();<br>&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; <br>&nbsp; &nbsp; // store to db cache if necessary<br>&nbsp; &nbsp; if ($expires != CACHE_STATIC) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cache_set(&#39;cache_hook_all&#39;,....);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;}<br>&nbsp;return $cache[$cid])<br>}<br><br>