【phpcms-v9】cache_all.php文件分析-更新緩存



[html] view plain copy
 print?
  1. <?php  
  2. //路徑:phpcms/modules/admin/cache_all.php控制器,此控制器主要用來更新所有的緩存信息:  
  3. defined('IN_PHPCMS') or exit('No permission resources.');  
  4. pc_base::load_app_class('admin','admin',0);  
  5.   
  6. class cache_all extends admin {  
  7.     private $cache_api;  
  8.       
  9.     public function init() {  
  10.         if (isset($_POST['dosubmit']) || isset($_GET['dosubmit'])) {//會通過表單提交過來  
  11.             $page = $_GET['page'] ? intval($_GET['page']) : 0;      //$modules[]數組的索引  
  12.             $modules = array(  
  13.                 array('name' => L('module'), 'function' => 'module'),  
  14.                 array('name' => L('sites'), 'mod' => 'admin', 'file' => 'sites', 'function' => 'set_cache'),  
  15.                 array('name' => L('category'), 'function' => 'category'),  
  16.                 array('name' => L('downservers'), 'function' => 'downservers'),  
  17.                 array('name' => L('badword_name'), 'function' => 'badword'),  
  18.                 array('name' => L('ipbanned'), 'function' => 'ipbanned'),  
  19.                 array('name' => L('keylink'), 'function' => 'keylink'),  
  20.                 array('name' => L('linkage'), 'function' => 'linkage'),  
  21.                 array('name' => L('position'), 'function' => 'position'),  
  22.                 array('name' => L('admin_role'), 'function' => 'admin_role'),  
  23.                 array('name' => L('urlrule'), 'function' => 'urlrule'),  
  24.                 array('name' => L('sitemodel'), 'function' => 'sitemodel'),  
  25.                 array('name' => L('type'), 'function' => 'type', 'param' => 'content'),  
  26.                 array('name' => L('workflow'), 'function' => 'workflow'),  
  27.                 array('name' => L('dbsource'), 'function' => 'dbsource'),  
  28.                 array('name' => L('member_setting'), 'function' => 'member_setting'),  
  29.                 array('name' => L('member_group'), 'function' => 'member_group'),  
  30.                 array('name' => L('membermodel'), 'function' => 'membermodel'),  
  31.                 array('name' => L('member_model_field'), 'function' => 'member_model_field'),  
  32.                 array('name' => L('search_type'), 'function' => 'type', 'param' => 'search'),  
  33.                 array('name' => L('search_setting'), 'function' => 'search_setting'),  
  34.                 array('name' => L('update_vote_setting'), 'function' => 'vote_setting'),  
  35.                 array('name' => L('update_link_setting'), 'function' => 'link_setting'),  
  36.                 array('name' => L('special'), 'function' => 'special'),  
  37.                 array('name' => L('setting'), 'function' => 'setting'),  
  38.                 array('name' => L('database'), 'function' => 'database'),  
  39.                 array('name' => L('update_formguide_model'), 'mod' => 'formguide', 'file' => 'formguide', 'function' => 'public_cache'),  
  40.                 array('name' => L('cache_file'), 'function' => 'cache2database'),  
  41.                 array('name' => L('cache_copyfrom'), 'function' => 'copyfrom'),  
  42.                 array('name' => L('clear_files'), 'function' => 'del_file'),  
  43.             );  
  44.             $this->cache_api = pc_base::load_app_class('cache_api', 'admin');//加載admin模塊下的classes/cache_api.class.php類庫  
  45.             $m = $modules[$page];  
  46.             //如:array('name' => L('sites'), 'mod' => 'admin', 'file' => 'sites', 'function' => 'set_cache'),  
  47.             if ($m['mod'] && $m['function']) {  
  48.                 if ($m['file'] == '') $m['file'] = $m['function'];  
  49.                 //查看caches/caches_commons/caches_data/modules.class.php文件,對應後臺 "模塊管理" 中所有的模塊  
  50.                 $M = getcache('modules', 'commons');  
  51.                 if (in_array($m['mod'], array_keys($M))) {//查看是否存在當前更新模塊  
  52.                     //加載當前模塊下的類庫文件,如:admin模塊下的classes/sites.class.php類庫文件  
  53.                     $cache = pc_base::load_app_class($m['file'], $m['mod']);  
  54.                     //調用sites.class.php類庫文件中的set_cache()方法,如:$cache->set_cache();  
  55.                     $cache->$m['function']();  
  56.                 }  
  57.             } else if($m['target']=='iframe') {//這段代碼一般很少執行  
  58.                 echo '<script type="text/javascript">window.parent.frames["hidden"].location="index.php?'.$m['link'].'";</script>';  
  59.             } else {  
  60.                 /**  
  61.                  * 1.如:array('name' => L('type'), 'function' => 'type', 'param' => 'content'),更新類別緩存  
  62.                  * 2.如:會執行$this->cache_api->cache(type,content);  
  63.                  * 3.如:追蹤發現,$this->cache_api->cache(type,content);方法會調用自身的type()方法來完成類別的更新  
  64.                  * 4.cache_api類中方法如下:  
  65.                  *      cache_site():更新站點緩存                  keylink():更新關聯鏈接緩存  
  66.                  *      category() :更新欄目緩存                   linkage():更新聯動菜單緩存  
  67.                  *      downservers ():更新下載服務器緩存             position ():更新推薦位緩存  
  68.                  *      badword():更新敏感詞緩存                    vote_setting() :更新投票設置  
  69.                  *      ipbanned():更新ip禁止緩存                      link_setting():更新友情鏈接配置  
  70.                  *      admin_role():更新管理員角色緩存               urlrule():更新url規則緩存  
  71.                  *      module() :更新模塊緩存                         sitemodel():更新模型緩存  
  72.                  *      sitemodel_field():更新模型字段緩存           type($param = ''):更新類別緩存  
  73.                  *      workflow() :更新工作流緩存                  dbsource() :更新數據源緩存  
  74.                  *      member_group():更新會員組緩存               member_setting():更新會員配置緩存  
  75.                  *      membermodel() :更新會員模型緩存              member_model_field():更新會員模型字段緩存  
  76.                  *      search_setting() :更新搜索配置緩存           search_type() :更新搜索類型緩存  
  77.                  *      special() :更新專題緩存                        setting():更新網站配置緩存  
  78.                  *      database():更新數據源模型緩存                 cache2database():根據數據庫的記錄更新緩存  
  79.                  *      del_file():更新刪除緩存文件                  copyfrom():更新來源緩存  
  80.                  *    以上方法都統一的調用了setcache()方法進行緩存的更新  
  81.                  */  
  82.                 //如:array('name' => L('type'), 'function' => 'type', 'param' => 'content'),更新類別緩存  
  83.                 $this->cache_api->cache($m['function'], $m['param']);  
  84.             }  
  85.             $page++;//索引值自增  
  86.             if (!empty($modules[$page])) {  
  87.                 /**  
  88.                  * 1.通過echo輸出javascript代碼的方式,調用模板文件中的addtext()方法,向<ul id="file" class="sbul"></ul>追加信息  
  89.                  * 如:<ul id="file" class="sbul">  
  90.                         <li>更新模塊緩存完成..........</li>  
  91.                         <li>更新站點緩存完成..........</li>  
  92.                         <li>更新欄目緩存完成..........</li>  
  93.                         <li>更新下載服務器緩存完成..........</li>  
  94.                         <li>更新敏感詞緩存完成..........</li>  
  95.                         <li>更新IP禁止緩存完成..........</li>  
  96.                        </ul>  
  97.                  *2.再跳轉到if邏輯中  
  98.                  */  
  99.                 echo '<script type="text/javascript">window.parent.addtext("<li>'.L('update').$m['name'].L('cache_file_success').'..........</li>");</script>';  
  100.                 showmessage(L('update').$m['name'].L('cache_file_success'), '?m=admin&c=cache_all&page='.$page.'&dosubmit=1&pc_hash='.$_SESSION['pc_hash'], 0);  
  101.             } else {  
  102.                 echo '<script type="text/javascript">window.parent.addtext("<li>'.L('update').$m['name'].L('site_cache_success').'..........</li>")</script>';  
  103.                 showmessage(L('update').$m['name'].L('site_cache_success'), 'blank');  
  104.             }  
  105.         } else {//點擊    "更新緩存"  按鈕時,會執行else代碼  
  106.             /**  
  107.              * 1.點擊    "更新緩存"  按鈕時,默認執行的else裏面的代碼  
  108.              * 2.else裏面就一行代碼,此行代碼主要爲了顯示模板文件  
  109.              * 3.模板文件加載完畢後會自動提交表單,如:document.myform.submit();  
  110.              * 4.表單中只有一個隱藏域表單,<input type="hidden" name="dosubmit" value="1">  
  111.              * 5.表單數據被提交給了<form action="?m=admin&c=cache_all&a=init ></form>,目的就是爲了執行if裏面的代碼  
  112.              */  
  113.             include $this->admin_tpl('cache_all');  
  114.         }  
  115.     }  
  116. }  
  117. ?>  

