Андрей

Андрей

С нами с 09 апреля 2015; Место в рейтинге пользователей: #68
Павел Романов
15 февраля 2024, 12:09
1
0
Что-то типа этого (бэкап базы только сделайте):
<?php
$tvid = 123; // ID TV-шки
$vendor = 'Производитель' // Название производителя
$template = 6; // ID шаблона товара

$sql = "SELECT * FROM {$modx->getTableName('modTemplateVarResource')} WHERE tmplvarid = {$tvid}"; 
$q = $modx->prepare($sql);
$q->execute();
$tvs = $q->fetchAll(PDO::FETCH_ASSOC);
foreach($tvs as $tv) {
	if($tv['value'] != $vendor) continue; // если название не то, пропускаем
   	if(!$resource = $modx->getObject('modResource', array('id' => $tv['contentid'], 'template' => $template)) continue; // если нет ресурса с таким ID и шаблоном, пропускаем
	$resource->remove(); // удаляем ресурс
}
Алексей Соин
10 января 2022, 11:03
3
+10
На скорую руку накидал свой вариант m2f.zencod.ru/

Если у кого то есть предложения по более лучшему варианту, велком с пуллреквестом))) github.com/alexsoin/modx2fenom
Тодор
20 декабря 2021, 18:49
4
+3
Убери
'sort'=>'resource|menuindex:asc',
оставь только
'sortby' => 'CASE `Data`.`vendor` WHEN 7 THEN 1 ELSE 0 END ASC, msProduct.id',
Олег Щавелев
02 октября 2021, 10:36
1
+1
Создайте модификатор через плагин, и вызовите к примеру через метод getObject. Схему объектной модели можно посмотреть в компоненте ClientConfig в папке model.
Баха Волков
06 июля 2021, 13:01
1
0
document.querySelector(любая_кнопка).addEventListener('click', e => {
    e.preventDefault()

    const data = new FormData(форма_фильтров)
    
    // и тут делайте с данными формы что душе угодно
})
Станислав
05 ноября 2020, 17:15
1
+2
Может кому то пригодится

$(document).ready(function () {			
    $('.comparision__reset-list').click(function() {
        $('.comparison-row .comparison-head').each(function (index, element) {
	    $.ajaxSetup({
	        async: false
	    });
	    $.post(document.location.href, {
	        cmp_action: 'remove',
		list: $(this).data('list'),
		resource: $(element).attr('data-id')
	    }, function(response) {}, 'json');
	    $.ajaxSetup({
	        async: true
	    });
	    document.location.reload();
	});
    });
});
Sergey
21 февраля 2020, 17:56
1
+2
В общем все оказалось гораздо проще, есть метод.

$modx->invokeEvent('msOnUpdateOrder',array(
'mode' => 'upd',
'id' => $order->get('id'),
'msOrder' => &$order,
'object' => &$order,
));

Где $order — объект заказа. После вызова срабатывают плагины и все вроде норм.
Алексей Шумаев
29 января 2020, 12:18
1
+2
Расширить модель msOrder: https://modx.pro/solutions/7037.
case 'OnMODXInit':

    # добавим расширение для msOrderAddress
    $modx->loadClass('msOrderAddress');
    #добавить новое поле для адреса 
	$modx->map['msOrderAddress']['fields']['new_field'] = 0;
	$modx->map['msOrderAddress']['fieldMeta']['new_field'] = array(
            'dbtype' => 'varchar',
            'phptype' => 'string',
            'precision' => 100,
            'null' => true,
            'default' => null,
	);

        # добавим расширение для msOrder
        $modx->loadClass('msOrder');
	$modx->map['msOrder']['fields']['new_field'] = 0;
	$modx->map['msOrder']['fieldMeta']['new_field'] = [
            'dbtype' => 'int',
            'precision' => 8,
            'phptype' => 'integer',
            'null' => true,
            'default' => 0
	];
Всё. Работаете со своими полями, как и с любыми другими.
Артем
27 января 2020, 15:15
2
+1
Теоретически можно указать домен в настройке session_cookie_domain, но также изменить session_name чтобы с текущими авторизациями не было конфликтов.
mngatoff
02 декабря 2019, 02:23
6
+7
достаточно триггернуть событие change на input:count, и запрос отправится стандартными средствами минишопа.

я вот так делаю (немного вырвано из контекста, но принцип ясен):
<script>
$(document)
    .on('click touchend', countButton, function (e) { // где countButton - кнопки плюс и минус
        e.preventDefault();
        var $container = $(this).closest('.ms2_form'),
        $count = $container.find('[name="count"]'),
        num = $count.val();
        if (isNaN(num) === false) { // страховочка от, например, пустого поля
            num = parseInt(num, 10);
            switch ($(this).data('ms2-count')) { // соответственно, у кнопок должен быть атрибут data-ms2-count="plus или minus"
                case 'plus':
                    num = num + 1;
                    $count.val(num);
                    break;
                case 'minus':
                    if (num <= 1) return;
                    num = num - 1;
                    $count.val(num);
                    break;
            }
        } else {
            return false;
        }
        $count.trigger('change'); // инициализируем отправку на сервер.
    })
    .on('change keypress keyup', '.ms2_form [name="count"]', function() {
        if ($(this).val().match(/\D/)) {
            this.value = $(this).val().replace(/\D/g,''); // следим на лету, чтобы в поле были только цифры
        }
        if (parseInt($(this).val(), 10) < 1) {
            this.value = 1; // следим на лету, чтобы в поле было не меньше единицы
        }
    });
</script>