XPressME Integration Kit

Trac


Ignore:
Timestamp:
Mar 23, 2009, 9:39:37 PM (15 years ago)
Author:
toemon
Message:

ブロックキャッシュの削除、ブロックキャッシュ更新タイミングの処理追加・変更 #65 #73
同じモジュール名が付くブロックキャッシュから、現在有効になっているブロックを除いたものを削除
ブログホーム閲覧時、ブロックのレンダリングの内容とキャッシュの内容のチェックサム(MD5)を取り比較、異なっていればキャッシュをリフレッシュする。
(ファイル書き込み回数を減らすため)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/xpress_block_render.php

    r134 r135  
    158158        } 
    159159         
     160        function xpress_block_cache_refresh() 
     161        { 
     162                global $xoops_db; 
     163                $mid = get_xpress_modid(); 
     164                $sql = "SELECT bid,options,func_file FROM " . get_xoops_prefix() . "newblocks WHERE mid = $mid AND visible = 1"; 
     165                $blocks = $xoops_db->get_results($sql); 
     166                $mydirname = get_xpress_dir_name(); 
     167                require_once get_xpress_dir_path() . '/include/xpress_block_render.php'; 
     168 
     169                foreach($blocks as $block){ 
     170                        $func_file = $block->func_file; 
     171                        $call_theme_function_name = str_replace(".php", "", $func_file); 
     172                        $inc_theme_file_name = str_replace(".php", "", $func_file) . '_theme.php'; 
     173                        $cache_title = str_replace(".php", "", $func_file); 
     174                        $blockID = $block->bid; 
     175                        $options = explode("|", $block->options); 
     176 
     177                        $block_theme_file = get_block_file_path($mydirname,$inc_theme_file_name); 
     178                        require_once $block_theme_file; 
     179                        $render = $call_theme_function_name($options);          //The block name and the called function name should be assumed to be the same name.                     
     180                        $render_array['block'] = $render; 
     181                        $render_array['block']['options'] = $block->options; 
     182                        if (xpress_block_cache_found($mydirname,$cache_title. $blockID)){        
     183                                $render_serialize = xpress_XML_serialize($render_array); 
     184                                $render_md5 = md5($render_serialize); 
     185 
     186                                $cache_serialize = xpress_cache_read($mydirname,$cache_title. $blockID.'.xml'); 
     187                                $cache_md5 = md5($cache_serialize); 
     188                                 
     189                                if ($render_md5 != $cache_md5){ 
     190                                        xpress_block_cache_write($mydirname,$cache_title. $blockID, $render_array); 
     191                                } 
     192                        } else { 
     193                                xpress_block_cache_write($mydirname,$cache_title. $blockID, $render_array); 
     194                        } 
     195                } 
     196        } 
     197         
     198        function xpress_unnecessary_block_cache_delete() 
     199        { 
     200                global $xoops_db,$xoops_config; 
     201                $mid = get_xpress_modid(); 
     202                $sql = "SELECT bid,options,func_file FROM " . get_xoops_prefix() . "newblocks WHERE mid = $mid AND visible = 1"; 
     203                $blocks = $xoops_db->get_results($sql); 
     204                $mydirname = get_xpress_dir_name(); 
     205                require_once get_xpress_dir_path() . '/include/xpress_block_render.php'; 
     206 
     207                $pattern =''; 
     208                foreach($blocks as $block){ 
     209                        $cache_file_name = $mydirname . '_'. str_replace(".php", "", $block->func_file) . $block->bid; 
     210                        if (!empty($pattern))  $pattern .= '|'; 
     211                        $pattern .= $cache_file_name; 
     212                } 
     213                $pattern = '(' . $pattern . ')'; 
     214                 
     215                $cache_dir = $xoops_config->xoops_root_path . '/cache/'; 
     216                $cache_time = 0; 
     217        if ($dh = opendir($cache_dir)) { 
     218            while (($file = readdir($dh)) !== false) { 
     219                if (preg_match('/^' . preg_quote($mydirname) . '/', $file)) { 
     220                        if(! preg_match('/' . $pattern . '/', $file)) { 
     221                        unlink($cache_dir.$file); 
     222                    } 
     223                }  
     224            }  
     225            closedir($dh); 
     226        }  
     227    }  
     228         
    160229?> 
Note: See TracChangeset for help on using the changeset viewer.