1. 程式人生 > >【phpcms-v9】專題模組後臺控制器special.php檔案分析-新增專題

【phpcms-v9】專題模組後臺控制器special.php檔案分析-新增專題

1.新增專題:

/**
	 * 新增專題
	 */
	public function add() {
		//新增專題
		if (isset($_POST['dosubmit']) && !empty($_POST['dosubmit'])) {
			//新增專題頁面表單陣列
			$special = $this->check($_POST['special']);
			//插入專題,返回專題id
			$id = $this->db->insert($special, true);
			//如果插入專題成功
			if ($id) {
				$this->special_api->_update_type($id, $_POST['type']);
				if ($special['siteid']>1) {
					$site = pc_base::load_app_class('sites', 'admin');
					$site_info = $site->get_by_id($special['siteid']);
					if ($special['ishtml']) {
						$url =  $site_info['domain'].'special/'.$special['filename'].'/';
					} else {
						$url = $site_info['domain'].'index.php?m=special&c=index&id='.$id;
					}
				} else {
					//專題的url路徑,$special['filename']-代表專題生成的目錄
					$url = $special['ishtml'] ? APP_PATH.substr(pc_base::load_config('system', 'html_root'), 1).'/special/'.$special['filename'].'/' : APP_PATH.'index.php?m=special&c=index&id='.$id;
				}
				//更新專題的url
				$this->db->update(array('url'=>$url), array('id'=>$id, 'siteid'=>$this->get_siteid()));
				
				//是否生成靜態,呼叫生成靜態類
				if ($special['ishtml']) {
					$html = pc_base::load_app_class('html', 'special'); //專用於生成靜態的類庫檔案
					//生成專題首頁:引數1-專題id    引數2-每頁的個數            引數3-最大更新個數         成功後返回生成檔案的大小
					$html->_index($id, 20, 5);
				}
				//更新附件狀態
				if(pc_base::load_config('system','attachment_stat')) {
					$this->attachment_db = pc_base::load_model('attachment_model');//附件表
					//更新附件表
					$this->attachment_db->api_update(array($special['thumb'], $special['banner']),'special-'.$id, 1);
				}
				//專題快取,快取所有開放中的專題到快取目錄
				$this->special_cache();
			}
			//新增專題成功的提示資訊
			showmessage(L('add_special_success'), HTTP_REFERER);
		} else {
			//獲取站點模板資訊
			pc_base::load_app_func('global', 'admin');
			//站點id
			$siteid = $this->get_siteid();
			$template_list = template_list($siteid, 0);
			$site = pc_base::load_app_class('sites','admin');
			$info = $site->get_by_id($siteid);
			foreach ($template_list as $k=>$v) {
				$template_list[$v['dirname']] = $v['name'] ? $v['name'] : $v['dirname'];
				unset($template_list[$k]);
			}
			include $this->admin_tpl('special_add');
		}
	}

2.對從新增專題頁面提交過來的表單資料進行驗證:
/**
	 * 表單驗證
	 * @param array $data 表單傳遞的值
	 * @param string $a add/edit新增操作時,自動加上預設值
	 */
	private function check($data, $a = 'add') {
		// 專題名稱不能為空
		if(!$data['title']) showmessage(L('title_cannot_empty'), HTTP_REFERER);
		//專題橫幅不能為空
		if(!$data['banner']) showmessage(L('banner_no_empty'), HTTP_REFERER);
		//專題縮圖不能為空
		if(!$data['thumb']) showmessage(L('thumb_no_empty'), HTTP_REFERER);
		//一般為空
		if(is_array($data['catids']) && !empty($data['catids'])) {
			$data['catids'] = ','.implode(',', $data['catids']).',';
		}
		if($a=='add') {
			//專題首頁模板
			if(!$data['index_template']) $data['index_template'] = 'index';
			//站點
			$data['siteid'] = $this->get_siteid();
			//建立時間
			$data['createtime'] = SYS_TIME;
			//使用者名稱
			$data['username'] = param::get_cookie('admin_username');
			//使用者id
			$data['userid'] = $_SESSION['userid'];
		}
		//投票標題
		if ($data['voteid']) {
			//選擇已有投票
			if (strpos($data['voteid'], '|')===false) {
				$vote_db = pc_base::load_model('vote_subject_model');//屬於專題的投票表
				//根據投票標題獲取當前專題的投票記錄
				$r = $vote_db->get_one(array('subject'=>$data['voteid'], 'siteid'=>$this->get_siteid()), 'subjectid, subject', 'addtime DESC');
				if ($r) {
					//格式如下:vote|投票id|投票標題
					$data['voteid'] = 'vote|'.$r['subjectid'].'|'.$r['subject'];
				}
			}
		}
		return $data;
	}
}