yii实现定时更新sitemap方法

* 分类少一次读出,商品太多,每200跳转一次, 用crontab访问一次即更新  */

   /* 如果使用,文中的xml格式最好不要改,控制器输出的时候加上xml头  */

   /* author: kyoralk  */

    public function actionSiteMap()

    {

        

        $xml_file= '../themes/'.param('theme').'/views/site/sitemap.xml';

        $final_id = getValue('final');

 

        if(empty($final_id))

            $file_content = file_get_contents('SitemapModel.php');

        else

            $file_content = file_get_contents($xml_file);

 

        if(file_exists($xml_file))

            $xml_time = filectime($xml_file);

 

        #处理时间超过了2分钟了,立即停止, 放置堵数据库;短时间内不允许重复访问改写

        if(($xml_time && (time()-$xml_time <= 120)) || empty($xml_time) || ($xml_time && time()-$xml_time >=420) ) 

        {

 

            if(empty($final_id))

            {

                # 分类一次读出

                $criteria_cate = new CDbCriteria();

                $criteria_cate->select = 'CateId';

                $criteria_cate->addColumnCondition(array('IsShow'=>1));

                $Category = Category::model()->findAll($criteria_cate);

                if($Category)

                {

                    foreach ($Category as $key => $value) {

                        $file_content .= '

                                 <url>

                                     <loc>'.abu(url('category/index', array('id'=>$value->CateId))).'</loc>

                                    <lastmod>'.date('Y-m-d').'</lastmod>

                                   <priority>0.80</priority>

                                  <changefreq>hourly</changefreq>

                                  </url>

                               ';

                    }

                }

            }

            

            # 商品分别取出

            $criteria = new CDbCriteria();

            $criteria->select = 'GoodsId';

            $criteria->addColumnCondition(array('IsOnSale'=>1));

 

            if($final_id)

                $criteria->addCondition('GoodsId > '.$final_id);

 

            $criteria->limit = 200;

            $criteria->order = 'GoodsId ASC';

            $Goods = Goods::model()->findAll($criteria);

            if($Goods)

            {

                foreach($Goods as $g)

                {

                    $file_content .= '

                                     <url>

                                         <loc>'.abu(url('goods/view', array('id'=>$g->GoodsId))).'</loc>

                                         <lastmod>'.date('Y-m-d').'</lastmod>

                                         <priority>0.80</priority>

                                         <changefreq>hourly</changefreq>

                                    </url>

                                  ';

                    $final_id = $g->GoodsId;

                }

 

                file_put_contents($xml_file, $file_content);

                echo 'loading......';

                echo '<script>window.location.href="'.url('crontab/sitemap', array('final'=>$final_id)).'"</script>';

 

 

            }else{

                $file_content .= '</urlset>';    

                file_put_contents($xml_file, $file_content);

                echo 'end';

            }

 

        }else

        {

            $file_content .= '</urlset>';   

            file_put_contents($xml_file, $file_content);

            echo 'time too long , force to stop';

        }

        

    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值