Итак, в моем ItemsController есть эта симпатичная маленькая индексная функция:
public function index() {
$this->Item->recursive = 2;
$this->set('items', $this->paginate());
}
Это так, потому что я делаю кучу вычислений на afterFind (добавляю поле и сортирую по нему)
Но я хочу отсортировать на уровне контроллера, чтобы у меня было последнее () и т. Д. Если я сортирую на уровне afterFind, он будет сортировать так каждый раз, независимо от того, какой контроллер - так что это нехорошо.
Как мне отсортировать на уровне контроллера и по-прежнему иметь возможность правильно использовать $ this-> paginate ()?
К вашему сведению, вот некоторые из моих AfterFind:
public function afterFind($results, $primary = false){
parent::afterFind($results, $primary);
foreach ($results as $key => $val) {
// my foreach logic calculating Item.score
}
// the stuff I should be doing on a controller-to-controller basis:
$results = Set::sort($results, '{n}.Item.score', 'desc');
return $results;
}
2 ответа
Вот как вы используете сортировку с помощью Paginator
public function index() {
$this->paginate = array(
'limit' => 10,
'order' => array( // sets a default order to sort by
'Item.name' => 'asc'
)
);
$items = $this->paginate('Item');
$this->set(compact('items'));
}
На ваш взгляд:
<div class="sort-buttons">
Sort by
<?php echo $this->Paginator->sort('name', 'By Name', array('class' => 'button')); ?>
<?php echo $this->Paginator->sort('score', 'By Score', array('class' => 'button')); ?>
<?php echo $this->Paginator->sort('date', 'By Date', array('class' => 'button')); ?>
</div><!-- /.sort-buttons -->
Или, если используется для создания REST API, используйте строки запроса:
http://myapp.dev/items/index?sort=score&direction=desc
Для меня рабочий способ был в контроллере:
/******************************************************************
*
******************************************************************/
function admin_index() {
$this->paginate = array(
'News' => array(
'order' => array(
'News.created' => 'DESC'
)
)
);
$data = $this->paginate('News');
$this->set('news', $data);
}
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.