你的网站忽略了主动推送吗?Behavior行为扩展

news/2024/4/27 18:25:34/文章来源:https://blog.csdn.net/weixin_34262482/article/details/89168905

这是我2017年的开篇,也是我在Segmentfault的第一篇文章,写的不好还请多多包涵,我是一位码农,在segmentfault得到自己的一块小田地,喜欢这里的归属感,我愿意每天在这块地里劳作,记录我的学习、工作、生活中的珍贵点滴。

以下信息根据您的兴趣推荐:

王思聪4200万生日趴豪奢曝光,香槟王灌到饱。
台湾康师傅宣布解散,大陆业务营运不受影响。
“五福事件”再次来袭!网友评论:马云,看来你是没被骂够!

每天新闻咋这么多,刷的停不下来都没时间工作了。(旁白君:喂喂,打住,你好像跑偏了!),想想每天网络信息流如此巨大,如果网站不及时把原创好文章推送给搜索引擎,基本就会埋没在信息流中。(旁白君:好像是那么回事!)

使用主动推送功能会达到怎样效果

及时发现:可以缩短百度爬虫发现您站点新链接的时间,使新发布的页面可以在第一时间被百度收录。

保护原创:对于网站的最新原创内容,使用主动推送功能可以快速通知到百度,使内容可以在转发之前被百度发现。

(旁白君:有没有这么厉害哦?)

信不信看官方介绍:百度站长平台推送介绍

ThinkPHP行为扩展

行为(Behavior)是一个比较抽象的概念,类似于AOP编程中的“切面”的概念,给某一个切面绑定相关行为就成了一种类AOP编程的思想。(旁白君:AOP又是什么?),熟悉Java的朋友应该对AOP不陌生:

在运行时,动态地将代码切入到类指定的方法、位置上,这种编程思想就是面向切面的编程。直白的说:在不修改原代码的情况下,给指定方法添加新功能。

ThinkPHP提供标签位置有以下(按照执行顺序排列):

标签描述
app_init应用初始化标签位
path_infoPATH_INFO检测标签位
app_begin应用开始标签位
action_name操作方法名标签位
action_begin控制器开始标签位
view_begin视图输出开始标签位
view_parse视图解析标签位
template_filter模板内容解析标签位
view_filter视图输出过滤标签位
view_end视图输出结束标签位
action_end控制器结束标签位
app_end应用结束标签位

(旁白君:标题党吗?我只想知道怎么做才可以推送给百度收录!)

别急会招式还得有内功,大家都知道ThinkPHP是一个很好的开发框架,ThinkCMF是一款基于ThinkPHP+MySQL开发的中文内容管理框架,此文是针对ThinkCMF开发的行为扩展,当然基于ThinkPHP开发的所有内容管理系统简单修改下也可通用。

ThinkCMF后台分析

ThinkCMF后台文章管理文件:application/Portal/Controller/AdminPostController.class.php,此文件里面有4个方法是需要扩展的:

方法名称描述
add_post文章添加提交
edit_post文章编辑提交
delete文章删除(软删除)
restore文章还原(回收站恢复)

当以上4各方法执行完毕时,需要添加主动推送代码,所以是要扩展action_end (控制器结束)标签位。

一切从代码开始

1、在任意地方新建php文件:BaiduLinkSubmitBehavior.class.php代码如下:

