利用tp5开发智慧软文发布系统中遇到的一些坑

1、

PHP 计算两个时间戳之间相差的时间

假设你两个时间戳为$a,$b;
你可以用$c=$a-$b;(反正就是大的减小的),这时$c就是两个时间间隔的秒数了。

 

想求两个时间间隔的天数就用:$c/(60*60*24)

一天的毫秒数是:86400,所以直接$c/86400 答案也是一样的


想求两个时间间隔的小时数就用:$c/(60*60)

js 跳转链接的几种方式

1、跳转链接 在当前窗口打开

window.location.href="http://www.baidu.com"   等价于    go baidu 

 

 

2、跳转链接 在新窗口打开

window.open("http://www.baidu.com")  等价于 go baidu

 

 

 3、跳转链接 返回上一页

window.history.back(-1);

  4、跳转链接

self.location.href="baidu.com"

   self 指代当前窗口对象,属于window 最上层的对象。

 

    location.href 指的是某window对象的url的地址

 

    self.location.href 指当前窗口的url地址,去掉self默认为当前窗口的url地址,一般用于防止外部的引用

 

 top.location.href:为引用test.html页面url的父窗口对象的url

 

   如果你的网页地址是:http://www.a.com,别人的是http://www.b.com, 他在他的页面用iframe等框架引用你的http://www.a.com,那么你可以用:

if(top.location.href!=self.location.href){

       location.href="http://www.a.com";

}

 来转向你的页面,top指代的是主体窗口,这里top.location.href返回http://www.b.com;

 

http://www.b.com!=http://www.a.com,返回为真(true),则网页重定向到你的网页,做到防盗用的作用.

 

 

 

 

 

tp5 时间间隔查询问题筛选两个时间之间的内容

在做时间统计的时候,一定要注意的是,只有转化成时间戳才能进行时间的运算。

 

$now=strtotime(date('Y-m-d'));

$end_time=strtotime('2020-5-1');//字符串转换成时间戳

$timediff = $end_time-$now;

$day= intval($timediff/86400);

---------------------

 

 

 

 

MYSQL 中 LIMIT 用法

mapper文件中的sql:

--------------------------------------------------------------------------------------------

  (在实体类中定义的属性)

  start:从第几条记录开始。

  size:读取几条记录。

 select id="findAllUsers" parameterType="Map" resultType="entity.IUser">

        select * from newusers
        
            user_name like #{user_name,jdbcType=VARCHAR}
        
        limit #{start,jdbcType=INTEGER},#{size,jdbcType=INTEGER}

-------------------------------------------------------------------

前端将page:第几页

   rows(size):每页多少条

   这两个参数,传到后台。

    通过这两个参数,可以算出start   计算方法 start=size(page-1)

   然后将size和start放入map中

简单代码示例

   Map map=new HashMap();

   map.put("start",start);

   map.put("size",size);

   不要忘记将start和size转换成Integer.

   然后将map当作参数传入dao的接口。

 

 

注:

limit是mysql的语法
select * from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录
n是指从第m+1条开始,取n条。
select * from tablename limit 2,4
即取出第3条至第6条,4条记录

随机查询记录

如果你的字段和mysql关键字有冲突,那么建议采用数组方式调用,例如:

Db::table('think_user')->where('status=1')->order(['order','id'=>'desc'])->limit

(5)->select();

V5.0.17+ 版本开始,当你的order排序中使用了SQL函数的时候,请使用 orderRaw 方法替代

order ,例如:

Db::table('think_user')->where('status=1')->orderRaw('rand()')->limit(5)->se

lect();

 

 

php获取数组长度的方法(有实例)

在php中获取数组长度方法很简单,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度哦,下面我们来看几个实例吧。

php如何获取数组的长度,使用php函数count(),或是sizeof()
例如:

?

1

2

3

4

5

6

$arr = Array('0','1','2','3','4');

echo count($arr);

// 输出 5

$arr = array('A','B','C');

echo sizeof($arr);

//输出3

sizeof()和count()具有同样的用途,这两个函数都可以返回数组元素个数.可以得到一个常规标量变量中的元素个数,如果传递给这个函数的数组是一个空数组,或者是一个没有经过设定的变量,返回的数组元素个数就是0;
两函数功能一样,手册上讲,sizeof()是函数count()的别名。

