为什么想到写这个,因为我想了解一下SEO同行都在干啥,然后发现了这个。在群里问了下,这个玩法已经有一两年了,所以分享同步给大家~ 本文大纲: 1、SEO双标题是什么?有什么用? 2、SEO双标题利于收录和排名吗? 3、SEO双标题怎么写? 4、做好SEO双标题核心是什么? SEO双标题是什么?有什么用? SEO双标题是什么?简单来说就是在发布的文章标题上用两个意思相近的包含目标关键词的用户需求长尾关键词。 举例:比如我想优化的关键词是SEO是什么,那么我的标题就是:SEO是什么意思呢(什么是SEO?) 当然,很多人注意到上面这个括号(),其实这个只是双标题形式,也有不用括号的,如:SEO是什么意思呢?什么是SEO?甚至这个括号你也可用双引号或者别的符号等等。 上面在解释SEO双标题里,两个意思相近,用户需求词,这两个是写好双标题一个核心,下面等会再讲。我相信你有一个问题就是:这不算是SEO堆积关键词作弊吗? 我先不回答你这个问题,我先来说说SEO双标题有什么作用? 作用一:抢占用户不同搜法两个长尾关键词 大家都知道,我们说法有普通话跟方言;我们写文章,也有书面语和口语,其实两个意思是一样的,所以我们的潜在用户搜索关键词就会有不同搜法。 所以,你不知道用户会用哪个关键词搜索,一个标题布局两个关键词,这样就可以多一次机会。比如我卖站三界的,写一篇站三界上市新闻,可以这样写:2022年站三界什么时候上市?2022站三界上市时间。 作用二:可以重复布局主关键词标题密度 大家都知道,关键词密度是有助于SEO的,只是有些关键词密度过度刻意优化了,所以才会被降权。分享一下流量汇里一个会员分享,如图: 还是以【站三界上市】这个关键词写双标题举例:2022年站三界什么时候上市?(2022年站三界上市时间) 这里站三界上市是不是重复两次? 作用三:为了满足用户搜索需求而写 写双标题是为了满足用户搜索需求而写,是指那些专门找了用户需求关键词,而且内容里一定也满足,但我们看到很多双标题仅是SEO角度! 什么是用户搜索需求角度,还是以站三界上市举例,如图 上面圈中的就是用户搜索需求词,其实,其它行业的词也可以用这种来查找和收集。 看到这,上面那个说SEO双标题算不算关键词堆积,只能告诉你,看你怎么看这个问题,你说他算也算,你说他不算也不算。有些人用这个有效果,有些人没有效果,下面会继续讲到哈。 SEO双标题利于收录和排名吗? 可以肯定告诉你的是,SEO双标题与网页收录和排名没有直接关系!所以,没有利于收录和排名一说! 网页的收录,取决于三个点,一个是网页的内容质量,一个是网页这个模板,还有一个是网页内容时效性综合因素决定。 而关键词排名,取决于这个网页的权重和用户数据,简单来说就是网站本身权重会传递网页去,用户搜索后的点击数据也会影响这个关键词排名。再再白话一点说,你网站本身权重高用上这个可能更好。 问题来了,没有说SEO双标题利于收录和排名,为啥还要用网站SEO优化还要用双标题?上面双标题作用说了哈。 SEO双标题怎么写? SEO双标题怎么写?上面讲作用举了具体怎么写的参考,这里AB模板网说一下双标题怎么写流程吧。 第一步,列出业务关键词进行挖掘长尾词。比如,你要写百度SEO业务,挖掘出的词如下截图: 第二步,收集和整理用户需求关键词。比如我在这个百度SEO的长尾词百度SEO排名优化,去看用户搜索的需求词,如图: 我们可以得出有,百度SEO排名优化公司哪家号,百度SEO排名优化软件、价格等。 第三步,布局在标题中去。我们这里布局进去,是指同意思,如果是不同意思,那么内容里就要有不同内容对应,那么也不算是。 比如,我们双标题举例: 1、百度SEO排名优化多少钱?百度SEO排名优化价格 2、百度排名优化多少钱?百度SEO排名优化哪家好? 上面1是双标题,上面2就是两个不同内容组合哈。为什么SEO双标题1算是,2不是呢,因为1这种对于那些做内容采集来说标题和内容更一致性一些。 SEO双标题还有很多种写法,比如好处与优点/优势是同一个意思。网站SEO的好处有哪些,网站SEO优势。我再举例截图你看看吧~ 做好SEO双标题核心是什么? 先放一张上面最后一张图流量汇会员实际案例他的总结,如下图: 我们想说,做好网站SEO双标题主要在三个核心点: 1、网站双标题里的长尾关键词是满足用户的搜索需求词 关于如何找到用户需求词,上面已经举例了,但同时,你也要以对自己业务要了解。比如以前做了PCB一个项目,其实PCB还有一个名字叫电路板,说电路板你可能还不知道,简单说就是电脑、手机、电视里面那个芯片板子,长下面这样,那些立起元器件不是哈。 而关于PCB打样用户需求词如下图: PCB打样流程是什么?电路板打样流 PCB打样多少钱?PCB打样的价格介绍 2、网页里的内容一定要与网站双标题相关,相对应最好,不管你是原创还是整合的 3、该内容网页模板符合SEO与用户体验。 符合SEO是指什么?一是是指这个页面模板是否有SEO三要素 二是指页面左右下有没有相关推荐相关,这点也算是用户体验。 用户体验主要是指除了用户看了还可以看推荐外,另外就是整个页面打开速度快不快,进来是不是广告把主要内容都遮住了等,这个就是用户体验优化哈。当然,这个内容必须要解决用户搜索需求,这个是重点之重! 额外补充说一下: 网站SEO双标题这个玩法不是最新的,已经有人实测玩得不错了,后续会不会出相应算法来针对我不知道,但我可以补充的就是,能用在网站上,第三方平台可以用吗?完全可以! 比如,你写知乎、发搜狐号其实都是可以的,后续也会用起来,到时再来同步大家效果,我搜了下,发觉很多B2B,包括百度旗下爱采购也在这么玩,你玩不玩?
不同质量的网页在浏览体验上会有很大的差距。一个高质量的网页应该给用户一个积极的浏览体验。用户希望看到干净易读的网页。混乱的布局和过多的广告会影响用户访问网页的主要内容。在网站排名改进百度搜索引擎网页质量体系中,用户对网页主要内容的获取成本与浏览体验成反比,即获取成本越高,浏览体验越低。面对内容质量相似的网页,那些浏览体验好的网页更有可能获得更高的排名。对于浏览体验差的网页,百度搜索引擎会降低其呈现的概率,甚至拒绝将其包含在内影响用户浏览体验的因素很多。目前,百度关键词排名有所提高。搜索引擎主要从内容布局和广告影响力两个方面来考虑网页:内容布局:用户进入网页时看到的第一件事是内容布局,这决定了用户对网页的第一印象和内容获取的成本广告影响:百度搜索引擎了解网站的生存和发展需要资金支持,并支持在网页上放置合法广告。网页的主要目的应该是满足用户的需求。最好的状态是“主内容与广告一起满足用户需求,以内容为主,广告为辅”,而不是让广告成为网页的主体 我们来举个例子看看百度搜索引擎是如何对网页的浏览体验进行分类的。网站管理员可以根据以下内容对自己网站的浏览体验进行比较和测试:1。良好的浏览体验:合理的页面布局,用户获取主要内容的成本低。一般来说,它具有以下特点:布局合理,布局美观,易于阅读和浏览;用户需要的内容占据了网页最重要的位置;它可以通过页面标签或页面布局清楚地区分哪些广告广告不会占据主要内容的位置,也不会妨碍用户获取主要内容。浏览体验差:页面布局和广告放置会影响用户对主要内容的访问,增加用户访问信息的成本,并让用户反感。包括但不限于以下情况:文本未被包装或分割,用户难以阅读字体与背景颜色相似,内容难以区分;页面布局不合理,页面第一屏看不到有价值的主要内容广告涵盖了主要内容;或者在一般分辨率下,第一屏是广告,主要内容看不见;弹出式广告太多;影响阅读的浮动广告太多点击链接时,会出现意外的弹出窗口;广告和内容混淆,难以区分;
友链交换是一种seo技术。对于提高网站质量和关键词,外部链接和友好链接起着不可或缺的作用,尽管越来越多的seo理论都在提倡外部链接和友好链接的无用性。,但实际上外链和朋友链对网站还是有非常积极的作用的。通知好友链也是一种外链,关联度高的好友链是另一种优质外链。友情链接,顾名思义,就是站点之间的相互链接。假设你是A站,对方是B站,双方在各自的网站上放了对方的锚文本链接(一般是首页,也有全站链接,还有单独的好友链接页面),那么,对于双方来说,他们可以把这种链接称为友情链接。跟大家分享一下seo交换友情链的6大原则:1:链接的中文文本反映了相关性。相关链接质量很高。我们交换友好的链接,这需要在文本中体现出来。假设你是一个seo网站,那么你可以交换很多包含seo的词,相关性体现在文本中。在实践中会出现这样的问题,seo站点属于网络营销,很多seo站点交换网络营销站点,严格来说这是不合适的。为什么?我们会认为seo是一种网络营销,两者当然是相关的,但是搜索引擎只是一套程序,它不会理解两者之间的关系。二:被交换方的网站权重较高。链接可以传递权重和传递权限值。一个更高权限的网站给你一个链接,权重会被传递,所以你从这个链接中获得更多的收益。当然,在很多情况下,这只是小概率事件。交换同等权重的网站更有可能。3:更新频率快的网站更值得交流。更新频率又快又稳定的网站,更容易被搜索引擎蜘蛛抓取,而蜘蛛通过这类网站到达自己网站的频率也会更大,可以促进你内容的收录和权重。四:链接到对方网站不算太少。如前所述,链接可以传递权重。假设每个站点有10个友情链接,总共有30个站点,那么理论上你可以获得300个权重进行传递。如果每个站点有30个附属链接,那么您可以获得900个站点权重以通过。这与目前很多人交换朋友链的原则是背道而驰的。他们认为对方的朋友链数量不宜过多。事实上,这种看法是片面的。五:对方网站无降级等权利。假设你和一个被严重降级甚至被K的网站交换了好友链接,那么你的网站可能会受到牵连。我把这种情况称为“联合坐着”。事实上,这种情况也相当可观。第六:经常检查网站友好链接的连接状态。世界上大多数人都是心地善良的,但还是有少数人别有用心。有人和你交换过几天就删了;有人用程序作弊,貌似只有30个好友链接,其实很多;有些人使用nofollow标签来禁止其网站的权重转移等。需要经常查看好友链,看看有没有问题。做朋友链容易,做朋友链就比较难。如果网站有完善的友情链接,那么好处是很大的,可以有效提高网站优化效果。
在互联网上争取做好营销的,这款工具难免不得不懂。可以简单的来说蜘蛛池就是一种通过利用大型平台权重来获得百度收录以及排名的一种程序。蜘蛛池其中的一个功能就是可以帮助用户将大量的长尾关键字利用大型平台推送到百度进行收录与排名,通过百度蜘蛛池程序用户可以在短时间内将大量包含广告信息的页面推送到互联网中。并且这一切都是全自动化完成。蜘蛛池其实就是一种特殊的外链,网站一般外链是我们自己做到某个网站的内页(发外链)或和谁交换的友情链接,虽然现在对百度权重等项目几乎没什么影响了,但链接的口多了就容易让百度等的蜘蛛顺着这些口爬进我们的网站,如果你的网站质量不错(编程规范、内容好、更新及时、数量足等等)百度就可能很喜欢,常来爬取你的网站。蜘蛛池不一定是什么网站就能把你要做的关键词都能提升排名,最最关键的还是网站质量和用户体验,脱离了这个什么都是胡说。所谓蜘蛛池,指的是做大量泛站让搜索引擎收录,作为一个属于自己的外链资源。当有新的网站或新的页面时,把新URL放入到这些泛站资源页面上,可以马上获得蜘蛛的抓取和权重的一个传递。说白了蜘蛛池起的就是一种辅助作用,想当于一个中间人,可以让你和姑娘(搜索引擎各种蜘蛛)多见几次,但能否XX还看你小子自己的本事。而它的原理就是有些服务器运营商把你的网站链接到整个服务器上的所有网站上去了,我们通常把这些服务器运营商手上的服务器称为他们自己养的蜘蛛,就这些服务器,据我所知有分权重蜘蛛和非权重蜘蛛的,还有分普通池和繁殖池的,好像算法上繁殖池好一些,因为这种好像可以让你的网站自己模拟蜘蛛爬行。那么搜索引擎收录一个页面的机制是什么样的,有哪些考虑?搜索引擎收录页面的规则可不是发现页面就可以收录,并不是解决了所谓的“孤岛”问题之后,页面就可以很快被收录了。所以,关键点并不是在于发现。搜索引擎收录页面简单列列这些方面的因素至少有影响:1、新站的时间短。我觉得这个影响是最大的。就是如果你是个新网站,你的内页收录上就是慢。即使你的内容已经开始在慢慢走向正规了,但是有些不同的类型的页面,收录依然是慢。这点,我觉得如果不是相当数量的高质量链接,是很难改变这个情况。2、网站整体权重。如果是在新站周期内,你再加什么蜘蛛池也没用。可能反而有反面作用。网站整体权重会影响网站内页的收录速度。3、搜索收录可能分页面类型。例如,我们互联网十八般武艺的常规文章页收录都比较及时。但是专题页的收录非常缓慢,我们做了几个专题,现在超过了1个月时间还没收录。所以,这里面搜索引擎可能已经细化了收录策略。对不同的页面类型采取不同的收录机制。4、页面内容质量。页面内容的质量当然也会影响到页面的收录速度,这点也是肯定会有影响。5、网站更新频率。我们在「优化抓取频率的重要性」这篇文章里面也说过。其实要提高搜索引擎蜘蛛的来访次数,唯一的方法还是要通过网站本身的内容更新。频繁更新有质量的内容,才能够提高蜘蛛的来访次数。如果本身内容更新不多,外部引流的蜘蛛过多,最终发现没什么内容索引,蜘蛛来访的次数也会下降。我觉得从影响收录的影响来说,前面2点影响最大,也就是网站权重的影响。如果权重不高,又是新站的话,内容的收录肯定是不会那么顺利。蜘蛛池本质上是希望解决一个什么问题呢,核心就是引蜘蛛的问题。引蜘蛛的目的是在于让蜘蛛发现网站里面这些新页面或者是还没被收录的页面。
1、update方法总结/***设置记录的某个字段值*支持使用数据库字段和方法*@accesspublic*@paramstring|array$field字段名*@parammixed$value字段值*@returninteger*/functionsetField($field,$value=''){};//设置某个字段的值,适用场景:适用于用户积分清零、余额清零等类似操作Db::name('table')->where('id',1)->setField('field',0);/***字段值(延迟)增长*@accesspublic*@paramstring$field字段名*@paraminteger$step增长值*@paraminteger$lazyTime延时时间(s)*@returninteger|true*@throwsException*/publicfunctionsetInc($field,$step=1,$lazyTime=0){};//自增某个字段的值,参数2不传时默认为自增1,适用场景:适用于用户积分增加、余额增加等类似操作,需要延时更新则传入第三个参数(单位秒),Db::name('table')->where('id',1)->setInc('field',2);/***字段值(延迟)减少*@accesspublic*@paramstring$field字段名*@paraminteger$step减少值*@paraminteger$lazyTime延时时间(s)*@returninteger|true*@throwsException*/publicfunctionsetDec($field,$step=1,$lazyTime=0){};//自减某个字段的值,参数2不传时默认为自减1,适用场景:适用于用户积分扣除、余额扣除等类似操作,需要延时更新则传入第三个参数(单位秒),Db::name('table')->where('id',1)->setDec('field',2);/***使用表达式设置数据*@accesspublic*@parammixed$value表达式*@returnExpression*/publicfunctionraw($value){};//自增或自减多个字段的值,raw方法内支持SQL函数,适用场景:适用于同时更新用户累计余额、当前余额等类似操作Db::name('table')->where('id',1)->update(['total_remain'=>Db::raw("total_remain+100"),'remain'=>Db::raw("remain+100"),]);2、select方法总结/***得到某个字段的值*@accesspublic*@paramstring$field字段名*@parammixed$default默认值*@parambool$force强制转为数字类型*@returnmixed*/publicfunctionvalue($field,$default=null,$force=false){};//查询某个字段的值,参数1支持SQL函数,适用场景:适用于获取用户余额、积分、名称等类似操作Db::name('table')->where('id',1)->value('field');//参数1为SQL函数时,如下、相当于使用TP5聚合查询Db::name('table')->where('id',1)->value('COUNT(*)ascount')['count'];//统计符合查询条件数据的行数Db::name('table')->where('id',1)->value('MAX(field)asmax')['max'];//获取符合查询条件数据的最大值Db::name('table')->where('id',1)->value('MIN(field)asmin')['min'];//获取符合查询条件数据的最小值Db::name('table')->where('id',1)->value('AVG(field)asavg')['avg'];//获取符合查询条件数据的平均值Db::name('table')->where('id',1)->value('SUM(field)assum')['sum'];//获取符合查询条件数据的总和值/***得到某个列的数组*@accesspublic*@paramstring$field字段名多个字段用逗号分隔*@paramstring$key索引*@returnarray*/publicfunctioncolumn($field,$key=''){};//查询某一列的值,适用场景:适用于获取关联订单商品ID、用户所有店铺ID、获取班级所有学生姓名等类似操作Db::name('table')->where('order_id',1)->column('field');/***COUNT查询*@accesspublic*@paramstring$field字段名*@returninteger|string*/publicfunctioncount($field='*'){};//统计符合查询条件数据的行数,适用场景:适用于获取用户未读消息数量等类似操作Db::name('table')->where('status',1)->count();/***SUM查询*@accesspublic*@paramstring$field字段名*@returnfloat|int*/publicfunctionsum($field){};//获取符合查询条件数据的总和值,适用场景:适用于获取用户总支出、总收入金额等类似操作Db::name('table')->where('pay_type',1)->sum();/***MIN查询*@accesspublic*@paramstring$field字段名*@parambool$force强制转为数字类型*@returnmixed*/publicfunctionmin($field,$force=true){};//获取符合查询条件数据的最小值,适用场景:适用于获取积分排名最后的用户等类似操作Db::name('table')->where('status',1)->min();/***MAX查询*@accesspublic*@paramstring$field字段名*@parambool$force强制转为数字类型*@returnmixed*/publicfunctionmax($field,$force=true){}; //获取符合查询条件数据的最大值,适用场景:适用于获取积分排名第一的用户等类似操作Db::name('table')->where('status',1)->max();/***AVG查询*@accesspublic*@paramstring$field字段名*@returnfloat|int*/publicfunctionavg($field){};//获取符合查询条件数据的平均值,适用场景:适用于班级平均分等类似操作Db::name('table')->where('status',1)->avg();3、insert方法总结$insert=[['order_id'=>1,'goods_id'=>1,'attr_id'=>1],['order_id'=>1,'goods_id'=>1,'attr_id'=>1],['order_id'=>1,'goods_id'=>1,'attr_id'=>1]];//插入多条数据,适用场景:适用于用户购买商品记录订单商品信息等类似操作Db::name('table')->insertAll($insert);$insert=['order_id'=>1,'goods_id'=>1,'attr_id'=>1];//插入一条数据并返回自增列值,适用场景:适用于用户购买商品生成订单后记录订单关联信息时获取生成订单的自增ID等类似操作Db::name('table')->insertGetId($insert);4、链式查询//往分页查询的结果集内添加数据,适用于需要使用关联表查询到的数据再做另外的查询并存入数据集$model->where('o.status<>6')->order('iddesc')->paginate()->each(function($item){$service_ids=Db::name('order_service')->where('order_id',$item['id'])->column('service_id');$service_names=Db::name('service')->where('id','in',$service_ids)->column('name');$item['service_names']=implode(',',$service_names);return$item;});//获取分页查询结果集内的全部数据,适用于需要使用分页数据内的某些数据再做另外的查询$list=$model->where('o.status',0)->where('o.pay_status',0)->order('o.iddesc')->paginate();//分页查询$data=$list->toArray();//获取分页查询结果集合并将结果集合转换为数组(包含分页信息)
1.控制器中调试Sql语句:在模型中我们可以通过User::getLastSql()来打印Sql语句。在一些API控制器中我们一般不会去写模型,所以可以采取链式调用的方法来实现。dump(Db::name('tablename')->getLastSql());//查询当前表的最后一次sql语句。2.Db::name/Db::table和db的区别Db::name('user')->where(['id'=>1])->select();//数据库中的表名为fa_userDb::table()使用这个必须指定完整的表名Db::tale('fa_user')->where(['id'=>1])->select();//数据库中的表名为fa_userdb(’’)是助手函数,注意此助手函数,每次都会重新连接mysql!!所以这个助手函数少使用。db('user')->where(['id'=>1])->select();//数据库中的表名为fa_usermysql会计统计某个字段的重复数量selectip,count(*)fromtablenameGroupbyipORDERBY`count(*)`DESC
//删除publicfunctiondelete($id){$message="删除失败";$imgurl=Db::name('imgfile')->where('id',$id)->value('url');if(empty($imgurl)){#code...}else{$url=$_SERVER["DOCUMENT_ROOT"].json_decode($imgurl);//halt($url);if(model('Imgfile')->destroy($id)){unlink($url);$message="已删除";}}return$message;}//批量删除publicfunctiondelall(){$status=0;$message="删除失败";$data=$this->request->param();$allid=$data['id'];$ids='';foreach($allidas$k=>$value){$ids[$k]=$value;$imgurl[$k]=Db::name('imgfile')->where('id',$value)->value('url');}$num=count($allid);if(model('Imgfile')->destroy($ids)){foreach($imgurlas$key=>$val){$url[$key]=$_SERVER["DOCUMENT_ROOT"].json_decode($imgurl[$key]);unlink($url[$key]);}$status=1;$message="删除成功";}return['status'=>$status,'message'=>$message,'num'=>$num];}
使用模型查询的返回的结果集为对象,其中里面的数据,TP5框架会自动对里面的data:protected该项进行处理。但有时我们就想要数据,就想返回一个数组就可以了,怎么办?有两种方法可以实现:方法一:找到TP5框架中的database.php文件,该文件中找到resultset_type该项,将后面的array改成hinkCollection【注意大小写】//数据集返回类型'resultset_type'=>'array',改为//数据集返回类型'resultset_type'=>'hinkCollection',在查询数据的时候,在后面加上->toArray();例如:$data=User::select()->toArray();方法二:在模型里设置首先在Model中添加该属性:protected$resultSetType='collection';在查询数据的时候,在后面加上->toArray();例如:$data=User::select()->toArray();tp5输出的数组如何放到js里使用直接使用会报错,必须要转换:vararr={:json_encode($user)};console.log(arr)输出打印结果如下:(2)[{…},{…}]
以下这些是项目中用到的,封装的方法,如果有问题虚心求教。截取url参数functiongetQueryObject(url){url=url==null?window.location.href:urlconstsearch=url.substring(url.lastIndexOf('?')+1)constobj={}constreg=/([^?&=]+)=([^?&=]*)/gsearch.replace(reg,(rs,$1,$2)=>{constname=decodeURIComponent($1)letval=decodeURIComponent($2)val=String(val)obj[name]=valreturnrs})returnobj}getQueryObject('https//www.zhansanjie.com?id=1111&type=edit')格式化时间(方法1)functionparseTime(time,cFormat){if(arguments.length===0){returnnull}constformat=cFormat||'{y}-{m}-{d}{h}:{i}:{s}'letdateif(typeoftime==='object'){date=time}else{if((typeoftime==='string')&&(/^[0-9]+$/.test(time))){time=parseInt(time)}if((typeoftime==='number')&&(time.toString().length===10)){time=time*1000}date=newDate(time)}constformatObj={y:date.getFullYear(),m:date.getMonth()+1,d:date.getDate(),h:date.getHours(),i:date.getMinutes(),s:date.getSeconds(),a:date.getDay()}consttime_str=format.replace(/{(y|m|d|h|i|s|a)+}/g,(result,key)=>{letvalue=formatObj[key]//Note:getDay()returns0onSundayif(key==='a'){return['日','一','二','三','四','五','六'][value]}if(result.length>0&&value<10){value='0'+value}returnvalue||0})returntime_str}//使用parseTime(newDate(),'{y}-{m}-{d}{h}:{i}:{s}')格式化时间(方法2)/***格式化时间*/functionNewTime(time){if(!time)time=newDate()constt=newDate(time)//你已知的时间t.setTime(t.setMinutes(t.getMinutes()))//设置新时间比旧时间多一分钟constY=t.getFullYear()letM=t.getMonth()+1letD=t.getDate()letHH=t.getHours()letMM=t.getMinutes()letSS=t.getSeconds()if(M<10)M='0'+Mif(D<10)D='0'+Dif(HH<10)HH='0'+HHif(MM<10)MM='0'+MMif(SS<10)SS='0'+SS//letdate_value=Y+'-'+M+'-'+D+''+HH+':'+MM+':'+SS;constdate_value=Y+'-'+M+'-'+D+''+HH+':'+MM+':'+SSreturndate_value}存储、获取、删除sessionStoragefunction__setItem(name,content){if(!name)return;if(typeofcontent!=='string'){content=JSON.stringify(content);}window.sessionStorage.setItem(name,content);};function__getItem(name){if(!name)return;returnwindow.sessionStorage.getItem(name);};function__removeItem(name){if(!name)return;window.sessionStorage.removeItem(name);};检测手机号function_isMobile(mobile){varreg=/^[1][3,4,5,7,8][0-9]{9}$/;if(reg.test(mobile))returntrue;elsereturnfalse;};将base64转换为文件functiondataURLtoFile(dataurl,filename){vararr=dataurl.split(','),mime=arr[0].match(/:(.*?);/)[1],bstr=atob(arr[1]),n=bstr.length,u8arr=newUint8Array(n);while(n--){u8arr[n]=bstr.charCodeAt(n);}returnnewFile([u8arr],filename,{type:mime});}替换电话号码中间四位functionreplacePhone(num){letmphone=num;if(_isMobile(num)){mphone=num.substr(0,3)+'****'+num.substr(7);}returnmphone;};去除内容中的空格functiondeblank(str){str=str.replace(/\s*/g,'');returnstr;};电话号码格式344替换functionphoneSeparated(num){letmphone=num;if(_isMobile(num)){mphone=num.substring(0,3)+''+num.substring(3,7)+''+num.substring(7,11);}returnmphone;};银行卡格式4444替换functioncardSeparated(num){letindex=num?num.length/4:0;letresult='';for(leti=0;i<index;i++){result+=num.substring(i*4,(i+1)*4)+'';}returnresult;};身份证格式生日替换functionidentityCardSeparated(num){if(num.length===18){varstr=num.substr(0,6)+'********'+num.substr(14);returnstr;}else{returnnum;}};护照号替换functionpassportSeparated(num){if(num.length>4){varstr=num.substr(0,num.length-4)+'****';returnstr;}else{returnnum;}};卡号每隔四位加短线functioncardNoFormat(cardNo){if(typeofcardNo=='number'){cardNo=String(cardNo).replace(/\D/g,'').replace(/....(?!$)/g,'$&-');}else{cardNo=cardNo.replace(/\D/g,'').replace(/....(?!$)/g,'$&-');}returncardNo;};console.log(cardNoFormat('124141251512'))console.log(cardNoFormat(1233124124124124))每隔四位加空格functionfourSpace(num){varvalue=num.replace(/\D/g,'').replace(/....(?!$)/g,'$&');returnvalue;};fourSpace('13122223333')身份证校验functionIdentityCodeValid(code){letcity={11:'北京',12:'天津',13:'河北',14:'山西',15:'内蒙古',21:'辽宁',22:'吉林',23:'黑龙江',31:'上海',32:'江苏',33:'浙江',34:'安徽',35:'福建',36:'江西',37:'山东',41:'河南',42:'湖北',43:'湖南',44:'广东',45:'广西',46:'海南',50:'重庆',51:'四川',52:'贵州',53:'云南',54:'西藏',61:'陕西',62:'甘肃',63:'青海',64:'宁夏',65:'新疆',71:'台湾',81:'香港',82:'澳门',91:'国外'};lettip='';letpass=true;if(!code||!/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)){tip='身份证号格式错误';pass=false;}elseif(!city[code.substr(0,2)]){tip='地址编码错误';pass=false;}if(!pass)message.error(tip);returnpass;};HmacSHA256加密functionencryptHmacSHA256(value){constuserInfo=getUserInfo();letkey='';if(userInfo.data){key=userInfo.data.publicKey;}letciphertext=CryptoJS.HmacSHA256(value,key);lethashInBase64=CryptoJS.enc.Base64.stringify(ciphertext);returnhashInBase64;};对象中的null转为空字符串function_replaceNull(obj){if(typeofobj==='object'){Object.keys(obj).forEach(element=>{letvalue=obj[element];if(value===null||value===undefined){//obj[element]='';deleteobj[element];}elseif(typeofvalue==='object'){_replaceNull(value);}});}returnobj;};文件导出function_checkoutFile(fileName,response){console.log('response');console.log(response);letblob=newBlob([response],{type:'application/vnd.ms-excel'});letobjectUrl=URL.createObjectURL(blob);consta=document.createElement('a');a.setAttribute('href',objectUrl);a.setAttribute('download',fileName);a.click();URL.revokeObjectURL(objectUrl);};url文件导出function_urlExportFile(url){consta=document.createElement('a');a.setAttribute('href',url);a.click();};url校验functionvalidateURL(url,list){leti=0;if(list){list.forEach(el=>{if(url===el){i=1;}});}if(i!==0)returnfalse;if(i===0)returntrue;};页面可视高度、页面可视宽度functionclientHeight(){letclientHeight=document.getElementById('root').clientHeight;letoffsetHeight=document.getElementById('root').offsetHeight;returnclientHeight||offsetHeight;};functionclientWidth(){letclientWidth=document.getElementById('root').clientWidth;letoffsetWidth=document.getElementById('root').offsetWidth;returnclientWidth||offsetWidth;};格式化金额functionformatMoney(val){varvalStr=String(Number(val).toFixed());varprefix_val,suffix_val,prefix_result,prefix_arr=null;varj,t,i=0;letnegativeFlag=false;//负数if(isNaN(Number(valStr))){returnval}if(Number(valStr)<0){negativeFlag=true;valStr=String(Math.abs(valStr))}if(valStr.length<3){valStr=prefix(valStr,3)}prefix_val=valStr.slice(0,-2)suffix_val=valStr.slice(-2)prefix_result=[]prefix_arr=prefix_val.split("")j=0t=3for(i=prefix_arr.length-1;i>=0;i--){j++if(j===t||i===0){prefix_result.unshift(prefix_arr.splice(i).join(""))j=0}}if(negativeFlag){return'-'+prefix_result.join(",")+"."+suffix_val}else{returnprefix_result.join(",")+"."+suffix_val}}formatMoney(1111111)
控制器调用/***[delimg删除单张图片]*@return[type][description]*/publicfunctiondelimg(){if(request()->isPost()){$pic=input('request.pic');//$pic为文件路径returndelimg($pic);}}公共方法/***[delimg删除文件]*@param[type]$pic[description]*@return[type][description]*/functiondelimg($pic){$path=__FILE__;$paths=substr($path,0,strpos($path,'application'));$pic1=$paths."public".DS.$pic;if(file_exists($pic1)){@unlink($pic1);returntrue;}returnfalse;}