【phpcms-v9】後台content模組的content.php控制器檔案分析-後台新增內容程式碼分析

來源:互聯網
上載者:User
//第一步://路徑: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');//欄目idif(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(!empty($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;//當前模型idrequire_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'];//模型idif($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);}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_HTMLif(defined('INDEX_HTML')) $html->index();if(defined('RELATION_HTML')) $html->create_relation_html($catid);}return $id;//返回剛插入的記錄id}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.