Как отображать товары в порядке отображения в админке?

Здравствуйте. Давно не занимался интернет магазинами, но пришла надобность вернуться к этому, и выполнить казалось бы простую задчу. Используя фильтр mFilter2 сделать изначальное отображение товаров (имеется ввиду без фильтрации и сортировки) такое же, как и в админке. В доках на сниппет нашел информацию про сортировку, и так же в категории увидел поле IDx, по которому строится порядок товаров. Но сниппет mFilter2 ни в каком виде IDx не принимает. 'sort' => 'IDx:desc' так же не работает с приставкой ms| и ms_product.
Подскажите пожалуйста, может я что-то не то делаю. Все везде перерыл уже…
Николай
17 марта 2020, 10:41
modx.pro
1
1 992
0

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

Станислав
17 марта 2020, 10:50
0
для начала что бы понять, какие поля доступны, выведите без шаблона,
tpl => ''
, получите массив данных, найдите нужное поле и например
'sort' => 'ms|idx:asc'
    Николай
    17 марта 2020, 11:08
    0
    Пробовал и так. В результате ничего не выводится. В вызове сниппета вроде не ошибся…
    Без шаблона вывожу, idx там отсутствует.

    {'!mFilter2' | snippet : [
    	'paginator' => 'pdoPage@filters'
    	'element' => 'msProducts'
    	'sort' => 'ms|idx:asc'
    	'parents' => $_modx->resource.id
    	'limit'   => 12
    	'tpl' 	  => 'item'
    	'class'   => 'msProduct'
    	'tplOuter'=> 'filters'
    	'filters' => 'ms|price:number,
    				  msoption|strana,
    				  ms|vendor:vendors,
    				  msoption|iznos,
    				  msoption|depth,
    				  msoption|fasks,
    				  msoption|vid,
    				  msoption|gamma,
    				  msoption|shir,
    				  msoption|obrabotka,
    				  msoption|derevo,
    				  msoption|vors,
    				  msoption|safe_layer_depth,
    				  msoption|tip_r,
    				  msoption|klass_pb,
    				  msfiles|name
    				  
    	'
    	'aliases' => 'ms|price==price,msfiles|name==colors'
        'tplFilter.outer.default' => 'filter-wrapper'
    	'tplFilter.row.default'  => 'filter'
    	'tplFilter.outer.price' => 'filter-price'
        'tplFilter.row.price' =>'filter-price-row'
        'tplFilter.outer.colors' => 'filter-colors'
        'tplFilter.row.colors' => 'filter-colors.row'
    ]}
      Евгений Webinmd
      17 марта 2020, 11:43
      0
      магия какая-то
      'sort' => 'ms|idx:asc'

      В документации же явно написано:
      'sortby' => 'menuindex',
      'sortdir' => 'asc'
      либо json
      'sortby' => '{ "menuindex":"ASC" }'
        Павел Бигель
        17 марта 2020, 11:48
        0
        Что значит «ничего не выводится»? Совсем ничего не выводится?

        Покажите вывод showlog. Он ж наверняка не просто так сделан)
          Николай
          17 марта 2020, 12:17
          0
          Вот буквально ничего. В контейнере с результатами пустота.
          Что еще интересно, 'showlog' => 1 ничего не дал. Может все потому-что сниппет стоит запускать сниппетом, а не через fenom…
      Николай
      17 марта 2020, 12:26
      1
      +1
      IDx это menuindex. menuindex товару ставится максимальный относительно других товаров этой категории, а не относительно всех товаров. То есть товары из разных категорий могут иметь один и тот же menuindex, а значит сортировка как в админке не получится. Можно или компонентом этим воспользоваться, чтобы расставлять сортировку в категориях индивидуально, либо расставить menuindex товарам глобально, например скриптом:

      <?php
      
      function updateMenuIndex($id) {
          global $menuindex, $modx;
          
          $childsIds = $modx->getChildIds($id,1,array('context' => 'web'));                   
          if(!count($childsIds)) return;
          
          $q = $modx->newQuery('modResource');
          $q->where( ['id:IN' => $childsIds] ); 
          $q->sortby('menuindex', 'ASC');
          
          $result = $modx->getIterator('modResource', $q);
          
          foreach($result as $key=>$res) {
              $menuindex++;
      
              $res->set('menuindex', $menuindex);
              $res->save();
              //echo "$menuindex - {$res->pagetitle} ({$res->id})<br>";
              
              updateMenuIndex($res->get('id'));
          }
      }
      
      updateMenuIndex(0);        // id родителя в параметре
      return "menuindex обновлены у $menuindex ресурсов";

      А потом отсортировать товары по menuindex.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        6