DataTable.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: chenkuan
  5. * Date: 2017/12/15
  6. * Time: 下午3:13
  7. */
  8. namespace wechat\models\searches;
  9. use yii\base\Model;
  10. use yii\data\BaseDataProvider;
  11. class DataTable extends Model
  12. {
  13. public $draw = 1;
  14. /**
  15. * [
  16. * 0 => ['data' => 'id', 'name' => '', 'searchable' => 'true', 'orderable' => 'true', 'search' => ['value' => '', 'regex' => 'false']],
  17. * 1 => ['data' => 'name', 'name' => '', 'searchable' => 'true', 'orderable' => 'true', 'search' => ['value' => '', 'regex' => 'false']],
  18. * ...
  19. * ],
  20. * @var array
  21. */
  22. public $columns = [];
  23. /**
  24. * [
  25. * 0 => ['column' => '0', 'dir' => 'desc'],
  26. * ]
  27. * @var array
  28. */
  29. public $order = [];
  30. public $start = 0;
  31. public $length = 10;
  32. /**
  33. * ['value' => '', 'regex' => 'false']
  34. * @var array
  35. */
  36. public $search = [];
  37. protected $page;
  38. protected $pageSize;
  39. protected $orderBy;
  40. /**
  41. * @inheritdoc
  42. */
  43. public function rules()
  44. {
  45. return [
  46. [['draw', 'start', 'length'], 'integer'],
  47. [['columns', 'order', 'search'], 'safe'],
  48. ];
  49. }
  50. /**
  51. * 初始化DataTable查询参数
  52. */
  53. protected function initSearchParams()
  54. {
  55. $length = intval($this->length);
  56. if ($length <= 0) {
  57. $length = 10;
  58. }
  59. $start = intval($this->start);
  60. if ($start <= 0) {
  61. $start = 0;
  62. }
  63. $this->pageSize = $length;
  64. // start=0 => page=1 start=20 page=2...
  65. $this->page = (int)ceil($start / $length) + 1;
  66. // 排序
  67. $columnIndex = isset($this->order[0]['column']) ? trim($this->order[0]['column']) : '';
  68. $column = isset($this->columns[$columnIndex]['data']) ? trim($this->columns[$columnIndex]['data']) : '';
  69. $dir = isset($this->order[0]['dir']) ? trim($this->order[0]['dir']) : '';
  70. if ($column != '' && $dir != '' && in_array(strtolower($dir), ['asc', 'desc'])) {
  71. $this->orderBy = $column . ' ' . $dir;
  72. }
  73. }
  74. /**
  75. * @param BaseDataProvider $dataProvider
  76. * @return array
  77. */
  78. public function outResult(BaseDataProvider $dataProvider)
  79. {
  80. return [
  81. 'recordsFiltered' => $dataProvider->getTotalCount(),
  82. 'data' => $dataProvider->getModels(),
  83. 'draw' => $this->draw,
  84. 'recordsTotal' => $dataProvider->getTotalCount(),
  85. ];
  86. }
  87. }