epic

epic

С нами с 16 марта 2024; Место в рейтинге пользователей: #9558

[СДЕЛАЙ САМ] SendIt и MiniShop2 - заказ в 1 клик - быстро, просто и бесплатно.

Приветствую, решил зафиксировать для себя и поделится с сообществом, прежде всего с новичками, актуальным способом быстро и без боли добавить в интернет-магазин на базе MiniShop2 функцию «Заказать в 1 клик.»
Артур Шевченко
09 февраля 2023, 12:03
modx.pro
13
2 286
+13

Плагин на событие mSyncOnProductOffers

Добрый день!
Помогите написать не большой плагин на событие mSyncOnProductOffers.
Что бы при выгрузке из 1с обновлялось поле у товара, созданное через msFieldsManager (поле называется remain).

Установлен компонент для учета остатков msProductRemains (он работает по такому-же событию и обновляет свои остатки)

case 'mSyncOnProductOffers':
		$xml = $modx->getOption('xml', $scriptProperties);
		$field = $modx->getOption('mspr_msync_field', $scriptProperties, 'Количество');
		if ( !is_object($xml) || !isset($xml->$field) ) break;
		$product = $modx->getOption('resource', $scriptProperties);
		$msProductRemains->saveRemains(array_merge($product->get('options')?:array(), array(
			'product_id' => $product->get('id')
			,'count' => (float) $xml->$field
			,'set' => true
		)));
		break;
Нужно что бы при обновлении товара, добавлялось количество в поле remain, сейчас это работает на сохранение товара.

Есть плагин, которые работает при сохранении товара.
<?php
$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocFormSave':
        if ($resource->get('class_key') == 'msProduct') {
                $modx->addPackage('msproductremains', $modx->getOption('msproductremains.core_path',null,$modx->getOption('core_path').'components/msproductremains/').'model/');
                $stock = 0;
                $sql = "SELECT remains FROM {$modx->getTableName('msprRemains')} WHERE product_id = ".$id;
                $query = $modx->prepare($sql);
                $query->execute(array(0));
                $remains = $query->fetchAll(PDO::FETCH_ASSOC);
                foreach ($remains as $remain) {
                    $stock += $remain['remains'];
                }
             // $resource->setTVValue('stock', $stock);
                $resource->set('remain', $stock);
                $resource->save();
            }
        break;
}
Сергей
06 декабря 2022, 13:54
modx.pro
1
670
0

Не могу настроить зависимые фильтры в mFilter2

Всем здравствуйте!

Не могу настроить зависимые фильтры в mFilter2
Документацию по mSearch2 читал, там прям скрипт готовый есть.
docs.modx.pro/komponentyi/msearch2/tipovyie-resheniya/zavisimyie-filtryi

И он отлично работает, только одно НО, при условии — марка: Ford, модель Ford Galaxy (то есть название модели включает в себя марку).

А у меня в базе модель просто Galaxy (без Ford) и базу быстро не поменяешь 35 тыс товаров.
Хоть js я и начал учить, но не получается пока, не хватает знаний), я так понимаю data-атирибуты нужны в модели?

Вот такой вопрос собственно, может ли кто-то помочь, может у кого-то есть наработки такие, код или встречался с похожей ситуацией?
Буду признателен за помощь, спасибо!
Дмитрий
28 июля 2022, 23:57
modx.pro
2
753
0

Билдер SQL запросов для modx, minishop2 и TV

Всем привет, просили меня недавно сделать выгрузку со старого сайта на modx с более чем 200к товаров, т.к. я уже давно не работал с modx, абсолютно забыв методы API, а также помня, насколько медленно и ресурсозатратно оно работает было решено писать SQL напрямую и все бы ничего, пока я не увидел структуру tv полей. Руками писать SQL с выборкой необходимых TV было адским адом, и было решено за часик накидать мини билдер SQL запросов

Получился примерно такой в использовании билдер, по мне покрывает 100% моих задач в формировании SQL для выгрузок из modx & ms2:
$builder = new SimpleBuilder();
$builder->addResourceFields('id', 'pagetitle', 'longtitle')
    ->addMs2Fields('article', 'price')
    ->addTvFields('price_opt', 'product_time', 'valute', 'remains', 'product_tax')
    ->where('deleted', '=', false)
    ->where('published', '=', true)
    ->where('class_key', '=', 'msProduct')
    ->where('remains', '!=', 0)
    ->whereNotNull('remains')
    ->whereIn('id', [18559, 18560])
    ->limit(1)
    ->offset(1)
