| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 | <?php/** * html.class.php 生成静态类 */defined('IN_PHPCMS') or exit('No permission resources.');class html {	private $db, $type_db, $c_db, $data_db, $site, $queue;		public function __construct() {		$this->db = pc_base::load_model('special_model'); //专题数据模型		$this->type_db = pc_base::load_model('type_model'); //专题分类数据模型		$this->c_db = pc_base::load_model('special_content_model'); //专题内容数据模型		$this->data_db = pc_base::load_model('special_c_data_model'); 		$this->site = pc_base::load_app_class('sites', 'admin');		$this->queue = pc_base::load_model('queue_model');		define('HTML', true);	}		/**	 * 生成文章静态页	 * @param intval $contentid 文章ID	 * @return string	返回文章的url	 */	public function _create_content($contentid = 0) {		if (!$contentid) return false;		pc_base::load_app_func('global', 'special');		$r = $this->c_db->get_one(array('id'=>$contentid));		$_special = $s_info = $this->db->get_one(array('id'=>$r['specialid']));		if($s_info['ishtml']==0) return content_url($contentid, '1', 0, 'php');		unset($arr_content);		$arr_content = $this->data_db->get_one(array('id'=>$contentid));		@extract($r);		$title = strip_tags($title);		if ($arr_content['paginationtype']) {			//文章使用分页时			if($arr_content['paginationtype']==1) {				if (strpos($arr_content['content'], '[/page]')!==false) {					$arr_content['content'] = preg_replace("|\[page\](.*)\[/page\]|U", '', $arr_content['content']);				}				if (strpos($arr_content['content'], '[page]')!==false) {					$arr_content['content'] = str_replace('[page]', '', $data['content']);				}				$contentpage = pc_base::load_app_class('contentpage', 'content'); //调用自动分页类				$arr_content['content'] = $contentpage->get_data($arr_content['content'], $arr_content['maxcharperpage']); //自动分页,自动添加上[page]			} 		} else {			if (strpos($arr_content['content'], '[/page]')!==false) {				$arr_content['content'] = preg_replace("|\[page\](.*)\[/page\]|U", '', $arr_content['content']);			}			if (strpos($arr_content['content'], '[page]')!==false) {				$arr_content['content'] = str_replace('[page]', '', $arr_content['content']);			}		}		$template = $arr_content['show_template'] ? $arr_content['show_template'] : 'show'; //调用模板				//分站时,计算分站路径		if ($s_info['siteid']>1) {			$site_info = $this->site->get_by_id($s_info['siteid']);		}		$siteid = $s_info['siteid'];		$CONTENT_POS = strpos($arr_content['content'], '[page]');		if ($CONTENT_POS !== false) {			$contents = array_filter(explode('[page]', $arr_content['content']));			$pagenumber = count($contents);			$END_POS = strpos($arr_content['content'], '[/page]');			if ($END_POS!==false && ($CONTENT_POS<7)) {				$pagenumber--;			}			for ($i=1; $i<=$pagenumber; $i++) {				$pageurls[$i] = content_url($contentid, $i, $inputtime, 'html', $site_info); 			}			if ($END_POS !== false) {				if($CONTENT_POS>7) {					$arr_content['content'] = '[page]'.$title.'[/page]'.$arr_content['content'];				}				if (preg_match_all("|\[page\](.*)\[/page\]|U", $arr_content['content'], $m, PREG_PATTERN_ORDER)) {					foreach ($m[1] as $k=>$v) {						$p = $k+1;						$titles[$p]['title'] = strip_tags($v);						$titles[$p]['url'] = $pageurls[$p][1];					}				}			}			$currentpage = $filesize = 0;			for ($i=1; $i<=$pagenumber; $i++) {				$currentpage++;				//判断[page]出现的位置是否在第一位 				if($CONTENT_POS<7) {					$content = $contents[$currentpage];				} else {					if ($currentpage==1 && !empty($titles)) {						$content = $title.'[/page]'.$contents[$currentpage-1];					} else {						$content = $contents[$currentpage-1];					}				}				if($titles) {					list($title, $content) = explode('[/page]', $content);					$content = trim($content);					if(strpos($content,'</p>')===0) {						$content = '<p>'.$content;					}					if(stripos($content,'<p>')===0) {						$content = $content.'</p>';					}				}				$file_url = content_url($contentid, $currentpage, $inputtime, 'html', $site_info);				if ($currentpage==1) $urls = $file_url;				pc_base::load_app_func('util', 'content');				$title_pages = content_pages($pagenumber,$currentpage, $pageurls);				$SEO = seo($s_info['siteid'], '', $title);				$file = $file_url[1];								//如果是分站的文件,将文件写入到信息队列中				$this->queue->add_queue('add', $file, $siteid);				$file = PHPCMS_PATH.$file; //生成文件的路径								ob_start();				include template('special', $template);				$this->create_html($file);			}		} else {			$page = 1;			$title = strip_tags($title);			$SEO = seo($s_info['siteid'], '', $title);			$content = $arr_content['content'];			$urls = content_url($contentid, $page, $inputtime, 'html', $site_info);			$file = $urls[1];						//如果是分站的文件,将文件写入到信息队列中			$this->queue->add_queue('add', $file, $siteid);			$file = PHPCMS_PATH.$file;			ob_start();			include template('special', $template);			$this->create_html($file);		}		//$this->_index($specialid, 20, 5);  //更新专题首页		//$this->_list($typeid, 20, 5); 		//更新所在的分类页		return $urls;	}		/**	 * 生成静态文件	 * @param string $file 文件路径	 * @return boolen/intval 成功返回生成文件的大小	 */	private function create_html($file) {		$data = ob_get_contents();		ob_end_clean();		pc_base::load_sys_func('dir');		dir_create(dirname($file));		$strlen = file_put_contents($file, $data);		@chmod($file, 0777);		return $strlen;	}		/**	 * 生成专题首页	 * @param intval $specialid 专题ID	 * @param intval $pagesize 每页个数	 * @param intval $pages_num 最大更新页数	 * @return boolen/intval 成功返回生成文件的大小	 */	public function _index($specialid = 0, $pagesize = 20, $pages_num = 0) {		pc_base::load_app_func('global', 'special');		$specialid = intval($specialid);		if (!$specialid) return false;		$r = $this->db->get_one(array('id'=>$specialid, 'siteid'=>get_siteid()));		if (!$r['ishtml'] || $r['disabled'] != 0 ) return true;				if (!$specialid) showmessage(L('illegal_action'));		$info = $this->db->get_one(array('id'=>$specialid));		if(!$info) showmessage(L('special_not_exist'), 'back');		extract($info);		if ($pics) {			$pic_data = get_pic_content($pics);			unset($pics);		}		if ($voteid) {			$vote_info = explode('|', $voteid);			$voteid = $vote_info[1];		}		$commentid = id_encode('special', $id, $siteid);		//分站时计算路径		if ($siteid>1) {			$site_info = $this->site->get_by_id($siteid);			$file = pc_base::load_config('system', 'html_root').'/'.$site_info['dirname'].'/special/'.$filename.'/index.html';		} else {			$file = pc_base::load_config('system', 'html_root').'/special/'.$filename.'/index.html';		}		if(!$ispage) {			$type_db = pc_base::load_model('type_model');			$types = $type_db->select(array('module'=>'special', 'parentid'=>$specialid), '*', '', '`listorder` ASC, `typeid` ASC', '', 'listorder');		}		$css = get_css(unserialize($css));		$template = $index_template ? $index_template : 'index';		$SEO = seo($siteid, '', $title, $description);		if($ispage) {			$re = $this->c_db->get_one(array('specialid'=>$specialid), 'COUNT(`id`) AS num');			$total = $re['num'];			$times = ceil($total/$pagesize);			if ($pages_num) $pages_num = min($times, $pages_num);			else $pages_num = $times;			for ($i=1; $i<=$pages_num; $i++) {				if ($i==1) $file_root = $file;				else $file_root = str_replace('index', 'index-'.$i, $file);				$this->queue->add_queue('add', $file_root, $siteid); //添加至信息队列				$file_root = PHPCMS_PATH.$file_root;				ob_start();				include template('special', $template);				$this->create_html($file_root);			}			return true;		} else {			$this->queue->add_queue('add', $file, $siteid); //添加至信息队列			$file = PHPCMS_PATH.$file;			ob_start();			include template('special', $template, $style);			return $this->create_html($file);		}	}		/**	 * 生成列表页	 */	public function create_list($page = 1) {		$siteid = get_siteid();		$site_info = $this->site->get_by_id($siteid);		define('URLRULE', $site_info['domain'].substr(pc_base::load_config('system', 'html_root'), 1).'/special/index.html~'.$site_info['domain'].substr(pc_base::load_config('system', 'html_root'), 1).'/special/index-{$page}.html');		//分站时计算路径		if ($siteid>1) {			if ($page==1) $file = pc_base::load_config('system', 'html_root').'/'.$site_info['dirname'].'/special/index.html';			else $file = pc_base::load_config('system', 'html_root').'/'.$site_info['dirname'].'/special/index-'.$page.'.html';		} else {			if ($page==1)  $file = pc_base::load_config('system', 'html_root').'/special/index.html';			else $file = pc_base::load_config('system', 'html_root').'/special/index-'.$page.'.html';		}		$this->queue->add_queue('add', $file, $siteid);		$file  = PHPCMS_PATH.$file;		ob_start();		include template('special', 'special_list');		return $this->create_html($file);	}		/**	 * 生成分类页	 * @param intval $typeid 分类ID	 * @param intval $page 页数	 */	public function create_type($typeid = 0, $page = 1) {		if (!$typeid) return false;		$info = $this->type_db->get_one(array('typeid'=>$typeid));		$s_info = $this->db->get_one(array('id'=>$info['parentid']));		extract($s_info);		$site_info = $this->site->get_by_id($siteid);		define('URLRULE', $site_info['domain'].substr(pc_base::load_config('system', 'html_root'), 1).'/special/{$specialdir}/{$typedir}/type-{$typeid}.html~'.$site_info['domain'].substr(pc_base::load_config('system', 'html_root'), 1).'/special/{$specialdir}/{$typedir}/type-{$typeid}-{$page}.html');		$GLOBALS['URL_ARRAY'] = array('specialdir'=>$filename, 'typedir'=>$info['typedir'], 'typeid'=>$typeid);		$SEO = seo($siteid, '', $info['typename'], '');		$template = $list_template ? $list_template : 'list';				if ($siteid>1) {			if ($page==1) $file = pc_base::load_config('system', 'html_root').'/'.$site_info['dirname'].'/special/'.$filename.'/'.$info['typedir'].'/type-'.$typeid.'.html';			else $file = pc_base::load_config('system', 'html_root').'/'.$site_info['dirname'].'/special/'.$filename.'/'.$info['typedir'].'/type-'.$typeid.'-'.$page.'.html';		} else {			if ($page==1) $file = pc_base::load_config('system', 'html_root').'/special/'.$filename.'/'.$info['typedir'].'/type-'.$typeid.'.html';			else $file = pc_base::load_config('system', 'html_root').'/special/'.$filename.'/'.$info['typedir'].'/type-'.$typeid.'-'.$page.'.html';		}		$this->queue->add_queue('add', $file, $siteid);		$file = PHPCMS_PATH.$file;		ob_start();		include template('special', $template);		$this->create_html($file);	}		/**	 * 生成分类静态页	 * @param intval $typeid 分类ID	 * @param intval $pagesize 每页篇数	 * @param intval $pages 最大更新页数 	 */	public function _list($typeid = 0, $pagesize = 20, $pages = 0) {		if (!$typeid) return false;		$r = $this->c_db->get_one(array('typeid'=>$typeid), 'COUNT(`id`) AS num');		$total = $r['num'];		$times = ceil($total/$pagesize);		if ($pages) $pages = min($times, $pages);		else $pages = $times;		for ($i=1; $i<=$pages; $i++) {			$this->create_type($typeid, $i);		}		return true;	}}?>
 |