生成sitemap核心代码

作者: xahy 分类: 笔记 发布时间: 2019-07-30 17:47

生成sitemap:

/****
 * 生成sitemap
 * @param string $changefreq 更新频率:always 一直更新、hourly 小时、daily 天、weekly 周、monthly 月、yearly 年、never 从不更新
 * @return int
 */
private function set_sitemap($changefreq = 'always'){
    try{
        ///baseURL
        $site_url = config('admin.site_url');
        if(empty($site_url)){
            $site_url = request()->domain();
        }
        $site_url = trim($site_url,'/').'/';
        $sitemap_str  = '<?xml version="1.0" encoding="UTF-8"?>';
        $sitemap_str .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
        $sitemap_str .= '<url>';
        $sitemap_str .= '<loc>'.$site_url.'</loc>';
        $sitemap_str .= '<lastmod>'.date('Y-m-d').'</lastmod>';
        $sitemap_str .= '<changefreq>daily</changefreq>';
        $sitemap_str .= '<priority>1.0</priority>';
        $sitemap_str .= '</url>';

        ///文章
        $NewsModel = model('common/News');
        $news = $NewsModel->getNewsLimitData();
        foreach ($news as $new) {
            if(empty($new)){ continue; }
            $new_url = trim($site_url,'/').'/category/'.$new['id'];
            if(!isset($new['update_time']) || empty($new['update_time'])){ $new['update_time'] = date('Y-m-d H:i:s'); }
            $sitemap_str .= '<url>';
            $sitemap_str .= '<loc>'.$new_url.'</loc>';
            $sitemap_str .= '<lastmod>'.format_datetime($new['update_time'],1,'Y-m-d').'</lastmod>';
            $sitemap_str .= '<changefreq>'.$changefreq.'</changefreq>';
            $sitemap_str .= '<priority>0.8</priority>';
            $sitemap_str .= '</url>';
        }


        ///分类
        $CategoryModel = model('common/Category');
        $categorys = $CategoryModel->getSitemapData();
        foreach ($categorys as $k => $v) {
            if(empty($k) || empty($v) || !is_array($v)){ continue; }

            if(empty($v['url'])){
                $c_url = trim($site_url,'/').'/category/'.$v['id'];
            }else{
                $c_url = trim($site_url,'/').$v['url'];
            }

            $sitemap_str .= '<url>';
            $sitemap_str .= '<loc>'.$c_url.'</loc>';
            $sitemap_str .= '<lastmod>'.date('Y-m-d').'</lastmod>';
            $sitemap_str .= '<changefreq>weekly</changefreq>';
            $sitemap_str .= '<priority>0.6</priority>';
            $sitemap_str .= '</url>';
        }
        $sitemap_str .= '</urlset>';
        return file_put_contents('sitemap.xml', $sitemap_str);
    }catch(\Exception $e){
        ///LOG
        return 0;
    }
}

格式化时间format_datetime函数

/**
 * 时间日期格式化为多少天前
 * @param sting|intval $date_time
 * @param intval $type 1、'Y-m-d H:i:s' 2、时间戳
 * @param intval $format 自定义事件格式
 * @return string
 */
function format_datetime($date_time,$type=1,$format=''){
    if($type == 1){
        $timestamp = strtotime($date_time);
    }elseif($type == 2){
        $timestamp = $date_time;
        $date_time = date('Y-m-d H:i:s',$date_time);
    }
    if($format){
        return date($format,$timestamp);
    }
    $difference = time()-$timestamp;
    if($difference <= 180){
        return '刚刚';
    }elseif($difference <= 3600){
        return ceil($difference/60).'分钟前';
    }elseif($difference <= 86400){
        return ceil($difference/3600).'小时前';
    }elseif($difference <= 2592000){
        return ceil($difference/86400).'天前';
    }elseif($difference <= 31536000){
        return ceil($difference/2592000).'个月前';
    }else{
        return ceil($difference/31536000).'年前';
    }
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注