Всего 123 803 комментария

Артур Шевченко
01 декабря 2022, 11:37
0
Вообще не очень понимаю, зачем проверять корзину в рандомный момент, если нужные данные можно сохранить. Но если прям очень надо, то в любой момент можно отправить запрос на сервер, на сервере сделать примерно так
$miniShop2 = $this->modx->getService('miniShop2');
$miniShop2->initialize($this->modx->context->key);
$cart = $miniShop2->cart->get();
А если что-то непонятно, значит не разобрались. Дока по minishop2 очень подробная.
Роман
01 декабря 2022, 10:39
0
Я просто не очень понимаю в целом как этим пользоваться. То что описано в доках, про добавление в корзину — ок понятно. Но про статусы или добавление своего чего-то я не нашел.
Роман
01 декабря 2022, 10:38
0
Мне надо проверять корзину в любой момент когда мне захочется, а не при добавлении в Корзину или Перед добавлением в Корзину. Как это можно сделать?
Денис Усманов
01 декабря 2022, 02:54
0
Это глюк, если нажать, пропадает кнопка… Давно кстати такое и по сути в общем и целом не критично.
Денис Усманов
01 декабря 2022, 02:51
1
0
Совет на будущее, для Да/Нет поля, лучше делайте checkbox, где всего 1 вариант «Да==1», потом соответственно будет проще проверять Да/Нет: [[+tv.BookBtn:is=`1`:then=``:else=``]], [[+tv.BookBtn:isnot=`1`:then=``]],[[+tv.BookBtn:isnot=``:then=``]].
Николай Савин
30 ноября 2022, 17:00
0
С точки зрения пользовательского опыта это очень неудобно. Было бы прикольно получить autocomplete по поиску имени вендора. Ну и по другим полям, категория например
Артур Шевченко
30 ноября 2022, 16:57
0
Есть скидка по основным полям товара, в том числе и по производителю, только указывать надо id, а не название.
Николай Савин
30 ноября 2022, 15:39
0
Не вижу в описании скидки на бренд. Такое есть? У меня часто спрашивают
Alexey
30 ноября 2022, 08:42
+2
Да, вчера обратил внимание, что если закомментить указанную строку в файле processors/mgr/file/export.class.php ( if ($new_session == 'new_session') ), то начинается проблема при запуске генерации прайса с большим количеством позиций из админки, там же за несколько этапов генерация идет, каждый раз новую сессию создавая, и подумал, что нужно попозжЕ попытаться пробросить параметр из скрипта для крона, но vectorserver опередил))), за что ему снова человеческое спасибо!

Кстати, при запуске кода для крона, можно убрать эту строку:

$modx->user = $modx->getObject('modUser', 1);

авторизация при запуске процессора не требуется, как выяснилось — проверил в инкогнито, всё работает.
Алексей
30 ноября 2022, 08:39
0
Может кому будет полезно, надо добавить сортировку
'sortby' => 'FIELD(modResource.parent, '~ $_modx->resource.parent ~ ')'

В итоге получаем
{'!pdoResources' | snippet: [
'parents' => 2,
'resources'=> '-' ~ $_modx->resource.id,
'limit' => '10',
'hideContainers' => 1,
'sortby' => 'FIELD(modResource.parent, '~ $_modx->resource.parent ~ ')'
]}
Александр Туниеков
30 ноября 2022, 07:32
0
Использование jquery большая часть разработчиков считает излишним в 2022. Код давно пишут на чистом JS.
Я как раз пишу на jquery. На чистом js писать могу научиться, но код на js растягивается Меня добивает что на jquery можно написать
$(".nav-img").css('width', 33);

а на чистом надо целых 4 строки
var vNavimg = document.getElementsByClassName("nav-img");
for(var i=0;i<vNavimg.length;i++){
    vNavimg[i].style.height = "33px";
}
Для использования цифрового слайдера и авто подсказок используется jquery UI. Это лишняя устаревшая зависимость. Есть плагины, которые реализуют подобное качественнее. Кроме того слайдер не работает на телефонах.
не знал что jquery UI не работает на телефонах. Какой компонент посоветуете? И вообще под телефоны надо для фильтров верстку другую. Потом думать буду.
Привязка к ID на страницах. Тоже можно к проблемам отнести. Переиспользовать код на странице несколько раз не получится. Сейчас подобные вещи обычно к data атрибутам и классам привязывают.
От ID я избавился, но переиспользовать код не получиться. Адресная строка одна и 2 фильтра в нее писать не могут. Я начал делать для 2 и более фильтров на странице, но отказался и отменил изменения.
Сам по себе код большой, объемный трудночитаемый. В современном мире разработки обычно принято разбивать код на логические куски и выносить в отдельные модули.
если вникнуть в код то на вполне логические блоки разбито. Можно разбить и по другому, но не факт что получиться лучше. Тем более у меня с этим не айс.
vectorserver
30 ноября 2022, 06:53
1
+2
Нужно еще просто было указать в параметрах, еще один ключ stage

