TwitterAPIを使ってアプリケーションを作りたい!その4
その3でpaginateを使えるように改造!
・app/controllers/t_controller.php<?php
class TController extends AppController {
public $uses = array('T');public function index() {
if (isset($this->params['url']['q'])) {
//paginate['conditions']にqの値を渡してあげる、じゃないとモデルqの値が使えない
$this->paginate['conditions'] = array(
'q' => $this->params['url']['q'],
);//この記述でモデルのpaginateが呼び出されるらしい!
//モデル内での実行結果をコントローラのpaginateメソッドでページネーションできるようにして、それを$dataに代入する
$data = $this->paginate('T');
} else {
$data = array();
$this->params['url']['q'] = null;
}
$this->set('data', $data);
$this->set('q', $this->params['url']['q']);}
}
・app/models/t.php<?php
//ライブラリのインポート
App::import('Core', 'HttpSocket');
App::import('Core', 'Xml');
class T extends AppModel {
const API_SEARCH = ' http://search.twitter.com/search.atom ';//データベースを使用しない宣言みたいなの
public $useTable = false;
//コントローラーから直接は呼び出されてないけど、間接的に呼び出されてる?ってことかな?
public function paginate($conditions, $fields, $order, $limit, $page, $recursive, $extra) {$HttpSocket = new HttpSocket();
$query = array(
'q' => $conditions['q'],
'page' => $page,
'rpp' => $limit,
);$ret = $HttpSocket->get(self::API_SEARCH, $query);
if ($ret) {
$Xml = new Xml($ret);
return $Xml->toArray();
}return array();
}
}
・app/views/t/index.ctp
・ページネートのリンク(最後に追加してください)<?php if(isset($paginator)): ?>
<?php echo $paginator->prev('<< '.__('prev', true), array('url' => array('controller' => 't', 'action' => 'index', '?' => array('q' => $q)), 'rel' => 'prev', 'class' => 'prev'));?>
<?php echo $paginator->next(__('next', true).' >>', array('url' => array('controller' => 't', 'action' => 'index', '?' => array('q' => $q)), 'rel' => 'next', 'class' => 'next'));?>
<?php endif; ?>
ってすると、できそうなものですが
SQL Error: 1146: Table 'test.ts' doesn't exist
エラーが出ます。
テーブルないよ。って言われてるんですが、使わないからつくってないよ。
むしろ public $useTable = false; で使わないって宣言してるので、大丈夫なはずでした。
全然わからなさすぎて、なけた。
結局、独自でページネート作ったら、paginateCount定義しろよ。ってことですね。
なので、モデルに追加です。
・app/models/t.php//これ重要
public function paginateCount($conditions, $recursive, $extra) {// PHP_INT_MAXなのかはちょっとわからんです。普通に123とかをreturnしても動きました。
return PHP_INT_MAX;
}
全体的に、FIND Twitterを解説してくれているありがたいブログ
→http://webcache.googleusercontent.com/search?q=cache:SbS2xzRgNBUJ:planetcakephp.org/aggregator/items/2744-cakephpfindtwitter