2014-01-05 72 views
0

我開發使用CakePHP一個REST API和要實現的Instagram的API分頁樣式看起來是這樣的分頁鏈接:CakePHP的:讓JSON格式

{ 
    ... 
    "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那樣獲得它?

+1

你應該根據自己對創建網址的'$這個 - > Paginator-> params()'values – noslone

+0

請給出一個示例代碼。例如,可以說我將每個頁面的結果數量限制爲7.爲此,我在Paginator設置中定義'maxLimit'=> 7。將會是使用你提到的方法生成鏈接來顯示下面7個鏈接的格式。請詳細說明,我有一個很大的困惑。 –

回答

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的網址:

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

+1

非常感謝。這段代碼正是我所需要的。我不得不編輯它作爲函數Paginator-> current返回一個字符串,您可以直接編寫Paginator-> current())+ 1.我只需在它之前添加一個intval()即可獲得所需的結果。雖然鏈接帶有轉義字符,但它比我希望得到的更多。我嚴肅地沒有言語感謝你。非常感謝,你一直是救生員。 :) PS:我把編輯的代碼放在我的問題的答案。 –

+0

你能發送正確的代碼嗎? – RichestSoft

0

據我所知,Paginator助手生成前端鏈接,當你點擊它時,它會生成下一個鏈接。 我不認爲你可以直接使用它來形成Instagram相似的API。

+0

有什麼辦法可以讓我們重載通常的分頁方法來獲得下一個鏈接控制器中的URL?因爲我唯一的選擇是獲取控制器中的鏈接並將其存儲爲vari能夠。那麼只有它可以作爲視圖中的鏈接進行訪問。 –

+0

我不這麼認爲。因爲Paginator助手用於視圖(前端HTML)。 我認爲你的API函數應該接受需要的參數並找出動態顯示的數據。 – XuDing

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);

只有兩個變化:一是不要忘記添加額度:值」對您的網址,其次使用INTVAL與Paginator->當前