Контроллер resource/getlist

Добрый день, пишу тестовую CMP для modx. Нужно сделать combobox в который бы подгружался список ресурсов внутри определенного родителя.

Вопрос: как в ExtJS правильно пробросить parent в контроллер и возможно ли такое, или где найти контроллер resource/getlist что бы его изучить.

Вообще в тупике, зарылся, не знаю куда копать.

Код моего combobox:
//Custom ProjectResources combobox
Debureaucratization.utils.DbrProjectRes = function(config) {
    config = config || {};
    Ext.applyIf(config,{
        
        name: 'project_id'
        ,hiddenName: 'project_id'
        ,displayField: 'pagetitle'
        ,valueField: 'id'
        ,fields: ['id','pagetitle']
        ,pageSize: 20
        ,url: MODx.config.connector_url
        ,baseParams: {
            action: 'resource/getlist'
            ,parent: '21948'
        }
        ,typeAhead: true
        ,editable: true
        

    });
    Debureaucratization.utils.DbrProjectRes.superclass.constructor.call(this,config);
};
Ext.extend(Debureaucratization.utils.DbrProjectRes,MODx.combo.ComboBox);
Ext.reg('dbr-project-combo',Debureaucratization.utils.DbrProjectRes);
Vladimir Alekhin
02 декабря 2020, 12:23
modx.pro
689
0

Комментарии: 8

Наумов Алексей
02 декабря 2020, 12:50
+1
Ну вот у вас:
,baseParams: {
            action: 'resource/getlist'
            ,parent: '21948'
        }
parent вы передали, он будет доступен в процессоре.

Я делал всегда свой процессор, не пользовал стандартный, например это будет core/components/МОЙКОМПОНЕНТ/processors/mgr/resource/getcategories.class.php
, тогда
action: 'mgr/resource/getcategories'
а уже в этом процессоре возвращал что нужно
    Vladimir Alekhin
    02 декабря 2020, 13:05
    0
    Спасибо большое, стало чуть понятнее.

    Я на другой комментарий задал вопрос. А как правильнее с точки зрения modx наследоваться от
    modObjectGetListProcessor
    или
    modResourceGetListProcessor
    Наумов Алексей
    02 декабря 2020, 12:51
    +1
      Vladimir Alekhin
      02 декабря 2020, 13:03
      0
      Понял, похоже стандартный процессор getlist не может выбрать по родителю.

      А как будет правильно, наследовать новый процессор от
      class modResourceMyGetListProcessor extends modResourceGetListProcessor
      или создать новый процессор что-то вроде:

      <?php
      class DbrIdeatankReourceGetListProcessor extends modObjectGetListProcessor {
          public $languageTopics = array('debureaucratization:dbrideatank');
          public $classKey = 'ModReource';
          public $defaultSortField = 'id';
          public $defaultSortDirection = 'ASC';
          public $checkListPermission = true;
          public function prepareQueryBeforeCount(xPDOQuery $c) {
              $parent = $this->getProperty('parent');
              if (!empty($parent)) {
                  $c->where(array('parent:IS' => $parent));
              }
              return $c;
          }
      }
      return 'DbrIdeatankResourceGetListProcessor';
        Наумов Алексей
        02 декабря 2020, 16:25
        0
        Я от modObjectGetListProcessor наследую… но и объекты у меня чаще всего свои, не modResource
          Vladimir Alekhin
          02 декабря 2020, 16:34
          0
          А когда объект свой, но в нем есть поле — линк по ID на объект modResource?
          Как вы такую задачу решаете?

          на текущем плейграунде не было никаких чужих компонентов с подобной связкой, что бы подсмотреть.
            Наумов Алексей
            02 декабря 2020, 17:31
            0
            Не понял, что нужно получить?
            Все тож самое… есть процессор «getList», в него передается некий критерий для ограничения выборки (parent), в методе prepareQueryBeforeCount задаем условия…
      Vladimir Alekhin
      02 декабря 2020, 13:40
      0
      напишу решение, вдруг кому будет полезно.
      xtype для combobox (путь: assets/components/МОЙКОМПОНЕНТ/js/mgr/widgets/МОЙГРИД.grid.js)

      //Custom ProjectResources combobox
      МОЕПРИЛОЖЕНИЕ.utils.DbrProjectRes = function(config) {
          config = config || {};
          Ext.applyIf(config,{
              
              name: 'project_id'
              ,hiddenName: 'project_id'
              ,displayField: 'pagetitle'
              ,valueField: 'id'
              ,fields: ['id','pagetitle']
              ,pageSize: 20
              ,url: МОЕПРИЛОЖЕНИЕ.config.connectorUrl
              ,baseParams: {
                  action: 'mgr/МОЙКОМПОНЕНТ/getList'
                  ,parent: '21948'     //передаем parent id для выборки потомков по этому родителю
              }
              ,typeAhead: true
              ,editable: true
              
      
          });
          МОЕПРИЛОЖЕНИЕ.utils.DbrProjectRes.superclass.constructor.call(this,config);
      };
      Ext.extend(МОЕПРИЛОЖЕНИЕ.utils.DbrProjectRes,MODx.combo.ComboBox);
      Ext.reg('dbr-project-combo',МОЕПРИЛОЖЕНИЕ.utils.DbrProjectRes);
      Код процессора (путь: core/components/МОЙКОМПОНЕНТ/processors/mgr/dbrresource/getlist.class.php):

      <?php
      class DbrResourceCreateProcessor extends modObjectGetListProcessor {
         
          public $classKey = 'modResource';
          public $defaultSortField = 'id';
          public $defaultSortDirection = 'ASC';
          public $checkListPermission = true;
          public function prepareQueryBeforeCount(xPDOQuery $c) {
              $parent = $this->getProperty('parent');
              if (!empty($parent)) {
                  $c->where(array('parent' => $parent));
              }
              return $c;
          }
      }
      return 'DbrResourceCreateProcessor';
      Спасибо Наумову Алексею за столь ценную подсказку!
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8