通过EasySwoole
+ Crontab
已经成功的将每个栏目的前1000
条数据写入到文件中.当栏目id
为0的时候默认是查所有的数据.如
if (!empty($condition['cat_id'])) {
$this->db->where('cat_id', $condition['cat_id']);
}
当然也可以设置成,如果是0就默认没有数据.就在首页展示不同栏目的数据也行.因为静态化API是我们首页的第二套方案.修改获取数据的接口.在App\HttpController\Api\Index.php
中的list
重命名为listOne
.
创建第二套获取首页数据的方法
/*
* 第二套获取首页方案
* 通过读取生成好的json文件
* */
public function listTwo()
{
// 获取请求参数cat_id.有的话进行整形转化.没有默认0
$catId = !empty($this->params['cat_id']) ? intval($this->params['cat_id']) : 0;
$videoFile = EASYSWOOLE_ROOT . '/website/video/json/video_' . $catId . '.json';
$videoData = is_file($videoFile) ? file_get_contents($videoFile) : [];
$data = !empty($videoData) ? json_decode($videoData, true) : [];
return $this->writeJson(Status::CODE_OK, 'ok', $data);
}
这里注意一下.在之前讲解过.怕有些人不按顺序看可能会看不太懂$this->params['cat_id']在哪设置的.重申.因为我的AppHttpControllerApiIndex.php继承了同目录下的Base.php.而在Base.php对数据进行了处理,如下
/*获取参数值*/
public function getParmas()
{
$params = $this->request()->getRequestParam();
$params['page'] = !empty($params['page']) ? intval($params['page']) : \Yaconf::get('video_page.default_page');
$params['size'] = !empty($params['size']) ? intval($params['size']) : \Yaconf::get('video_page.default_size');
$this->params = $params;
}
所以我们就可以直接用了.之前也说过因为我们查出来的都是1000条数据.所以我们需要做分页,直接用php的方式.在App\HttpController\Api\Base.php
创建获取分页参数方法
/*获取分页*/
public function getPagingDatas($count, $data)
{
$totalPage = ceil($count / $this->params['size']);
$data = $data ?: [];
return [
'total_page' => $totalPage,
'page_size' => $this->params['size'],
'count' => $count,
'lists' => $data
];
}
因为分页用到的是截取数组函数array_slice()
我们还需要知道从哪里开始截取.就相当于分页的当前页数据的算法一样.修改Base.php
.增加获取from
参数
/*获取参数值*/
public function getParmas()
{
$params = $this->request()->getRequestParam();
print_r($params);
$params['page'] = !empty($params['page']) ? intval($params['page']) : intval(\Yaconf::get('video_page.default_page'));
$params['size'] = !empty($params['size']) ? intval($params['size']) : intval(\Yaconf::get('video_page.default_size'));
$params['from'] = ($params['page'] - 1) * $params['size'];
$this->params = $params;
}
第二套方案方法
/*
* 第二套获取首页方案
* 通过读取生成好的json文件
* */
public function listTwo()
{
// 获取请求参数cat_id.有的话进行整形转化.没有默认0
$catId = !empty($this->params['cat_id']) ? intval($this->params['cat_id']) : 0;
$videoFile = EASYSWOOLE_ROOT . '/website/video/json/video_' . $catId . '.json';
$videoData = is_file($videoFile) ? file_get_contents($videoFile) : [];
$videoData = !empty($videoData) ? json_decode($videoData, true) : [];
$count = count($videoData);
$videoData = array_slice($videoData,$this->params['from'],$this->params['size']);
$data = $this->getPagingDatas($count,$videoData);
return $this->writeJson(Status::CODE_OK, 'ok', $data);
}
当然也可以把数组切割放到Base.php
/*获取分页*/
public function getPagingDatas($count, $data)
{
$totalPage = ceil($count / $this->params['size']);
$data = $data ?: [];
$data = array_slice($data,$this->params['from'],$this->params['size']);
return [
'total_page' => $totalPage,
'page_size' => $this->params['size'],
'count' => $count,
'lists' => $data
];
}
控制器
/*
* 第二套获取首页方案
* 通过读取生成好的json文件
* */
public function listTwo()
{
// 获取请求参数cat_id.有的话进行整形转化.没有默认0
$catId = !empty($this->params['cat_id']) ? intval($this->params['cat_id']) : 0;
$videoFile = EASYSWOOLE_ROOT . '/website/video/json/video_' . $catId . '.json';
$videoData = is_file($videoFile) ? file_get_contents($videoFile) : [];
$videoData = !empty($videoData) ? json_decode($videoData, true) : [];
$count = count($videoData);
$data = $this->getPagingDatas($count,$videoData);
return $this->writeJson(Status::CODE_OK, 'ok', $data);
}
}
测试成功第二套方案通过EasySwoole
+ Crontab
测试成功