那么多维数组长度要怎么统计呢?继续看例子
比如你读取的数组是一个二维数组:

?

1

2

3

4

5

6

$arr=array(

         0=>array('title' => '新闻1', 'viewnum' => 123, 'content' => 'ZAQXSWedcrfv'),

         1=>array('title' => '新闻2', 'viewnum' => 99, 'content' => 'QWERTYUIOPZXCVBNM')

        );

?>

如果你想统计数组$arr的长度,也就是说该二维数组只有两条新闻,你想要的数字也是2,但是如果使用count($arr)不同版本的php,统计的结果是不一样的;
后来在php手册中发现,count函数还有第二个参数,解释如下:
count函数有两个参数:
0(或COUNT_NORMAL)为默认,不检测多维数组(数组中的数组);
1(或COUNT_RECURSIVE)为检测多维数组,
所以如果要判断读取的数组$arr是不是有新闻信息,就要这样写了:

?

1

2

3

4

5

6

7

8

if(is_array($arr) && count($arr,COUNT_NORMAL)>0 )

{

 .....

} else {

 .....

}

?>

你可以使用这样的代码来测试该函数:

?

1

2

3

4

5

6

7

8

9

10

$arr=array(

         0=>array('title' => '新闻1', 'viewnum' => 123, 'content' => 'ZAQXSWedcrfv'),

         1=>array('title' => '新闻2', 'viewnum' => 99, 'content' => 'QWERTYUIOPZXCVBNM')

        );

 

echo '不统计多维数组:'.count($arr,0);//count($arr,COUNT_NORMAL)

echo "
";

echo '统计多维数组:'.count($arr,1);//count($arr,COUNT_RECURSIVE)

?>

实际环境中我们大多数情况下都是用array().length获取长度即可。

特别注意:

在auth 权限管理的时候,会有三个数据表,auth_rule,auth_group,auth_group_access,在书写的时候有不同的写法:

在控制器中书写可以写成驼峰法AuthGroup.php

控制器也可以写成auth_group.php

模板中不能使用驼峰法必须写成下划线  例如 auth_group.html

 

Model中和控制器写法一样

 

 

 

Tp5 搜索不传递参数导致分页错误的解决方案:

 

public function search(){

       $conf=db('conf')->where('id',1)->find();

       $check['name']="cid";

       $check['id']="0";

              $title=input('title');

              $city=db('city')->select();

       $pdtype=db('pdtype')->select();

       $where['status']=2;

       $lsts=db('media')->where($where)->

       where('title','like',"%".$title."%")->alias('a')

       ->join('city b','a.area=b.cid','left')->

       join('pdtype c','a.pdtype=c.pid','left')->order('a.price')->

       field('a.id,a.title,a.url,a.price,a.sltype,b.city,c.pname,a.status,a.urltype,a.week,a.join,a.uid,a.remarks')->

       paginate(20,false, [

        'query' => request()->param()]);

       $this->assign(['city'=>$city,'pdtype'=>$pdtype]);

       $this->assign('lsts',$lsts);

       $this->assign('check',$check);

       $this->assign('conf',$conf);

        $lst['title']='媒体价格';

    $this->assign('lst',$lst);

       return view();

}

 

其他的地方无需调整只需要在搜索paginate添加参数

Paginate(20,false,[‘query’=>request()->param()]);

 

 

 

如何实现网页元素浮在最上层?

  1、需求:做一个input框,支持手动输入的同时,还支持下拉框;

 

        所以要求这个下拉框要浮在最上层,如图:

 

 

 

 

 

要点:如果div较少,如两个div,则可以直接用:

 

style="position: absolute;"

而我这里的div较多,且要将下拉框浮在弹框之上,(弹框中有多个div,要将下拉框浮在这些div之上),

 

则需要加入z-index属性;

 

style="position: absolute; z-index: 10"

 

 

z-index使用详解:

 

首先将position定义为,absolute、relative或fixed。 

【必须position为以上三个属性,z-index才能层级体现出来,才能起作用】 

设置 style 中 z-index:auto 

auto可定义为一个值(整数数字),越大代表越置前,如可定义为: z-index:9999。 

若定义为-1,代表为最底层。 

如果要让div1不被div2遮挡,则将div1的z-index设置比div2大就可以了。

你可能感兴趣的:(利用tp5开发智慧软文发布系统中遇到的一些坑)