Плагин на событие mSyncOnProductOffers
2 1
Добрый день!
Помогите написать не большой плагин на событие mSyncOnProductOffers.
Что бы при выгрузке из 1с обновлялось поле у товара, созданное через msFieldsManager (поле называется remain).
Установлен компонент для учета остатков msProductRemains (он работает по такому-же событию и обновляет свои остатки)
Есть плагин, которые работает при сохранении товара.
Помогите написать не большой плагин на событие 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;
}
Плагин на событие mSyncOnProductOffers
Добрый день!
Помогите написать не большой плагин на событие mSyncOnProductOffers.
Что бы при выгрузке из 1с обновлялось поле у товара, созданное через msFieldsManager (поле называется remain).
Установлен компонент для учета остатков msProductRemains (он работает по такому-же событию и обновляет свои остатки)
Есть плагин, которые работает при сохранении товара.
Помогите написать не большой плагин на событие 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;
}
Кто-нибудь пробовал писать кеширование для mFilter2?
Этот сниппет нужно вызывать некешированным.
Но это потому что стандартный механизм кеша в MODX кеширует слишком… топорно.
Что, если написать свое кеширование, которое будет зависеть от get-параметров? В него будет включена пагинация и примененные фильтры.
Кто-нибудь пробовал? Какие тут подводные камни?
Не хочется потратить несколько часов, а то и дней. И понять, что идея «так себе».
Но это потому что стандартный механизм кеша в MODX кеширует слишком… топорно.
Что, если написать свое кеширование, которое будет зависеть от get-параметров? В него будет включена пагинация и примененные фильтры.
Кто-нибудь пробовал? Какие тут подводные камни?
Не хочется потратить несколько часов, а то и дней. И понять, что идея «так себе».
msfilter2 и скрытие отключенных (disabled) чекбоксов
Добрый всем день.
Есть ли возможность в фильтре скрывать чекбоксы, которые переходят в состояние disabled, после начала фильтрации (изображение 1)?
Попытался скрыть через CSS просто по классу, но вместо отключенных чекбоксов остается пустое место, сдвига выборов не происходит (изображение 2).
Есть ли возможность в фильтре скрывать чекбоксы, которые переходят в состояние disabled, после начала фильтрации (изображение 1)?
Попытался скрыть через CSS просто по классу, но вместо отключенных чекбоксов остается пустое место, сдвига выборов не происходит (изображение 2).
Возможно ли в сниппете, вызванном из чанка tpl, получить переменные товара, которые устанавливаются при вызове msProducts?
Я вызываю msProducts. В аргументе tpl я указываю чанк. В этом чанке я вызываю сниппет. Как мне в сниппете получить значения, которые msProducts отправил в чанк? Я имею в виду значения конкретного товара (значения опций, pagetitle, longtitle и т.д.).
Их нужно в сниппет самому передавать? Но ведь значений очень много может быть. А еще опции, которые зависят от родителя товара. Просто так все это не передать в сниппет. Тут будут сложности и overhead.
Может, все же есть способы получить данные от msProducts в сниппете, который вызывали в чанке tpl, не передавая их в сниппет явно? Может, в каком-то массиве внутри $modx они содержатся? Или у $modx есть функция для их получения?
Их нужно в сниппет самому передавать? Но ведь значений очень много может быть. А еще опции, которые зависят от родителя товара. Просто так все это не передать в сниппет. Тут будут сложности и overhead.
Может, все же есть способы получить данные от msProducts в сниппете, который вызывали в чанке tpl, не передавая их в сниппет явно? Может, в каком-то массиве внутри $modx они содержатся? Или у $modx есть функция для их получения?
Стоимость доставки, зависящая от суммы заказа и времени доставки
1
Добрый день
Нужно сделать чтобы сумма доставки зависела от выбранного пользователем интервала доставки, а также от общей суммы заказа
Кто возьмется, распишу подробнее
Нужно сделать чтобы сумма доставки зависела от выбранного пользователем интервала доставки, а также от общей суммы заказа
Кто возьмется, распишу подробнее
Поле из адреса в классе расчета достаки
Добрый день.
пытаюсь сделать расчет стоимости доставки, в зависимости от времени, выбранного пользователем. Для этого добавил поле — Удобное время доставки, в нем интервалы. У каждого интервала своя стоимость плюсом.
Скажите, как данные из этого поля передать в скрипт своего класса расчета стоимости доставки?
Сам расчет стандартный
пытаюсь сделать расчет стоимости доставки, в зависимости от времени, выбранного пользователем. Для этого добавил поле — Удобное время доставки, в нем интервалы. У каждого интервала своя стоимость плюсом.
Скажите, как данные из этого поля передать в скрипт своего класса расчета стоимости доставки?
Сам расчет стандартный
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;
}
}
}
FormIt сохранить поля которых нет в форме
Здравствуйте! Столкнулся с таким вопросом.
Есть формы которые отправляют определенные данные и сохраняют их в FormIt. Но мне нужно чтобы дополнительно FormIt сохранял определенные данные, которых нет в форме (по определенным причинам я не хочу их там указывать, даже скрывая эти поля).
И вот даже не могу понять в какую сторону копать. В идеале это было бы сделать Плагин, чтобы в каждую форму не писать новый Хук, но и с Хуком в целом подойдет.
В документации ничего такого не нашел. Посмотрел Сниппет FormItSaveForm там есть такое:
Есть формы которые отправляют определенные данные и сохраняют их в 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,
);
OnWebPageInit получение настроек сайта / Работа с cookie куками и API MODX
Здравствуйте! Возник такой вопрос, не могу найти решение в интернете, хотя казалось бы вопрос простой.
Событие OnWebPageInit и мне в этом событии нужно получить параметр настройки сайта. В сниппете все работает, а именно в обработчике события нет:
Но именно как в этом событии получить настройку сайта я не могу найти. Подскажите пожалуйста
UPD:
Сделал через событие OnHandleRequest — все работает и обращение к API MODX и работа с Куками
Событие OnWebPageInit и мне в этом событии нужно получить параметр настройки сайта. В сниппете все работает, а именно в обработчике события нет:
$modx->getOption('setting_param')
Как я помню в OnWebPageInit всегда вопрос по доступности к API modx.Но именно как в этом событии получить настройку сайта я не могу найти. Подскажите пожалуйста
UPD:
Сделал через событие OnHandleRequest — все работает и обращение к API MODX и работа с Куками
Подскажите как настроить Sitemap под мультиязычность
Есть снипет который уже не обслуживается но очень хорошо работает… точнее работает на сайтах без мультиязичности. Проблема в том что он выводит все ссылки без учета Site_url (Base_url) определенного контекста.
Например главная под RU выводит
Ru: site.net/
EN: site.net/.а должно быть… site.net/en
подскажите что исправить.
Еще в контекстах есть настройка Site_start где указан ID главной каждого контекста. Как сделать проверку чтоб к главним в контекстах не добавлялся Алиас
Например главная под RU выводит
Ru: site.net/
EN: site.net/.а должно быть… site.net/en
подскажите что исправить.
Еще в контекстах есть настройка Site_start где указан ID главной каждого контекста. Как сделать проверку чтоб к главним в контекстах не добавлялся Алиас