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

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
Пробовал, тогда вообще не выводятся товары во вкладке Продукты
Андрей Шевяков
21 февраля 2024, 16:15
0
На Демо такое есть, у меня нет. Хочу добавить, как на демо, но ругается на обязательное поле. На Демо оно тоже пустое. Как быть?

Матвей
21 февраля 2024, 16:10
0
Спасибо за ссылку, попробую.
Да, Gallery похоже в ModX3 вступает в конфликт с приложением из modstore, что конвертирует все изображения в webp…

Пока изучаю, где конфликт и с чем…
Так как на чистой версии Gallery прекрасно работает…
Андрей Шевяков
21 февраля 2024, 15:35
+1
Я что так пугающе пишу или у меня буквы страшные? )
Ну я же дергаю с простыми вопросами, поэтому заранее извиняюсь, что отвлекаю)))

надо прежде уточнить где вывести?
Во вкладке Продукты
Володя
21 февраля 2024, 15:33
0
А еще вопрос такой, только не ругайтесь, пожалуйста)
Я что так пугающе пишу или у меня буквы страшные? )

Как вывести выбранный размер товара в заказе?
надо прежде уточнить где вывести?