Всего 123 771 комментарий

Иван Бочкарев
26 февраля 2024, 06:41
0
Поправил пост
Андрей
25 февраля 2024, 21:37
+1
Для каких целей это нужно? 3й шопкипер выпущен 7 лет назад, давно не поддерживается и имеет достаточно много проблем. Если уже и переносить, то в минишоп =)
Артур Шевченко
25 февраля 2024, 21:36
0
И под cut портянку убери.
Артур Шевченко
25 февраля 2024, 21:35
0
Ты бы код в соответствующий тег обернул что ли, читать же невозможно.
Артур Шевченко
25 февраля 2024, 21:34
0
// отправляют данные в обработчик
            fetch("request_response.php", {
                "method": "POST",
                "headers": {
                    "Content-Type": "application/json; charset=utf-8"
                },
                    "body": JSON.stringify(data)
                }).then(function(data) {
                    console.log(data);
                    if (data["passed"] == "passed") {
                        // если капча пройдена, то перезагружаю страницу
                        window.location.reload();
                    }
                })
Тут вместо перезагрузки вставляй в новый контент из data.
vit
vit
25 февраля 2024, 17:01
0
Я бы сделал с помощью js
Типо если капча выполнена показывается контент
Александр Туниеков
25 февраля 2024, 14:40
0
Уже не помню :-(. может вот здесь проблема
$contents = explode(',',$contents);
Евгений
25 февраля 2024, 14:18
0
Та же самая проблема с тем же самым сниппетом. Как решили? Вроде сниппет простой, не могу понять почему запятые так влияют?
vit
vit
24 февраля 2024, 22:36
0
спасибо два способа рабочие
Wassi Wassinen
24 февраля 2024, 20:02
0
@Наумов Алексей нашёл ещё баг. В источнике файлов для Fileman указываю максимальный размер файла. Он больше, чем в системных настройках. Но не даёт загружать — подтягивает ограничение из системных настроек.
Наумов Алексей
24 февраля 2024, 14:03
+1
так?.. только обрати внимание, я условия поменял для примера.
'where' => [
    ["status" => 0, "date1:<" => "2024-02-23"],
    ["OR:status" => 1, "date1:>" => "2024-02-23"]
],
Артур Шевченко
23 февраля 2024, 23:27
+1
Попробуй так
{$_modx->runSnippet('!pdoPage', [
                'element' => 'migxLoopCollection',
                'classname' => 'HistoryPayment\Model\Payment',
                'tpl' => 'pay',
                'where' => "(status1 = 0 AND date1 < '2024-02-23') OR (status2 = 0 AND date2 = '2024-02-23')",
                ])}
vit
vit
23 февраля 2024, 21:40
0
Это я пробовал все в один записать
'where' =>["status1" => "0", "AND:date1:<"=>"2024-02-23", "OR:status1" => "0", "AND:date1:<"=>"2024-02-23"],
Не получается мне нужно чтобы два условия, как бы отдельно срабатывали
Либо статус1 и дата1, либо статус 2 и дата2
Артур Шевченко
23 февраля 2024, 18:32
0
Так же как и AND, только OR
Артур Шевченко
23 февраля 2024, 18:31
0
Вот код сниппета, который выбирает нужные данные из БД и форматирует их в нужный вид
$tablePrefix = $modx->getOption('table_prefix');
$sql = "SELECT Product.pagetitle AS name, Data.price AS price, Parent.pagetitle AS parent FROM {$tablePrefix}site_content Product
LEFT JOIN {$tablePrefix}ms2_products Data ON Product.id = Data.id 
LEFT JOIN {$tablePrefix}site_content Parent ON Product.parent = Parent.id
WHERE Product.class_key = 'msProduct'";
$statement = $modx->query($sql);
$products = $statement->fetchAll(PDO::FETCH_ASSOC);
$output = [];
foreach ($products as $product) {
    $output[$product['parent']][] = $product;
}
return $output;
Виктор
23 февраля 2024, 18:06
0
Приветствую!
Столкнулись с такой проблемой. При импорте остатков создаются новые сроки на вкладке «Остатки». В них вместо размера — слово «Нет».
Не во всех товарах так. Где-то таких строк больше, где-то меньше. Кто-нибудь сталкивался, с чем это может быть связано?

Импорт был настроен и долгое время работает автоматически, а недавно обнаружили такое поведение.

prntscr.com/5SIe0t5KvYJc
Pandemic
23 февраля 2024, 13:18
0
Возможно у меня была проблема из-за того что в настройках мсинка установлена галка, чтобы публиковать в любом случае, и получается мои плагины на событие отрабатывают верно, но настройка мсинка отрабатывает позже, и перебивает друг друга, а на на импорте торговых предложений просто, отрабатывает как надо.
Но всё же как-то это событие должно лучше подходить «mSyncOnBeforeImportProduct» так как оно убирает доп сохранение ресурса, вместо условно двух, будет 1.
Сергей Карпович
23 февраля 2024, 13:09
0
У меня такой плагин работает на событие «mSyncOnProductImport»

<?php
/*
    https://docs.modx.pro/components/msync/events-and-plugins
    mSyncOnProductImport:
    $mode: Строка "category" для категорий или "create" для новых товаров или "update" для обновления товара. 
    $resource: Объект msCategory или msProduct. Объект минишопа, созданный или обновленный в данный момент
    $properties: array Массив свойств товара, извлеченных из XML, пустой для категории.
    $data: Объект mSyncCategoryData или mSyncProductData. Объект привязки категории или товара 1С к объектам минишопа
*/

if ($modx->event->name != 'mSyncOnProductImport') return;

/*
    Проверим, что свойство "Исключить из публикации на веб-сайтах" передано в выгрузке из 1С 
    (может и не быть). Если его нет значит данное свойство не поддерживается в базе 1С и 
    ничего не делаем. Если есть и это товар тогда делаем что надо.
*/
if ( is_a($resource, 'msProduct') ) {
    if ( array_key_exists('Исключить из публикации на веб-сайтах', $properties) ) {
        $hide = mb_strtoupper($properties['Исключить из публикации на веб-сайтах']) === mb_strtoupper('Да');
        if ( !isset($mSync) ) {
            $mSync = $modx->getService('msync', 'mSync', $modx->getOption('msync_core_path', null, $modx->getOption('core_path') . 'components/msync/') . 'model/msync/', array());
        }
        if ($hide) {
            // Если параметр передан и имеет значение Да, скрываем номенклатуру:
            $resource->set('deleted', 1);
            $resource->set('deletedby', $mSync->config['user_id_import']);
            $resource->set('deletedon', time());
            $resource->save();
            $mSync->log('Товар с идентификатором ' . $resource->get('id') . ' помечен удаленным.', 1);
        } else {
            // Если параметр передан и имеет другое значение, восстанавливаем номенклатуру:
            if ($resource->get('deleted') == 1) {
                $resource->set('deleted', 0);
                $resource->save();
                $mSync->log('Товар с идентификатором ' . $resource->get('id') . ' восстановлен из корзины.', 1);    
            }
        }
    }
}
Stepan
23 февраля 2024, 13:07
0
Не получается поставить на modhost… а мне в край нужно заказчице показать
Pandemic
23 февраля 2024, 12:57
0
Обновлённые методы
pdoPage.Hash = {
get: function () {
    coockieHash = readCookie('pdoPage');
    var vars = {}, hash, splitter, hashes;

    hashes = decodeURIComponent(coockieHash.substr(1)).replace('+', ' ');
    splitter = '/';
    
    if (hashes.length == 0) {
        return vars;
    }
    else {
        hashes = hashes.split(splitter);
    }
    
    var matches, key;
    for (var i in hashes) {
        if (hashes.hasOwnProperty(i)) {
            hash = hashes[i].split('=');
            if (typeof hash[1] == 'undefined') {
                vars['anchor'] = hash[0];
            }
            else {
                matches = hash[0].match(/\[(.*?|)\]$/);
                if (matches) {
                    key = hash[0].replace(matches[0], '');
                    if (!vars.hasOwnProperty(key)) {
                        // Array
                        if (matches[1] == '') {
                            vars[key] = [];
                        }
                        // Object
                        else {
                            vars[key] = {};
                        }
                    }
                    if (vars[key] instanceof Array) {
                        vars[key].push(hash[1]);
                    }
                    else {
                        vars[key][matches[1]] = hash[1];
                    }
                }
                else {
                    vars[hash[0]] = hash[1];
                }
            }
        }
    }
    return vars;
},

set: function (vars) {
    var hash = '';
    for (var i in vars) {
        if (vars.hasOwnProperty(i)) {
            if (typeof vars[i] == 'object') {
                for (var j in vars[i]) {
                    if (vars[i].hasOwnProperty(j)) {
                        if (vars[i] instanceof Array) {
                            hash += '&' + i + '[]=' + vars[i][j];
                        }
                        else {
                            hash += '&' + i + '[' + j + ']=' + vars[i][j];
                        }
                    }
                }
            }
            else {
                hash += '&' + i + '=' + vars[i];
            }
        }
    }
    if (hash.length != 0) {
        hash = '?' + hash.substr(1);
    }
    eraseCookie('pdoPage');
    createCookie('pdoPage', hash, 2);
},
}