1

アカウント内のユーザーに属する画像のリストを表示するようにページ付けを設定しています。これは私が私のコントローラーに持っているものです:

class UsersController extends AppController {

    public $paginate = array(
        'limit' => 5,
        'order' => array(
            'Image.uploaded' => 'DESC'
        )
    );

    // ...

    public function images() {
        $this->set('title_for_layout', 'Your images');

        $albums = $this->Album->find('all', array(
            'conditions' => array('Album.user_id' => $this->Auth->user('id'))
        ));
        $this->set('albums', $albums);

        // Grab the users images
        $options['userID'] = $this->Auth->user('id');
        $images = $this->paginate('Image');
        $this->set('images', $images);
    }

    // ...

}

それは機能しますが、このページネーションを実装する前に、Imageモデルにユーザーの画像を取得するためのカスタムメソッドがありました。ここにあります:

public function getImages($options) {
    $params = array('conditions' => array());

    // Specific user
    if (!empty($options['userID'])) {
        array_push($params['conditions'], array('Image.user_id' => $options['userID']));
    }

    // Specific album
    if (!empty($options['albumHash'])) {
        array_push($params['conditions'], array('Album.hash' => $options['albumHash']));
    }

    // Order of images
    $params['order'] = 'Image.uploaded DESC';
    if (!empty($options['order'])) {
        $params['order'] = $options['order'];
    }

    return $this->find('all', $params);
}

getImages()デフォルトの代わりにこのメソッドを使用できる方法はありますpaginate()か?ドキュメントで見つけることができる最も近いものは「カスタムクエリページネーション」ですが、私は独自のクエリを書きたくはありませんgetImages()。メソッドを使用したいだけです。うまくいけば、私はそれを行うことができます。

乾杯。

4

1 に答える 1

1

はい。

//controller
$opts['userID'] = $this->Auth->user('id');
$opts['paginate'] = true;
$paginateOpts = $this->Image->getImages($opts);
$this->paginate = $paginateOpts;
$images = $this->paginate('Image');


//model
if(!empty($opts['paginate'])) {
    return $params;
} else {
    return $this->find('all', $params);
}

説明:

基本的には、別のパラメーターを追加するだけで (私は通常、それを "paginate" と呼んでいます)、モデルでそれが true の場合は、検索の結果を返す代わりに、動的に作成されたパラメーターを返します。これを使用して実行します。コントローラーのページネーション。

これにより、引き続きすべてのモデル/データベース ロジックをモデル内に保持し、送信したオプションに基づいてモデルがすべての複雑なパラメーターを構築した後、コントローラーを使用してページネーションを実行するだけです。

于 2012-07-12T23:13:28.137 に答える