таблицы Grid

InstantCMS 2.X
#1 4 декабря 2025 в 11:18

Привет. Как в новом варианте вывода grid таблиц, изменить запрос. То есть вывести данные из двух таблиц. Сделать join к  $this->table_name = 'table';  и что бы эти данные попали в  $grid_html = $this->traitGetListItemsGridHtml(); ?

#2 4 декабря 2025 в 11:41

github.com/instantsoft/icms2/blob/master/system/controllers/admin/actions/ctypes_datasets.php#L42

В свойство list_callback в колбэке:

  1. $this->list_callback = function ($model) {
  2.  
  3. $model->join( 'you_table', 'y', 'y.id = i.id');
  4.  
  5. return $model;
  6. };

И там же select() нужных полей, если необходимо.

#3 4 декабря 2025 в 14:19

Ок, спасибо.

Сегодня в 00:34
#4 6 декабря 2025 в 18:51

Не хочет работать фильтр в колбек функции. Не могу понять почему. В старом варианте грида всё работает нормально в новом $model->filterEqual() не работает. Хотя в отладке запрос выглядет как и положено. А на странице «Нет элементов для отображения». Вот код

  1. <?php
  2.  
  3. class actionPassportHouse extends cmsAction
  4. {
  5.  
  6. use icms\traits\controllers\actions\listgrid {
  7. getListItemsGridHtml as private traitGetListItemsGridHtml;
  8. }
  9.  
  10. private $param;
  11. public function __construct($controller, $params = []) {
  12.  
  13. parent::__construct($controller, $params);
  14. $this->grid_name = 'house';
  15. $this->table_name = 'prt_akart';
  16. $this->param = $params;
  17.  
  18. $this->list_callback = function ($model) {
  19. $model->select('n.KWART');
  20. $model->join('prt_numbers_kwartirs', 'n', 'i.K_SJE=n.K_SJE');
  21. $model->filterEqual('SK_DOMA',$this->param[0]);
  22. return $model;
  23. };
  24.  
  25. }
  26.  
  27. public function getListItemsGridHtml() {
  28.  
  29. $grid_html = $this->traitGetListItemsGridHtml();
  30.  
  31. return $this->cms_template->renderInternal($this, 'house', [
  32. 'grid_html' => $grid_html,
  33. ]);
  34. }
  35.  
  36. }
  37.  
  38.  
  39.  

В отладке

  1. SELECT i.*, n.KWART
  2. FROM cms_prt_akart i
  3. INNER JOIN cms_prt_numbers_kwartirs as n ON i.K_SJE=n.K_SJE
  4. WHERE (i.SK_DOMA = '10127')
  5. ORDER BY i.id asc
  6. LIMIT 35850, 50

Без фильтра $model->filterEqual('SK_DOMA',$this->param[0]); данные выводятся. как и положенно. Все.

Добавлено спустя 4 часа

Пришёл к выводу, что дело тут в фильтрах и пагинации. Данные выводятся. Но фильтр с пагинацией путают отображение. Позже разберусь. 

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.

Похожее в блогах

🍪Мы используем файлы cookie для работы сайта. Читать подробнее.