Цена товара в зависимости от выбранного ТВ [решено]
Доброго дня, нужна помощь.
Ни разу не писал плагины, но полагаю без этого здесь не обойтись.
Есть ТВ с возможными значениями:
Задача сделать так, чтобы в родное поле price (minishop2) в админке подставлялось значение товара с наименьшей ценой.
во фронтенде пока вывожу костылём:
Ни разу не писал плагины, но полагаю без этого здесь не обойтись.
Есть ТВ с возможными значениями:
@EVAL $output = $modx->runSnippet('pdoResources',array(
'parents'=> $modx->resource->parent,
'resources'=> -$modx->resource->id,
'tpl'=>'@CODE:[[+pagetitle]]==[[+id]]',
'showUnpublished'=>'1',
'limit'=>'0',
'depth'=>'0',
'hideContainers'=>'1',
'outputSeparator'=>'||'));
return '' . $output;
В админке я чекбоксами выбираю подходящие товары.Задача сделать так, чтобы в родное поле price (minishop2) в админке подставлялось значение товара с наименьшей ценой.
во фронтенде пока вывожу костылём:
{if $template == 5}
{set $my}
{$clothes | replace :'||':','}
{/set}
{$_modx->runSnippet('!msProducts', [
'parents'=> $parent,
'resources'=> $my,
'tpl'=>'@INLINE: {$price} руб.',
'showUnpublished'=> 1,
'limit'=> 1,
'depth'=> 0,
'sortby' => '{"price":"ASC"}',
'hideContainers'=> 1,
'toPlaceholder'=> 'res',
])}
[[+res:empty=`<small>нет в наличии</small>`]]
{else}
{$price} {'ms2_frontend_currency' | lexicon}
{/if}
- ВКонтакте
- Telegram
- Viber
- РЎРєРѕРїРСвЂВВВВВВВВровать ссылку
1 650
0
Поблагодарить автора
Отправить деньги
Комментарии: 8
17 октября 2018, 10:31
Начну мыслить вслух, если вы не против.
Пытаюсь понять как пишутся плагины, для этого делаю что-то простое, например, при сохранении документа с шаблоном 5 нужно прибавить к цене 100 р. делаю вот таким образом:
Наверное стоит ещё сказать зачем такой костыль, когда есть дополнения типа msoptionsprice2 и другие.
Дело в том, что я делаю загрузку каталога с помощью msync. Так как в каталоге 1с размеры и цвета товаров — это отдельные товары, а на сайт я такое вываливать не хочу — я создаю товар с шаблоном 5 и через TV, с возможными значениям (описан в начале) назначаю ему нужные товары. В целом всё работает, но цену приходится назначать руками и следить за её изменениями.
Решение вижу в том, чтобы через плагин подставить значение товара из той самой ТВ с наименьшей ценой, при сохранении документа.
Если у кого будет минутка, направьте пожалуйста, а пока ковыряю дальше.
Пытаюсь понять как пишутся плагины, для этого делаю что-то простое, например, при сохранении документа с шаблоном 5 нужно прибавить к цене 100 р. делаю вот таким образом:
<?php
if ($modx->event->name = 'OnBeforeDocFormSave') {
if ($resource->get('template') == 5) {
$price = $product->get('price');
return $price + 100;
}
break;
}
но при сохранении страницы бесконечная загрузка и в журнале ошибок ничего. на каком шаге ошибка, пока не пойму.Наверное стоит ещё сказать зачем такой костыль, когда есть дополнения типа msoptionsprice2 и другие.
Дело в том, что я делаю загрузку каталога с помощью msync. Так как в каталоге 1с размеры и цвета товаров — это отдельные товары, а на сайт я такое вываливать не хочу — я создаю товар с шаблоном 5 и через TV, с возможными значениям (описан в начале) назначаю ему нужные товары. В целом всё работает, но цену приходится назначать руками и следить за её изменениями.
Решение вижу в том, чтобы через плагин подставить значение товара из той самой ТВ с наименьшей ценой, при сохранении документа.
Если у кого будет минутка, направьте пожалуйста, а пока ковыряю дальше.
17 октября 2018, 10:47
Примерно так должно работать
if ($modx->event->name == 'OnDocFormSave') {
if ($resource->template != 5) { // id шаблона с товаром
return;
}
// получаем id выбранных в TV продуктов
$tv = $resource->getTVValue('имя_tv_с_чекбоксами');
if (empty($tv)) {
return;
}
$ids = explode($tv, ',');
// получаем сами продукты
$products = $modx->getCollection('msProduct', [
'id:IN' => $ids
]);
if ($products) {
$prices = [];
// получаем цены для выбранных продуктов
foreach ($products as $product) {
$prices[] = $product->get('price');
}
// получаем минимальную цену
$min_price = min($prices);
if ($min_price) {
// сохраняем цену для товара
$resource->set('price', $min_price);
$resource->save();
}
}
}
17 октября 2018, 10:51
Для тв с чекбокасми возможно нужно поставить «тип вывода» — «разделитель» запятая.
17 октября 2018, 11:36
тв с таким типом стоит, но что интересно если в чанке просто вывести {$clothes} значения всё равно — 1 || 2 || 3
Пробую ваш код:
Пробую ваш код:
<?php
if ($modx->event->name == 'OnDocFormSave') {
if ($resource->template != 5) { // id шаблона с товаром
return;
}
// получаем id выбранных в TV продуктов
$tv = $resource->getTVValue('clothes');
if (empty($tv)) {
return;
}
$ids = explode($tv, ',');
// получаем сами продукты
$products = $modx->getCollection('msProduct', [
'id:IN' => $ids
]);
if ($products) {
$prices = [];
// получаем цены для выбранных продуктов
foreach ($products as $product) {
$prices[] = $product->get('price');
}
// получаем минимальную цену
$min_price = min($prices);
if ($min_price) {
// сохраняем цену для товара
$product->set('price', $min_price);
$resource->save();
}
}
}
системное событие поменял на OnDocFormSave. Ресурс сохраняется нормально, но никаких изменений и в журнале ошибок пусто. Существует ли какой-то способ поиска ошибок в таком случае? как в сниппетах showLog например 17 октября 2018, 11:43
Попробуйте разделитель в плагине поменять тогда на ||
Ошибки можно записывать в журнал ошибок Управление — Отчеты — Журнал ошибок
Ошибки можно записывать в журнал ошибок Управление — Отчеты — Журнал ошибок
$modx->log(1, print_r($ids, 1)); // распечатает массив с ids
17 октября 2018, 12:00
полезная вещь!
$modx->log(1, print_r($ids, 1)); // распечатает массив с ids
массив пустой — Array
(
[0] => ,
)
хотя $modx->log(1, print_r($tv, 1));
выдаёт правильные id причём с разделителем запятая: 2689,2690,2691,2692,2693,2951,2952 17 октября 2018, 12:05
Ну да, я explode не правильно написал, наоборот надо, сначала разделитель
$ids = explode(',', $tv);
17 октября 2018, 12:11
Огромное спасибо! Теперь работает.
Рабочий плаин:
Рабочий плаин:
<?php
if ($modx->event->name == 'OnDocFormSave') {
if ($resource->template != 5) { // id шаблона с товаром
return;
}
// получаем id выбранных в TV продуктов
$tv = $resource->getTVValue('clothes');
if (empty($tv)) {
return;
}
$ids = explode(',', $tv);
// получаем сами продукты
$products = $modx->getCollection('msProduct', [
'id:IN' => $ids
]);
if ($products) {
$prices = [];
// получаем цены для выбранных продуктов
foreach ($products as $product) {
$prices[] = $product->get('price');
}
// получаем минимальную цену
$min_price = min($prices);
if ($min_price) {
// сохраняем цену для товара
$resource->set('price', $min_price);
$resource->save();
}
}
}
Благодарен вам! И научили как и за меня написали.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Здесь упомянуты:
Компонент | Текущая версия | Закачки |
pdoTools | 2.13.2-pl от 02.09.2021 | 54 258 |
miniShop2 | 4.4.0-pl от 06.08.2024 | 26 389 |
msOptionsPrice2 | 2.5.22-beta от 29.11.2019 | 5 661 |
mSync | 1.2.7-pl от 17.03.2023 | 1 237 |
7 часов назад
Если речь про админку, то мне вообще непонятно, что ты пытаешься сделать и зачем? В админке есть интерфейс работы с заказами и в этом интерфейсе можно...
Вывод перечня заказанных товаров в таблицу с заказами minishop2 (панель менеджера) 10
Вчера в 21:11
Здравствуйте
Есть желание использовать компонент polylang для автоматизации перевода с наименьшими усилиями, но есть пару вопросов, которые хотелось ...
Polylang 143
Вчера в 16:30
Добрый день.
Удалите плагин vpSystem от пакета.
[VirtualPage] - Виртуальные страницы. 183
Вчера в 08:40
Хочестя в тикеты при сохранении комментария добавить кнопку «проверить на ошибки» и при нажатии на нее проверить комментарий на ошибки в нейросети сох...
pbStudio: Создаём сайт с PageBlocks – настройка и главная страница 6
Вчера в 08:36
Нет, через апи идет запрос в ChatGPT, который формирует необходимые данные о блоке, а дальше PageBlocks их разбирает и создает все нужные элементы.
PageBlocks 2.6.0. Настройка меню MODX и гибкое управление страницей пользователя 12
Вчера в 00:03
Не работает парсинг с vk.com, vkvideo.ru
[videoGallery] 1.4.0 Поддержка VK Video и ещё пара фишек 9
17 апреля 2025, 23:01
Можете тоже подсказать как победить данную ошибку?
msGallerySearch - загрузка изображений в галерею minishop2 по ссылке и Google поиск картинок 44
17 апреля 2025, 17:49
Очевидно ты используешь источник файлов, поэтому в админке путь прописан от источника, хочешь полный путь, откажись от источника файлов.
Не открываются загруженные файлы пишет страница не найдена 2
17 апреля 2025, 15:08
Привет, Henk. Спасибо за ответ! В посте по ссылке меня больше всего заинтересовала фраза «мы интегрировали AI в медиа-менеджер, чтобы значительно упро...
MODX/AI Hackathon Part 2 (27 марта) 4
17 апреля 2025, 13:17
в preg_match проверка проходит, и туда 100% приходит url
Здравствуйте! Первый раз такое вижу, у слеша, не 1 символ в строке, а 9!! Как это делает MODX 2