', 1]); } //查询模型 $mrList = ModelRecord::field("table, nid")->where(['is_delete'=>0, 'status'=>1, "reference_model"=>0])->select(); //查询栏目 $curlang = xn_cfg("base.lang"); if(empty($lang)){ $lang = $curlang; } array_push($where, ['lang', '=', $lang]); $columns = Column::where($where)->order('level asc')->order('sort asc')->select(); $view_suffix = config('view.view_suffix'); if($url_model == 3){//静态化页面 $indexUrl = $domain; }else{ $indexUrl = $domain."index.{$view_suffix}"; } if($type == "xml"){ $this->xml_sitemap($columns, $indexUrl, $view_suffix, $mrList, $frequencys, $levels, $domain, $lang); }elseif ($type == "txt"){ $this->txt_sitemap($columns, $mrList, $indexUrl, $domain, $lang); }elseif ($type == "html"){ return $this->html_sitemap($columns, $mrList, $view_suffix, $domain, $lang); }elseif($type == "all"){//生成全部网站地图 $this->txt_sitemap($columns, $mrList, $indexUrl, $domain, $lang); $this->xml_sitemap($columns, $indexUrl, $view_suffix, $mrList, $frequencys, $levels, $domain, $lang); $this->html_sitemap($columns, $mrList, $view_suffix, $domain, $lang); } } /** * 生成xml网站地图 */ private function xml_sitemap($columns, $indexUrl, $view_suffix, $mrList, $frequencys, $levels, $domain, $lang){ $sitemap = new \app\common\util\SitemapXmlUtil($domain); $home_lang = xn_cfg("base.home_lang");//默认语言 if($home_lang == $lang){ $xmlFile = "sitemap"; }else{ $xmlFile = $lang."/sitemap"; } $sitemap->setXmlFile($xmlFile); $sitemap->addItem($indexUrl, $levels[0], $frequencys[0], 'Today'); foreach ($columns as $column){ $column['visit_lang'] = $lang; $columnUrl = getColumnUrl($column); $columnUrl = $this->addPrefix($columnUrl, $domain); $columnUrl = replaceSymbol($columnUrl); $sitemap->addItem($columnUrl, $levels[1], $frequencys[1], strtotime($column['update_time'])); $column_model = $column['column_model']; $is_find = false; foreach ($mrList as $mr){ if($mr['nid'] == $column_model){ $is_find = true; break; } } if($is_find){ $column_id = $column["id"]; if ($column["column_attr"] == 2){//内链栏目 $column_id = $column['inner_column']; } $dataList = Db::name($column_model)->where('column_id', $column_id)->select();//数据列表 foreach ($dataList as $data){ $path = "/{$column_model}/detail"; $detailUrl = detailSetUrl($path, $data['id'], $data['column_id'], $column_model, $lang); $detailUrl = $this->addPrefix($detailUrl, $domain); $detailUrl = replaceSymbol($detailUrl); $sitemap->addItem($detailUrl, $levels[2], $frequencys[2], strtotime($data['release_time'])); } } } $sitemap->endSitemap(); } /** * 生成txt网站地图 */ private function txt_sitemap($columns, $mrList, $indexUrl, $domain, $lang=""){ $datas = []; array_push($datas, $indexUrl);//首页 foreach ($columns as $column){ $column['visit_lang'] = $lang; $columnUrl = getColumnUrl($column); $columnUrl = $this->addPrefix($columnUrl, $domain); $columnUrl = replaceSymbol($columnUrl); array_push($datas, $columnUrl); $column_model = $column['column_model']; $is_find = false; foreach ($mrList as $mr){ if($mr['nid'] == $column_model){ $is_find = true; break; } } if($is_find){ $column_id = $column["id"]; if ($column["column_attr"] == 2){//内链栏目 $column_id = $column['inner_column']; } $dataList = Db::name($column_model)->where('column_id', $column_id)->select();//数据列表 foreach ($dataList as $data){ $path = "/{$column_model}/detail"; $detailUrl = detailSetUrl($path, $data['id'], $data['column_id'], $column_model, $lang); $detailUrl = $this->addPrefix($detailUrl, $domain); $detailUrl = replaceSymbol($detailUrl); array_push($datas, $detailUrl); } } } $home_lang = xn_cfg("base.home_lang");//默认语言 if($home_lang == $lang){ $filename = "sitemap.txt"; }else{ $filename = $lang."/sitemap.txt"; } $data = implode("\r\n", $datas); @file_put_contents($filename, $data); } /** * 生成html网站地图 */ private function html_sitemap($columns, $mrList, $view_suffix, $domain, $lang=""){ $home_lang = xn_cfg("base.home_lang");//默认语言 if($home_lang == $lang){ $filename = "sitemap.{$view_suffix}"; }else{ $filename = $lang."/sitemap.{$view_suffix}"; } $sitemapUrl = root_path()."/app/home/view/sitemap.{$view_suffix}"; //网站基本信息 $basic = []; $basicArr = BasicModel::where(['lang'=>$lang])->select()->toArray(); $basicN = [];//基本属性返回 if(sizeof($basicArr) > 0) { $basic = $basicArr[0]; $basicN['keyword']= $basic['keyword']; $basicN['description']= $basic['description']; } $contactArr = ContactModel::where([['lang', '=', $lang]])->field('company_tel')->select()->toArray(); $contact = []; if(sizeof($contactArr) > 0) { $contact = $contactArr[0]; } $basicN['logo']= $basic['web_logo']??"/static/404/images/foxcms_logo.svg"; //查询栏目数据 $navs = [];//顶层栏目 foreach ($columns as $column){ $column['visit_lang'] = $lang; if($column['pid'] == 0){ $columnUrl = getColumnUrl($column); $columnUrl = $this->addPrefix($columnUrl, $domain); $column['link'] = replaceSymbol($columnUrl); array_push($navs, $column); } } $columnList = $this->channelLevel($domain, $columns);//排序好栏目 //栏目列表 foreach ($columns as $key=>$column){ $column_model = $column['column_model']; $is_find = false; foreach ($mrList as $mr){ if($mr['nid'] == $column_model){ $is_find = true; break; } } if($is_find){ $column_id = $column["id"]; if ($column["column_attr"] == 2){//内链栏目 $column_id = $column['inner_column']; } $dataList = Db::name($column_model)->where('column_id', $column_id)->where('lang', $lang)->select();//数据列表 foreach ($dataList as $kkey=>$data){ $path = "/{$column_model}/detail"; $detailUrl = detailSetUrl($path, $data['id'], $data['column_id'], $column_model, $lang); $detailUrl = $this->addPrefix($detailUrl, $domain); $detailUrl = replaceSymbol($detailUrl); $data['link'] = $detailUrl; $dataList[$kkey] = $data; } $column['data_list'] = $dataList; $columns[$key] = $column; } } $columnArticleList = $this->channelLevel($domain,$columns);//栏目文章数据列表 $caList = [];//返回栏目数据列表 foreach ($columnArticleList as $ca){ $this->cycleColumn($ca, $caList); } $content = View::fetch($sitemapUrl); $content = str_replace("__basic.logo__", $basicN['logo'], $content); $nav_content = ""; foreach ($navs as $k=>$vo){ $nav_content .= '