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