yii2实现 "上一篇,下一篇" 功能的代码实例
最近做了简答的文章详情页面,需要在页面底部加入上一篇,下一篇 按钮,分析了下,最基本需要有文章的标题和id(作为参数).
开始想的是当前的id加减1,但考虑到如果部分id丢失就不对了,于是分别查询比当前id大和小的记录并且限定为一条,于是有了以下代码。
代码如下,不对的地方请指教.
控制器中
代码如下 | 复制代码 |
//查询上-篇文章 $prev_article= 你的模型::find() ->andFilterWhere(['<','id',$id]) ->andFilterWhere([其他条件) ->orderBy(['id'=> SORT_DESC]) ->limit(1) ->one(); //查询下-篇文章 $next_article= 你的模型::find() ->andFilterWhere(['>','id',$id]) ->andFilterWhere(其他条件) ->orderBy(['id'=> SORT_ASC]) ->limit(1) ->one();
$model['prev_article'] = [ 'url'=> !is_null($prev_article) ? Url::current(['id'=>$prev_article->id]) :'javascript:;', 'title'=> !is_null($prev_article) ?$prev_article->title :'没有了', ];
$model['next_article'] = [ 'url'=> !is_null($next_article) ? Url::current(['id'=>$next_article->id]) :'javascript:;', 'title'=> !is_null($next_article) ?$next_article->title :'没有了', ];
return$this->render('view', 'model'=>$model, ); |
视图中
代码如下 | 复制代码 |
<divclass="left"> <p>上一篇: <a href="<?=$model['prev_article']['url']?>"> <?=$model['prev_article']['title']?> </a> </p> </div> <divclass="right"> <p>下一篇: <a href="<?=$model['next_article']['url']?>"> <?=$model['next_article']['title']?> </a> </p> </div> |
在平台开发过程中,项目分为前台(frontend)www.xxx.com和后台(backend) yun.xxx.com两部分,绑定两个域名, 我们知道在没有绑定域名的时候前后台可以同步登录和退出,但是绑定域名后就失效了,原因是session的作用域不同了。 两个域名的session作用域都只限制在了自己的域名上,我们的解决办法是将不同二级域名的作用域都改成顶级域名xxx.com。
在common/config/main.PHP里面增加如下代码:
代码如下 | 复制代码 |
//跨域session域名配置,获取当前主机名 $host_array=explode('.',$_SERVER["HTTP_HOST"]); //针对com域名,获取顶级域名 if(count($host_array) == 3) { define('DOMAIN',$host_array[1] .'.'.$host_array[2]); } //针对com.cn域名 elseif(count($host_array) == 4) { define('DOMAIN',$host_array[1] .'.'.$host_array[2].'.'.$host_array[3]); } else{ //echo "本系统不支持本地访问,请配置域名";exit; } define('DOMAIN_HOME','www.'. DOMAIN); define('DOMAIN_YUN','yun.'. DOMAIN); define('DOMAIN_API','api.'. DOMAIN); define('DOMAIN_EMAIL','mail.'. DOMAIN); define('DOMAIN_IMG','img.'. DOMAIN); |
修改components部分,改变session作用域
代码如下 | 复制代码 |
'user'=> [ 'identityClass'=>'common\models\User', 'enableAutoLogin'=> true, 'identityCookie'=> ['name'=>'_identity','httpOnly'=> true,'domain'=>'.'. DOMAIN], ], 'session'=> [ 'cookieParams'=> ['domain'=>'.'. DOMAIN,'lifetime'=> 0], 'timeout'=> 3600, ], |
通过上述配置后,多个二级域名间就可以实现同步登录和退出了。
小编推荐的这篇文章介绍了PHP使用preg_split()分割特殊字符(元字符等)的方法分析,非常实用,有兴趣的朋友快来看看吧。本文实例讲述了PHP使用preg_split()分割特殊字符(元字符等)的方法。分享给大家供大家参考,具体如下:
这里所说的特殊字符就是正则中使用的特殊字符,如: | . + 等
其它的先不说,来个实例:
代码如下 | 复制代码 |
$pattern="/[,-\\|\\.]/"; $subject="aaa,bbb,ccc-ddd-eee-fff|ggg|hhh.iii.jjj.kkk"; $spr=preg_split($pattern,$subject); print_r($spr); |
结果:
Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9] => [10] => [11] => [12] => [13] => [14] => [15] => [16] => [17] => [18] => [19] => [20] => [21] => [22] => [23] => [24] => [25] => [26] => [27] => [28] => [29] => [30] => [31] => [32] => [33] => [34] => [35] => [36] => [37] => [38] => [39] => [40] => [41] => [42] => [43] => )
很显然,这不是我们想要的结果,郁闷了好一会,才找到是什么原因:
把正则表达式内的特殊字符放到前面就没事了, 也就是
$pattern="/[\\|\\.,-]/";
结果:
Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd [4] => eee [5] => fff [6] => ggg [7] => hhh [8] => iii [9] => jjj [10] => kkk )
好了,这就是我们要的结果了
总结:当使用正则表达式中的元字符,普通字符进行 [ ]内的多个字符分割的时候,要把待转义的元字符放在前面.
本文详细介绍了用PHP的socket实现客户端到服务端的通信实例详解,非常实用,有兴趣的同学快来看看吧一、server.php服务端:
代码如下 | 复制代码 |
<?php error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); //本地IP $address='localhost'; //设置用111端口进行通信 $port= 111; //创建SOCKET if(($sock= socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) { echo"socket创建失败原因 ". socket_strerror($sock) ."\n"; }
if(($ret= socket_bind($sock,$address,$port)) < 0) { echo"创建套接字失败原因 ". socket_strerror($ret) ."\n"; } //监听 if(($ret= socket_listen($sock, 5)) < 0) { echo"监听失败原因 ". socket_strerror($ret) ."\n"; } do{ //接收命令 if(($msgsock= @socket_accept($sock)) < 0) { echo"命令接收失败原因: ". socket_strerror($msgsock) ."\n"; break; } $msg="\nPHP Test Server. \n"."用quit,shutdown,sun...等命令测试.\n";
@socket_write($msgsock,$msg,strlen($msg));
do{ if(false === ($buf= @socket_read($msgsock, 2048, PHP_NORMAL_READ))) { echo"socket_read() failed: reason: ". socket_strerror($ret) ."\n"; break2; } if(!$buf= trim($buf)) { continue; } if($buf=='quit') { break; } if($buf=='shutdown') { socket_close($msgsock); break2; } if($buf=='sun') { echo'what are you doing?'; } $talkback="Backinformation : '$buf'.\n"; socket_write($msgsock,$talkback,strlen($talkback)); echo"$buf\n"; }while(true);
socket_close($msgsock);
}while(true);
socket_close($sock); ?> |
二、client.php客户端:
代码如下 | 复制代码 |
<?php error_reporting(E_ALL); //端口111 $service_port= 111; //本地 $address='localhost'; //创建 TCP/IP socket $socket= socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if($socket< 0) { echo"socket创建失败原因: ". socket_strerror($socket) ."\n"; }else{ echo"OK,HE HE.\n"; } $result= socket_connect($socket,$address,$service_port); if($result< 0) { echo"SOCKET连接失败原因: ($result) ". socket_strerror($result) ."\n"; }else{ echo"OK.\n"; } //发送命令 $in="HEAD / HTTP/1.1\r\n"; $in.="Connection: Close\r\n\r\n"; $out=''; echo"Send Command.........."; $in="sun\n"; socket_write($socket,$in,strlen($in)); echo"OK.\n"; echo"Reading Backinformatin:\n\n"; while($out= socket_read($socket, 2048)) { echo$out; } echo"Close socket........"; socket_close($socket); echo"OK,He He.\n\n"; ?> |
这两段代码是简单介绍用PHP实现客户端和服务端的通信
具体操作,在DOS下用PHP命令打开SERVER,处于监听状态..
再打开一个DOS窗口,用PHP命令打开CLIENT,会得到服务端的回应....
相关文章
- 这篇文章主要介绍了C#实现图片放大功能的按照像素放大图像方法,功能非常实用,需要的朋友可以参考下...2020-06-25
- 在本篇文章中小编给各位整理了一篇关于python中翻译功能translate模块实现方法,有需要的朋友们可以参考下。...2020-12-18
- 这篇文章主要给大家介绍了关于微信小程序实现导航功能的操作步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
- phpmyadmin还有高级功能可能大部份站长不知道吧,今天本文章就来给大家介绍phpMyAdmin 高级功能设置的方法图解,希望文章对大家会有所帮助。 phpMyAdmin 安装后,默认...2016-11-25
- EMUI11值得升级吗?好不好用?下面小编带来EMUI11上手体验,一起来看看手机鸿蒙OS的提前预演...2020-12-08
- AngularJS 让人爱不释手的八种功能,想知道AngularJS哪八种功能让人喜欢就快点看下本文吧...2016-03-28
- 小爱同学5.0即将发布,据已知报道小爱同学5.0将新增机型,跟着小编一起来看看吧,顺便了解下即将都有哪些新功能面市吧...2020-12-08
- 这篇文章主要为大家分享了一份很全面的JavaScript常用功能汇总集合,一些常用的额JS 对象、基本数据结构、功能函数等,感兴趣的小伙伴们可以参考一下...2016-01-24
Night Shift是什么意思 Night Shift有什么功能及作用?
Night Shift是IOS9.3正式版系统新增加的功能之一,很多伙伴们都不清楚Night Shift是什么意思?以及Night Shift有什么用途?对此,本文小编就为大家详细介绍Night Shift的含义及作用...2016-07-04- <?php include_once("mime.inc"); $mm = new MIME(); $to = "customer@263.net"; $subject = $mm->encode("商城","gb2312"); // 编码 $msg = "注册会员成功<br>"; $m...2016-11-25
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
小编推荐的这篇文章介绍了php基于ob_start(ob_gzhandler)实现网页压缩功能的方法,非常实用,有兴趣的同学可以看看。 PHP生成网页后传送给浏览器显示 ,页面的打开速度...2017-07-06- 小米在最新的MIUI8中正式加入了录屏功能,用户再也不需要ROOT手机,然后借助“录屏大师”等APP来录屏了,借助系统自带的录屏功能即可轻松录制屏幕。那么,MIUI8录屏功能录屏功能在哪?MIUI8录屏功能怎么使用?本文将提供MIUI小米手机录屏使用方法图文教程供大家了解...2017-07-06
- 这篇文章主要介绍了thinkPHP商城公告功能开发问题,结合实例形式分析了基于thinkPHP实现商城公告功能所涉及的ajax交互及数据库操作相关技巧,需要的朋友可以参考下...2016-12-02
- 这篇文章主要介绍了Yii2实现让关联字段支持搜索功能的方法,结合实例形式分析了Yii2关联字段搜索功能的原理与相关实现技巧,需要的朋友可以参考下...2016-08-27
- 小编推荐的这篇文章介绍了yii2实现 "上一篇,下一篇" 功能的代码实例,非常实用,有兴趣的同学快来看看吧。 最近做了简答的文章详情页面,需要在页面底部加入上一篇,下...2017-07-06
- 断点续传指的是在上传时,将上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传,下面我们来看看php 断点续传功能的实现方法吧。 <?...2016-11-25
- 这篇文章主要介绍了浅析PHP7新功能及语法变化总结的相关资料,需要的朋友可以参考下...2016-06-24
- 在项目中,有时需要打印页面的表格,所以下面这篇文章主要给大家介绍了关于vue打印功能实现的两种方法,以及批量打印的完整代码,需要的朋友可以参考下...2021-06-17
- PHP5 中的三大特色功能。这三大特点为: * 新的对象模式 (New Object Mode) * 异常处理 (Exceptions) * 名称空间 (Namespace) 在开始之前,...2016-11-25
- using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace DbInMo {...2020-06-25