123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 |
- <?php
- defined('IN_PHPCMS') or exit('No permission resources.');
- pc_base::load_app_func('util','content');
- pc_base::load_sys_func('dir');
- class html {
- private $siteid,$url,$html_root,$queue,$categorys;
- public function __construct() {
- $this->queue = pc_base::load_model('queue_model');
- define('HTML',true);
- self::set_siteid();
- $this->categorys = getcache('category_content_'.$this->siteid,'commons');
- $this->url = pc_base::load_app_class('url', 'content');
- $this->html_root = pc_base::load_config('system','html_root');
- $this->sitelist = getcache('sitelist','commons');
- }
- /**
- * 生成内容页
- * @param $file 文件地址
- * @param $data 数据
- * @param $array_merge 是否合并
- * @param $action 方法
- * @param $upgrade 是否是升级数据
- */
- public function show($file, $data = '', $array_merge = 1,$action = 'add',$upgrade = 0) {
- if($upgrade) $file = '/'.ltrim($file,WEB_PATH);
- $allow_visitor = 1;
- $id = $data['id'];
- if($array_merge) {
- $data = new_stripslashes($data);
- $data = array_merge($data['system'],$data['model']);
- }
- //通过rs获取原始值
- $rs = $data;
- if(isset($data['paginationtype'])) {
- $paginationtype = $data['paginationtype'];
- $maxcharperpage = $data['maxcharperpage'];
- } else {
- $paginationtype = 0;
- }
- $catid = $data['catid'];
- $CATEGORYS = $this->categorys;
- $CAT = $CATEGORYS[$catid];
- $CAT['setting'] = string2array($CAT['setting']);
- define('STYLE',$CAT['setting']['template_list']);
- //最顶级栏目ID
- $arrparentid = explode(',', $CAT['arrparentid']);
- $top_parentid = $arrparentid[1] ? $arrparentid[1] : $catid;
-
- //$file = '/'.$file;
- //添加到发布点队列
- //当站点为非系统站点
-
- if($this->siteid!=1) {
- $site_dir = $this->sitelist[$this->siteid]['dirname'];
- $file = $this->html_root.'/'.$site_dir.$file;
- }
-
- $this->queue->add_queue($action,$file,$this->siteid);
-
- $modelid = $CAT['modelid'];
- require_once CACHE_MODEL_PATH.'content_output.class.php';
- $content_output = new content_output($modelid,$catid,$CATEGORYS);
- $output_data = $content_output->get($data);
- extract($output_data);
- if(module_exists('comment')) {
- $allow_comment = isset($allow_comment) ? $allow_comment : 1;
- } else {
- $allow_comment = 0;
- }
- $this->db = pc_base::load_model('content_model');
- $this->db->set_model($modelid);
- //上一页
- $previous_page = $this->db->get_one("`catid` = '$catid' AND `id`<'$id' AND `status`=99",'*','id DESC');
- //下一页
- $next_page = $this->db->get_one("`catid`= '$catid' AND `id`>'$id' AND `status`=99",'*','id ASC');
-
- if(empty($previous_page)) {
- $previous_page = array('title'=>L('first_page','','content'), 'thumb'=>IMG_PATH.'nopic_small.gif', 'url'=>'javascript:alert(\''.L('first_page','','content').'\');');
- }
- if(empty($next_page)) {
- $next_page = array('title'=>L('last_page','','content'), 'thumb'=>IMG_PATH.'nopic_small.gif', 'url'=>'javascript:alert(\''.L('last_page','','content').'\');');
- }
-
- $title = strip_tags($title);
- //SEO
- $seo_keywords = '';
- if(!empty($keywords)) $seo_keywords = implode(',',$keywords);
- $siteid = $this->siteid;
- $SEO = seo($siteid, $catid, $title, $description, $seo_keywords);
-
- $ishtml = 1;
- $template = $template ? $template : $CAT['setting']['show_template'];
-
- //分页处理
- $pages = $titles = '';
- if($paginationtype==1) {
- //自动分页
- if($maxcharperpage < 10) $maxcharperpage = 500;
- $contentpage = pc_base::load_app_class('contentpage');
- $content = $contentpage->get_data($content,$maxcharperpage);
- }
-
- if($paginationtype!=0) {
- //手动分页
- $CONTENT_POS = strpos($content, '[page]');
- if($CONTENT_POS !== false) {
- $this->url = pc_base::load_app_class('url', 'content');
- $contents = array_filter(explode('[page]', $content));
- $pagenumber = count($contents);
- if (strpos($content, '[/page]')!==false && ($CONTENT_POS<7)) {
- $pagenumber--;
- }
- for($i=1; $i<=$pagenumber; $i++) {
- $upgrade = $upgrade ? '/'.ltrim($file,WEB_PATH) : '';
- $pageurls[$i] = $this->url->show($id, $i, $catid, $data['inputtime'],'','','edit',$upgrade);
- }
- $END_POS = strpos($content, '[/page]');
- if($END_POS !== false) {
- if($CONTENT_POS>7) {
- $content = '[page]'.$title.'[/page]'.$content;
- }
- if(preg_match_all("|\[page\](.*)\[/page\]|U", $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][0];
- }
- }
- }
- //生成分页
- foreach ($pageurls as $page=>$urls) {
- $pages = content_pages($pagenumber,$page, $pageurls);
- //判断[page]出现的位置是否在第一位
- if($CONTENT_POS<7) {
- $content = $contents[$page];
- } else {
- if ($page==1 && !empty($titles)) {
- $content = $title.'[/page]'.$contents[$page-1];
- } else {
- $content = $contents[$page-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>';
- }
- }
- $pagefile = $urls[1];
- if($this->siteid!=1) {
- $pagefile = $this->html_root.'/'.$site_dir.$pagefile;
- }
- $this->queue->add_queue($action,$pagefile,$this->siteid);
- $pagefile = PHPCMS_PATH.$pagefile;
- ob_start();
- include template('content', $template);
- $this->createhtml($pagefile);
- }
- return true;
- }
- }
- //分页处理结束
- $file = PHPCMS_PATH.$file;
- ob_start();
- include template('content', $template);
- return $this->createhtml($file);
- }
- /**
- * 生成栏目列表
- * @param $catid 栏目id
- * @param $page 当前页数
- */
- public function category($catid, $page = 0) {
- $CAT = $this->categorys[$catid];
- @extract($CAT);
- if(!$ishtml) return false;
- if(!$catid) showmessage(L('category_not_exists','content'),'blank');
- $CATEGORYS = $this->categorys;
- if(!isset($CATEGORYS[$catid])) showmessage(L('information_does_not_exist', 'content'),'blank');
- $siteid = $CAT['siteid'];
- $copyjs = '';
- $setting = string2array($setting);
- if(!$setting['meta_title']) $setting['meta_title'] = $catname;
- $SEO = seo($siteid, '',$setting['meta_title'],$setting['meta_description'],$setting['meta_keywords']);
- define('STYLE',$setting['template_list']);
- $page = intval($page);
- $parentdir = $CAT['parentdir'];
- $catdir = $CAT['catdir'];
- //检查是否生成到根目录
- $create_to_html_root = $CAT['sethtml'];
- //$base_file = $parentdir.$catdir.'/';
- //生成地址
- if($CAT['create_to_html_root']) $parentdir = '';
-
- //获取父级的配置,看是否生成静态,如果是动态则直接把父级目录调过来为生成静态目录所用
- $parent_setting = string2array($CATEGORYS[$CAT['parentid']]['setting']);
- if($parent_setting['ishtml']==0 && $setting['ishtml']==1){
- $parentdir = $CATEGORYS[$CAT['parentid']]['catdir'].'/';
- }
-
- $base_file = $this->url->get_list_url($setting['category_ruleid'],$parentdir, $catdir, $catid, $page);
- $base_file = '/'.$base_file;
-
- //非系统站点时,生成到指定目录
- if($this->siteid!=1) {
- $site_dir = $this->sitelist[$this->siteid]['dirname'];
- if($create_to_html_root) {
- $base_file = '/'.$site_dir.$base_file;
- } else {
- $base_file = '/'.$site_dir.$this->html_root.$base_file;
- }
- }
- //判断二级域名是否直接绑定到该栏目
- $root_domain = preg_match('/^((http|https):\/\/)([a-z0-9\-\.]+)\/$/',$CAT['url']) ? 1 : 0;
- $count_number = substr_count($CAT['url'], '/');
- $urlrules = getcache('urlrules','commons');
- $urlrules = explode('|',$urlrules[$category_ruleid]);
-
- if($create_to_html_root) {
- if($this->siteid==1) {
- $file = PHPCMS_PATH.$base_file;
- } else {
- $file = PHPCMS_PATH.substr($this->html_root,1).$base_file;
- }
- //添加到发布点队列
- $this->queue->add_queue('add',$base_file,$this->siteid);
- //评论跨站调用所需的JS文件
- if(substr($base_file, -10)=='index.html' && $count_number==3) {
- $copyjs = 1;
- $this->queue->add_queue('add',$base_file,$this->siteid);
- }
- //URLRULES
- if($CAT['isdomain']) {
- $second_domain = 1;
- foreach ($urlrules as $_k=>$_v) {
- $urlrules[$_k] = $_v;
- }
- } else {
- foreach ($urlrules as $_k=>$_v) {
- $urlrules[$_k] = '/'.$_v;
- }
- }
- } else {
- $file = PHPCMS_PATH.substr($this->html_root,1).$base_file;
- //添加到发布点队列
- $this->queue->add_queue('add',$this->html_root.$base_file,$this->siteid);
- //评论跨站调用所需的JS文件
- if(substr($base_file, -10)=='index.html' && $count_number==3) {
- $copyjs = 1;
- $this->queue->add_queue('add',$this->html_root.$base_file,$this->siteid);
- }
- //URLRULES
- $htm_prefix = $root_domain ? '' : $this->html_root;
- $htm_prefix = rtrim(WEB_PATH,'/').$htm_prefix;
- if($CAT['isdomain']) {
- $second_domain = 1;
- } else {
- $second_domain = 0;//判断该栏目是否绑定了二级域名或者上级栏目绑定了二级域名,存在的话,重新构造列表页url规则
- foreach ($urlrules as $_k=>$_v) {
- $urlrules[$_k] = $htm_prefix.'/'.$_v;
- }
- }
- }
- if($type==0) {
- $template = $setting['category_template'] ? $setting['category_template'] : 'category';
- $template_list = $setting['list_template'] ? $setting['list_template'] : 'list';
- $template = $child ? $template : $template_list;
- $arrparentid = explode(',', $arrparentid);
- $top_parentid = $arrparentid[1] ? $arrparentid[1] : $catid;
- $array_child = array();
- $self_array = explode(',', $arrchildid);
- foreach ($self_array as $arr) {
- if($arr!=$catid) $array_child[] = $arr;
- }
- $arrchildid = implode(',', $array_child);
- //URL规则
- $urlrules = implode('~', $urlrules);
-
- define('URLRULE', $urlrules);
- //绑定域名时,设置$catdir 为空
- if($root_domain) $parentdir = $catdir = '';
- if($second_domain) {
- $parentdir = '';
- $parentdir = str_replace($catdir.'/', '', $CAT['url']);
- }
-
- $GLOBALS['URL_ARRAY'] = array('categorydir'=>$parentdir, 'catdir'=>$catdir, 'catid'=>$catid);
- } else {
- //单网页
- $datas = $this->page($catid);
- if($datas) extract($datas);
- $template = $setting['page_template'] ? $setting['page_template'] : 'page';
- $parentid = $CATEGORYS[$catid]['parentid'];
- $arrchild_arr = $CATEGORYS[$parentid]['arrchildid'];
- if($arrchild_arr=='') $arrchild_arr = $CATEGORYS[$catid]['arrchildid'];
- $arrchild_arr = explode(',',$arrchild_arr);
- array_shift($arrchild_arr);
- $keywords = $keywords ? $keywords : $setting['meta_keywords'];
- $SEO = seo($siteid, 0, $title,$setting['meta_description'],$keywords);
- }
- ob_start();
- include template('content',$template);
- return $this->createhtml($file, $copyjs);
- }
- /**
- * 更新首页
- */
- public function index() {
- if($this->siteid==1) {
- $file = PHPCMS_PATH.'index.html';
- //添加到发布点队列
- $this->queue->add_queue('edit','/index.html',$this->siteid);
- } else {
- $site_dir = $this->sitelist[$this->siteid]['dirname'];
- $file = $this->html_root.'/'.$site_dir.'/index.html';
- //添加到发布点队列
- $this->queue->add_queue('edit',$file,$this->siteid);
- $file = PHPCMS_PATH.$file;
- }
- define('SITEID', $this->siteid);
- //SEO
- $SEO = seo($this->siteid);
- $siteid = $this->siteid;
- $CATEGORYS = $this->categorys;
- $style = $this->sitelist[$siteid]['default_style'];
- ob_start();
- include template('content','index',$style);
- return $this->createhtml($file, 1);
- }
- /**
- * 单网页
- * @param $catid
- */
- public function page($catid) {
- $this->page_db = pc_base::load_model('page_model');
- $data = $this->page_db->get_one(array('catid'=>$catid));
- return $data;
- }
- /**
- * 写入文件
- * @param $file 文件路径
- * @param $copyjs 是否复制js,跨站调用评论时,需要该js
- */
- private function createhtml($file, $copyjs = '') {
- $data = ob_get_contents();
- ob_clean();
- $dir = dirname($file);
- if(!is_dir($dir)) {
- mkdir($dir, 0777,1);
- }
- if ($copyjs && !file_exists($dir.'/js.html')) {
- @copy(PC_PATH.'modules/content/templates/js.html', $dir.'/js.html');
- }
- $strlen = file_put_contents($file, $data);
- @chmod($file,0777);
- if(!is_writable($file)) {
- $file = str_replace(PHPCMS_PATH,'',$file);
- showmessage(L('file').':'.$file.'<br>'.L('not_writable'));
- }
- return $strlen;
- }
- /**
- * 设置当前站点id
- */
- private function set_siteid() {
- if(defined('IN_ADMIN')) {
- $this->siteid = $GLOBALS['siteid'] = get_siteid();
- } else {
- if (param::get_cookie('siteid')) {
- $this->siteid = $GLOBALS['siteid'] = param::get_cookie('siteid');
- } else {
- $this->siteid = $GLOBALS['siteid'] = 1;
- }
- }
- }
- /**
- * 生成相关栏目列表、只生成前5页
- * @param $catid
- */
- public function create_relation_html($catid) {
- for($page = 1; $page < 6; $page++) {
- $this->category($catid,$page);
- }
- //检查当前栏目的父栏目,如果存在则生成
- $arrparentid = $this->categorys[$catid]['arrparentid'];
- if($arrparentid) {
- $arrparentid = explode(',', $arrparentid);
- foreach ($arrparentid as $catid) {
- if($catid) $this->category($catid,1);
- }
- }
- }
- }
|