123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- <?php
- /**
- * 易优CMS
- * ============================================================================
- * 版权所有 2016-2028 海南赞赞网络科技有限公司,并保留所有权利。
- * 网站地址: http://www.eyoucms.com
- * ----------------------------------------------------------------------------
- * 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
- * ============================================================================
- * Author: 小虎哥 <1105415366@qq.com>
- * Date: 2018-4-3
- */
- namespace app\common\logic;
-
- use think\Model;
- use think\Db;
-
- /**
- * 逻辑定义
- * @package common\Logic
- */
- load_trait('controller/Jump');
- class BuildhtmlLogic extends Model
- {
- use \traits\controller\Jump;
-
- /**
- * 初始化操作
- */
- public function _initialize() {
- parent::_initialize();
- }
-
- /*
- * 保存URL配置
- */
- public function seo_handle($post = [])
- {
- $param = $post;
- $inc_type = 'seo';
- $globalConfig = tpCache('global');
- $seo_pseudo_new = $param['seo_pseudo'];
-
- /*伪静态格式*/
- if (3 == $seo_pseudo_new && in_array($param['seo_rewrite_format'], [1,3,4])) {
- $param['seo_rewrite_format'] = !empty($param['seo_rewrite_view_format']) ? $param['seo_rewrite_view_format'] : 1;
- }
- /*--end*/
-
- /* 生成静态页面代码 */
- unset($param['seo_html_arcdir_limit']);
- if (!empty($param['seo_html_arcdir']) && !preg_match('/^([0-9a-zA-Z\_\-\/]+)$/i', $param['seo_html_arcdir'])) {
- $this->error('页面保存路径的格式错误!');
- }
- if (!empty($param['seo_html_arcdir'])) {
- if (preg_match('/^([0-9a-zA-Z\_\-\/]+)$/i', $param['seo_html_arcdir'])) {
- // $param['seo_html_arcdir'] = ROOT_DIR.'/'.trim($param['seo_html_arcdir'], '/');
- $param['seo_html_arcdir'] = '/'.trim($param['seo_html_arcdir'], '/');
- } else {
- $this->error('页面保存路径的格式错误!');
- }
- }
- $seo_html_arcdir_old = !empty($globalConfig['seo_html_arcdir']) ? $globalConfig['seo_html_arcdir'] : '';
- /* end */
-
- /*检测是否开启pathinfo模式*/
- try {
- if (3 == $seo_pseudo_new || (1 == $seo_pseudo_new && 2 == $param['seo_dynamic_format'])) {
- $fix_pathinfo = ini_get('cgi.fix_pathinfo');
- if (stristr(request()->host(), '.mylightsite.com')) {
- $this->error('腾讯云空间不支持伪静态!');
- } else if ('' != $fix_pathinfo && 0 === $fix_pathinfo) {
- $this->error('空间不支持伪静态,请开启pathinfo,或者在php.ini里修改cgi.fix_pathinfo=1');
- }
- }
- /* 生成静态页面代码 - URL模式切换时删掉根目录下的index.html静态文件 */
- if(1 == $seo_pseudo_new || 3 == $seo_pseudo_new){
- if(file_exists('./index.html')){
- @unlink('./index.html');
- }
- }
- /* end */
- } catch (\Exception $e) {}
- /*--end*/
-
- /*强制去除index.php*/
- if (isset($param['seo_force_inlet'])) {
- $seo_force_inlet = $param['seo_force_inlet'];
- $seo_force_inlet_old = !empty($globalConfig['seo_force_inlet']) ? $globalConfig['seo_force_inlet'] : '';
- if ($seo_force_inlet_old != $seo_force_inlet) {
- $param['seo_inlet'] = $seo_force_inlet;
- }
- }
- /*--end*/
-
- // 用于静态模式,发布编辑文档后更新
- $param['seo_uphtml_after_home'] = !empty($param['seo_uphtml_after_home']) ? $param['seo_uphtml_after_home'] : 0;
- $param['seo_uphtml_after_channel'] = !empty($param['seo_uphtml_after_channel']) ? $param['seo_uphtml_after_channel'] : 0;
- $param['seo_uphtml_after_pernext'] = !empty($param['seo_uphtml_after_pernext']) ? $param['seo_uphtml_after_pernext'] : 0;
- $param['seo_uphtml_editafter_home'] = !empty($param['seo_uphtml_editafter_home']) ? $param['seo_uphtml_editafter_home'] : 0;
- $param['seo_uphtml_editafter_channel'] = !empty($param['seo_uphtml_editafter_channel']) ? $param['seo_uphtml_editafter_channel'] : 0;
- $param['seo_uphtml_editafter_pernext'] = !empty($param['seo_uphtml_editafter_pernext']) ? $param['seo_uphtml_editafter_pernext'] : 0;
-
- // 用于动态、伪静态模式,在运营模式下 - 发布编辑文档后清除缓存
- $param['seo_uphtml_after_home13'] = !empty($param['seo_uphtml_after_home13']) ? $param['seo_uphtml_after_home13'] : 0;
- $param['seo_uphtml_after_channel13'] = !empty($param['seo_uphtml_after_channel13']) ? $param['seo_uphtml_after_channel13'] : 0;
- $param['seo_uphtml_after_pernext13'] = !empty($param['seo_uphtml_after_pernext13']) ? $param['seo_uphtml_after_pernext13'] : 0;
-
- /*多语言*/
- if (is_language()) {
- $seo_pseudo_lang = !empty($param['seo_pseudo_lang']) ? $param['seo_pseudo_lang'] : 1;
- unset($param['seo_pseudo_lang']);
- $langRow = \think\Db::name('language')->order('id asc')
- ->cache(true, EYOUCMS_CACHE_TIME, 'language')
- ->select();
- foreach ($langRow as $key => $val) {
- if (2 != $seo_pseudo_new) { // 非生成静态模式下,所有语言的URL模式一致
- tpCache($inc_type,$param,$val['mark']);
- } else {
- if($key == 0){ // 主体语言(第一个语言)是生成静态模式
- tpCache($inc_type,$param,$val['mark']);
- }else{//其他语言统一设置URL模式非静态模式
- $param['seo_pseudo'] = $seo_pseudo_lang;
- tpCache($inc_type,$param,$val['mark']);
- }
- }
- }
- } else {
- tpCache($inc_type,$param);
- }
- /*--end*/
- }
-
- /**
- * 生成静态专用 - 获取全部栏目的数据
- */
- public function get_arctype_all($field = '*')
- {
- $cacheKey = md5('common_buildhtmllogic_get_arctype_all_'.$field);
- $result = cache($cacheKey);
- if (empty($result)) {
- $result = Db::name('arctype')->field($field)->getAllWithIndex('id');
- cache($cacheKey, $result, null, 'arctype');
- }
-
- return !empty($result) ? $result : [];
- }
-
- /**
- * 生成静态专用 - 获取全部文档对应的栏目id
- */
- public function get_archives_all()
- {
- $empty_num = 0;
- $pagesize = 15000;
- for ($i=0; $i < 1000; $i++) {
- $result = [];
- $start = $i * $pagesize;
- $end = ($i + 1) * $pagesize;
- $field = 'aid,typeid';
- $row = Db::name('archives')->where([
- 'aid' => ['BETWEEN', [$start + 1, $end]],
- ])->field($field)->select();
- if (empty($row)) {
- if ($empty_num < 2) {
- $empty_num++;
- continue;
- } else {
- break;
- }
- }
-
- foreach ($row as $key => $val) {
- $result[$val['aid']] = $val['typeid'];
- }
-
- $cacheKey = "table_archives_{$start}_{$end}";
- cache($cacheKey, $result, null, 'archives');
- }
- }
-
- /**
- * 删除文档对应的html页面文件
- * @param array $aids [description]
- * @return [type] [description]
- */
- public function delViewHtml($aids = [], $globalConfig = [])
- {
- if (empty($globalConfig)) {
- $globalConfig = tpCache('global');
- }
- if (2 == $globalConfig['seo_pseudo']) {
- $info = Db::name('archives')->field('b.topid,b.dirpath,b.diy_dirpath,b.rulelist,b.ruleview,a.*')
- ->alias('a')
- ->join('__ARCTYPE__ b', 'a.typeid = b.id', 'LEFT')
- ->where([
- 'a.aid' => ['in', $aids],
- ])
- ->select();
-
- $seo_html_pagename = $globalConfig['seo_html_pagename'];
- foreach ($info as $key => $row) {
- $filename = $row['aid'];
- if (!empty($row['htmlfilename'])) {
- $filename = $row['htmlfilename'];
- }
- $dir = $this->getArticleDir($row, $globalConfig);
- if (4 == $seo_html_pagename) {
- if (!empty($row['ruleview'])) {
- $path = $dir;
- }else{
- $path = $dir . "/" . $filename . ".html";
- }
- } else {
- $path = $dir . "/" . $filename . ".html";
- }
-
- if (file_exists($path)) @unlink($path);
- }
- }
- }
-
- public function getArticleDir($row = [], $globalConfig = [])
- {
- if (empty($globalConfig)) {
- $globalConfig = tpCache('global');
- }
- $dir = "";
- $seo_html_pagename = $globalConfig['seo_html_pagename'];
- $seo_html_arcdir = $globalConfig['seo_html_arcdir'];
- $dirpath = !empty($row['dirpath']) ? $row['dirpath'] : '';
- $aid = !empty($row['htmlfilename']) ? $row['htmlfilename'] : $row['aid'];
- if ($seo_html_pagename == 1) {//存放顶级目录
- $dirpath_arr = explode('/', $dirpath);
- if (count($dirpath_arr) > 2) {
- $dir = '.' . $seo_html_arcdir . '/' . $dirpath_arr[1];
- } else {
- $dir = '.' . $seo_html_arcdir . $dirpath;
- }
- } else if ($seo_html_pagename == 3) { //存放子级目录
- $dirpath_arr = explode('/', $dirpath);
- if (count($dirpath_arr) > 2) {
- $dir = '.' . $seo_html_arcdir . '/' . end($dirpath_arr);
- } else {
- $dir = '.' . $seo_html_arcdir . $dirpath;
- }
- } else if ($seo_html_pagename == 4) { //自定义存放目录
- $dir = '.' . $seo_html_arcdir;
- $diy_dirpath = !empty($row['diy_dirpath']) ? $row['diy_dirpath'] : '';
- if (!empty($row['ruleview'])) {
- $y = $m = $d = 1;
- if (!empty($row['add_time'])) {
- $y = date('Y', $row['add_time']);
- $m = date('m', $row['add_time']);
- $d = date('d', $row['add_time']);
- }
- $ruleview = ltrim($row['ruleview'], '/');
- $ruleview = str_ireplace("{aid}", $aid, $ruleview);
- $ruleview = str_ireplace("{Y}", $y, $ruleview);
- $ruleview = str_ireplace("{M}", $m, $ruleview);
- $ruleview = str_ireplace("{D}", $d, $ruleview);
- $ruleview = preg_replace('/{(栏目目录|typedir)}(\/?)/i', $diy_dirpath.'/', $ruleview);
- $ruleview = '/'.ltrim($ruleview, '/');
- $dir .= $ruleview;
- }else{
- $dir .= $diy_dirpath;
- }
- } else { //存放父级目录
- $dir = '.' . $seo_html_arcdir . $dirpath;
- }
-
- return $dir;
- }
- }
|