Модификация цены Minishop2 по своему сценарию

Добрый день!
Возможно ли выполнить модификацию цены Minishop2 (может быть в плане доработки msOptionsPrice2) по следующему сценарию:

1. Есть цена за кубометр строительных блоков — скажем 8000 руб/м3.
2. Каждому товару-блоку присвоена опция «количество штук в кубе» — к примеру блоков размера «600x200x300 мм» в кубе содержится 27,7 шт.
3. Если разделить цену за куб на количество штук в кубе — получим цену блока за штуку. Т.е. в нашем случае это будет 8000: 27.7 = 288,8.

И вопрос в том, как выполнить такую модификацию? Чтобы «цена за куб» делилась на (указанное в опции) «количество штук в кубе» и чтобы в итоге получилась«цена за штуку»?
Futuris
27 июня 2022, 11:50
modx.pro
897
0

Создание ресурсов через фронтенд

Есть ли готовые решения для создания ресурсов пользователями?
Хотелось бы иметь возможность через фронтенд так же давать заполнять тв пользователям.
NEREBROV
26 июня 2022, 20:54
modx.pro
612
0

Не работает "поиск" на сайте

Поисковая строка не выдает результат поиска. Нужен человек кто исправит данный недочет
electrodetaly.ru
Игорь
26 июня 2022, 16:28
modx.pro
499
0

Login: Вывод сообщения после нажатия кнопки

Как мне вывести сообщение, после изменения пароля?
NEREBROV
25 июня 2022, 12:05
modx.pro
521
0

Не обновляются превьюшки

Всем привет!

MODX Revolution 2.7.1-pl
miniShop2 2.5.0-pl

Внес изменения в MS2 Images и пытаюсь обновить превью у товаров через Console кодом из документации
steve.kon
24 июня 2022, 22:48
modx.pro
735
0

Подключение к двум modx для синхронизации

Может кто сталкивался?
Есть 2 проекта на одном серваке. Есть ли возможность с нового проекта через modalConsole подключиться к старому имея на вооружении такие же конструкции как и в новом: $modx_old->getObject('modResource', $id) — но с данными от старого проекта.
P.S. Хочу забрать данные с базы старого проекта, но перебрав и видоизменив загрузить на новый.
Евгений Лазарев
24 июня 2022, 18:36
modx.pro
1
1 055
0

Привязка статей к товару minishop2

Есть интернет магазин на minishop2.
Есть статьи по товарам или околотематические. В самой статье я указываю «Сопутствующие товары» (ид через запятую) и показываю товары о которых идет речь в статье.
Все замечательно работает.
Теперь задача обратная — хочу показывать статьи в карточке товара или категории товара и статьи определять по полю «Сопутствующие товары» (ид через запятую) которые указаны в статье.

В карточке товара у меня есть его ИД. И есть список статей в которых есть поле relatedProducts.
Надо выбрать статьи в которых ИД товара присутствует в поле relatedProducts.

Как это сделать?
Pavel
24 июня 2022, 15:01
modx.pro
1
686
0

помогите оптимизировать php скрипт

Добрый день!
Нужна воздмездная помощь.
Есть php скрипт. Отдельно от сайта работает. Но стоит вставить его в сниппет и получаю белый экран.
Готов оплатить (в разумных пределах)
Олег
23 июня 2022, 18:49
modx.pro
515
0

FormIt валидация формы

Здравствуйте, с помощью FormIt создаются ресурсы в них есть tv phone хочу сделать такую валидацию если ресурс с номером телефона 777777 существует в определенной категории то форма выдает ошибку. Так же в форме есть select где указывается категория. Как я понял это нужно делать с помощью preHooks но пока не могу разобраться как получить данные из формы. Hooks понятно там все просто получаю данные из формы. Может кто подсказать?
eflit
23 июня 2022, 17:44
modx.pro
908
0

Как вывести цену со скидкой в карточке товара msDiscount ?

msDiscount выводит в каталоге, корзине всё норм, но в карточке товара не выводит, в доках не нашёл как вывести цену со скидкой в карточке товара

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

<?php
/** @var msDiscount $msDiscount */
/** @var msDiscount $price */
/** @var pdoTools $pdoTools */