模板文件:cache_all.tpl.php分析:

[html] view plain copy
 print?
  1. <style type="text/css">  
  2.     .sbs{}  
  3.     .sbul{margin:10px;}  
  4.     .sbul li{line-height:30px;}  
  5.     .button{margin-top:20px;}  
  6.     .subnav,.ifm{display:none;}  
  7.       
  8. </style>  
  9. <?php  
  10. defined('IN_ADMIN') or exit('No permission resources.');  
  11. include $this->admin_tpl('header','admin');?>  
  12. <div class="pad-10">  
  13. <form action="?m=admin&c=cache_all&a=init&pc_hash=<?php echo $_SESSION['pc_hash']?>" target="cache_if" method="post" id="myform" name="myform">  
  14.   <input type="hidden" name="dosubmit" value="1">  
  15. <div class="col-2">  
  16. <h6><?php echo L('tip_zone');//提示區 ?></h6>  
  17. <div class="sbs" id="update_tips" style="height:360px; overflow:auto;">  
  18.     <ul id="file" class="sbul">  
  19.     <!--   
  20.     <li>更新模塊緩存完成..........</li>  
  21.     <li>更新站點緩存完成..........</li>  
  22.     <li>更新欄目緩存完成..........</li>  
  23.     <li>更新下載服務器緩存完成..........</li>  
  24.     <li>更新敏感詞緩存完成..........</li>  
  25.     <li>更新IP禁止緩存完成..........</li>  
  26.     <li>更新關聯鏈接緩存完成..........</li>  
  27.     <li>更新聯動菜單緩存完成..........</li>  
  28.     <li>更新推薦位緩存完成..........</li>  
  29.     <li>更新角色緩存完成..........</li>  
  30.     <li>更新url規則緩存完成..........</li>  
  31.     <li>更新模型緩存完成..........</li>  
  32.     <li>更新類別緩存完成..........</li>  
  33.     <li>更新工作流緩存完成..........</li>  
  34.     <li>更新數據源緩存完成..........</li>  
  35.     <li>更新會員模塊配置緩存完成..........</li>  
  36.     <li>更新會員列表緩存完成..........</li>  
  37.     <li>更新會員模型緩存完成..........</li>  
  38.     <li>更新會員模型字段緩存完成..........</li>  
  39.     <li>更新全站搜索分類緩存完成..........</li>  
  40.     <li>更新全站搜索配置緩存完成..........</li>  
  41.     <li>更新更新投票模塊配置緩存完成..........</li>  
  42.     <li>更新更新友情鏈接模塊配置緩存完成..........</li>  
  43.     <li>更新專題緩存完成..........</li>  
  44.     <li>更新網站配置緩存完成..........</li>  
  45.     <li>更新數據源模型緩存完成..........</li>  
  46.     <li>更新更新表單嚮導模型緩存完成..........</li>  
  47.     <li>系統緩存文件更新中:1/2..........</li>  
  48.     <li>更新系統緩存文件緩存完成..........</li>  
  49.     <li>更新來源緩存完成..........</li>  
  50.     <li>更新清理文件緩存完成..........</li>  
  51.     <li style="color: red;">全站緩存更新成功..........</li>  
  52.      -->  
  53.     </ul>  
  54. </div>  
  55. </div>  
  56. <!-- <input name="dosubmit" type="submit" class="dialog" id="dosubmit" value="<?php echo L('start_update')?>" οnclick="$('#file').html('');return true;" class="button"> -->  
  57. </form>  
  58. <iframe id="cache_if" name="cache_if" class="ifm"></iframe>  
  59. <iframe id="hidden" name="hidden"  width="0" height="0" frameborder=0></iframe>  
  60. </div>  
  61. <script type="text/javascript">  
  62. //自動提交表單  
  63. document.myform.submit();  
  64. //追加數據,如:<li>更新模塊緩存完成..........</li>等,並改變一下提示區的高度  
  65. function addtext(data) {  
  66.     $('#file').append(data);  
  67.     document.getElementById('update_tips').scrollTop = document.getElementById('update_tips').scrollHeight;  
  68. }  
  69. </script>  
  70. </body>  
  71. </html>  



來源:http://blog.csdn.net/yanhui_wei/article/details/7905000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章