--- sitemenu-5.x-1.x-dev/sitemenu.module 2007-04-19 17:57:17.000000000 +0200 +++ sitemenu-5.x-1.x-dev.fix.cache/sitemenu.module 2007-04-21 04:28:49.000000000 +0200 @@ -445,3 +445,34 @@ function sitemenu_taxonomy($op, $type, $ cache_clear_all('sitemenu', 'cache', TRUE); } } + +function sitemenu_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { + // Expire the sitemenu cache when a node is inserted/deleted/updated + switch($op) { + case 'delete': + case 'insert': + case 'update': + $use_cache = variable_get(SITEMENU_CACHING, 1); + if ($use_cache) { + _sitemenu_clear_cache($node->type); + //alternatively: cache_clear_all('sitemenu', 'cache', TRUE); + } + break; + } +} + +/** + * Clear the sitemenu cache for the selected node type + * + * @param string $node_type Node type name + */ +function _sitemenu_clear_cache($node_type) { + $vocabularies = _sitemenu_get_vocabularies(); + foreach ($vocabularies as $vocabulary) { + $result = db_query_range("SELECT vid FROM {vocabulary_node_types} WHERE vid = %d AND type = '%s'", $vocabulary->vid, $node_type, 0, 1); + if ($vid = db_result($result)) { + $cache_id = 'sitemenu:' . $vid; + cache_clear_all($cache_id, 'cache', TRUE); + } + } +}