;
$sql = $builder->sql();

$products = $modx->query($sql)->fetchAll(PDO::FETCH_ASSOC);
Под катом код и результат SQL который формирует билдер
Если хочется сразу к коду
Pavel Zarubin
24 февраля 2022, 02:10
modx.pro
6
1 747
+10

Slider в mFilter2 работает только с целыми числами

Привет,

Можно в водить диапазон 4.9 — 8 и это будет понято как 4-8.

Сделал Step 0.1 в jQuery, но цифры округляются в целые 2 3 4 5.

Как сделать чтобы точность была бы одна десятая?

Спасибо!
Trying
14 декабря 2021, 18:34
modx.pro
1
698
0

Фильтр mFilter по TV полю типа чекбокс

Хочу создать фильтрацию по TV полю типа чекбокс. Записать сразу несколько параметров через разделитель, вместо создания для каждого параметра отдельного поля. Сейчас у меня есть параметры типа Радио в них параметры выставлены так: Есть==1||Нет==2. Они выводятся чекбоксом. Как мне сделать такие же чекбоксы для параметров из TV поля чекбокс?
Miša Bulic
09 декабря 2021, 10:32
modx.pro
1
1 145
0

Minishop2 раздел Производители (ms|vendor). Как их массово добавить в админку?

Исходные данные:
Есть сайт на MODX с Minishop2, есть названия производителей и картинки к ним.
Может кто уже сталкивался и есть наработки, допустим какая-то команда для PHP-консоли modx. Хочу разом их добавить в админку, чтобы не создавать каждый и указывать к нему картинку вручную. Поделитесь, пожалуйста, если был такой опыт.
Никита Серов
29 ноября 2021, 10:51
modx.pro
1
954
0

Некорректно выводится слайдер цены через mFilter2

Не могу разобраться с выводом слайдера цены через mFilter2 (в связке с SeoFilter). Вкратце: если в mFilter2 не прописываю aliases, то там, где цена, выводятся чекбоксы «от»/«до». если прописываю aliases, то как бы ломается вёрстка слайдера (растягивается на весь блок в высоту).
Кристина
08 апреля 2021, 15:18
modx.pro
1
704
0

Как обновить TV поле MIGX после сохранения документа?

Приветствую, помогите решить задачу.

Есть MIGX TV field-facts, в нем есть поле с типом data.

Вкладки формы выглядят так
[
{"caption":"Информация", "fields": [
{"field":"date","caption":"Дата","inputTVtype":"date"}
]}
]
После того как в админке пользователь выберет дату и сохранит документ, есть задача отредактировать поле.
Решил делать плагином на событие OnDocFormSave, в нем запускаю сниппет cutDate где и редактирую поле date

if ($modx->event->name == 'OnDocFormSave') { 
$modx->runSnippet('cutDate');
}
Сниппет cutDate который должен переписать поле date

$migx = $modx->resource->getTVValue('field-facts');
$items = $modx->fromJSON($migx);
$output = array();
foreach($items as $item) {
  $item['date'] = 'newdate';
  $output[] = $item;
}
$modx->resource->setTVValue('field-facts', $modx->toJSON($output));
$modx->cacheManager->clearCache();      // Кэш тоже чистим
Но не работает это, где ошибся? Подскажите пожалуйста.
Роман
27 марта 2021, 17:54
modx.pro
1
773
0

MODX REVO API Как сохранить изображение по URL?

Подскажите пожалуйста, как сохранить изображение при создании страниц через API?
Использую следующий код для создания страниц через API MODX, все создается порядок.
Среди всех переменных полей есть и ссылка на изображение, сохраняю его в TV поле создаваемого ресурса.
НО так же хочу его скачивать в папку на хостинге сразу. Как это сделать?

Попробовал с помощью runProcessor но не получилось.

$data = [
    'id' => $value['id'],
    'file' => $value['media_url'],
];
$response = $modx->runProcessor('gallery/upload', $data, [
    'processors_path' => MODX_CORE_PATH . '/images/',
]);
Роман
18 января 2021, 17:15
modx.pro
1
1 546
0