$params = array(
    'crontab' => true,    
    'stage' => 'new_session',
    'id' => 2,
);


Готовый рабочий вариант:
<?php
define('MODX_API_MODE', true);
require '../index.php';

/* @var modX $modx */

//Дадим права админа навыполнение процессора
$modx->user = $modx->getObject('modUser', 1);

//id строки в таблице (колонка ID), таб "Прайс-листы"
$row_ID = 2;

/** @var msPriceList $msPriceList */
$msPriceList = $modx->getService('msPriceList', 'msPriceList', MODX_CORE_PATH . 'components/mspricelist/model/');

$corePath = $modx->getOption('mspricelist_core_path', null, $modx->getOption('core_path') . 'components/mspricelist/');
$path = $modx->getOption('processorsPath', $msPriceList->config, $corePath . 'processors/');


/* @var modX $modx */
$params = array(
    'crontab' => true,
    'stage' => 'new_session',
    'id' => $row_ID,
);

/* @var modProcessorResponse $response */
$response = $modx->runProcessor('mgr/file/export', $params, array(
    'processors_path' => $path
));

if ($response->isError()) {
    die($response->getMessage());
} else {
    echo json_encode($response->response);
}
Артур Шевченко
29 ноября 2022, 22:01
0
Уважаемый, тут гадалок нет. Есть стандартные пути поиска ошибки: консоль браузера, журнал ошибок админки, лог ошибок php на сервере. В одном из этих мест или во всех сразу точно есть записи касающиеся вашей проблемы. И вот если вы их предъявите, можно будет предложить какое-то решение.
Артур Шевченко
29 ноября 2022, 21:58
0
Ошибка 500 всегда должна что-то записывать в лог ошибок сервера. Смотри там.
Константин Ильин
29 ноября 2022, 19:37
0
Ребят, подскажите по событиям msOnBeforeValidateOrderValue и msOnValidateOrderValue

Задача такая. Есть скрытое пол $typepayer значения либо 1 либо 2. Если 2 то нужно проверить заполненость ИНН
switch ($modx->event->name) {
    case "msOnValidateOrderValue":
        if ($key === 'typepayer') {
            $data = $order->get();
            
            // Если Юр лицо(val = 2) проверяем заполненость ИНН
            if($data['typepayer'] == 2 && empty($data['inn'])){
                
                $modx->log(1, print_r($data, 1));
                $modx->log(1, print_r($key, 1)); 
                //$modx->event->returnedValues['value'] = false;
                //$modx->event->output("Yыфвфы");    
                //return INN false
            }
        }
    break;
}
Никак не соображу как вернуть error для поля инн, чтобы оно загорелось красным, в документации ничего не нашел про ответ плагинов и верно ли я выбрал событие под такую задачу?
по логике нужно вернуть ключ поля с false, но что найти не могу и понять…
Не нужно добавлять поле ИНН в где-то в msOnBeforeAddToOrder или msOnAddToOrder?
Алексей
29 ноября 2022, 18:58
0
Путь понятен, но он не туда
{'!pdoResources' | snippet: [
'parents' => 2,
'resources'=> '-' ~ $_modx->resource.id,
'limit' => '10',
'hideContainers' => 1
]}
Сейчас в моем снипете уже указано условие не выводить Контейнеры вообще и не выводить текущий ресурс. Мне нужны все остальные ресурсы, которые находятся в главном ресурсе-контейнере(2), но сначала надо выводить имеющиеся ресурсы соседние по бокам текущего ресурса.
т.е. если я вывожу ресурс 42 — Сначала должны вывестись ресурсы 41,43, а затем уже 31,32 и т.д. но не больше 10 штук