Николай Савин

Николай Савин

С нами с 06 июня 2015; Место в рейтинге пользователей: #5
Николай Савин
25 декабря 2022, 09:06
0
Scheduler работает через крон.
То есть раз в минуту он запрашивает наличие задач в очереди и если такая есть, запускает задачу в работу.
Таким образом если условный интернет-магазин ставит в очередь несколько задач
  • Письмо менеджеру
  • Письмо Клиенту
  • Заказ в CRM
  • СМС клиенту
То эти задачи будут выполнены в течение 4 минут по очереди.

Но можно конечно делать и по другому. Ставить в задание не одну простую задачу, а пул задач. Что-то вроде — выполнить все процедуры касающиеся Заказа.

А еще @Дима Сайт показывал как можно дергать CRON чаще, например каждые 10 секунд. Но у меня пока не получилось повторить (не особо и старался).
Николай Савин
23 декабря 2022, 18:10
0
Как 1.4.1? Вот только в прошлой статье 1.0.0 было вроде.
С версии 1.4.1 сниппет вывода информации о скидках на конкретный товар удалён. Вместо него добавлен процессор.
Честный semver подразумевает смену мажорной версии в таких случаях. Хотя ты конечно хозяин
Николай Савин
21 декабря 2022, 13:30
0
Откуда взялся MIGX?
Есть же встроенный механизм присвоения категорий опциям.
Используйте его.
Как обойти проблему с вариативностью названий я вам написал.
Николай Савин
20 декабря 2022, 17:27
0
В Minishop2 4.0.0 поле 'msOrder.address' удалено.
Если оно требуется в компоненте — значит компонент более не будет работать. Ему нужно обновление.
Николай Савин
20 декабря 2022, 15:21
+1
Можно вместо названия писать ключи лексиконов.
Далее в каждой категории добавлять к лексикону какой-то префикс или суффикс. В этом случае на один ключ можно получить множество именований.
Примерно по такому принципу работают заголовки фильтров в mFilter2
Николай Савин
19 декабря 2022, 20:09
0
Запросов не было
Да как будто бы неоднократно проговаривались, обсуждались нюансы, на которые нужно обратить внимание. И в чате мы часто вспоминаем mSearch.

Из последнего — вот. И это по верхам еще прошлись.
Николай Савин
19 декабря 2022, 11:02
0
Мы рассматриваем различные варианты монетизации. Спасибо за ваш пример.
Николай Савин
18 декабря 2022, 21:32
+2
Конечно, мы не можем просить сделать его opensource
Очень даже можем! Пора признать что кобыла пока не сдохла, но уверенно стареет, что пора слазить с нее и двигаться дальше. Почему бы не оставить mSearch2 сообществу для его развития. Тем более эпоха MODX2 идет к завершению.
Пусть будет платным mSearch3 для MODX3
Пусть будет бесплатная платформа для дальнейшего развития и улучшения. Аля miniShop2. Вполне допускаю существование платных модулей улучшающих поиск и фильтрацию поверх mSearch2.

В общем верю — что проекту это пойдет на пользу.
Николай Савин
18 декабря 2022, 20:02
0
@Leonid Krylov обрати внимание, пожалуйста, на ситуацию.
Николай Савин
18 декабря 2022, 18:33
0
Здравствуйте. Отвечаю вам по порядку.
Для начала вы используете MODX3, а компонент предназначен для MODX2 (правда в описании нигде об этом не сказано). Автору нужно указать это в магазине.
Далее вы конечно можете пожаловаться в магазин как на качество компонента, так и на отсутствие ответа в поддержке. Для этого вы можете написать в support@modstore.pro, либо написать в виджет чата на сайте.
Ну и по закону вы имеете право на возврат денег, в случае если компонент вам не подошел.
Николай Савин
16 декабря 2022, 10:04
0
Если сервис российский, сервера внутри страны, а сам он внушает юридическое доверие почему бы с ним не работать.
На рынке есть отличные сервисы подборок и рекомендаций, сервисы внешнего поиска с подключаемыми на сайт виджетами, CRM различные и т.п. И ничего… зависят от них. Съезжать никто не собирается.
Николай Савин
14 декабря 2022, 20:02
+1
Я понял это по вот такой строчке
\core\src\Revolution\modParser.php
Пространство имен появилось только в MODX3

pdoTools для MODX3 также есть и работает, но там другие классы. Кроме того сервисы в MODX3 вызываются по другому.
Итого вот такой код
$pdo = $modx->getService('pdoTools');
foreach($array as $arr){
    $out .=  $pdo->parseChunk('userChunk', $arr);
}
мы можем преобразовать примерно вот так
use ModxPro\PdoTools\Fetch;
/** @var Fetch $pdoFetch */
$pdoFetch = $modx->services->get(Fetch::class);
foreach($array as $arr){
    $out .=  $pdoFetch->getChunk('userChunk', $arr);
}
Николай Савин
14 декабря 2022, 19:43
+1
Потому что вы используете MODX3, а код который вам выше показали для MODX2
Николай Савин
14 декабря 2022, 14:15
+1
Для работы с SQL запросами MODX предусматривает насколько путей.
Самый простой «переходный» вот такой

$sql = 'Тут чистый SQL';
$modx->exec($sql);


Более расширенный вариант

$sql = "SELECT * FROM modx_users WHERE active = 1";
// Вариант 1.
$statement = $modx->query($sql);
$users = $statement->fetchAll(PDO::FETCH_ASSOC);
foreach ($users as $user) {
    print $user['username'] .'
';
}
// Вариант 2. Если не нужно зачитывать данные в массив
foreach ($modx->query($sql) as $user) {
    print $user['username'] .'
';
}
Больше примеров вы можете посмотреть здесь
modzone.ru/blog/2016/02/04/database-queries-using-pdo/

Это то, что касается чистых SQL запросов. Но компоненты и Ядро MODX используют конструктор запросов и XPDO. Это несколько сложнее и требует чтения документации
Николай Савин
13 декабря 2022, 18:54
0
Подготовить собственный метод фильтрования согласно документации. Там даже пример описан очень подробный
Николай Савин
12 декабря 2022, 15:46
2
+3
Вам нужно создать плагин на событие msOnGetProductPrice

Пример кода такой
/** @var modX $modx */
/** @var msProduct $product */
if ($modx->event->name == 'msOnGetProductPrice') {
    $userGroups = $modx->user->getUserGroups();
    $sale_group = 4;
    //  $sale_price - цена со скидкой.  Придумайте откуда ее взять.  Отдельное поле или процент от общей цены
    $sale_price = 100;

    if (in_array($id_group, $userGroups)) {
        $modx->event->returnedValues['price'] = $sale_price
    }
}

Здесь по коду проверяем в каких группах состоит клиент. Если среди них есть скидочная группа — то подменяем price на нужное вам число
Николай Савин
12 декабря 2022, 11:19
0
Тогда я вам рекомендую вообще отказаться от этих кусков и использовать MODX API для обращения к базе данных, а также шаблонизатор для вывода информации