【phpcms-v9】content_form.calss.php文件分析-內容添加頁面動態表單的生成原理

[html] view plain copy
 print?
  1. <?php  
  2. //此文件主要根據caches/caches_model/caches_data/model_field_1.php文件中的模型字段來動態的生成表單  
  3. //路徑:phpcms/caches/caches_model/caches_data/content_form.class.php文件,主要用來返回內容添加頁面左側動態生成的表單  
  4. //此類主要用來動態生成內容添加頁面的所有表單:內容添加頁面左側表單不是直接寫在html中的,而是通過程序動態生成的,現將其分析一下  
  5. //此文件需要參考:model_feild_模型ID.cache.php文件,因爲通過後臺 模型管理->字段管理 中所有已存在或新加的字段都會被緩存在這個文件中,如【下圖2所示】  
  6.  class content_form {  
  7.     var $modelid;//模型id  1-文章模型 2-圖片模型 3-下載模型  ,不同的模型在添加內容時會動態生成不同的表單  
  8.     var $fields;//所有模型字段信息  
  9.     var $id;  
  10.     var $formValidator;//表單驗證  
  11.   
  12.     function __construct($modelid,$catid = 0,$categorys = array()) {  
  13.         $this->modelid = $modelid;  
  14.         $this->catid = $catid;  
  15.         $this->categorys = $categorys;  
  16.         $this->fields = getcache('model_field_'.$modelid,'model');//此緩存文件主要用來緩存模型字段信息  
  17.         $this->siteid = get_siteid();  
  18.     }  
  19.     //此方法主要用來獲取所有動態生成好的表單,以便於在前臺循環顯示  
  20.     function get($data = array()) {  
  21.         $_groupid = param::get_cookie('_groupid');  
  22.         $this->data = $data;  
  23.         if(isset($data['id'])) $this->id = $data['id'];  
  24.         $info = array();  
  25.         $this->content_url = $data['url'];  
  26.           
  27.         /**  
  28.          * $this->fields:主要存放從model_field_模型id.cache.php文件中獲取過來的所有模型字段信息  
  29.          * $field:單個模型字段信息  
  30.          */  
  31.         foreach($this->fields as $field=>$v) {  
  32.             if(defined('IN_ADMIN')) {  
  33.                 if($v['iscore'] || check_in($_SESSION['roleid'], $v['unsetroleids'])) continue;  
  34.             } else {  
  35.                 if($v['iscore'] || !$v['isadd'] || check_in($_groupid, $v['unsetgroupids'])) continue;  
  36.             }  
  37.             /**  
  38.              * 表單類型:formtype  
  39.              * 對應   後臺->模型管理->字段管理->類型  
  40.              * 對應  content_form.class.php文件中方法的名稱  
  41.              * 對應  caches/caches_model/caches_data/model_field_模型id.cache.php文件中鍵名  
  42.              * 注意:通過 後臺->模型管理->字段管理->添加字段  ,添加的新字段都將被緩存到model_field_模型id.cache.php文件中  
  43.              */  
  44.             $func = $v['formtype'];//表單類型  
  45.               
  46.             $value = isset($data[$field]) ? htmlspecialchars($data[$field], ENT_QUOTES) : '';//表單值  
  47.             if($func=='pages' && isset($data['maxcharperpage'])) {  
  48.                 $value = $data['paginationtype'].'|'.$data['maxcharperpage'];  
  49.             }  
  50.             if(!method_exists($this, $func)) continue;  
  51.               
  52.             /**  
  53.              * 1.$func:假設模型字段名稱爲text,則會調用$this->text()方法  
  54.              * 2.$this->text()方法會生成並返回一個text類型的表單,如:<input type="text" name="info['keywords']" value="">  
  55.              * 3.後面程序會將生成的表單放到$info[][]二維數組中,前臺只需要循環此數組即可將網頁所有的表單都呈現出來  
  56.              */  
  57.             $form = $this->$func($field, $value, $v);  
  58.               
  59.             if($form !== false) {  
  60.                 //默認情況下此常量已經被定義了  
  61.                 if(defined('IN_ADMIN')) {  
  62.                     //基本信息字段:基本信息字段將在添加頁面左側顯示  
  63.                     if($v['isbase']) {  
  64.                         //添加內容頁面:左側部分的表單名稱  
  65.                         $star = $v['minlength'] || $v['pattern'] ? 1 : 0;  
  66.                         $info['base'][$field] = array('name'=>$v['name'], 'tips'=>$v['tips'], 'form'=>$form, 'star'=>$star,'isomnipotent'=>$v['isomnipotent'],'formtype'=>$v['formtype']);  
  67.                     } else {  
  68.                         //添加內容頁面:右側部分的表單名稱  
  69.                         //$field:thumb、relation、inputtime、islink、template、allow_comment、readpoint  
  70.                         $star = $v['minlength'] || $v['pattern'] ? 1 : 0;  
  71.                         $info['senior'][$field] = array('name'=>$v['name'], 'tips'=>$v['tips'], 'form'=>$form, 'star'=>$star,'isomnipotent'=>$v['isomnipotent'],'formtype'=>$v['formtype']);  
  72.                     }  
  73.                 } else {  
  74.                     $star = $v['minlength'] || $v['pattern'] ? 1 : 0;  
  75.                     $info[$field] = array('name'=>$v['name'], 'tips'=>$v['tips'], 'form'=>$form, 'star'=>$star,'isomnipotent'=>$v['isomnipotent'],'formtype'=>$v['formtype']);  
  76.                 }  
  77.             }  
  78.         }  
  79.         return $info;  
  80.     }  
  81.   
  82.          //text方法主要用來生成一個text類型的表單:<input type="text" name="info[]" value="" />  
  83.     function text($field, $value, $fieldinfo) {  
  84.   
  85.     }  
  86.   
  87.     //textarea方法主要用來生成一個textarea類型的表單:<textarea name="info[]" ></textarea>  
  88.     function textarea($field, $value, $fieldinfo) {  
  89.           
  90.     }  
  91.   
  92.     //editor方法主要用來生成一個在線編輯器,如:ckeditor編輯器  
  93.   
  94.     function editor($field, $value, $fieldinfo) {  
  95.       
  96.         }  
  97.     function catid($field, $value, $fieldinfo) {  
  98.           
  99.     }  
  100.     function title($field, $value, $fieldinfo) {  
  101.           
  102.     }  
  103.   
  104.     //box方法主要用來生成radio、select、checkbox類型的表單:<input type="radio" name="info[]" value="" />  
  105.     function box($field, $value, $fieldinfo) {  
  106.   
  107.           
  108.     }  
  109.   
  110.     //image方法主要用來生成上傳文件的輸入框和上傳文件按鈕  
  111.     function image($field, $value, $fieldinfo) {  
  112.           
  113.     }  
  114.     function images($field, $value, $fieldinfo) {  
  115.           
  116.     }     
  117.         function number($field, $value, $fieldinfo) {  
  118.           
  119.     }  
  120.   
  121.  }   
  122. ?>  
  123.    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章