Плагин на событие 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
601
0

Кто-нибудь пробовал писать кеширование для mFilter2?

Этот сниппет нужно вызывать некешированным.
Но это потому что стандартный механизм кеша в MODX кеширует слишком… топорно.

Что, если написать свое кеширование, которое будет зависеть от get-параметров? В него будет включена пагинация и примененные фильтры.

Кто-нибудь пробовал? Какие тут подводные камни?

Не хочется потратить несколько часов, а то и дней. И понять, что идея «так себе».
Andry
06 декабря 2022, 00:58
modx.pro
495
0

msfilter2 и скрытие отключенных (disabled) чекбоксов

Добрый всем день.
Есть ли возможность в фильтре скрывать чекбоксы, которые переходят в состояние disabled, после начала фильтрации (изображение 1)?

Попытался скрыть через CSS просто по классу, но вместо отключенных чекбоксов остается пустое место, сдвига выборов не происходит (изображение 2).
Валерий
06 декабря 2022, 00:32
modx.pro
543
0

Возможно ли в сниппете, вызванном из чанка tpl, получить переменные товара, которые устанавливаются при вызове msProducts?

Я вызываю msProducts. В аргументе tpl я указываю чанк. В этом чанке я вызываю сниппет. Как мне в сниппете получить значения, которые msProducts отправил в чанк? Я имею в виду значения конкретного товара (значения опций, pagetitle, longtitle и т.д.).

Их нужно в сниппет самому передавать? Но ведь значений очень много может быть. А еще опции, которые зависят от родителя товара. Просто так все это не передать в сниппет. Тут будут сложности и overhead.

Может, все же есть способы получить данные от msProducts в сниппете, который вызывали в чанке tpl, не передавая их в сниппет явно? Может, в каком-то массиве внутри $modx они содержатся? Или у $modx есть функция для их получения?
Andry
06 декабря 2022, 00:04
modx.pro
481
0

Стоимость доставки, зависящая от суммы заказа и времени доставки

1
Добрый день

Нужно сделать чтобы сумма доставки зависела от выбранного пользователем интервала доставки, а также от общей суммы заказа

Кто возьмется, распишу подробнее
Андрей
05 декабря 2022, 21:58
modx.pro
409
0

Поле из адреса в классе расчета достаки

Добрый день.
пытаюсь сделать расчет стоимости доставки, в зависимости от времени, выбранного пользователем. Для этого добавил поле — Удобное время доставки, в нем интервалы. У каждого интервала своя стоимость плюсом.
Скажите, как данные из этого поля передать в скрипт своего класса расчета стоимости доставки?

Сам расчет стандартный

class msDeliveryCourierHandler extends msDeliveryHandler implements msDeliveryInterface {
    public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0) {
        $freedeliverysumm = 1299;
        $delivery_time = 28; // Значение интервала
        $cart = $order->ms2->cart->status();
        $zakaz = $order->get();
        $cart_cost = $cart['total_cost'];
        if($cart_cost > $freedeliverysumm){
            return $cost;
        }else{
            $delivery_cost = parent::getCost($order, $delivery, $cost);
            return $delivery_cost;
        }
    }
}
Андрей
05 декабря 2022, 10:37
modx.pro
490
0

FormIt сохранить поля которых нет в форме

Здравствуйте! Столкнулся с таким вопросом.
Есть формы которые отправляют определенные данные и сохраняют их в FormIt. Но мне нужно чтобы дополнительно FormIt сохранял определенные данные, которых нет в форме (по определенным причинам я не хочу их там указывать, даже скрывая эти поля).
И вот даже не могу понять в какую сторону копать. В идеале это было бы сделать Плагин, чтобы в каждую форму не писать новый Хук, но и с Хуком в целом подойдет.

В документации ничего такого не нашел. Посмотрел Сниппет FormItSaveForm там есть такое:
$newFormArray = array(
        'form' => $formName,
        'date' => time(),
        'values' => $dataArray,
        'ip' => $modx->getOption('REMOTE_ADDR', $_SERVER, ''),
        'context_key' => $modx->resource->get('context_key'),
        'encrypted' => $formEncrypt,
        'encryption_type' => $encryptionType,
        'hash' => $formHashKey,
    );
Роман
05 декабря 2022, 07:22
modx.pro
589
0

OnWebPageInit получение настроек сайта / Работа с cookie куками и API MODX

Здравствуйте! Возник такой вопрос, не могу найти решение в интернете, хотя казалось бы вопрос простой.
Событие OnWebPageInit и мне в этом событии нужно получить параметр настройки сайта. В сниппете все работает, а именно в обработчике события нет:
$modx->getOption('setting_param')
Как я помню в OnWebPageInit всегда вопрос по доступности к API modx.
Но именно как в этом событии получить настройку сайта я не могу найти. Подскажите пожалуйста

UPD:
Сделал через событие OnHandleRequest — все работает и обращение к API MODX и работа с Куками
Роман
05 декабря 2022, 06:42
modx.pro
592
0

Подскажите как настроить Sitemap под мультиязычность

Есть снипет который уже не обслуживается но очень хорошо работает… точнее работает на сайтах без мультиязичности. Проблема в том что он выводит все ссылки без учета Site_url (Base_url) определенного контекста.
Например главная под RU выводит
Ru: site.net/
EN: site.net/.а должно быть… site.net/en
подскажите что исправить.
Еще в контекстах есть настройка Site_start где указан ID главной каждого контекста. Как сделать проверку чтоб к главним в контекстах не добавлялся Алиас
Alex
05 декабря 2022, 02:09
modx.pro
474
0

Вывод всех товаров производителя (vendor:name=pagetitle)

У меня созданы ресурсы с названием производителей.
Созданы сами производители, привязаны к этим ресурсам.
В товарах указаны эти производители.

В ресурсе я хочу вывести все товары каталога производителя равного pagetitle текущей странице.
Но получаю пустые результаты, подскажите как правильно.
Сергей Карпович
04 декабря 2022, 11:22
modx.pro
459
0