Giant Dad

Giant Dad

Был в сети 17 февраля 2026, 12:39
Заказы не принимаю
Спасибо. Это помогло. А можно ещё как-то сделать так, чтобы при сортировке, положим, по цене, сначала тоже выводились товары с указанным свойством с сортировкой по цене, а потом — остальные тоже с сортировкой. Например, сначала товары производителя «Х» от самого дорогого до самого дешёвого, а потом товары всех остальных производителей, тоже от дорогого до дешёвого? В одном списке.
А как можно получать изображения модификаций товаров из МойСклад в модификацию msOptionsPrice2? Используется API 1.2. Это где-то в настройках syncMoySklad указывать? Я вижу параметр sync_moysklad_modification_fields, но не понимаю, что дописать в JSON, чтобы получить картинку модификации. Это вообще возможно?
Сниппет mFilter2, вот такой вызов
{'!mFilter2' | snippet : [
                'element'=>'msProducts',
                'class'=>'msProduct',
                'tplOuter'=>'tpl_mfilter_outer.tpl',
                'tpl'=>'tpl.product.row.custom2',
                'limit'=>'12',
                'sort'=>'resource|menuindex:asc',
                'showEmptyFilters'=>'false',
                'filters'=>'
        				msoption|dlina:number,
        				msoption|karmany:number,
        				msoption|razmer:default,
                        msoption|sezon:default'
        	    'aliases'=>'
        				msoption|dlina==dlina,
        				msoption|karmany==karmany,
        				msoption|razmer==razmer,
                        msoption|sezon==sezon',
                'parents'=>$_modx->resource.id,
                'tplPageWrapper'=>'@INLINE <ul id="mse2_pagination" class="pagination">{$first}{$prev}{$pages}{$next}{$last}</ul>',
                'tplPageActive'      => '@INLINE <li class="active"><a href="{$href}">{$pageNo}</a></li>',
                'tplPageFirst'	    => '@INLINE <li class="control"><a href="{$href}">«</a></li>',
                'tplPageLast'	    => '@INLINE <li class="control"><a href="{$href}">»</a></li>',
                'tplPagePrev'	    => '@INLINE <li class="control"><a href="{$href}">‹</a></li>',
                'tplPageNext'	    => '@INLINE <li class="control"><a href="{$href}">›</a></li>',
                'tplPageSkip'	    => '@INLINE <li class="disabled"><span>...</span></li>',
                'tplPageFirstEmpty'	=> '@INLINE <li class="control"><span>«</span></li>',
                'tplPageLastEmpty'	=> '@INLINE <li class="control"><span>»</span></li>',
                'tplPagePrevEmpty'	=> '@INLINE <li class="disabled"><span>‹</span></li>',
                'tplPageNextEmpty'	=> '@INLINE <li class="disabled"><span>›</span></li>',
                'includeTVs'=>'catalog_hide',
                'where'=>'{"catalog_hide:IS": null}'
                'sortby' => 'CASE `Data`.`vendor` WHEN 7 THEN 1 ELSE 0 END ASC, msProduct.id',
            ]}
Я не очень хорошо разбираюсь в сортировке. Если можно, подскажите хотя бы куда смотреть, что читать. Какие-то примеры…
Вот код самой вкладки:
Ext.override(MODx.panel.User,{
    getParentFields: MODx.panel.User.prototype.getFields,
    
    getFields: function(config) {
        var parentFields = this.getParentFields.call(this,config);
	    var pointsTab = {
			id: 'my-custom-tab',
			title: 'Баллы',
			layout: 'form',
			defaults: { border: false ,autoHeight: true },
			hideMode: 'offsets',
			items: [
			    {
				    html: '<p>Редактирование баллов пользователя</p>',
				    xtype: 'modx-description'
			    },
			    {
			        xtype: 'panel',
			        cls: 'container',
			        items: [
				        {
					        xtype: 'editorgrid',
					        clicksToEdit: 1,
        					columns: [
        						{header: 'Дата истечения', dataIndex: 'date', sortable: true},
        						{header: 'Количество баллов', dataIndex: 'points'}
        					],
        					autoHeight: true,
        					viewConfig: {
        						forceFit: true, // Растягиваем таблицу на всю ширину
        						scrollOffset: 0 // Убираем вертикальный скролл (у нас же автовысота)
        					},
        					store: userPointsData,
				        }
				    ]
			    }
			]
		};
		parentFields.splice(1, 0, pointsTab);

        return parentFields;
    }
});

Вот плагин, который получает данные из базы и подключает вкладку:
<?php
if ($modx->event->name != 'OnUserFormRender') return '';
    $modx->controller->addLastJavascript('/assets/components/customModx/js/mgr/user/custom_tab.js');
    
    $id; //internalKey в БД
    
    $sql = "SELECT * FROM `modx_user_points` WHERE `internalKey` = ".$id;
    $query = $modx->query($sql);
    $res = $query->fetchAll(PDO::FETCH_ASSOC);
    $data = [];
    foreach ($res as $row){
        $date = date("Y.m.d H:i:s", $row['expirationDate']);
        $dataPoint = [$date, $row['points']];
        array_push($data, $dataPoint);
    }
    $data = json_encode($data);
    
    $htmlOutput = "
        <script>
            var userPointsData = new Ext.data.ArrayStore({
				fields: ['date','points'],
				data: ".$data."
            });
        </script>
    ";
    $modx->controller->addHtml($htmlOutput);