Pandemic
С нами с 22 ноября 2023; Место в рейтинге пользователей: #906mSync и Сбис - импорт остатков по складам
Здравствуйте!
К сожалению, период бесплатной поддержки автора закончился, поэтому пишу сюда. Есть ли здесь люди, разбирающиеся в мСинке? Нужен совет.
Задача была такая — синхронизировать Сбис и сайт. mSync для этого вполне подошел. Затем клиенту понадобилось выгружать остатки отдельно по каждому складу. И тут возник вопрос, как это сделать.
К сожалению, период бесплатной поддержки автора закончился, поэтому пишу сюда. Есть ли здесь люди, разбирающиеся в мСинке? Нужен совет.
Задача была такая — синхронизировать Сбис и сайт. mSync для этого вполне подошел. Затем клиенту понадобилось выгружать остатки отдельно по каждому складу. И тут возник вопрос, как это сделать.
MigxDB - Делаем безграничное хранилище "объектов" в ресурсах.
Всем привет! Наконец добрался до написания статьи по MigxDB!
Итак, предыстория: Была дана задача, реализовать управление квартирами в продаваемых строящихся домах. В каждом доме по 198 квартир, конечно же, обычный конфигуратор MIGX тут не подойдёт с его ограничением в 100 строк и отсутствием пагинации, поэтому, лучший вариант это — MigxDB.
Итак, предыстория: Была дана задача, реализовать управление квартирами в продаваемых строящихся домах. В каждом доме по 198 квартир, конечно же, обычный конфигуратор MIGX тут не подойдёт с его ограничением в 100 строк и отсутствием пагинации, поэтому, лучший вариант это — MigxDB.
Как удалить загруженный файл через fastuploadtv?
Есть кнопка удалить и заменить, по идеи кнопка удалить, ДОЛЖНА УДАЛЯТЬ, но оно не удаляет, сам файл находится в assets папке, как мне сделать так чтобы оно удалялось?
В core пакета я не нашёл процессор или триггер для функции удаления, кто-нибудь уже решал эту проблему?
В core пакета я не нашёл процессор или триггер для функции удаления, кто-нибудь уже решал эту проблему?
Отложенная отправка писем при помощи FormIT + Scheduler
Сегодня в нашем телеграм-чатике задали вопрос —
Можно ли как то реализовать отложенную отправку письма, через форму formIT.
Этот вопрос напомнил мне о моих планах, написать инструкцию именно об этом.
По сути подобная задача уже реализована в miniShop2 на базе компонента Scheduler, не так давно опубликованного в Modstore.pro.
Итак, давайте разберемся как же все таки отправить отложенное письмо при помощи FormIt + Scheduler
Можно ли как то реализовать отложенную отправку письма, через форму formIT.
Этот вопрос напомнил мне о моих планах, написать инструкцию именно об этом.
По сути подобная задача уже реализована в miniShop2 на базе компонента Scheduler, не так давно опубликованного в Modstore.pro.
Итак, давайте разберемся как же все таки отправить отложенное письмо при помощи FormIt + Scheduler
Как прикрепить к письму файл что был сгенерирован в хуке в ajaxForm/Formit?
В форме нет файла(так же нет в приципе инпута, и указания мультипарта), но в хуке перед отправкой создаётся файл, как его прикрепить к письму?
[mSync] Публикуем товары, если они есть в выгрузке
Приветствую, коллеги. Задача в следующем: есть выгрузка с названием товара, его ценой и артикулом, нужно снимать с публикации товары, которых в этой выгрузке нет, а те, что есть, публиковать.
Делаем дробное количество товаров в MiniShop2
Всем привет! Было дело, меня попросили помочь сделать на сайте дробное количество товаров…
Само собой погуглил, нашёл от силы 3-4 вопроса на эту тему и 1 статью от @Артур Шевченко за которую ему большое спасибо. Которая однако, к сожалению не помогла полностью решить вопрос, т.к. возможно способ уже устарел.
Само собой погуглил, нашёл от силы 3-4 вопроса на эту тему и 1 статью от @Артур Шевченко за которую ему большое спасибо. Которая однако, к сожалению не помогла полностью решить вопрос, т.к. возможно способ уже устарел.
Как обрабатывать каждое торговое предложение? msync
Количество товара находится в торговом предложении, но событие «mSyncBeforeProductOffers» обрабатывается буквально 1 торговое предложение, а нужно снять с публикации если кол-во товара 0, так как обработать каждое торговое предложение?
Или нужно будет менять экспорт в 1с чтобы кол-во товара засунуть в свойства товара?
Или нужно будет менять экспорт в 1с чтобы кол-во товара засунуть в свойства товара?
Антиспам для FormIt с генерацией случайной строки
Как автоматом указать характеристики только те что есть в товарах для категории?
Как в категории указать все характеристики что используются в товарах этой категории? в minishop2
[РЕШЕНО]
Суть в том чтобы в админке появились только те характеристики у товара которые есть, это значит поставить все уникальные характеристики для категории, нужно было именно такое решение, сделал сам. А если не нужно их указывать в админке для редактирования, то да проще будет вывести их список через pdoResources указав класс msCategoryOption
Буду рад кто исправит это код(КОД РАБОЧИЙ), чтобы был чище, так как делался на быструю руку решить задачу, а так же не было знаний для реализации этой задачи.
[РЕШЕНО]
Суть в том чтобы в админке появились только те характеристики у товара которые есть, это значит поставить все уникальные характеристики для категории, нужно было именно такое решение, сделал сам. А если не нужно их указывать в админке для редактирования, то да проще будет вывести их список через pdoResources указав класс msCategoryOption
Буду рад кто исправит это код(КОД РАБОЧИЙ), чтобы был чище, так как делался на быструю руку решить задачу, а так же не было знаний для реализации этой задачи.
<?php
function prepareSqlQuery($sqlQuery){
global $modx;
return $modx->query($sqlQuery);
}
function extractResultsFromQueryObject($sqlQueryResult, $itemsToRetreive, $multiDimensionRetreive=false){
global $modx;
$results = array();
if (is_object($sqlQueryResult)) {
while ($row = $sqlQueryResult->fetch(PDO::FETCH_ASSOC)) {
if($multiDimensionRetreive){
foreach($itemsToRetreive as $key => $value){
array_push($results, $row[$key], $row[$value]);
}
} else {
foreach($itemsToRetreive as $itemToRetreive){
array_push($results, $row[$itemToRetreive]);
}
}
}
}
return $results;
}
$prepareSqlQueryOfRetreiveCategories = prepareSqlQuery('SELECT modx_site_content.id FROM `modx_site_content` WHERE modx_site_content.class_key = "msCategory"');
$categoriesIds = extractResultsFromQueryObject($prepareSqlQueryOfRetreiveCategories, array('id'));
if(count($categoriesIds) <= 0){
return 'Have no categories';
}
foreach($categoriesIds as $categoryId){
$productsQueryObject = prepareSqlQuery('SELECT modx_site_content.id FROM `modx_site_content` WHERE modx_site_content.class_key = "msProduct" AND modx_site_content.parent = "'.$categoryId.'"');
$productsIds = extractResultsFromQueryObject($productsQueryObject, array('id'));
if(count($productsIds) <= 0) continue;
$productsIds = implode(",", $productsIds);
$distinctProductOptionsSqlQuery = prepareSqlQuery('SELECT DISTINCT modx_ms2_product_options.key FROM `modx_ms2_product_options` WHERE modx_ms2_product_options.product_id IN ('.$productsIds.")");
$distinctProductOptions = extractResultsFromQueryObject($distinctProductOptionsSqlQuery, array('key'));
if(count($distinctProductOptions) <= 0) continue;
$uniqueOptions = "";
$uniqueOptionsLength = count($distinctProductOptions);
foreach ($distinctProductOptions as $idx => $value) {
if($idx >= $uniqueOptionsLength - 1){
$uniqueOptions .= "'$value'";
} else{
$uniqueOptions .= "'$value',";
}
}
$uniqueOptionsIdsSqlQuery = prepareSqlQuery('SELECT modx_ms2_options.id,modx_ms2_options.key FROM `modx_ms2_options` WHERE modx_ms2_options.key IN ('.$uniqueOptions.')');
$uniqueOptionsIds = extractResultsFromQueryObject($uniqueOptionsIdsSqlQuery, array('id'));
if(count($uniqueOptionsIds) <= 0) continue;
/* #################################### ##################################### */
foreach($uniqueOptionsIds as $idx => $uniqueOptionId){
if (!$cop = $modx->getObject('msCategoryOption', array('option_id' => $uniqueOptionId, 'category_id' => $categoryId))) {
$table = $modx->getTableName('msCategoryOption');
$sql = "INSERT INTO {$table} (`option_id`,`category_id`,`active`) VALUES ({$uniqueOptionId}, {$categoryId}, 1);";
$stmt = $modx->prepare($sql);
$stmt->execute();
} else {
$q = $modx->newQuery('msCategoryOption');
$q->command('UPDATE');
$q->where(array('option_id' => $uniqueOptionId, 'category_id' => $categoryId));
$q->set(array('active' => 1));
$q->prepare();
$q->stmt->execute();
}
}
/* #################################### ##################################### */
echo 'Done';
}