2

paginate()次のように、CakePHPの関数に自分で作成した配列をフィードしたいと思います。

class SomeController extends AppController {

  var $paginate = array(
          'limit' => 25,
          'order' => array(
                  'Post.title' => 'asc'
          )
  );

  public function index(){

    $theArray = array(
      array(
        'Entity1'=>
          array('id'=>1, 'someField'=>'value1'),
        'SecondEntity'=>
          array('id'=>1, 'fieldTwo'=>'reallyInteresting')
      ),
      array(
        'Entity1'=>
          array('id'=>2, 'someField'=>'value2'),
        'SecondEntity'=>
          array('id'=>2, 'fieldTwo'=>'displayedValue')
      )
    );
    $this->set('data',$this->paginate($theArray));
  }
}

どうすれば最も簡単な方法ですか?

4

1 に答える 1

2
  1. 変数 $paginate と関数 $this->paginate() の名前が同じです - 名前を変更する必要があります。

  2. 注文フィールド Post.title について明確ではありません - データ サンプルにそのようなフィールド/テーブルはありません。

  3. あなたのための小さなコードサンプル:

public function paginate($array, $page = 0) {
  // array_slice() to extract needed portion of data (page)
  // usort() to sort data using comparision function $this->sort()
  return(
    array_slice(
      usort(
        $array,
        array($this, 'sort') // callback to $this->sort()
      ),
      $page*$this->paginate['limit'],
      $this->paginate['limit']
    )
  );
}

public function sort($a, $b) {
  $result = 0;
  foreach($this->paginate['order'] as $key => $order) {
    list($table, $field) = explode('.', $key);
     if($a[$table][$field] == $b[$table][$field])
      continue;
     $result = ($a[$table][$field] < $b[$table][$field] ? -1 : 1) *
      ($order == 'asc' ? 1 : -1);
  }
  return($result);
}

于 2013-01-19T22:53:40.737 に答える