if(empty($price)){
    return '';
}
$pdoTools = $modx->getService('pdoTools');
$msDiscount = $modx->getService('msDiscount');
$date = $pdoTools->getStore('msd_date');
$usergroups = array_keys($msDiscount->getUserGroups($modx->user->id));
$sales = !empty($date)
	? $msDiscount->getSales($date, true)
	: $msDiscount->getSales();
if (empty($sale)) {
	$sale = $pdoTools->getStore('msd_sale');
}
if (!empty($sale)) {
	$tmp = array_map('trim', explode(',', $sale));
	foreach ($sales as $id => $sale) {
		if (!in_array($id, $tmp)) {
			unset($sales[$id]);
		}
	}
}
if (!empty($row) && is_array($row)) {
	$mode = 'prepare';
	if (!empty($row['id'])) {
		$id = $row['id'];
	}
}
else {
	$mode = 'standalone';
	if (!empty($frontend_css)) {
		$frontend_css = str_replace('[[+assetsUrl]]', $msDiscount->config['assetsUrl'], $frontend_css);
		$modx->regClientCSS($frontend_css);
	}
	if (!empty($frontend_js)) {
		$frontend_js = str_replace('[[+assetsUrl]]', $msDiscount->config['assetsUrl'], $frontend_js);
		$modx->regClientScript($frontend_js);
	}
	if (empty($id)) {
		$id = $modx->resource->id;
	}
}

$remains = $discount = 0;
if (!empty($id) && !empty($sales)) {
	foreach ($sales as $sale) {
		// Check user groups
		if (!empty($sale['users'])) {
			$required = array();
			foreach ($sale['users'] as $gid => $type) {
				if ($type == 'out' && in_array($gid, $usergroups)) {
					unset($sales[$idx]);
					continue(2);
				}
				if ($type == 'in') {
					$required[] = $gid;
				}
			}
			if (!empty($required) && !array_intersect($required, $usergroups)) {
				unset($sales[$idx]);
				continue;
			}
		}
		// Check product groups
		if (!empty($sale['products'])) {
			$groups_in = $groups_out = array();
			foreach ($sale['products'] as $gid => $type) {
				if ($type == 'out') {
					$groups_out[] = $gid;
					unset($sale['products'][$gid]);
				}
				else {
					$groups_in[] = $gid;
				}
			}
		}

		if (!empty($groups_out) || !empty($groups_in)) {
			$ids = $modx->getParentIds($id);
			$ids[] = $id;

			$q = $modx->newQuery('msCategoryMember', array('product_id' => $id));
			$q->select('category_id');
			$tstart = microtime(true);
			if ($q->prepare() && $q->stmt->execute()) {
				$modx->queryTime += microtime(true) - $tstart;
				$modx->executedQueries++;
				if ($tmp = $q->stmt->fetchAll(PDO::FETCH_COLUMN)) {
					$ids = array_merge($ids, $tmp);
				}
			}
			$ids = array_unique($ids);
			$where = count($ids) > 1
				? array('document:IN' => $ids)
				: array('document' => $ids[0]);

			$q = $modx->newQuery('modResourceGroupResource', $where);
			$q->select('document_group');
			$tstart = microtime(true);
			if ($q->prepare() && $q->stmt->execute()) {
				$modx->queryTime += microtime(true) - $tstart;
				$modx->executedQueries++;
				$groups = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
				if (!empty($groups_out) && array_intersect($groups_out, $groups)) {
					continue;
				}
				elseif (!empty($groups_in) && !array_intersect($groups_in, $groups)) {
					continue;
				}
			}
		}

		// Product match
		$tmp_remains = ($sale['ends'] != '0000-00-00 00:00:00')
			? strtotime($sale['ends']) - time()
			: 0;
		if (strpos($sale['discount'], '%') !== false && (empty($discount) || strpos($discount, '%') !== false)) {
			if ($sale['discount'] > $discount) {
				$discount = $sale['discount'];
				$remains = $tmp_remains;
			}
		}
		elseif (is_numeric($sale['discount']) && is_numeric($discount)) {
			if ($sale['discount'] > $discount) {
				$discount = $sale['discount'];
				$remains = $tmp_remains;
			}
		}
		else {
			$discount = $sale['discount'];
			$remains = $tmp_remains;
		}
	}
}


if($discount && $remains){
    return (((int)$price * (100 - (int)$discount )/100));
}

return '';
Vladimir
23 июня 2022, 11:58
modx.pro
923
0