cakephp:以json格式获取分页链接

时间:2014-01-05 19:54:45

标签: json rest cakephp pagination instagram

我正在使用CakePHP开发REST API,并希望实现Instagram API分页样式,如下所示:

{
    ...
    "pagination": {
        "next_url": "https://api.instagram.com/v1/tags/puppy/media/recent?access_token=fb2e77d.47a0479900504cb3ab4a1f626d174d2d&max_id=13872296",
        "next_max_id": "13872296"
    }
}

我没有使用任何授权或其他任何内容,因此可以忽略access_token部分。我的主要动机是将分页链接(最好是跳转链接)作为JSON数据,因此我可以在我的JSON序列化视图中使用它。因为通常的代码:

echo $this->Paginator->prev('< ' . __('previous'), array(), null, array('class' => 'prev disabled'));
echo $this->Paginator->numbers(array('separator' => ''));
echo $this->Paginator->next(__('next') . ' >', array(), null, array('class' => 'next disabled'));

不起作用,只显示等效的HTML代码。 有什么方法可以像Instagram API那样得到它吗?

3 个答案:

答案 0 :(得分:1)

感谢noslone,我得到了答案。这是最终编辑的代码:

$url = 'http://yourapp.com/pages/index/limit:7';
$returnArray = array(
.....
'pagination' => array(
    'next_url' => null,
    'prev_url' => null
)
);

if($this->Paginator->hasNext()) {
$temp = intval($this->Paginator->current())+1;
$returnArray['pagination']['next_url'] = $url."/page:".$temp;
}

if($this->Paginator->hasPrev()) {
 $temp = intval($this->Paginator->current())-1;
$returnArray['pagination']['next_url'] = $url."/page:".$temp;
}

echo json_encode($ returnArray);

只需进行两项更改:首先不要忘记将“limit:value”添加到您的网址,然后再使用带有Paginator的&intval当前。

答案 1 :(得分:0)

据我所知,Paginator助手会生成前端链接,当您点击它时,它会生成下一个链接。 我不认为你可以直接使用它来形成类似Instagram的API。

答案 2 :(得分:0)

尝试以下内容

$url = 'http://yourapp.com/pages/index';
$returnArray = array(
    .....
    'pagination' => array(
        'next_url' => null,
        'prev_url' => null
    )
);

if($this->Paginator->hasNext()) {
    $returnArray['pagination']['next_url'] = $url.'/page:'. ($this->Paginator->current()+1);
}

if($this->Paginator->hasPrev()) {
    $returnArray['pagination']['prev_url'] = $url.'/page:'. ($this->Paginator->current()-1);
}

echo json_encode($returnArray);

如果需要,可以在网址中添加更多命名的参数:

$params['pagination']['next_url'] = $url.'/page:'.$this->Paginator->current()+1.'/order:name/direction:asc';