和哥们研究淘宝客,找到微购这个程序觉得挺不错的,但是地图和RSS功能不是特别完善,于是小憩一下,做了下初级的拓展,分享给大家,开源精神嘛,大家也可以去我的网站我要购物平台去看看。
1.拓展后台seoAction.class.php
<?php !defined("BUILD_BATCH_COUNT")&&define("BUILD_BATCH_COUNT",200); class seoAction extends baseAction { //显示列表 public function index(){ $this->showindex("网站首页"); } public function seller() { $this->showindex("返现商家"); } public function search() { $this->showindex("逛宝贝"); } public function album() { $this->showindex("专辑"); } public function promo() { $this->showindex("促销活动页"); } public function exchange_goods() { $this->showindex("积分商城"); } public function cate() { $this->showindex("商品分类页"); } public function item() { $this->showindex("商品详细页"); } public function showindex($title) { $map['actionname'] = ACTION_NAME; $info = $this->seo_mod->where($map)->find(); $this->assign('info',$info); $this->assign('title',$title); $this->display("index"); } //修改 public function edit() { $this->seo_mod->create(); $status = $_POST['id'] ? $this->seo_mod->save() : $this->seo_mod->add(); if($status){ $this->success("操作成功!"); }else{ $this->error("操作失败!"); } } //伪静态设置 function rewrite(){ $this->assign('set',$this->setting); $this->display(); } //设置seo信息 function doEditSeo(){ if(isset($_POST["site"]["url_model"])){ $_POST["site"]["url_model"]; $address = ROOT_PATH."/index/Conf/config.php"; $configFile = file_get_contents($address); $newFile = str_replace("'URL_MODEL' => {$this->setting['url_model']}","'URL_MODEL' => {$_POST['site']['url_model']}",$configFile); if(!file_put_contents($address,$newFile)){ $this->error("保存伪静态模式错误!请查看目录是否有修改权限"); } if(unlink(ROOT_PATH."/index/Runtime/~runtime.php")){ // $success = "保存数据成功"; } //保存伪静态后缀 if(!empty($_POST['site']['html_suffix'])&&trim($_POST['site']['html_suffix'])!='/'){ $_br = "\r\n"; $_tab = "\t"; $_profile = '<?php'.$_br; $_profile .= $_tab."//seo后缀配置文件".$_br; $_profile .= $_tab."return array( 'URL_HTML_SUFFIX'=>'{$_POST['site']['html_suffix']}' );".$_br; $_profile .= $_br; $_profile .= '?>'.$_br; if (!file_put_contents(ROOT_PATH."/index/Conf/html_suffix.php", $_profile)) { $this->error("保存后缀配置文件失败,请重试!"); } }else{ $_br = "\r\n"; $_tab = "\t"; $_profile = '<?php'.$_br; $_profile .= $_tab."//seo后缀配置文件".$_br; $_profile .= $_tab."return array( );".$_br; $_profile .= $_br; $_profile .= '?>'.$_br; if (!file_put_contents(ROOT_PATH."/index/Conf/html_suffix.php", $_profile)) { $this->error("保存后缀配置文件失败,请重试!"); } } $map["name"] = 'url_model'; M('setting')->where($map)->setField('data',$_POST['site']['url_model']); $map["name"] = 'html_suffix'; M('setting')->where($map)->setField('data',trim($_POST['site']['html_suffix'])); $this->success("保存数据成功!"); } } //显示伪静态信息 function showRewriteRules(){ $where=array('name'=>'html_suffix'); $setting_mod=D('setting'); $html_suffix_rel=$setting_mod->where($where)->find(); $this->assign('suffix',$html_suffix_rel['data']); // $where=array('name'=>'url_model'); $url_model_rel=$setting_mod->where($where)->find(); $this->assign('url_model',$url_model_rel['data']); // $this->display(); } function sitemap(){ if(!empty($_POST['dosubmit'])){ vendor("sitemap.WSitemap"); $_sitemap=new WSiteMap(); $lastmod=date("Y-m-d"); //首页 $_sitemap->add($this->setting['site_domain']."/index.php",$lastmod,"always","1.0"); //导航 $nav_cate = M("nav")->where("is_show=1 AND in_site!='0'")->order("sort_order")->select(); foreach($nav_cate as $v){ if($v['system']=='1') $loc=$this->setting['site_domain']."/index.php?a=index&m=".$v['alias']; else{ if($v['in_site']=='0') $loc=$v['url']; else $loc=$this->setting['site_domain']."/index.php?a=index&m=cate&cid=".$v['items_cate_id']; } $_sitemap->add($loc,$lastmod,"monthly","0.7"); } //逛宝贝热门搜索 $setting_cate = M('setting')->where("name='search_words'")->select(); $setting = explode(",",$setting_cate[0]['data']); foreach($setting as $v) $_sitemap->add($this->setting['site_domain']."/index.php?a=index&m=search&keywords=".$v,$lastmod,"always","0.8"); //专辑分类 $album_cate = M("album_cate")->where("status=1")->order("sort_order")->select(); foreach($album_cate as $v) $_sitemap->add($this->setting['site_domain']."/index.php?m=album&a=index&cid=".$v['id'],$lastmod,"monthly","0.7"); //返现商家 $seller_cate = M("seller_cate")->where("status=1")->order("sort")->select(); foreach($seller_cate as $v) $_sitemap->add($this->setting['site_domain']."/index.php?m=seller&a=index&id=".$v['id'],$lastmod,"monthly","0.9"); //读取标签 $getlabel = file_get_contents("./data/label.txt"); $label = explode(",",$getlabel); //所有标签 $items_tags = M("items_tags")->where("status=1")->select(); foreach($items_tags as $v){ if(!preg_match("/\w|【|】|、|(|)|\/",$v['name'])){ if(in_array($v['name'],$label)) $_sitemap->add($this->setting['site_domain']."/index.php?m=cate&a=tag&id=".$v['id'],$lastmod,"always","0.9"); } } $data=$_sitemap->get(); //读取产品 $data = str_replace('><', ">\n<", $data); //$data = iconv("GB2312", 'UTF-8',$data); $data=str_replace("&","&",$data); if(file_put_contents("sitemap.xml",$_sitemap->begin().$data)){ //读取商品数据 $this->success("提交成功,接下来将分析大数据,请耐心等候...","/admin.php?m=seo&a=sitemap_items",1); }else{ $this->error("提交失败!"); } } $this->display(); } public function sitemap_items(){ import('ORG.Util.Page'); vendor("sitemap.WSitemap"); $_sitemap=new WSiteMap(); $_items=M("items"); $count=!empty($_GET['count'])?$_GET['count']:0; $nowPage=!empty($_GET['p'])?$_GET['p']:0; !$count&&$count=$_items->where("status=1")->count("id"); $_page=new Page($count,BUILD_BATCH_COUNT);// 实例化分页类 传入总记录数 $list=$_items->order('add_time DESC')->field("id,add_time")->page($nowPage.','.$_page->listRows)->select(); foreach($list as $v){ $lastmod=date("Y-m-d",$v['add_time']); $_sitemap->add($this->setting['site_domain']."/index.php?a=index&m=item&id=".$v['id'],$lastmod,"daily","0.9"); } //读取产品 $data = str_replace('><', ">\n<", $_sitemap->get()); //$data = iconv("GB2312", 'UTF-8',$data); $data=str_replace("&","&",$data); if(!file_put_contents("sitemap.xml",$data,FILE_APPEND)){ @file_put_contents("sitemap.xml",$_sitemap->end(),FILE_APPEND); $this->error("提交失败。","/admin.php?m=seo&a=sitemap",1); } if($nowPage>=$_page->totalPages){ @file_put_contents("sitemap.xml",$_sitemap->end(),FILE_APPEND); $this->success("生成完毕,共生成条".$count."记录。","/admin.php?m=seo&a=sitemap"); }else{ //生成下一页 $this->success("共".$_page->totalPages."页,第".($nowPage+1)."页,请耐心等候...","/admin.php?m=seo&a=sitemap_items&p=".($nowPage+1)."&count=".$count,1); } } public function item_rss(){ import('ORG.Util.Page'); vendor("rss.WRss"); $_rss=new WRss(); $_items=M("items"); $count=!empty($_GET['count'])?$_GET['count']:0; $nowPage=!empty($_GET['p'])?$_GET['p']:0; if(!$nowPage) @file_put_contents("rss.xml",$_rss->begin().$_rss->site($this->setting['site_title'],$this->setting['site_domain'],$this->setting['site_description'])); !$count&&$count=$_items->where("status=1")->count("id"); $_page=new Page($count,BUILD_BATCH_COUNT);// 实例化分页类 传入总记录数 $list=$_items->order('add_time DESC')->field("id,title,img,seller_name,add_time")->page($nowPage.','.$_page->listRows)->select(); foreach($list as $v){ $lastmod=date("D d F Y h:i:s",$v['add_time']); $link=$this->setting['site_domain']."/index.php?a=index&m=item&id=".$v['id']; $_rss->add($v['title'],$link,$v['title']."<img src=\"{$v[img]}\"/>",$v['seller_name'],$lastmod,$link); } //读取产品 $data = str_replace('><', ">\n<", $_rss->get()); //$data = iconv("GB2312", 'UTF-8',$data); $data=str_replace("&","&",$data); if(!file_put_contents("rss.xml",$data,FILE_APPEND)){ @file_put_contents("rss.xml",$_rss->end(),FILE_APPEND); $this->error("提交失败。","/admin.php?m=seo&a=sitemap",1); } if($nowPage>=$_page->totalPages){ @file_put_contents("rss.xml",$_rss->end(),FILE_APPEND); $this->success("生成完毕,共生成条".$count."记录。","/admin.php?m=seo&a=sitemap"); }else{ //生成下一页 $this->success("共".$_page->totalPages."页,第".($nowPage+1)."页,请耐心等候...","/admin.php?m=seo&a=item_rss&p=".($nowPage+1)."&count=".$count,3); } } public function ping(){ $ids=$_GET['ids']; $p=isset($_GET['p'])?$_GET['p']:0; $idsArray=explode('_',$ids); $idsCount=count($idsArray); if($p<$idsCount){ //百度google推送 vendor("ping.WPing"); $_ping=new WPing(); $_items=M("items"); $currentId=$idsArray[$p]; $items=$_items->where("id=".$currentId)->field("title")->find(); if(!$items){ $this->error("记录".$currentId."不存在,将推送下一条请耐心等候...","/admin.php?m=seo&a=ping&p=".($p+1)."&ids=".$ids,1); } $link=$this->setting['site_domain']."/index.php?a=index&m=item&id=".$currentId; $_ping->method($this->setting['site_name'],$this->setting['site_domain'],$link,$this->setting['site_domain'].'/rss.xml'); $sb=$_ping->baidu()?"成功":"失败"; $gb=$_ping->google()?"成功":"失败"; $this->success("共".$idsCount."条记录需要需要推送,当前第".($p+1)."条,百度反馈{$sb},谷歌反馈{$gb}。请耐心等候...","/admin.php?m=seo&a=ping&p=".($p+1)."&ids=".$ids,2); }else{ $this->success("推送完毕,共生成条".$idsCount."记录。","/admin.php?m=seo&a=sitemap"); } } function get_itmes_cate($pid){ $model = M('items_cate'); $map["status"] = 1; $map["pid"] = $pid; $list = $model->field('id')->where($map)->select(); foreach($list as $v){ $id .= $v['id'].","; } $pid = trim($id,","); $maps["status"] = 1; $maps["pid"] = array('in',$pid); $lists = $model->field('id,name')->where($maps)->select(); foreach($lists as $v){ $str .= "<a href='/index.php?a=index&m=cate&cid=".$v['id']."'>{$v['name']}</a>"; } return $str; } function test(){ $items_tags = M("items_tags")->where("status=1")->select(); foreach($items_tags as $v){ if(!preg_match("/\w|【|】|、|(|)|\/",$v['name'])){ echo $v['name']." http://www.qianbao.cn/index.php?m=cate&a=tag&id=".$v['id']."</br>"; } } } } ?>
追加系统Vendar需要的库文件RSS、Sitemap、Ping
/includes/thinkphp/Extend/Vendar/ping/WPing.php
<?php /** +------------------------------------------------------------------------------ * 通知搜索引擎过来抓去最新发布的内容。秒收不是梦 * 目前仅支持Google和Baidu +------------------------------------------------------------------------------ */ class WPing { public $method, $callback; public function method($site_name,$site_url,$update_url,$update_rss) { $this->method = " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <methodCall> <methodName>weblogUpdates.extendedPing</methodName> <params> <param><value>{$site_name}</value></param> <param><value>{$site_url}</value></param> <param><value>{$update_url}</value></param> <param><value>{$update_rss}</value></param> </params> </methodCall>"; return $this->method; } public function _post($url, $postvar) { $ch=curl_init (); $headers=array ("POST " . $url . " HTTP/1.0", "Content-type: text/xml;charset=\"utf-8\"", "Accept: text/xml", "Content-length: " . strlen ( $postvar ) ); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_HTTPHEADER,$headers); curl_setopt($ch,CURLOPT_POSTFIELDS,$postvar); $res=curl_exec($ch); curl_close($ch); return $res; } public function google() { $this->callback = $this->_post ( 'http://blogsearch.google.com/ping/RPC2', $this->method ); return strpos ( $this->callback, "<boolean>0</boolean>" ) ? true : false; } public function baidu() { $this->callback = $this->_post ( 'http://ping.baidu.com/ping/RPC2', $this->method ); return strpos ( $this->callback, "<int>0</int>" ) ? true : false; } } ?>
/includes/thinkphp/Extend/Vendar/rss/WRss.php
<?php class WRss{ private $urls=""; public function add($title,$link,$description,$author,$pubDate,$guid=0,$share=true){ !empty($title)&&$tmp.="<title>{$title}</title>"; !empty($link)&&$tmp.="<link>{$link}</link>"; !empty($description)&&$tmp.="<description>{$description}</description>"; !empty($author)&&$tmp.="<author>{$author}</author>"; !empty($pubDate)&&$tmp.="<pubDate>{$pubDate}</pubDate>"; !empty($guid)&&$tmp.="<guid>{$guid}</guid >"; $this->urls.="<item>".$tmp."</item>"; } public function get($charset="UTF-8"){ return $this->urls; } public function begin(){ return '<?xml version="1.0" encoding="UTF-8"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0"><channel>'; } public function end(){ return "</channel></rss>"; } public function site($title,$link,$description,$managingEditor="mengdj@outlook.com",$webMaster="mengdj@outlook.com"){ return "<title>{$title}</title><link>{$link}</link><description>{$description}</description><managingEditor>{$managingEditor}</managingEditor><webMaster>{$webMaster}</webMaster>"; } } ?>
/includes/thinkphp/Extend/Vendar/sitemap/WSitemap.php
<?php class WSiteMap{ private $urls=""; public function add($loc,$lastmod,$changefreq=0,$priority=0){ !empty($loc)&&$tmp.="<loc>{$loc}</loc>"; !empty($loc)&&$tmp.="<lastmod>{$lastmod}</lastmod>"; !empty($loc)&&$tmp.="<changefreq>{$changefreq}</changefreq>"; !empty($loc)&&$tmp.="<priority>{$priority}</priority>"; $this->urls.="<url>".$tmp."</url>"; } public function get($charset="UTF-8"){ return $this->urls; } public function begin(){ return '<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; } public function end(){ return "</urlset>"; } } ?>
另外修改了thinkphp默认的Page类文件,其实也就开放了一个统计页数的属性
修改完成后再后台添加对应的菜单就可以了,祝你好运。另外还有个拍拍平台采集插件,需要的可联系我。¥5元免费使用升级,哈哈...,当是资助开发了。
文件以及目录可在此处下载:http://files.cnblogs.com/mengdejun/wyao.in.zip
php源码zend加密和解密方案:http://re.paipai.com/tws/...