JS添加url参数如果有的话则更改参数得方法

方法如下仅供参考:

/**
 * 
 * @param name  参数
 * @param value 参数值
 * @param url   要改变的url
 * @returns {string}  返回xinurl
 * @constructor
 */
function ChangeParam(name,value,url){
    var newUrl="";
    var reg = new RegExp("(^|)"+ name +"=([^&]*)(|$)");
    var tmp = name + "=" + value;
    if(url.match(reg) != null){
        newUrl= url.replace(eval(reg),tmp);
    }else {
        if(url.match("[\?]")){
            newUrl= url + "&" + tmp;
        }
        else {
            newUrl= url + "?" + tmp;
        }
    }
    return newUrl;
}

下面再来个获取指定url参数值得方法:

//获取指定url参数
function getURLParam(strParamName, url) {
    var strReturn = "";
    var strHref = url.toLowerCase();
    if (strHref.indexOf("?") > -1) {
        var strQueryString = strHref.substr(strHref.indexOf("?") + 1).toLowerCase();
        var aQueryString = strQueryString.split("&");
        for (var iParam = 0; iParam < aQueryString.length; iParam++) {
            if (aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1) {
                var aParam = aQueryString[iParam].split("=");
                strReturn = aParam[1];
                break;
            }
        }
    }
    return strReturn;
}

