【phpcms-v9】后臺content模塊的content.php控制器文件分析-后臺添加內容代碼分析.
第一步,路徑:phpcms/modules/content/content.php:
- //構造方法
- public function __construct() {
- parent::__construct();
- $this->db = pc_base::load_model('content_model');//內容模型數據庫操作類
- $this->siteid = $this->get_siteid();//當前站點id
- $this->categorys = getcache('category_content_'.$this->siteid,'commons');//當前站點下所有欄目的詳細配置信息
- //權限判斷
- if(isset($_GET['catid']) && $_SESSION['roleid'] != 1 && ROUTE_A !='pass' && strpos(ROUTE_A,'public_')===false) {
- $catid = intval($_GET['catid']);
- $this->priv_db = pc_base::load_model('category_priv_model');
- $action = $this->categorys[$catid]['type']==0 ? ROUTE_A : 'init';
- $priv_datas = $this->priv_db->get_one(array('catid'=>$catid,'is_admin'=>1,'action'=>$action));
- if(!$priv_datas) showmessage(L('permission_to_operate'),'blank');
- }
- }
添加內容代碼分析:
- public function add() {
- //點擊"保存后自動關閉"或"保存并繼續發表"按鈕 ,幾乎所有表單內容都存放在 $info[]數組中
- if(isset($_POST['dosubmit']) || isset($_POST['dosubmit_continue'])) {
- define('INDEX_HTML',true);
- //欄目id
- $catid = $_POST['info']['catid'] = intval($_POST['info']['catid']);
- //標題
- if(trim($_POST['info']['title'])=='') showmessage(L('title_is_empty'));
- //當前欄目的詳細配置信息
- $category = $this->categorys[$catid];
- //當前欄目類型:0-內部欄目 1-單網頁 2-外部鏈接
- if($category['type']==0) {
- //當前欄目所屬模型id:1-文章模型 2-下載模型 3-圖片模型
- $modelid = $this->categorys[$catid]['modelid'];
- //設置模型主表及數據主表,如:news、gt_news
- $this->db->set_model($modelid);
- //如果該欄目設置了工作流,那么必須走工作流設定
- //將當前欄目詳細配置信息中的$category['setting']轉化為數組
- $setting = string2array($category['setting']);
- $workflowid = $setting['workflowid'];//工作流設置
- //$_POST['status']==99 代表發布
- if($workflowid && $_POST['status']!=99) {
- //如果用戶是超級管理員,那么則根據自己的設置來發布
- $_POST['info']['status'] = $_SESSION['roleid']==1 ? intval($_POST['status']) : 1;
- } else {
- $_POST['info']['status'] = 99;//將表單提交過來的發布狀態賦值給 info[]數組
- }
- //添加內容
- $this->db->add_content($_POST['info']);//查看第二步:phpcms/model/content_model.class.php
- //點擊"保存后自動關閉"按鈕
- if(isset($_POST['dosubmit'])) {
- showmessage(L('add_success').L('2s_close'),'blank','','','function set_time() {$("#secondid").html(1);}setTimeout("set_time()", 500);setTimeout("window.close()", 1200);');
- } else {//點擊"保存并繼續發表"按鈕
- showmessage(L('add_success'),HTTP_REFERER);
- }
- } else {
- //單網頁
- $this->page_db = pc_base::load_model('page_model');
- $style_font_weight = $_POST['style_font_weight'] ? 'font-weight:'.strip_tags($_POST['style_font_weight']) : '';
- $_POST['info']['style'] = strip_tags($_POST['style_color']).';'.$style_font_weight;
- if($_POST['edit']) {
- $this->page_db->update($_POST['info'],array('catid'=>$catid));
- } else {
- $catid = $this->page_db->insert($_POST['info'],1);
- }
- $this->page_db->create_html($catid,$_POST['info']);
- $forward = HTTP_REFERER;
- }
- showmessage(L('add_success'),$forward);
- } else {//顯示內容添加頁模板
- $show_header = $show_dialog = $show_validator = '';
- //設置cookie 在附件添加處調用
- param::set_cookie('module', 'content');
- //欄目id
- if(isset($_GET['catid']) && $_GET['catid']) {
- //欄目id
- $catid = $_GET['catid'] = intval($_GET['catid']);
- param::set_cookie('catid', $catid);
- //當前欄目詳細配置信息
- $category = $this->categorys[$catid];
- //當前欄目類型:0-內部欄目 1-單網頁 2-外部鏈接
- if($category['type']==0) {
- //當前欄目所屬模型id
- $modelid = $category['modelid'];
- //取模型ID,依模型ID來生成對應的表單
- require CACHE_MODEL_PATH.'content_form.class.php';//動態生成內容添加頁對應的表單
- $content_form = new content_form($modelid,$catid,$this->categorys);
- $forminfos = $content_form->get();//獲取內容添加頁對應表單信息
- $formValidator = $content_form->formValidator;
- //將當前欄目詳細配置信息中的$category['setting']轉化為數組
- $setting = string2array($category['setting']);
- //如果設置了工作流,則必須走工作流流程
- $workflowid = $setting['workflowid'];
- //獲取當前站點下工作流詳細配置信息
- $workflows = getcache('workflow_'.$this->siteid,'commons');
- //獲取當前工作流信息:1-一級審核 2-二級審核 3-三級審核 4-四級審核
- $workflows = $workflows[$workflowid];
- $workflows_setting = string2array($workflows['setting']);
- $nocheck_users = $workflows_setting['nocheck_users'];
- $admin_username = param::get_cookie('admin_username');
- if(!emptyempty($nocheck_users) && in_array($admin_username, $nocheck_users)) {
- $priv_status = true;
- } else {
- $priv_status = false;
- }
- //顯示內容添加頁面模板
- include $this->admin_tpl('content_add');
- } else {
- //單網頁
- $this->page_db = pc_base::load_model('page_model');
- $r = $this->page_db->get_one(array('catid'=>$catid));
- if($r) {
- extract($r);
- $style_arr = explode(';',$style);
- $style_color = $style_arr[0];
- $style_font_weight = $style_arr[1] ? substr($style_arr[1],12) : '';
- }
- include $this->admin_tpl('content_page');
- }
- } else {
- include $this->admin_tpl('content_add');
- }
- header("Cache-control: private");
- }
- }
第二步,路徑:phpcms/model/content_model.class.php內容模型數據庫操作類:
- public $table_name = '';
- public $category = '';
- public function __construct() {
- $this->db_config = pc_base::load_config('database');
- $this->db_setting = 'default';
- parent::__construct();
- $this->url = pc_base::load_app_class('url', 'content');
- $this->siteid = get_siteid();
- }
- public function set_model($modelid) {
- $this->model = getcache('model', 'commons');//獲取所有模型的詳細配置信息
- $this->modelid = $modelid;//當前模型id
- $this->table_name = $this->db_tablepre.$this->model[$modelid]['tablename'];//當前模型的主表名,帶前綴:如,gt_news
- $this->model_tablename = $this->model[$modelid]['tablename'];//當前模型主表名,不帶前綴,如:news
- }
- /**
- * 添加內容
- *
- * @param $data 表單提交過來的數據
- * @param $isimport 是否為外部接口導入
- */
- public function add_content($data,$isimport = 0) {
- //返回經addslashes處理過的字符串或數組
- if($isimport) $data = new_addslashes($data);
- $this->search_db = pc_base::load_model('search_model');
- $modelid = $this->modelid;//當前模型id
- require_once CACHE_MODEL_PATH.'content_input.class.php';
- require_once CACHE_MODEL_PATH.'content_update.class.php';
- $content_input = new content_input($this->modelid);
- $inputinfo = $content_input->get($data,$isimport);
- //系統字段信息,存儲在主表
- $systeminfo = $inputinfo['system'];
- //非系統字段信息,存儲在副表
- $modelinfo = $inputinfo['model'];
- //發布時間不為空且不是數字
- if($data['inputtime'] && !is_numeric($data['inputtime'])) {
- //將發布時間轉換為時間戳,歸類為系統字段信息
- $systeminfo['inputtime'] = strtotime($data['inputtime']);
- } elseif(!$data['inputtime']) {//發布時間為空,則將系統時間戳信息賦值給$systeminfo['inputtime']
- $systeminfo['inputtime'] = SYS_TIME;
- } else {
- $systeminfo['inputtime'] = $data['inputtime'];
- }
- //讀取模型字段配置中,關于日期配置格式,來組合日期數據
- $this->fields = getcache('model_field_'.$modelid,'model');//當前模型字段詳細配置信息
- $setting = string2array($this->fields['inputtime']['setting']);//關于日期的設置,轉換為數組格式
- /**
- * 'setting' => 'array (
- * /'fieldtype/' => /'int/', 整型
- * /'format/' => /'Y-m-d H:i:s/', 時間格式
- * /'defaulttype/' => /'0/',
- * )',
- */
- extract($setting);
- if($fieldtype=='date') {
- $systeminfo['inputtime'] = date('Y-m-d');
- }elseif($fieldtype=='datetime'){
- $systeminfo['inputtime'] = date('Y-m-d H:i:s');
- }
- //更新時間
- if($data['updatetime'] && !is_numeric($data['updatetime'])) {
- $systeminfo['updatetime'] = strtotime($data['updatetime']);
- } elseif(!$data['updatetime']) {
- $systeminfo['updatetime'] = SYS_TIME;
- } else {
- $systeminfo['updatetime'] = $data['updatetime'];
- }
- //用戶名
- $systeminfo['username'] = $data['username'] ? $data['username'] : param::get_cookie('admin_username');
- //系統添加
- $systeminfo['sysadd'] = defined('IN_ADMIN') ? 1 : 0;
- //自動提取摘要
- if(isset($_POST['add_introduce']) && $systeminfo['description'] == '' && isset($modelinfo['content'])) {
- $content = stripslashes($modelinfo['content']);//內容
- $introcude_length = intval($_POST['introcude_length']);//自動截取內容長度
- //如果自動截取的內容中含有[page]等字符,則將其替換為空
- $systeminfo['description'] = str_cut(str_replace(array("/r/n","/t",'[page]','[/page]','“','”',' '), '', strip_tags($content)),$introcude_length);
- //摘要
- $inputinfo['system']['description'] = $systeminfo['description'] = addslashes($systeminfo['description']);
- }
- //自動提取縮略圖
- if(isset($_POST['auto_thumb']) && $systeminfo['thumb'] == '' && isset($modelinfo['content'])) {
- $content = $content ? $content : stripslashes($modelinfo['content']);
- $auto_thumb_no = intval($_POST['auto_thumb_no'])-1;//將內容中第幾張圖片作為標題圖片
- if(preg_match_all("/(src)=([/"|']?)([^ /"'>]+/.(gif|jpg|jpeg|bmp|png))//2/i", $content, $matches)) {
- $systeminfo['thumb'] = $matches[3][$auto_thumb_no];//縮略圖
- }
- }
- //主表
- $tablename = $this->table_name = $this->db_tablepre.$this->model_tablename;
- //系統字段信息存入主表,并返回剛插入記錄的id
- $id = $modelinfo['id'] = $this->insert($systeminfo,true);//參數2-是否返回插入的id
- $this->update($systeminfo,array('id'=>$id));
- //更新URL地址
- if($data['islink']==1) {//轉向鏈接
- $urls[0] = $_POST['linkurl'];
- } else {
- $urls = $this->url->show($id, 0, $systeminfo['catid'], $systeminfo['inputtime'], $data['prefix'],$inputinfo,'add');
- }
- $this->table_name = $tablename;//主表
- $this->update(array('url'=>$urls[0]),array('id'=>$id));
- //附屬表
- $this->table_name = $this->table_name.'_data';
- //將非系統字段信息的值存入到附屬表中
- $this->insert($modelinfo);
- //添加統計
- $this->hits_db = pc_base::load_model('hits_model');//gt_hits表-統計表
- $hitsid = 'c-'.$modelid.'-'.$id;//統計表的id組成
- //統計信息入庫
- $this->hits_db->insert(array('hitsid'=>$hitsid,'catid'=>$systeminfo['catid'],'updatetime'=>SYS_TIME));
- //更新到全站搜索
- $this->search_api($id,$inputinfo);
- //更新欄目統計數據,如:欄目下文章的數據量
- $this->update_category_items($systeminfo['catid'],'add',1);
- //調用 update
- $content_update = new content_update($this->modelid,$id);
- //合并后,調用update
- $merge_data = array_merge($systeminfo,$modelinfo);
- $merge_data['posids'] = $data['posids'];//推薦位
- $content_update->update($merge_data);
- //發布到審核列表中
- if(!defined('IN_ADMIN') || $data['status']!=99) {
- $this->content_check_db = pc_base::load_model('content_check_model');//gt_content_check表
- $check_data = array(
- 'checkid'=>'c-'.$id.'-'.$modelid,
- 'catid'=>$systeminfo['catid'],
- 'siteid'=>$this->siteid,
- 'title'=>$systeminfo['title'],
- 'username'=>$systeminfo['username'],
- 'inputtime'=>$systeminfo['inputtime'],
- 'status'=>$data['status'],
- );
- $this->content_check_db->insert($check_data);
- }
- //END發布到審核列表中
- if(!$isimport) {
- $html = pc_base::load_app_class('html', 'content');
- if($urls['content_ishtml'] && $data['status']==99) $html->show($urls[1],$urls['data']);
- $catid = $systeminfo['catid'];
- }
- //發布到其他欄目
- if($id && isset($_POST['othor_catid']) && is_array($_POST['othor_catid'])) {
- $linkurl = $urls[0];
- $r = $this->get_one(array('id'=>$id));
- foreach ($_POST['othor_catid'] as $cid=>$_v) {
- $this->set_catid($cid);//設置catid 所在的模型數據庫
- $mid = $this->category[$cid]['modelid'];//模型id
- if($modelid==$mid) {
- //相同模型的欄目插入新的數據
- $inputinfo['system']['catid'] = $systeminfo['catid'] = $cid; //新的欄目id
- $newid = $modelinfo['id'] = $this->insert($systeminfo,true); //系統字段信息插入到主表中并返回插入的id
- $this->table_name = $tablename.'_data';//附表數據入庫
- $this->insert($modelinfo);
- if($data['islink']==1) {//轉向鏈接
- $urls = $_POST['linkurl'];//轉向鏈接
- } else {
- $urls = $this->url->show($newid, 0, $cid, $systeminfo['inputtime'], $data['prefix'],$inputinfo,'add');
- }
- $this->table_name = $tablename;
- $this->update(array('url'=>$urls[0]),array('id'=>$newid));
- //發布到審核列表中
- if($data['status']!=99) {
- $check_data = array(
- 'checkid'=>'c-'.$newid.'-'.$mid,
- 'catid'=>$cid,
- 'siteid'=>$this->siteid,
- 'title'=>$systeminfo['title'],
- 'username'=>$systeminfo['username'],
- 'inputtime'=>$systeminfo['inputtime'],
- 'status'=>1,
- );
- $this->content_check_db->insert($check_data);
- } //Vevb.com
- if($urls['content_ishtml'] && $data['status']==99) $html->show($urls[1],$urls['data']);
- } else {
- //不同模型插入轉向鏈接地址
- $newid = $this->insert(
- array('title'=>$systeminfo['title'],
- 'style'=>$systeminfo['style'],
- 'thumb'=>$systeminfo['thumb'],
- 'keywords'=>$systeminfo['keywords'],
- 'description'=>$systeminfo['description'],
- 'status'=>$systeminfo['status'],
- 'catid'=>$cid,'url'=>$linkurl,
- 'sysadd'=>1,
- 'username'=>$systeminfo['username'],
- 'inputtime'=>$systeminfo['inputtime'],
- 'updatetime'=>$systeminfo['updatetime'],
- 'islink'=>1
- ),true);
- $this->table_name = $this->table_name.'_data';
- $this->insert(array('id'=>$newid));
- //發布到審核列表中
- if($data['status']!=99) {
- $check_data = array(
- 'checkid'=>'c-'.$newid.'-'.$mid,
- 'catid'=>$systeminfo['catid'],
- 'siteid'=>$this->siteid,
- 'title'=>$systeminfo['title'],
- 'username'=>$systeminfo['username'],
- 'inputtime'=>$systeminfo['inputtime'],
- 'status'=>1,
- );
- $this->content_check_db->insert($check_data);
- }
- }
- $hitsid = 'c-'.$mid.'-'.$newid;
- $this->hits_db->insert(array('hitsid'=>$hitsid,'catid'=>$cid,'updatetime'=>SYS_TIME));
- }
- }
- //END 發布到其他欄目
- //更新附件狀態
- if(pc_base::load_config('system','attachment_stat')) {
- $this->attachment_db = pc_base::load_model('attachment_model');
- $this->attachment_db->api_update('','c-'.$systeminfo['catid'].'-'.$id,2);
- }
- //生成靜態
- if(!$isimport && $data['status']==99) {
- //在添加和修改內容處定義了 INDEX_HTML
- if(defined('INDEX_HTML')) $html->index();
- if(defined('RELATION_HTML')) $html->create_relation_html($catid);
- }
- return $id;//返回剛插入的記錄id
- }
新聞熱點
疑難解答