Всего 123 800 комментариев

Артур Шевченко
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);
},
}
Александр Мельник
23 февраля 2024, 11:48
0
Обнаружил и у себя такую же ошибку.
[2024-02-23 10:44:55] (ERROR @ /home/somedir/public_html/core/xpdo/xpdo.class.php : 644) Could not load class: pdofetch from pdotools.pdofetch.
[2024-02-23 10:44:55] (ERROR @ /home/somedir/public_html/core/xpdo/xpdo.class.php : 1248) Problem getting service pdoFetch, instance of class pdotools.pdofetch, from path 
[2024-02-23 10:44:55] (ERROR @ /home/somedir/public_html/core/components/minishop2/model/minishop2/minishop2.class.php : 642) pdoTools not installed, metadata for miniShop2 objects not loaded
modx 2.8.6
minishop 3.0.7
pdotools 2.13.2
php 7.4
устанавливал из modstore.pro

ps. при этом fenom работает. Кстати еще при инсталяции minishop заметил, что в окне установки отображались красным ошибки, что не найден pdoTools, но я посчитал что это нормально, поскольку на тот момент еще не устанавливал pdoTools
Александр Туниеков
23 февраля 2024, 11:45
0
BannerY видел 6 лет назат и напрочь забыл что там
Евгений
23 февраля 2024, 07:00
0
Спасибо за перевод, сам не дорос еще до fenom, поэтому мне было полезно.
Нашел ошибочку в чанке rowtpl,
&tpl=`xhttmltpl`
одна t лишняя
И вопрос- зачем создавать перевод sitemap.xml? Нам ведь не нужен еще один sitemap?
и создаём копию(перевод) ресурса для контекста En
Алексей Смирнов
22 февраля 2024, 22:36
0
Понял.
Вариант первого решения:
1) 1 вызов pdoRes.
2) В чанке записываете в плейсхолдер вторую часть Html с нужными данными
3) в коде получаете 1 область вывод через PdoRes, а вторая — плейсхолдер.

Вариант 2.
1) 1 вызов pdoRes с указанием return => data. в этом случае вам придет голый массив.
2) с помощью не хитрых манипуляций типа foreach и прочих переменных фенома можно разделить данные в нужные блоки и вывести как хотите.

Это вкратце. те вызывать 2 раза pdoRes нет необходимости.
Григорий
22 февраля 2024, 22:13
0
Это разные блоки. Вот живой пример: https://silicon.createx.studio/landing-saas-v4.html
Покрутите слайдер рядом с заголовком Industries We Serve.
Дмитрий
22 февраля 2024, 15:07
0
Спасибо, интересная заметка.

В общем я сделал так:
$_GET = array_diff_assoc($_REQUEST, $_COOKIE);
Единственное, в url в пагинации остается параметр limit=

*?page=3&limit=36

Но при переходе он очищается из url.
Руслан Алеев
22 февраля 2024, 13:33
0
Спасибо за компонент!
Может имеет смысл попросить права у Николая от Console? Тогда бы Console не потерялся…
p.s. Если вам интересно и Николаю, конечно =)
Андрей Шевяков
21 февраля 2024, 16:23
0
Нет, вру. Заработало, хорошо почистил кеш и помогло. Спасибо вам огромное!
Андрей Шевяков
21 февраля 2024, 16:21
0
Пробовал, тогда вообще не выводятся товары во вкладке Продукты