PHPExcel在PHP7中,save(‘php://output’)出现ERR_INVALID_RESPONSE错误的解决方法

在php7之前是可以正常导出的,在php7中使用save(‘php://output’)出现ERR_INVALID_RESPONSE的错误主要是下面错误导致。

1.header和缓冲区的错误导致,下面示例代码可以正常导出:

header('Content-type: application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.xls"');
header("Content-Disposition: attachment; filename=$fileName.xls");
header('Cache-Control: max-age=0');
//header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
//header ('Cache-Control: cache, must-revalidate');
header ('Pragma: public');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');

2.错误语法导致:打开PHPExcel\Calculation\Functions.php文件,删除掉581行的break即可。

 

具体讨论可以看这里(国外的,打开有点慢):http://stackoverflow.com/questions/8566196/phpexcel-to-download

wordpress文章列表页获取畅言评论数方法

自从多说评论关闭后,相信很多站长都转向了畅言,本站也是前不久刚换,换了以后呢,发现一个问题,就是在列表页面无法获取到文章页面的评论数,于是小弟就去畅言官方文档找答案,现在就把这个方法给大家说一下:

畅言官方文档这么说:

二、评论页外获取评论数

1、如果配置过sourceid,可将如下代码放置到需要显示评论的位置。

<span id = "sourceId::${source_id}" class = "cy_cmt_count" ></span>
<script id="cy_cmt_num" src="http://changyan.sohu.com/upload/plugins/plugins.list.count.js?clientId=${client_id}">
</script>

注意:

请将${source_id}替换成欲显示评论数的文章页的id。

请将${client_id}替换成您的APPID,APPID在后台-设置-通用设置-高级设置中获取。

 

然后这个时候看我之前文章列表页代码如下:文章列表文件名:excerpt.php

<?php if( !$_comment ){ ?><span class="muted"><i class="fa fa-comments-o"></i> <?php <?php if( !$_comment ){ ?>
<span class="muted"><i class="fa fa-comments-o"></i> <?php  if ( comments_open() ) echo '<a target="_blank" href="'.get_comments_link().'">'.get_comments_number('0', '1', '%').'评论</a>' ?>
</span><?php } ?>

这个代码让懂php的人 估计会一下看懂,可是让其他人来看估计困难一点,没事这里教大家替换方式:

获得文章id的方法就是:the_ID();

这是我改变之后的代码:

<?php if( !$_comment ){ ?><span class="muted"><i class="fa fa-comments-o"></i> <?php
   if ( comments_open() ) echo '<a target="_blank" href="'.get_comments_link().'">';?>
<span id = "sourceId::<?php the_ID(); ?>" class = "cy_cmt_count" ></span>评论</a></span>
<?php } ?>

最后在页面底部把JS引入,记得加上APPID。

最后来一张效果图:

 

 

 

 

 

 

最后,如果大家还有不会替换的话,请联系本人,在本站主页添加QQ,微信。本人很乐意帮助大家解决问题。

解决微信浏览器刷新页面缓存的几种方式

可能这个问题大家也会遇到,在微信浏览器内执行window.location.reload(),正常情况reload()后页面依然会向后台发出请求,但在微信浏览器中reoad后请求的一直是第一次打开页面时请求的数据。可以理解为请求被缓存了,经过测试有俩种方式来解决:

1:设置<meta>头信息

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> 
<meta http-equiv="Pragma" content="no-cache" /> 
<meta http-equiv="Expires" content="0" />

详解:

1.1:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />

no-cache:指示请求或响应消息不能缓存
no-store:用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。缓存将不存储response,包括header和body
must-revalidate:作用与no-cache相同,但更严格,强制意味更明显。但这只是理论上的描述,根据我在ff6上的测试,它几乎不起作用:只要请求的频率加快到一定程度,服务器就接收不到请求。

1.2:

<meta http-equiv="Expires" content="0" />

指定Expires值为一个早已过去的时间,那么访问此网时若重复在地址栏按回车,那么每次都会重复访问,设置为0,表示立即过期。

1.3:

<meta http-equiv="Pragma" content="no-cache" />

禁止浏览器从本地计算机的缓存中访问页面内容。注意:这样设定,访问者将无法脱机浏览。

2:通过添加随机数:

使用window.location.href=”window.location.href+随机数” 代替 window.location.reload()。

切记,一定要加随机数,否则一样不会起作用。

 

[thinkphp5]volist标签判断循环奇偶条数输出

这个判断奇偶条数经常在一些特殊的样式时用到,这里分享俩种方法:

1.用默认得mod属性,输出偶数记录

<volist name="data" id="item"  mod="2" >
   <eq name="mod" value="1">
      //偶数记录添加class even
      <li class="car-info-item even">
      <else/>
      <li class="car-info-item">
   </eq>
</volist>

2.用默认循环变量$i,输出偶数记录

<volist name="data" id="item"  mod="2" >
   <if condition="$i%2==0">
      <li class="car-info-item even">
      <else/>
      <li class="car-info-item">
   </if>
</volist>

解决jquery validate对隐藏元素hidden不进行验证的方法

validation默认不会对hidden元素进行验证的,我们得自己设置一下ignore: “”,很简单吧,代码如下:

$("#fyform").validate({
			ignore: "",//不验证的元素
			rules:{
				wcname:"required",
				wcmp:"required",
				wcaddress:"required",
				wccompany:"required",
				wclogo:"required"
			},
			messages:{
				wcname:"请输入姓名",
				wcmp:"请输入联系方式",
				wcaddress:"请输入地址",
				wccompany:"请输入企业信息",
				wclogo:"请上传logo"
			},

下拉加载刷新thinkphp代码设计(防游品味)

具体demo这里就不提供了,具体效果可以去游品味上看,只说一下设计原理,大家将就看一下。

代码中的下一页和总页码都是后台计算得到的。

首先是JS代码如下:

<script>
   $(function(){
      //数据是否在加载中
      var isLoading = false;
      //加载次数
      var count = 0;
      //滚动加载次数
      var scrollCount = 2;
      //检测
      function loadMore(){
         $(window).scroll(function(e){
            //只需滚动加载5次
            if(count > scrollCount) return;

            var domH = $(document).height();
            var sTop = $(document.body).scrollTop();
            var h = $(window).height();
            if(domH < (sTop + h + 300)){
               loadMoreGame();
            }
         });
      }

      //加载更多游戏
      function loadMoreGame(){
         //如果正在加载中,则返回
         if(isLoading) return;
         isLoading = true;
         var $loadMore = $("#loadMore");
         var url = $loadMore.attr("next-page");

         var next = $loadMore.attr("next");//获取下一页
         var pagenum = $loadMore.attr("pagenum");//总页码
         
         if(parseInt(next)>parseInt(pagenum)){
            $(".loading").text("没有了");
            return;
         }

         $.ajax({
            url:url,
            success:function(result){
               if(result){
                  var $obj = $("<div>"+result+"</div>");
                  $obj.find(".section-bd .evaluate-list .item").appendTo($(".evaluate-list"));
                  var nurl = $obj.find(".ypw-load-more").attr("next-page");
                  //设置下一页的url
                  $loadMore.attr("next-page",nurl);

                  var next = $obj.find(".ypw-load-more").attr("next");
                  $loadMore.attr("next",next);


                  isLoading = false;
                  //加载次数增加一次
                  count ++;
                  if(count > scrollCount){
                     $loadMore.find(".loading").hide();
                     //大于5次则点击加载
                     $loadMore.find(".load").show().click(function(){
                        $loadMore.find(".loading").show();
                        $(this).hide();
                        //加载更多游戏
                        loadMoreGame();
                     });
                  }
               }
            }
         });
      }
   })
</script>

html代码大致如下:

   <div class="section-bd">
     <ul class="list evaluate-list">
            <volist name="data" id="item">
   <li class="item">
      <div class="evaluate-sub-pic">
         <img src="/static/wap_new/images/avatar.png" alt="" class="evaluate-avatar">
      </div>
      <div class="evaluate-sub-desc">
         <div class="evaluate-header">
            <h3 class="evaluate-name">{fy_$item.username}</h3>
            <div class="evaluate-view">
               <i class="icon icon-eye"></i> {fy_$item.fpclick}
            </div>
            <small class="evaluate-time">{fy_$item.fpcreatetime|date="Y-m-d h:i",###}</small>
         </div>
         <div class="evaluate-body">
            <h5 class="comment-title"><a style="font-size: .3rem;" href="/home/forum/detail/id/{fy_$item.fpid}">{fy_$item.fptitle}</a></h5>
            <div class="comment">
               {fy_$item.fpcontent|strip_tags|iconv_substr=0,60,'utf-8'}
            </div>
         </div>
         <div class="evaluate-footer">
             <ul class="group-link">
                <li class="link link-divider">
                     <a href="#">
                        <i class="icon icon-comment"></i>
                        {fy_$item.frnum}
                     </a>
                </li>
                <li class="link">
                   <a href="#">
                      <i class="icon icon-like"></i>
                      {fy_$item.fpclick}
                   </a>
                </li>
             </ul>
         </div>
      </div>
   </li>
            </volist>
</ul>
    <div  class="ypw-load-more" pagenum="{fy_$pagenum}" next="{fy_$next}" id="loadMore" next-page="/home/forum/forum_list?p={fy_$next}">
     <div class="loading" style="display: none;" >
      正在加载 请稍后···
     </div>
     <div class="load" style="display: none;">
      <span>点击加载更多</span>
     </div>
    </div>
    <!-- /.evaluate-list -->
   </div>

接口返回代码设计:

<div class="section-bd">
<ul class="list evaluate-list">
   <volist name="data" id="item">
      <li class="item">
         <div class="evaluate-sub-pic">
            <img src="/static/wap_new/images/avatar.png" alt="" class="evaluate-avatar">
         </div>
         <div class="evaluate-sub-desc">
            <div class="evaluate-header">
               <h3 class="evaluate-name">{fy_$item.username}</h3>
               <div class="evaluate-view">
                  <i class="icon icon-eye"></i> {fy_$item.fpclick}
               </div>
               <small class="evaluate-time">{fy_$item.fpcreatetime|date="Y-m-d h:i",###}</small>
            </div>
            <div class="evaluate-body">
               <h5 class="comment-title"><a style="font-size: .3rem;" href="/home/forum/detail/id/{fy_$item.fpid}">{fy_$item.fptitle}</a></h5>
               <div class="comment">
                  {fy_$item.fpcontent|strip_tags|iconv_substr=0,60,'utf-8'}
               </div>
            </div>
            <div class="evaluate-footer">
               <ul class="group-link">
                  <li class="link link-divider">
                     <a href="#">
                        <i class="icon icon-comment"></i>
                        {fy_$item.frnum}
                     </a>
                  </li>
                  <li class="link">
                     <a href="#">
                        <i class="icon icon-like"></i>
                        {fy_$item.fpclick}
                     </a>
                  </li>
               </ul>
            </div>
         </div>
      </li>
   </volist>
   <div class="ypw-load-more" pagenum="{fy_$pagenum}" next="{fy_$next}" id="loadMore" next-page="/home/forum/forum_list?p={fy_$next}">
      <div class="loading" >
         正在加载 请稍后···
      </div>
   </div>
</ul>
</div>

[微信公众平台开发]网页授权获取用户信息thinkphp示例代码

开头要说明一下,微信公众号获取授权有俩种方式,一种是使用AppID和AppSecret获取的access_token,一种是OAuth2.0授权中产生的access_token,

第一种是用户关注以及回复消息的时候,均可以获得用户的OpenID,然后通过AppSecret即可获取access_token,另外一种就是本文中要说到的。

–>通过OAuth2.0方式弹出授权页面获得用户基本信息:

1.在公众号后台设置回调域名

2.拼接请求构造代码,跳转至微信的用户授权页:看代码注释

protected function checkValid(){
   //检测用户是否已经授权登录
   if(empty(session('user'))){
      //没有的话跳转授权登录方法
      return $this->wx_login();
   }
   $this->UserId=session('user')['userid'];
   $this->UserOpenid=session('user')['useropenid'];
   $this->UserName=session('user')['username'];
   $this->UserHeadimg=session('user')['userheadpic'];
}


//微信用户授权登录
public function wx_login(){
   $appid = "xxxxxxxxxx";
   $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri=http://xxx.com/user/index/wx_callback.html&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';
   header("Location:".$url);
}

代码中的xxx.com就是第一步中设置的回调域名

在微信的用户授权页,如果用户选择了“同意授权”,则微信重新回跳的到用户设置的回跳地址时,会附带上code参数。

3.在回跳url中,首先从请求中取得code,然后根据code进一步换取openid和access_token,然后就可以根据openid和access_token调用微信的相关接口查询用户信息了。

//微信回调地址
public function wx_callback(){
   $appid = "xxxxxx";
   $secret = "xxxxxxx";
   $code = $_GET["code"];
   $get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
   //换取spenid和access_token
   $ch = curl_init();
   curl_setopt($ch,CURLOPT_URL,$get_token_url);
   curl_setopt($ch,CURLOPT_HEADER,0);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
   $res = curl_exec($ch);
   curl_close($ch);
   $json_obj = json_decode($res,true);
   //这里做token缓存

   //根据openid和access_token查询用户信息
   $access_token = $json_obj['access_token'];
   $openid = $json_obj['openid'];
   //获取用户信息接口
   $get_user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';

   $ch = curl_init();
   curl_setopt($ch,CURLOPT_URL,$get_user_info_url);
   curl_setopt($ch,CURLOPT_HEADER,0);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
   $res = curl_exec($ch);
   curl_close($ch);

   //解析json
   $user_obj = json_decode($res,true);
   //获得用户信息后  判断是否记录过
   $data['useropenid']=$user_obj['openid'];
   $data['username']=$user_obj['nickname'];
   $data['userheadpic']=$user_obj['headimgurl'];

   $user_data=db('user')->where('useropenid',$user_obj['openid'])->field('userid,useropenid,username,userheadpic')->find();

   if($user_data){
      //说明登录过  修改信息 存储session
      db('user')->where('userid',$user_data['userid'])->update($data);
      session('user',$user_data);
   }else{
      //未登录  先登记信息
      $data['usercreatetime']=time();
      $id=db('user')->insertGetId($data);
      $data['userid']=$id;
      session('user',$data);
   }

   //跳转回首页
   return $this->redirect('/user/index');

以上代码只是个基本例子,具体还待优化,仅供参考。