'42', 'title'=>'SEO', 'name'=>DIRECTORY_SEPARATOR. config('adminconfig.admin_path').'/Seo/index?columnId=53','url'=>DIRECTORY_SEPARATOR. config('adminconfig.admin_path').'/Seo/index?columnId=53']); array_push($breadcrumb, ['id'=>'', 'title'=>'SEO设置', 'name'=>'','url'=>'javascript:void(0)']); View::assign("breadcrumb", $breadcrumb);//面包屑 View::assign("clickName", "SEO");//面包屑 //栏目列表 $columnLevels = ColumnLevel::select(); $this->level = 3; if(sizeof($columnLevels) > 0){ $this->level = $columnLevels[0]['level']; } $columns = \app\common\model\Column::where('level', '<=' , $this->level)->where([['lang', '=', $this->getMyLang()]])->order('sort ASC,id DESC')->select(); $columnList = $this->channelLevel($columns); array_unshift($columnList, ["columnName"=>"所有栏目", "columnId"=>-1]); View::assign("columnList", $columnList); //获取静态文件存放目录 $basic = getBasic(); if($basic){ $home_lang = xn_cfg("base.home_lang");//默认语言 $cur_lang = $this->getMyLang(); if($cur_lang == $home_lang){ if(!empty($basic["html_save_path"])){ $this->html_save_path = $basic["html_save_path"]; }else{ $this->html_save_path = "html"; } }else{ $this->html_save_path = "{$cur_lang}"; } $this->rootUrl = $this->domain; if(!empty($basic["mobile_domain"])){ $this->mobileUrl = "/".$basic["mobile_domain"]; } } View::assign("html_save_path", $this->html_save_path); $this->view_suffix = config('view.view_suffix'); $this->home_lang = xn_cfg("base.home_lang"); } private function config($content, $file){ if(file_exists($file)){ $dh = file_get_contents($file); if (empty($dh)){ $dh = file_put_contents($file,$content); } }else{ $dh = file_put_contents($file,$content); } if(!$dh){ $this->error("生成伪静态配置失败,请手动配置"); } } // 伪静态状态修改 public function pseudoUpdate(){ $param = $this->request->param(); $data = xn_cfg("seo"); $data['pseudo_status'] = $param['pseudo_status']; $this->_set($data); if($param['pseudo_status'] == 1){//开启伪静态配置,且生成配置 $serverSoftware = strtolower($_SERVER['SERVER_SOFTWARE']) ?? ''; if (strpos($serverSoftware, 'apache') !== false) { $wFile = root_path().".htaccess"; $contet = ' Options +FollowSymlinks -Multiviews RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] '; $this->config($contet, $wFile); $this->success("Apache服务器伪静配置生成成功"); } elseif (strpos($serverSoftware, 'nginx') !== false) { $this->success("Nginx服务请手动配置"); } elseif (strpos($serverSoftware, 'iis') !== false) { $wFile = root_path()."/web.config"; $contet = ' '; $this->config($contet, $wFile); $this->success("IIS服务器伪静配置生成成功"); } } $this->success("操作成功"); } public function index(){ //生成路由 //1:动态url,2:伪静态化,3:静态页面 $seo = xn_cfg("seo"); View::assign("url_model", $seo['url_model']); View::assign("column_page", $seo['column_page']); View::assign("document_page", $seo['document_page']); View::assign("pseudo_status", $seo['pseudo_status']); $webServer = strtolower($_SERVER['SERVER_SOFTWARE']); if (stristr($webServer, 'apache')) { $webServer = 'apache'; } else if (stristr($webServer, 'iis')) { $webServer = 'iis'; } else if (stristr($webServer, 'nginx')) { $webServer = 'nginx'; }else{ $webServer = 'other'; } View::assign("webServer", $webServer); return view(); } // 返回多层栏目 private function channelLevel($dataArr, $pid = 0, $fieldPri = 'id', $fieldPid = 'pid', $level = 1) { if (empty($dataArr)) { return array(); } $rArr = []; foreach ($dataArr as $v) { if ($v[$fieldPid] == $pid) { $arr = array(); $arr['columnId'] = $v->id; $arr['columnName'] = $v->name; $arr['isShow'] = $v->status; $arr['columnSort'] = $v->sort; $arr['level'] = $level; $arr['children'] = self::channelLevel($dataArr, $v[$fieldPri], $fieldPri, $fieldPid, $level + 1); foreach ($this->modelRecords as $k=>$vo){ if($vo->id == $v->column_model){ $arr['modelTitle'] = $vo->title; break; } } array_push($rArr, $arr); } } return $rArr; } // 获取栏目页顺序 private function getColumns($dataArr, $pid = 0, $fieldPri = 'id', $fieldPid = 'pid', $level = 1) { foreach ($dataArr as $v) { if ($v[$fieldPid] == $pid) { array_push($this->pageColumnList, $v); self::getColumns($dataArr, $v[$fieldPri], $fieldPri, $fieldPid, $level + 1); } } } // 获取生成静态文件数 private function getBuildCount($columns){ foreach ($columns as $column){ $this->buildCount +=1;//栏目数 if($column['column_model'] == "formmodel"){//特殊的表单模型处理 continue; } if($column["column_attr"] == 0){//内容栏目 $this->buildCount += Db::name($column['column_model'])->where(['column_id'=>$column['id']])->count(); }elseif ($column["column_attr"] == 2){//内联栏目 $inner_column = $column['inner_column'];//内联栏目id if(!empty($inner_column)){ $innerColumn = \app\common\model\Column::field("column_model")->find($inner_column); $this->buildCount += Db::name($innerColumn['column_model'])->where(['column_id'=>$inner_column])->count(); } } } } // 生成静态html文件 public function allSite(){ //生成路由 //1:动态url,2:伪静态化,3:静态页面 $param = $this->request->param(); if(array_key_exists("first", $param)){//第一次请求 //直接修改为静态化页面 try{ $data = xn_cfg("seo"); $data['url_model'] = 3; $data['column_page'] = $param['column_page']; $data['document_page'] = $param['document_page']; $this->_set($data); xn_add_admin_log('seo写入--'.json_encode($data), "seo"); Cache::clear(); }catch (\Exception $e) { } $this->pageColumnList = []; $oneId = $param["oneId"]; if($oneId == "key1" || $oneId == "key3"){//整站页面 if(($oneId == "key1") || ($oneId == "key3" && array_key_exists("columnId", $param) && $param["columnId"] == -1)){ //生成网站地图 try{ (new SitemapUtil())->generateSitemap('all',$this->domain,$this->getMyLang()); }catch (\Exception $e){} //生成首页 // $htmlpath = (root_path()."/"); try{ $this->buildHtml("", "column", "index", "", "index", null); }catch (\Exception $e) { $this->error("创建静态文件失败". $e->getMessage()); } //生成tag静态 try{ $htmlpathT = root_path()."/{$this->html_save_path}/tag"; $this->buildTagHtml($htmlpathT); }catch (\Exception $e) { $this->error("创建生ag静态文件失败". $e->getMessage()); } $columns = \app\common\model\Column::where('level', '<=' , $this->level)->where([['lang', '=', $this->getMyLang()]])->order('sort asc,id asc')->select(); if(sizeof($columns) > 0){ $this->getColumns($columns);//重新栏目数组 $this->getBuildCount($this->pageColumnList);//获取生成静态文件数 $firstColumn = $this->pageColumnList[0];//第一个栏目 $this->buildColumn($firstColumn);//生成静态栏目页 //缓存栏目 saveToCache(Session::getId()."_pageColumnList", json_encode($this->pageColumnList), 0); saveToCache(Session::getId()."_buildCount", $this->buildCount, 0); $this->success("继续创建静态文件", "", ['index'=>1, "detail_index"=>0, "curColumnIndex"=>0, "columnId"=>$firstColumn["id"], "buildCount"=>$this->buildCount,"flag"=>"column"]); }else{ $this->error("没有栏目数据"); } }elseif($oneId == "key3" && array_key_exists("columnId", $param) && $param["columnId"] != -1){ $columnsUp = get_column_up(intval($param["columnId"]), "", $this->getMyLang()); $columnsDown = get_column_down(intval($param["columnId"]), "", $this->getMyLang()); $columns = array_merge($columnsUp, $columnsDown); $columns = my_array_unique($columns); if(sizeof($columns) > 0){ $this->getColumns($columns);//重新栏目数组 $this->getBuildCount($this->pageColumnList);//获取生成静态文件数 $firstColumn = $this->pageColumnList[0];//第一个栏目 $this->buildColumn($firstColumn); //缓存栏目 saveToCache(Session::getId()."_pageColumnList", json_encode($this->pageColumnList), 0); saveToCache(Session::getId()."_buildCount", $this->buildCount, 0); $this->success("继续创建静态文件", "", ['index'=>1, "detail_index"=>0, "curColumnIndex"=>0, "columnId"=>$firstColumn["id"], "buildCount"=>$this->buildCount,"flag"=>"column"]); }else{ $this->error("没有栏目数据"); } } }elseif ($oneId == "key2"){//首页 //生成网站地图 try{ (new SitemapUtil())->generateSitemap('all',$this->domain, $this->getMyLang()); }catch (\Exception $e){} // $htmlpath = (root_path()."/"); try{ $r = $this->buildHtml("", "column", "index", "", "index", null); }catch (\Exception $e) { $this->error("创建静态文件失败". $e->getMessage()); } $this->success("创建静态文件成功"); } }else{//继续 $curColumnIndex = $param["curColumnIndex"]; $index = $param["index"]; if(empty($curColumnIndex) && $curColumnIndex != 0){ //清除缓存栏目 saveToCache(Session::getId()."_pageColumnList", null); saveToCache(Session::getId()."_buildCount", null); $this->error("继续生产静态文件,参数失败!"); } $curColumnIndex = intval($curColumnIndex); $index = intval($index); //获取静态文件总数 $buildCountStr = saveToCache(Session::getId()."_buildCount"); $buildCount = intval($buildCountStr); //清除缓存栏目 $pageColumnListStr = saveToCache(Session::getId()."_pageColumnList"); $this->pageColumnList = json_decode($pageColumnListStr); if($curColumnIndex >= sizeof($this->pageColumnList)){ //清除缓存栏目 saveToCache(Session::getId()."_buildCount", null); saveToCache(Session::getId()."_pageColumnList", null); $this->success("创建静态完成"); } $detail_index = intval($param["detail_index"]); if($detail_index > -1){ $curColumn = $this->pageColumnList[$curColumnIndex];//当前栏目 $curColumn = get_object_vars($curColumn);//对象转数组 $detail_index = $this->buildDetail($curColumn, $detail_index); if($detail_index > 0){ $index += $detail_index; } $this->success("继续生成静态文档文件", "", ['index'=>$index, "detail_index"=>$detail_index, "curColumnIndex"=>$curColumnIndex, "columnId"=>$curColumn["id"], "buildCount"=>$buildCount,"flag"=>"detail"]); }else{ $curColumnIndex = $curColumnIndex+1; if($curColumnIndex >= sizeof($this->pageColumnList)){ //清除缓存栏目 saveToCache(Session::getId()."_pageColumnList", null); saveToCache(Session::getId()."_buildCount", null); $this->success("创建静态完成"); } $curColumn = $this->pageColumnList[intval($curColumnIndex)];//当前栏目 $curColumn = get_object_vars($curColumn);//对象转数组 $this->buildColumn($curColumn); $this->success("继续生成静态栏目文件", "", ['index'=>($index+1), "detail_index"=>0, "curColumnIndex"=>$curColumnIndex, "columnId"=>$curColumn["id"], "buildCount"=>$buildCount,"flag"=>"column"] ); } } } // 找到父类路径 private function getParent($pid){ foreach ($this->pageColumnList as $pageC){ if($pid == $pageC->id){ return $pageC; } } return []; } // 获取生产静态文件路径 private function getBuildPath($column, $flag=1){ // $htmlpathC = root_path()."/{$column['lang']}/"; $htmlpathC = root_path()."/{$this->html_save_path}/"; $pid = $column["pid"]; if($pid == 0){//说明是子栏目 $htmlpathC = $htmlpathC.$column["dir_path"]."/"; return $htmlpathC; } if($flag == 0){//不全路径 //子栏目存放路径 while ($pid != 0){ $pColumn = $this->getParent($pid); if($pColumn->pid != 0){ $pid = $pColumn->pid; }else{ $htmlpathC = $htmlpathC.$pColumn->dir_path."/"; $pid = 0; } } }elseif ($flag == 1){//全路径 $parentPathArr = []; while ($pid != 0){ $pColumn = $this->getParent($pid); array_push($parentPathArr, $pColumn->dir_path); if($pColumn->pid != 0){ $pid = $pColumn->pid; }else{ $pid = 0; } } $parentPathArr = array_reverse($parentPathArr); $htmlpathC = $htmlpathC.implode("", $parentPathArr)."/".$column["dir_path"]."/"; } return $htmlpathC; } // 检查生成静态文件栏目是否规范 private function checkBuildColumn($column){ if(empty($column['column_template'])){ $this->error("栏目id为{$column['id']}的模板数据为空","", ['flag'=>"column", "column"=>$column]); } $tempHtml = "list_images.{$this->view_suffix}"; if(!empty($column['column_template'])){ $tempHtml = $column['column_template']; } $template = $this->templateHtml . $tempHtml; if(!file_exists($template)){ $this->error("栏目id为{$column['id']}的模板文件未找到","", ['flag'=>"column", "column"=>$column]); } } // 创建栏目及详情静态 private function buildColumn($column){ if($column["column_attr"] == 0){//内容栏目 $this->checkBuildColumn($column); }elseif ($column["column_attr"] == 2){//内联栏目 $inner_column = $column['inner_column'];//内联栏目id $innerColumn = \app\common\model\Column::find($inner_column); $this->checkBuildColumn($innerColumn); } $pid = $column["pid"];//父id $column_model = $column['column_model'];//模型 $columnId = $column["id"]; //创建栏目模板 //栏目 $column_page = xn_cfg("seo.column_page");//栏目生成方式 $htmlfile = "index"; if($column_page == 1 && $pid != 0){ $htmlfile = "list_".$column['id'];//子栏目名称 $htmlpathC = $this->getBuildPath($column, 0); }else{ $htmlpathC = $this->getBuildPath($column); } $this->buildHtml($columnId, $column_model, $htmlfile, $htmlpathC, "column", $column); } // 生成详情 private function buildDetail($column, $detail_index){ $column_model = $column['column_model'];//模型 if($column_model == "formmodel"){//特殊的表单模型处理 return -1; } $pageDetailListStrList = []; if($column["column_attr"] == 0){//内容栏目 $pageDetailListStrList = Db::name($column_model)->where("column_id", intval($column['id']))->select(); }elseif ($column["column_attr"] == 1){//外链栏目 return -1; }elseif ($column["column_attr"] == 2){//内联栏目 $inner_column = $column['inner_column'];//内联栏目id $innerColumn = \app\common\model\Column::find($inner_column); $column_model = $innerColumn['column_model']; $pageDetailListStrList = Db::name($column_model)->where("column_id", intval($column['id']))->select(); $column = $innerColumn; } $rm = \app\common\model\ModelRecord::where(["nid"=>$column_model, "reference_model"=>0])->find(); if(!$rm){ return -1; } if($detail_index >= sizeof($pageDetailListStrList)){ return -1; }else{ //创建模型即详情 $document_page = xn_cfg("seo.document_page");//文档生成方式 $htmlpathM = $this->getBuildPath($column); $jIndex = 1; for ($detail_index; $detail_index < sizeof($pageDetailListStrList); $detail_index++){ if($jIndex <= 5){ $modelData = $pageDetailListStrList[$detail_index]; if($document_page == 1){ $htmlpathD = $htmlpathM."/".foxDate("Ymd", $modelData["create_time"])."/"; }else{ $htmlpathD = $htmlpathM; } $this->buildHtml($modelData["id"], $column_model, $modelData["id"], $htmlpathD, "detail", $column); $jIndex++; }else{ break; } } return $detail_index; } } // 生成html静态文件 private function buildHtml($id, $column_model="", $htmlfile = '', $htmlpath = '', $flag="", $column=null){ $lang_flag = ""; if($column != null){ $home_lang = xn_cfg("base.home_lang");//默认语言 $lang_flag = $column['lang']; if($lang_flag == $home_lang){ $lang_flag = ""; } } $htmlpath = !empty($htmlpath) ? $htmlpath:(root_path()."/{$this->html_save_path}/"); $htmlpath = replaceSymbol($htmlpath); if(!tp_mkdir($htmlpath)){ return "创建文件夹失败"; } if($flag=="column"||$flag=="detail"){ if($flag == "column"){//栏目 $relationUrl = replaceSymbol("/{$lang_flag}/{$column_model}/index/{$id}"); $url = $this->rootUrl.url("{$relationUrl}"); $relationUrl = url($relationUrl); if($column != null){ $limit_column = $column["limit_column"]; $data_limit = $column["data_limit"]; $isSelf = true; if($column["column_attr"] == 1){//外部链接 $url = $column["out_link_head"].$column["out_link"]; $isSelf = false; }elseif ($column["column_attr"] == 2){//内链栏目 $innerColumn = \app\common\model\Column::find($column["inner_column"]); $cur_url = replaceSymbol("/{$lang_flag}/{$innerColumn['column_model']}/index/{$innerColumn['id']}"); $url = $this->rootUrl.url("{$cur_url}"); $column_model = $innerColumn['column_model']; $id = $innerColumn['id']; $limit_column = $innerColumn["limit_column"]; $data_limit = $innerColumn["data_limit"]; } if($isSelf){//可能存在分页 $tempHtml = "list_{$column["column_model"]}.{$this->view_suffix}"; if(!empty($column["column_template"])){ $tempHtml = $column['column_template']; } $template = $this->templateHtml . $tempHtml; $fileContent = file_get_contents($template); $param = getPageList($fileContent);//获取页面中分页的分页标签配置 if(sizeof($param) > 0){ $typeid = $param['typeid']; if(empty($typeid)){ if($data_limit == 1){//仅本栏目 $typeid = (string)$id; }elseif ($data_limit == 2){//本栏目及下级栏目 $typeid = $limit_column; }elseif ($data_limit == 3){//本栏目及指定子栏目 $typeid = $limit_column; } } $columnModel = $column_model; $flag = $param["flag"]; $orderby = $param['orderby']??'create_time';//默认发布时间排序 $orderway = $param['orderway']??'desc';//默认排序方式 倒序 $ob = $orderby.' '.$orderway;//排序 $page= 1; $pagesize= $param["pagesize"]??99999; $notypeid= $param["notypeid"]; $param['typeid'] = $typeid; $param['columnModel'] = $columnModel; $rdata= (new TagList())->getList($param, $flag, $ob, $page, $pagesize, $notypeid); if(sizeof($rdata) > 0){ $last_page = $rdata["last_page"];//最后一页 if($last_page >= 2){//第二页开始生成分页 for ($i=2; $i <= $last_page; $i++){ $cur_url = replaceSymbol("/{$lang_flag}/{$column_model}/index/{$id}"); $url_page = replaceSymbol($this->rootUrl.url("{$cur_url}"))."?page={$i}"; $relationurl_page = url("{$cur_url}")."?page={$i}"; $url_page = replaceSymbol($url_page); $content_page = get_url_content($url_page); $content_page = $this->pc_to_mobile_js($content_page, $relationurl_page);//生成静态模式下且PC和移动端模板分离,就自动给PC端加上跳转移动端的JS代码 $htmlfile_page = $htmlpath ."{$id}_{$i}". '.'.$this->view_suffix; @file_put_contents($htmlfile_page, $content_page); } } } } } } }else{//详情 $cur_url = replaceSymbol("/{$lang_flag}/{$column_model}/detail/{$id}"); $url = $this->rootUrl.url($cur_url); $relationUrl = url($cur_url); } $htmlfile = $htmlpath . $htmlfile . '.'.$this->view_suffix; $url = replaceSymbol($url); $content = get_url_content($url); $content = $this->pc_to_mobile_js($content, $relationUrl);//生成静态模式下且PC和移动端模板分离,就自动给PC端加上跳转移动端的JS代码 @file_put_contents($htmlfile, $content); }elseif($flag=="index"){//首页 $this->buildIndexHtml($htmlpath, $this->view_suffix); } } private function buildIndexHtml($htmlpath){ $langList = []; try{ $langList = Db::name('lang')->where('status',1)->where('lang', $this->getMyLang())->cache(true)->select()->toArray(); }catch (\Exception $e){ } $home_lang = xn_cfg("base.home_lang");//默认语言 if(sizeof($langList) <= 0){ array_push($langList, ['lang'=>$home_lang]); } foreach ($langList as $key=>$item){ $curLang = "_".$item['lang']; if($home_lang == $item['lang']){ $curLang = ""; } $url = $this->rootUrl.resetIndexUrl("/index", $item['lang']); $url = replaceSymbol($url); $content = get_url_content($url); $content = $this->pc_to_mobile_js($content, $url);//生成静态模式下且PC和移动端模板分离,就自动给PC端加上跳转移动端的JS代码 $htmlfile = $htmlpath . "index". '.'.$this->view_suffix; $htmlfile = replaceSymbol($htmlfile); @file_put_contents($htmlfile, $content); if(empty($curLang)){//默认语言 $targetFile = root_path()."/index".'.'.$this->view_suffix; copyFile($htmlfile, $targetFile); } } } // 生成静态模式下且PC和移动端模板分离 private function pc_to_mobile_js($html = '', $url) { if (preg_match('/(http:\/\/)|(https:\/\/)/i', $url)) {//判断是否存在 $url = $url; }else{ $domain = $this->rootUrl;//域名 if(!empty($this->mobileUrl)){ $domain = $this->mobileUrl; } $url = $domain.$url; } $url = replaceSymbol($url); if($this->templateType == 3){//模板类型 1、只有电脑端; 2、只有移动端; 3、有电脑端和移动端; 4、自适应 $jsStr = << let os = function() { let ua = navigator.userAgent, isWindowsPhone = /(?:Windows Phone)/.test(ua), isSymbian = /(?:SymbianOS)/.test(ua) || isWindowsPhone, isAndroid = /(?:Android)/.test(ua), isFireFox = /(?:Firefox)/.test(ua), isChrome = /(?:Chrome|CriOS)/.test(ua), isTablet = /(?:iPad|PlayBook)/.test(ua) || (isAndroid && !/(?:Mobile)/.test(ua)) || (isFireFox && /(?:Tablet)/.test(ua)), isPhone = /(?:iPhone)/.test(ua) && !isTablet, isPc = !isPhone && !isAndroid && !isSymbian; return { isTablet: isTablet, isPhone: isPhone, isAndroid: isAndroid, isPc: isPc }; }(); if (os.isAndroid || os.isPhone || os.isTablet) { // 手机或者平板 window.location.href = "{$url}"; } EOF; $html = str_ireplace('', $jsStr . "\n", $html); return $html; } else { // 模板类型为 1、2 或 4,直接返回 $html,不做任何修改 return $html; } } public function save(){ $param = $this->request->param(); //保存配置到文件 // $data = ["url_model"=> $param['status'], "column_page"=> $param['column_page'], "document_page"=> $param['document_page']]; $this->_set($param); xn_add_admin_log('SEO保存配置', "seo"); Cache::clear(); $this->success("成功"); } // 写入配置文件 protected function _set($param, $filename="seo") { if( is_array($param) && !empty($param)) { $file = config_path() . $this->folder. "/" . $filename . '.php'; $str = "$val) { $str .= "\t'$key' => '$val',"; $str .= "\r\n"; } $str .= '];'; file_put_contents($file, $str); } } // 生成静态标签 private function buildTagHtml($htmlpath = ''){ $htmlpath = !empty($htmlpath) ? $htmlpath:(root_path()."/{$this->html_save_path}/"); if(!tp_mkdir($htmlpath)){ return "创建文件夹失败"; } $view_suffix = config('view.view_suffix'); //标签首页 $template = $this->templateHtml . "index_tag.{$view_suffix}"; if(file_exists($template)) {//存在的话额外生成 $url = "{$this->rootUrl}/Tag/index"; $relationUrl = "/Tag/index"; $htmlfile = $htmlpath . 'index.' . $view_suffix; $url = replaceSymbol($url); $content = get_url_content($url); $content = $this->pc_to_mobile_js($content, $relationUrl);//生成静态模式下且PC和移动端模板分离,就自动给PC端加上跳转移动端的JS代码 @file_put_contents($htmlfile, $content); } //标签列表 $templateL = $this->templateHtml . "list_tag.{$view_suffix}"; if(file_exists($templateL)) {//存在的话额外生成 $tagList = \app\common\model\Tag::select(); foreach ($tagList as $tag){ $urlL = "{$this->rootUrl}/Tag/list/{$tag['id']}".".".$view_suffix; $relationUrlL = "/Tag/list/{$tag['id']}".".".$view_suffix; $htmlfileL = $htmlpath . $tag['id'] . '.'.$view_suffix; $urlL = replaceSymbol($urlL); $contentL = get_url_content($urlL); $contentL = $this->pc_to_mobile_js($contentL, $relationUrlL);//生成静态模式下且PC和移动端模板分离,就自动给PC端加上跳转移动端的JS代码 @file_put_contents($htmlfileL, $contentL); } } } // 单独生成导航栏目 public function singleAllSite(){ //生成路由 //1:动态url,2:伪静态化,3:静态页面 $param = $this->request->param(); if(array_key_exists("first", $param)){//第一次请求 //生成首页 // $htmlpath = (root_path()."/"); try{ $this->buildHtml("", "column", "index", "", "index"); }catch (\Exception $e) { $this->error("创建静态首页文件失败". $e->getMessage()); } $this->pageColumnList = []; $columnId = intval($param["columnId"]); $columnsUp = get_column_up($columnId, "", $this->getMyLang()); $columnsDown = get_column_down($columnId, "", $this->getMyLang()); $columns = array_merge($columnsUp, $columnsDown); $columns = my_array_unique($columns); if(sizeof($columns) > 0){ $this->getColumns($columns);//重新组织数组 $firstColumn = $this->pageColumnList[0];//第一个栏目 $this->buildColumn($firstColumn); //缓存栏目 saveToCache(Session::getId()."_pageColumnList", json_encode($this->pageColumnList)); $this->success("继续创建静态文件", "", ['index'=>1, "detail_index"=>0, "curColumnIndex"=>0]); }else{ $this->error("没有栏目数据"); } }else{//继续 $curColumnIndex = $param["curColumnIndex"]; $index = $param["index"]; if(empty($curColumnIndex) && $curColumnIndex != 0){ //清除缓存栏目 saveToCache(Session::getId()."_pageColumnList", null); $this->error("继续生产静态文件,参数失败!"); } $curColumnIndex = intval($curColumnIndex); $index = intval($index); //清除缓存栏目 $pageColumnListStr = saveToCache(Session::getId()."_pageColumnList"); $this->pageColumnList = json_decode($pageColumnListStr); if($curColumnIndex >= sizeof($this->pageColumnList)){ //清除缓存栏目 saveToCache(Session::getId()."_pageColumnList", null); $this->success("创建静态完成"); } if($index >= sizeof($this->pageColumnList)){ //清除缓存栏目 saveToCache(Session::getId()."_pageColumnList", null); $this->success("创建静态完成"); } $curColumn = $this->pageColumnList[intval($index)];//当前栏目 $curColumn = get_object_vars($curColumn);//对象转数组 $this->buildColumn($curColumn); $this->success("继续生产静态栏目文件", "", ['index'=>($index+1), 'detail_index'=> 0, "curColumnIndex"=> $index ] ); } } // 添加文章等数据后更新静态文件 public function addDataBuildDetail(){ $param = $this->request->param(); if(empty($param["id"]) || empty($param["column_model"])){ $this->error("缺少参数,生成详情失败"); } $id = $param["id"]; $column_model = $param['column_model'];//模型 $modelData = Db::name($column_model)->find(intval($id)); if(!$modelData){ $this->error("没有查到数据"); } $columnId = $modelData["column_id"]; $column = \app\common\model\Column::find($columnId); if(!$column){ $this->error("没有查到栏目数据"); } $seoArr = xn_cfg("seo"); //创建模型即详情 $document_page = $seoArr["document_page"];//文档生成方式 $columnList = get_column_up($columnId, "", $this->getMyLang()); $htmlpathM = ""; foreach ($columnList as $column2){ $htmlpathM .= "/".$column2["dir_path"]; } if($document_page == 1){ $htmlpathD = $htmlpathM."/".foxDate("Ymd", $modelData["create_time"])."/"; }else{ $htmlpathD = $htmlpathM; } $htmlpathD = root_path()."/{$this->html_save_path}/".$htmlpathD."/"; $htmlpathD = replaceSymbol(replaceSymbol($htmlpathD)); $rInfo = $this->buildHtml($modelData["id"], $column_model, $modelData["id"], $htmlpathD, "detail"); $this->success("生成成功4--".$rInfo."------"); } }