<?php
namespace Common\Behavior;
use Think\Behavior;
/*** 百度站长平台主动推送行为扩展* 作者:许剑锋* 博客:https://segmentfault.com/u/xuebai* 准入密钥获取地址: http://zhanzhang.baidu.com/linksubmit/index?site=*/
class BaiduLinkSubmitBehavior extends Behavior{// 在站长平台验证的站点,比如www.example.comconst site = "www.example.com";// 在站长平台申请的推送用的准入密钥const token = "aaabbbccc";// 主动推送const api_urls = 'http://data.zz.baidu.com/urls';// 更新链接const api_update = 'http://data.zz.baidu.com/update';// 删除链接const api_del = 'http://data.zz.baidu.com/del';//CURL封装(默认:主动推送)private function _curl( $api_url, $urls = array() ) {if( empty($urls) || empty($api_url) ) {return false;}// api推送地址$api = $api_url . '?site=' . (self::site) . '&token=' . (self::token);$ch = curl_init();$options =  array(CURLOPT_URL             => $api,CURLOPT_POST            => true,CURLOPT_RETURNTRANSFER  => true,CURLOPT_POSTFIELDS      => implode("\n", $urls),CURLOPT_HTTPHEADER      => array('Content-Type: text/plain'),);curl_setopt_array($ch, $options);$result = curl_exec($ch);return $result;}// 主动推送private function _urls( $urls = array() ) {return $this->_curl( self::api_urls, $urls );}// 更新链接private function _update( $urls = array() ) {return $this->_curl( self::api_update, $urls );}// 删除链接private function _del( $urls = array() ) {return $this->_curl( self::api_del, $urls );}// 行为扩展的执行入口必须是runpublic function run(&$params) {// debug模式最好不推送链接if( APP_DEBUG ) {return ;}// 获取模块名称(例如:portal)$module_name = strtolower(MODULE_NAME);// 获取控制器名称(例如:Adminpost)$controller_name = strtolower(CONTROLLER_NAME);// 获取操作名称(例如:add_post)$action_name = strtolower(ACTION_NAME);// 获取当前对象的相关信息$reflector = new \ReflectionObject( $this );// 按照驼峰命名拼接函数名(例如:portalAdminpostAdd_post)$method_name = $module_name . ucfirst($controller_name) . ucfirst($action_name);// 如果当前类对象存在某个方法if( $reflector->hasMethod( $method_name ) ) {// getMethod() 返回 ReflectionMethod 对象$method = $reflector->getMethod( $method_name );// 执行当前对象的某个方法$method->invoke( $this );}}// 添加文章public function portalAdminpostAdd_post() {// 查询最新的文章$posts_model = M( 'Posts' );$article = $posts_model->alias("a")->field('a.*,b.term_id')->join("__TERM_RELATIONSHIPS__ b ON a.id = b.object_id", 'LEFT')->order( 'a.id DESC' )->limit(1)->find();if( !empty($article)&& !empty($article['id'])&& !empty($article['term_id']) ) {// 通过post_id获取文章url$url = leuu( 'article/index', array( 'id'=>$article['id'], 'cid'=>$article['term_id'] ), true, true );die( "add_post: {$url}" );
//            $res = $this->_urls( array( $url ) );}}// 编辑文章public function portalAdminpostEdit_post() {$post_id = intval($_POST['post']['id']);if( empty($post_id) ) {return ;}$posts_model = M( 'Posts' );$article = $posts_model->alias("a")->field('a.*,b.term_id')->join("__TERM_RELATIONSHIPS__ b ON a.id = b.object_id", 'LEFT')->where( "a.id={$post_id}" )->find();if( empty($article) ) {return ;}$url = leuu( 'article/index', array( 'id'=>$article['id'], 'cid'=>$article['term_id'] ), true, true );die( "edit_post: {$url}" );
//        $res = $this->_update( array( $url ) );}// 删除文章public function portalAdminpostDelete( $id='' ) {// 如果id参数为空就取get参数empty($id) && ($id = I("get.id",0,'intval'));if( empty($id) ) {return ;}$posts_model = M( 'Posts' );$article = $posts_model->alias("a")->field('a.*,b.term_id')->join("__TERM_RELATIONSHIPS__ b ON a.id = b.object_id", 'LEFT')->where( "a.id={$id}" )->find();if( empty($article) ) {return ;}$url = leuu( 'article/index', array( 'id'=>$article['id'], 'cid'=>$article['term_id'] ), true, true );die( "delete: {$url}" );
//        $res = $this->_del( array( $url ) );}// 文章还原public function portalAdminpostRestore() {$id = I("get.id", 0, 'intval');if( empty($id) ) {return ;}$posts_model = M( 'Posts' );$article = $posts_model->alias("a")->field('a.*,b.term_id')->join("__TERM_RELATIONSHIPS__ b ON a.id = b.object_id", 'LEFT')->where( "a.id={$id}" )->find();if( empty($article) ) {return ;}$url = leuu( 'article/index', array( 'id'=>$article['id'], 'cid'=>$article['term_id'] ), true, true );die( "restore: {$url}" );
//        $res = $this->_urls( array( $url ) );}}

2、复制BaiduLinkSubmitBehavior.class.php文件到目录application/Common/Behavior/BaiduLinkSubmitBehavior.class.php中并修改sitetoken类常量。

3、在application/Common/Conf/tags.php文件中加入:

'action_end' => array(    'Common\Behavior\BaiduLinkSubmitBehavior')

4、关闭index.php中的debug模式:define("APP_DEBUG", false);

开发中(打开debug模式)添加的文章没推送怎么办?

在每个页面的HTML代码中包含以下自动推送JS代码:

<script>
(function(){var bp = document.createElement('script');var curProtocol = window.location.protocol.split(':')[0];if (curProtocol === 'https'){bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';}else{bp.src = 'http://push.zhanzhang.baidu.com/push.js';}var s = document.getElementsByTagName("script")[0];s.parentNode.insertBefore(bp, s);
})();
</script>

安装自动推送JS代码的网页,在页面被访问时,页面URL将立即被推送给百度。

总结与记录

  • ThinkPHP行为扩展官方详细介绍

  • 百度站长平台

  • 站长平台推送文档

  • ThinkCMF官网下载

  • ThinkCMF开发文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_820696.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型网站技术架构 大纲

本文内容大部分来自《大型网站技术架构》,这本书很值得一看&#xff0c;强烈推荐。网站系统架构层次如下图所示&#xff1a;1.前端架构前端指用户请求到达网站应用服务器之前经历的环节&#xff0c;通常不包含网站业务逻辑&#xff0c;不处理动态内容。浏览器优化技术并不是优化…

knewone最新分享购物网站模板

演示效果&#xff1a;http://www.erdangjiade.com/templates/390 效果图片&#xff1a;

DTCMS 网站管理系统

dtcms适合开发一些简单小型网站 开发的过程中遇见了各种问题&#xff0c;下面总结下我遇见的问题 1.遇见提示未开启生成静态功能 在系统设置里面将“伪URL重写”为“生成静态”可以解决 2.在生成静态页面的时候提示生成页面完成&#xff0c;但是右下角却显示失败 这个可能是在新…

oracle em 此网站,Oracle 11g em启动报此网站的安全证书有问题的解决方案

今天配置完Oracle 11gR2 em后&#xff0c;在IE中输入https://kermart:1158/em直接报错&#xff0c;打不开提示&#xff1a;“证书错误&#xff0c;此网站安全证书有问题”&#xff0c;在网上找了好久没有找到解决的方案&#xff0c;其中有人说要卸载win7的windows补丁3KKB26612…

商城模板网站html5手机端_网站建设商城模板设计排版不同,但不可缺少的重要板块都会有 - 企业建站...

有的企业建网站&#xff0c;是为了宣传产品、树立企业形象&#xff0c;此类多为建设企业官方网站&#xff1b;有的企业建网站&#xff0c;销售产品是根本&#xff0c;此类都建设商城网站。建设网站又有两种方法&#xff0c;一类模板建站&#xff0c;一类定制建站。对于网站建设…

list的contains方法为什么不好使_为什么你的网站优化效果不好?

当新手网站管理员优化他们的网站&#xff0c;他们不能总是产生良好的结果。是他们的优化方法使用不好&#xff0c;还是网站本身有问题&#xff0c;比如苏州网站优化&#xff0c;哪里有困难&#xff0c;为什么经常做不好&#xff0c;长期没有排名的网站&#xff0c;优化效果不好…

做网站用什么语言_外贸独立站卖家如何做多语言网站SEO?

在各国经济文化交流的频繁和跨境业务数量增长的背景下&#xff0c;想要实现海外营销&#xff0c;获得更多的关注和收益&#xff0c;外贸卖家们就必须针对目标市场进行网站的多语言优化&#xff0c;针对新的国家或地区进行策略的制定网站内容本地化&#xff0c;仅翻译网站内的文…

如何集成varnish到已有的网站架构

如何集成varnish到已有的网站架构 在我们现有的架构中通常是已经成熟稳定的架构&#xff0c;如何将高性能的缓存服务器部署在已有的环境上呢&#xff0c;同时部署容易&#xff0c;如何始终让用户看到的是最新的内容&#xff0c;即便是缓存命中的状态&#xff1f; 因此&#xff…

activemq 各种版本区别_响应式网站和PC+手机端网站有什么区别?

企业建站普遍会遇到这样一个选择难题&#xff1a;网站选择什么类型&#xff1f;常见的类型分为3种&#xff1a;PC端&#xff0c;PC手机端&#xff0c;响应式。PC端大家都知道&#xff0c;主要的选择难点是后两种有什区别。今天小编就帮大家来分析一下响应式网站和PC手机端网站的…

阿根廷最大社交网站Taringa遭遇大规模数据泄漏,超过2800万用户数据暴露

本文讲的是阿根廷最大社交网站Taringa遭遇大规模数据泄漏&#xff0c;超过2800万用户数据暴露&#xff0c;如果你有Taringa&#xff08;也被称为“拉丁美洲的Reddit”&#xff09;网站账号&#xff0c;那么请注意&#xff0c;你的账户详细信息可能已经在大规模数据泄漏事件中泄…

实现网站验证码切换功能

实现网站验证码切换功能 一、样例 样例1、 样例2、 二、实现原理 三、实现代码 com.fry.servlet.VerifyCodeServlet 1 package com.fry.servlet;2 3 import javax.imageio.ImageIO;4 import javax.servlet.ServletException;5 import javax.servlet.annotation.WebServlet;6 im…

从零开始编写自己的C#框架(25)——网站部署

导航 1、关掉访问保护 2、发布网站 3、复制网站到服务器 4、添加新网站 5、设置网站访问权限 6、设置文件夹访问权限 7、控制可更新文件夹执行权限 8、设置“应用程序池”.net版本与模式 9、附加数据库 10、添加数据库访问用户 11、设置数据库链接 12、部署注意事项 对于网站的…

linux系统怎么重启网络连接wifi密码,怎么查看linux连接wifi的密码?_网站服务器运行维护,linux,wifi...

如何使用外部硬盘安装linux系统&#xff1f;_网站服务器运行维护使用外部硬盘安装linux系统的方法&#xff1a;首先将格式化的U盘和固态硬盘连接到电脑上并按F9&#xff1b;然后从菜单选择U盘启动并按enter&#xff1b;接着按linux minit程序安装系统并选择中文&#xff1b;最后…

织梦网站调用变量失败_浙江栢塑科技解析织梦被挂马被黑解决流程

织梦被黑恶意挂马并不奇怪&#xff0c;本身织梦程序案例漏洞过多&#xff0c;如不做好安全更新或备份&#xff0c;造成数据丢失并影响排名。 一个SEOVIP同学遇到织梦的问题&#xff0c;接下来把处理的流程记录下来&#xff0c;帮助大家解决问题。 1&#xff0c;分析网站源码&am…

3格式是什么意思_推荐一个万能格式转换网站

老Y在以前的文章中推荐过一个专注格式转换的网站→推荐一个万能的在线格式转换网站&#xff0c;功能非常的强大。也推荐过一个PC端的转换神器→办公利器&#xff08;PDF工具|格式转换|图片编辑|文字识别|图片处理…&#xff09;今天老Y再推荐一个国内的功能同样强大的格式转换网…

一些常用的网站——Mark

2019独角兽企业重金招聘Python工程师标准>>> CDN加速&#xff1a; 又拍云&#xff1a;http://www.bootcdn.cn/ 百度&#xff1a;http://cdn.code.baidu.com/ 新浪&#xff1a;http://lib.sinaapp.com/ 七牛云存储&#xff1a;https://www.staticfile.org/ 转载于:ht…

网站备案那些事----云里雾里知多少?

前言&#xff1a;备案流程几大步 文章目录&#xff1a; 1、购买域名 1.1、国内外几个域名提供商推荐 1.2、域名购买时需要提交的信息 1.3、域名购买后需要提交哪些材料 2、确定网站文件存储空间是购买还是自备 2.1、网站文件存储空间购买的话该如何备案 2.2、网站文件存储空间为…

linux网站5秒盾,宝塔面板建站后接入CF自动开启5秒盾证码脚本

有大神分享了CF自动开启5秒盾 验证码脚本&#xff0c;原理就是通过检测系统负载(cpu或load)自动开启cloudflare UAM和challenge质询(验证码)&#xff01;&#xff01;这里分享下宝塔面板下如何用起来&#xff0c;使用的前提是你的域名需要接入cloudflare。1、简介项目&#xf…

网站部署到linux 在进行压测,在Linux CentOS上搭建Jmeter压测环境

本文的主要内容是介绍如何在Linux CentOS 服务器上面搭建Jmeter的压测环境整个详细的流程&#xff0c;来满足我们日常工作中对于压力测试环境搭建、压力测试执行过程的需求。一、首先我们要准备四个东西&#xff0c;在搭建环境的时候需要使用到1、Xshell、puTTy等终端连接工具(…

几个可以免费下载知网文档,和查重的网站

前一段时间小七分享过几个免费下载知网&#xff0c;万方等一下写论文下载文献的方法&#xff0c;当时有小伙伴在后台询问有没有论文免费查重的方法&#xff0c;其实小七手里面有几个可以免费查看论文权重的软件&#xff0c;但是小七却没有分享&#xff0c;因为这些软件都是个人…