| 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;
 
- 	}
 
- }
 
- ?>
 
 
  |