`
tdwm
  • 浏览: 50071 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

phpcms 定时生成 sitemap 包括 百度 xml文件

阅读更多

很简单的修改了 原phpcms自带的 生成xml的程序文件 ,

原来的生成程序文件是 /phpcms/modules/admin/googlesitemap.php

 

修改这个文件放到根目录下命名为sitemap.php,代码如下:

<?php
if(PHP_SAPI != 'cli')
{
    header('location: sitemap.xml');
    exit;
} 
define('PHPCMS_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
include PHPCMS_PATH.'phpcms/base.php';

pc_base::load_sys_class('form', '', 0);

class gbsitemap {
    function __construct() {
        $this->header = "<\x3Fxml version=\"1.0\" encoding=\"UTF-8\"\x3F>\n\t<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">";
        $this->charset = "UTF-8";
        $this->footer = "\t</urlset>\n";
        $this->baidunews_footer = "</document>";
        $this->items = array();
        $this->baidunew_items = array();
        //生成栏目级别选项
        $this->siteid = 1;
        $this->categorys = getcache('category_content_'.$this->siteid,'commons');
    }

    function add_item2($new_item) {
        $this->items[] = $new_item;
    }

    function build( $file_name = null ) {
        $map = $this->header . "\n";
        foreach ($this->items AS $item){
            $map .= "\t\t<url>\n\t\t\t<loc>$item[loc]</loc>\n";
            $map .= "\t\t\t<lastmod>$item[lastmod]</lastmod>\n";
            $map .= "\t\t\t<changefreq>$item[changefreq]</changefreq>\n";
            $map .= "\t\t\t<priority>$item[priority]</priority>\n";
            $map .= "\t\t</url>\n\n";
        }
        $map .= $this->footer . "\n";
        if (!is_null($file_name)){
            return file_put_contents($file_name, $map);
        } else {
            return $map;
        }
    }

    function google_sitemap_item($loc, $lastmod = '', $changefreq = '', $priority = '') {
        $data = array();
        $data['loc'] =  $loc;
        $data['lastmod'] =  $lastmod;
        $data['changefreq'] =  $changefreq;
        $data['priority'] =  $priority;
        return $data;
    } 
    /**
     * 
     * 百度新闻数组 组成
     * @param $title
     * @param $link
     * @param $description
     * @param $text
     * @param $image
     * @param $keywords
     * @param $category
     * @param $author
     * @param $source
     * @param $pubDate
     */
    function baidunews_item($title, $link = '', $description = '',$text = '',$image = '', $keywords = '',$category = '',$author = '',$source='',$pubDate='') {
        $data = array();
        $data['title'] =  $title;
        $data['link'] =  $link;
        $data['description'] =  $description;
        $data['text'] =  $text;
        $data['image'] =  $image;
        $data['keywords'] =  $keywords;
        $data['category'] =  $category;
        $data['author'] =  $author;
        $data['source'] =  $source;
        $data['pubDate'] =  $pubDate;
        return $data;
    }

    function add_baidunews_item($new_item){
        $this->baidunew_items[] = $new_item;
    }

    function baidunews_build( $file_name = null ,$this_domain,$email,$time) {
        //百度头部
        $this->baidunews = '';
        $this->baidunews = "<?xml version=\"1.0\" encoding=\"".CHARSET."\" ?>\n";
        $this->baidunews .= "<document>\n";
        $this->baidunews .= "<webSite>".$this_domain."</webSite>\n";
        $this->baidunews .= "<webMaster>".$email."</webMaster>\n";
        $this->baidunews .= "<updatePeri>".$time."</updatePeri>\n";
        foreach ($this->baidunew_items AS $item){ 
            $this->baidunews .= "<item>\n";
            $this->baidunews .= "<title>".$item['title']."</title>\n";
            $this->baidunews .= "<link>".$item['link']."</link>\n";
            $this->baidunews .= "<description>".$item['description'] ."</description>\n";
            $this->baidunews .= "<text>".$item['text']."</text>\n";
            $this->baidunews .= "<image>".$item['image']."</image>\n";
            $this->baidunews .= "<keywords>".$item['keywords']."</keywords>\n";
            $this->baidunews .= "<category>".$item['category']."</category>\n";
            $this->baidunews .= "<author>".$item['author']."</author>\n";
            $this->baidunews .= "<source>".$item['source']."</source>\n";
            $this->baidunews .= "<pubDate>".$item['pubDate']."</pubDate>\n";
            $this->baidunews .= "</item>\n";
        } 
        $this->baidunews .= $this->baidunews_footer . "\n";
        if (!is_null($file_name)){
            return file_put_contents($file_name, $this->baidunews);
        } else {
            return $this->baidunews;
        }
    }

    /**
     * 
     * Enter 生成google sitemap, 百度新闻协议
     */
    function set ($request) {
        $hits_db = pc_base::load_model('hits_model');
        $dosubmit = isset($request['dosubmit']) ? $request['dosubmit'] : $_GET['dosubmit'];

        //读站点缓存
        $siteid = $this->siteid;
        $sitecache = getcache('sitelist','commons');
        //根据当前站点,取得文件存放路径
        $systemconfig = pc_base::load_config('system');
        $html_root = substr($systemconfig['html_root'], 1);
        //判断当前站点目录,是PHPCMS则把文件写到根目录下, 不是则写到分站目录下.(分站目录用由静态文件路经html_root和分站目录dirname组成)
        if($siteid==1){
            $dir = PHPCMS_PATH;
        }else {
            $dir = PHPCMS_PATH.$html_root.DIRECTORY_SEPARATOR.$sitecache[$siteid]['dirname'].DIRECTORY_SEPARATOR;
        }
        //模型缓存
        $modelcache = getcache('model','commons');

        //获取当前站点域名,下面生成URL时会用到.
        $this_domain = substr($sitecache[$siteid]['domain'], 0,strlen($sitecache[$siteid]['domain'])-1);
        //生成百度新闻
        if($request['mark']) {
            $baidunum = $request['baidunum'] ? intval($request['baidunum']) : 20;
            if($request['catids']=="")showmessage(L('choose_category'), HTTP_REFERER);
            $catids = $request['catids'];
            $catid_cache = $this->categorys;//栏目缓存
            $this->content_db = pc_base::load_model('content_model');
            foreach ($catids as $catid) {
                $modelid = $catid_cache[$catid]['modelid'];//根据栏目ID查出modelid 进而确定表名,并结合栏目ID:catid 检索出对应栏目下的新闻条数
                $this->content_db->set_model($modelid);
                $result = $this->content_db->select(array('catid'=>$catid,'status'=>99), '*', $limit = "0,$baidunum", 'id desc');
                //重设表前缀,for循环时用来查,文章正文 
                $this->content_db->table_name = $this->content_db->table_name.'_data';
                foreach ($result as $arr){
                    //把每一条数据都装入数组中
                    extract($arr);
                    if(!preg_match('/^(http|https):\/\//', $url)){
                        $url = $this_domain.$url;
                    }
                    if($thumb != ""){
                        if(!preg_match('/^(http|https):\/\//', $thumb)){
                            $thumb = $this_domain.$thumb;
                        }
                    }
                    //取当前新闻模型 附属表 取 新闻正文
                    $url = htmlspecialchars($url);
                    $description = htmlspecialchars(strip_tags($description));
                    //根据本条ID,从对应tablename_data取出正文内容
                    $content_arr = $this->content_db->get_one(array('id'=>$id),'content');
                    $content = htmlspecialchars(strip_tags($content_arr['content']));
                    //组合数据
                    $smi = $this->baidunews_item($title,$url,$description,$content,$thumb, $keywords,$category,$author,$source,date('Y-m-d', $inputtime));//推荐文件
                    $this->add_baidunews_item($smi);
                } 
            }
            $baidunews_file = $dir.'baidunews.xml';

            @mkdir($dir,0777,true);
            $this->baidunews_build($baidunews_file,$this_domain,$request['email'],$request['time']); 
        }

        //生成网站地图
        $content_priority = $request['content_priority'];
        $content_changefreq = $request['content_changefreq']; 
        $num = $request['num'] ? intval($request['num']) : 100;

        $today = date('Y-m-d');
        $domain = $this_domain;
        //生成地图头部 -第一条
        $smi = $this->google_sitemap_item($domain, $today, 'daily', '1.0');
        $this->add_item2($smi);

        $this->content_db = pc_base::load_model('content_model');
        //只提取该站点的模型.再循环取数据,生成站点地图.
        $modelcache = getcache('model','commons');
        $new_model = array();
        foreach ($modelcache as $modelid => $mod){
            if($mod['siteid']==$siteid){
                $new_model[$modelid]['modelid'] = $modelid;
                $new_model[$modelid]['name'] = $mod['name'];						
            }
        }
        foreach($new_model as $modelid=>$m) {//每个模块取出num条数据 
            $this->content_db->set_model($modelid);// 或者 $this->conetnt_db->set_model($modelid);
            $result = $this->content_db->select(array('status'=>99), '*', $limit = "0,$num", $order = 'inputtime desc');
            foreach ($result as $arr){
                if(substr($arr['url'],0,1)=='/'){
                    $url = htmlspecialchars(strip_tags($domain.$arr['url']));
                }else {
                    $url = htmlspecialchars(strip_tags($arr['url']));
                }
                $hit_r = $hits_db->get_one(array('hitsid'=>'c-'.$modelid.'-'.$arr['id']));
                if($hit_r['views']>1000) $content_priority = 0.9;
                $smi    = $this->google_sitemap_item($url, $today, $content_changefreq, $content_priority);//推荐文件
                $this->add_item2($smi);
            }
        }

        $sm_file = $dir.'sitemaps.xml';
        if($this->build($sm_file)){
            showmessage(L('create_success'), HTTP_REFERER);
        } 
    }
} 
//这个地方自己设定,catids是个数组,
$request = array(
    'tabletype'=>'phpcmstables',
    'content_priority'=>'0.7',
    'content_changefreq'=>'weekly',//daily,monthly……
    'num'=>'20',
    'mark'=>'1',
    'catids'=>range(6,17),
    'time'=>'40',
    'email'=>'phpcms@phpcms.cn',
    'baidunum'=>'20',
);
//当然你可以通过外部传递参数,修改$request的值
$maps = new gbsitemap();
$maps->set($request);

?>

 

 

shell中

crontab -e

 

*/5 * * * * 

分享到:
评论

相关推荐

    PHPCMS代码生成器

    在使用PHPCMS代码生成器时,你需要先定义好数据库表结构,包括字段类型、长度、是否为主键等信息。然后,通过代码生成器,你可以选择要生成的代码类型,比如模型类、控制器类、视图文件等。生成的代码会遵循PHPCMS的...

    phpcms 定时任务模块

    而 "phpcms" 文件夹则很可能包含了 phpcms 系统的核心文件,其中包括定时任务模块的源代码和配置文件,这些文件对于理解和定制 phpcms 的定时任务功能至关重要。 总的来说,phpcms 的定时任务模块提供了一套完整的...

    phpcms2008 生成HTML

    【phpcms2008 生成HTML】是一个针对phpcms2008SP4_gbk_111018 版本的二次开发功能,目的是优化网站性能和用户体验,通过自动化的方式将最近N天内有评论的信息自动生成HTML静态页面。这个特性使得网站的内容能够更快...

    phpcms模板生成器

    phpcms模板生成器 phpcms模板生成器

    PHPCMS_V9百度推送插件

    1. **下载插件**:首先,你需要从可靠的来源下载PHPCMS_V9的百度推送插件文件,例如压缩包中的“phpcms”文件夹可能包含了必要的文件。 2. **上传安装**:将插件文件上传到你的PHPCMS_V9系统的相应目录,通常是在...

    PhpCMS V9代码生成器 v1.5 Final 绿色版.rar

    PhpCMS V9代码生成器可以帮助PhpCMS V9模板制作者快速高效地制作模板,功能代码速查,代码自动生成,方便调用,让您在制作PhpCMS V9模板时得心应手,PhpCMS V9爱好者必备! PhpCMS V9模板代码生成器 V1.5 版本更新...

    PHPCMS定时自动采集

    此压缩包用于实现PHPCMS系统内容自动采集 使用前请替换包内所有文件,对文件有修改的请慎重操作。 一、文件修改 除采集模块本身进行修改外,还修改了以下两个文件: phpcms/libs/functions/global.func.php --&gt; ...

    PHPCMS V9 代码生成器

    PHPCMS V9代码生成器是一款专为PHPCMS设计的开发辅助工具,它的核心优势在于内置了PHPCMS的所有标签库。这些标签库是PHPCMS的一大特色,它使得开发者可以使用简单的语法便能从数据库中提取内容并展示在前端页面。...

    phpcms 代码生成器

    | PhpCMS V9模板代码生成器 V1.3 版本更新说明 | --------------------------------------------- [更新] [√]新增GET标签调用代码范例; [√]新增内容页调用栏目名及链接代码; [√]新增小工具中编码转换接口...

    PhpCMS V9代码生成器

    1. 安装与启动:下载并安装`PhpCMS V9代码生成器 V1.5 Final.exe`,运行程序,进入主界面。 2. 选择模板类型:根据项目需求,从提供的模板类型中选择合适的选项,如文章列表、单页模板、分类列表等。 3. 配置参数...

    PHPCMS V9 定时发布文章的方法

    ### PHPCMS V9 定时发布文章的方法详解 #### 一、背景介绍 随着互联网技术的发展,内容管理系统(CMS)成为了网站管理不可或缺的一部分。PHPCMS V9是一款基于PHP语言开发的内容管理系统,广泛应用于各类网站的信息...

    PhpCMS V9模板代码生成器

    1. **安装与启动**:下载并运行`PhpCMS V9模板代码生成器 V1.5 Beta.exe`文件,按照安装向导完成安装。 2. **配置设置**:在软件中输入或选择项目的基本信息,如站点名称、URL、数据库连接等。 3. **选择模板**:...

    PHPCMS V9代码生成器 2.0

    PHPCMS V9是一款流行的开源内容管理系统,而“PHPCMS V9代码生成器 2.0”则是针对这个系统的一个重要辅助工具。这个代码生成器的主要目标是提高开发效率,减少手动编写重复代码的工作量,使开发者能够更加专注于业务...

    phpcmsv9 代码生成器2.0版

    1. **模型生成**:用户可以选择数据库中的表,一键生成对应的模型文件,包括模型类、控制器、视图等,使得数据操作更加便捷。 2. **表单生成**:基于数据库字段,自动创建管理后台的添加、编辑、查看表单,减少手工...

    PHPCMS_V9百度推送插件444.zip

    当新文章被添加到PHPCMS_V9系统后,这些脚本就会自动被触发,生成并向百度站长平台发送一个推送请求。 由于这个插件的自动化特性,网站管理员可以极大地节省手动提交URL到百度站长平台的时间。然而,为了确保插件...

    phpcms2008 生成HTML2

    而"admin"可能是PHPCMS 2008后台管理目录,里面可能包含用于管理和生成HTML的相关PHP文件,比如生成静态页的控制器、模型和视图文件等。通过研究这些文件,我们可以更深入地了解二次开发的实现方式。 总的来说,...

    PHPCMS百度站长推送工具.zip

    总的来说,PHPCMS百度站长推送工具是提升网站SEO策略的有效工具,尤其适合依赖百度流量的网站。正确使用此工具,结合良好的网站内容和结构优化,可以显著提升网站在百度搜索结果中的表现,从而带来更多的自然流量。

    PhpCMS V9代码生成器 V1.5 Final版本PHPCMS中国发布

    PHPCMS V9代码生成器 V1.5版本PHPCMS中国发布 ------------------------------ | PhpCMS V9代码生成器 使用说明 | ------------------------------ 一、平台需求 运行环境:Windows 2000/XP/Vista/Win7 二、...

    phpcms代码生成器

    1. **PhpCMS V9代码生成器 V1.5 Final.exe**:这是主程序文件,运行此文件即可启动代码生成器。 2. **说明.htm**:包含了软件的详细使用指南,包括各项功能的介绍和操作步骤,是初学者快速上手的重要参考资料。 3. *...

Global site tag (gtag.js) - Google Analytics