|
1234567891011121314151617181920212223242526272829303132333435 |
- <?php
-
- namespace common\components;
-
- class ActiveDataProvider extends \yii\data\ActiveDataProvider
- {
- public function filterByCallback($callback)
- {
- $filtered_models = $filtered_keys = [];
- // la pagination ne fonctionne pas avec ce système de filtre : solution alternative sans pagination
- // @TODO : faire en sorte que la pagination fonctionne avec les filtres par callback
- $this->pagination = false;
- $have_been_filtered = false;
- $this->prepare(true); // force read of next page
- $non_filtered_models = $this->getModels();
-
- foreach($non_filtered_models as $model) {
- $filterModel = $callback($model);
-
- if($filterModel) {
- $have_been_filtered = true;
- $this->setTotalCount($this->getTotalCount() - 1);
- }
- else {
- $filtered_models[] = $model;
- $filtered_keys[] = $model->id;
- }
- }
-
- if($have_been_filtered) {
- $this->setModels($filtered_models);
- $this->setKeys($filtered_keys);
- }
- }
- }
|