Андрей Копп

Андрей Копп

С нами с 07 октября 2013; Место в рейтинге пользователей: #141
15 октября 2015, 20:07
2
0
Рабочий вариант плагина:

<?php
switch ($modx->event->name) {
    case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart':
        $miniShop2 = $modx->getService('minishop2','miniShop2',
        	MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);
        if (!($miniShop2 instanceof miniShop2)) return '';
        
        // Инициализируем класс в текущий контекст
        $miniShop2->initialize($modx->context->key, $scriptProperties);
        $total_count = $miniShop2->cart->status()['total_count'];
        $tmp = $miniShop2->cart->get();
        if ($total_count > 499) { // если 5 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount5 = $product->get('discount5');
                	$opt = $realPrice*$discount5/100;
                    $optPrice = $realPrice-$opt;
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        elseif ($total_count > 99) { // если 10 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount4 = $product->get('discount4');
                	$opt = $realPrice*$discount4/100;
                    $optPrice = $realPrice-$opt;
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        elseif ($total_count > 29) { // если 30 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount3 = $product->get('discount3');
                	$opt = $realPrice*$discount3/100;
                    $optPrice = $realPrice-$opt;
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        elseif ($total_count > 9) { // если 100 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount2 = $product->get('discount2');
                	$opt = $realPrice*$discount2/100;
                    $optPrice = $realPrice-$opt;
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        elseif ($total_count > 4) { // если 500 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount1 = $product->get('discount1');
                	$opt = $realPrice*$discount1/100;
                    $optPrice = $realPrice-$opt;
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        else {
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$tmp[$key1]['price'] = $realPrice;
                }
            }
        }
        $miniShop2->cart->set($tmp);
        break;
}
Осталось теперь придумать как это всё менять на лету, на странице с товаром и в корзине при оформлении заказа, может кто-нибудь в курсе как дописать этот скрипт, чтобы считалось всё на лету?

<script type="text/javascript">
$('#msCart input[name="count"]').change(function(){
	var count = $(this).val(); 
	var singlePrice = parseInt($(this).closest('.tab_row').children(".tab_sum").text());

	$(this).closest('.tab_row').children(".tab_pr").children("span").html(count * singlePrice);
});
</script>
15 октября 2015, 17:11
0
Сделал через систему плагинов, плагин вот такой получился, по ощущениям всё правильно должно быть, но он не считает почему-то:

<?php
switch ($modx->event->name) {
    case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart':
        $miniShop2 = $modx->getService('minishop2','miniShop2',
        	MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);
        if (!($miniShop2 instanceof miniShop2)) return '';
        
        // Инициализируем класс в текущий контекст
        $miniShop2->initialize($modx->context->key, $scriptProperties);
        $total_count = $miniShop2->cart->status()['total_count'];
        $tmp = $miniShop2->cart->get();
        if ($total_count > 4) { // если 5 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount1 = $product->get('discount1');
                	$opt = $realPrice*$discount1/100;
                    $optPrice = $realPrice-$opt;
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        elseif ($total_count > 9) { // если 10 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount2 = $product->get('discount2');
                	$opt = $realPrice*$discount2/100;
                    $optPrice = '';
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        elseif ($total_count > 29) { // если 30 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount3 = $product->get('discount3');
                	$opt = $realPrice*$discount3/100;
                    $optPrice = $realPrice-$opt;
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        elseif ($total_count > 99) { // если 100 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount4 = $product->get('discount4');
                	$opt = $realPrice*$discount4/100;
                    $optPrice = $realPrice-$opt;
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        elseif ($total_count > 499) { // если 500 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$discount5 = $product->get('discount5');
                	$opt = $realPrice*$discount5/100;
                    $optPrice = $realPrice-$opt;
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        else {
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$tmp[$key1]['price'] = $realPrice;
                }
            }
        }
        $miniShop2->cart->set($tmp);
        break;
}
13 октября 2015, 15:48
0
Ты прав, делал с двойными ковычками, сейчас всё выводится как надо. Спасибо)
13 октября 2015, 13:03
0
Так дело в том, что так и делаю $period['$cost'], а мне вместо значений NULL выдаёт.
11 октября 2015, 01:11
+1
А если нужно выводить несколько TV-параметров, то в этот параметр через запятую добавляете, пример:

&includeTVs=`sale, image, parametr`
11 октября 2015, 01:03
0
Может поможете разобраться? modx.pro/help/6731/ Что-то я совсем веру в свои силы потерял(((
08 октября 2015, 17:11
-1
citieslist.ru/
ekimoff.ru/225/

Я бы сделал что-ниюудь с этими базами) А вам самый простой способ в форме указать

<select name="country">
<option value="Россия"></option>
<option value="Германия"></option>
<option value="Украина"></option>
<option value="США"></option>
</select>
А в форме письма указать [[+country]] и вообще если используете FormIt то лучше его вместе с AjaxForm подружить.

Поправьте меня если ошибаюсь.
03 октября 2015, 01:14
0
Огромное спасибо! Глазам не вериться, работает))) Теперь придумать надо как сделать скидку в реальном времени зависящую от количества выбранного товара. Тут табличка есть optolider.bfa.su/katalog/igrushki/letayushhij-minon.html Формула такая:
от 5 шт — 0%
от 10 шт — 5%
от 30 шт — 20%
от 100 шт — 60%
от 500 шт — 80%

В админке через MIGX сделал табличку эту, теперь думаю как это можно сделать. Буду рад любой идее)
03 октября 2015, 01:03
0
А разве AjaxSearch это не сниппет MODX Evolution?!
03 октября 2015, 00:57
0
Убрал id, пытаюсь добавить товар, цена справа исчезает, в alert ставлю singlePrice, в окошке выдаёт NaN. Уже голова не соображает, что-то я не так делаю похоже(((
02 октября 2015, 22:45
+1
С JS проблемка, не очень хорошо его знаю. Привидённый код я так понимаю не полный, т.к. ругается на строчку total.text(count * price);

Не очень понимаю что нужно дописать?! Единственное что я знаю о jQuery так это alert(((
02 октября 2015, 22:10
0
А есть решения, чтобы срабатывало? Уж очень такой функционал необходим.
02 октября 2015, 22:09
0
Спасибо, давно PHx не пользовался, со времён MODX Evo и забыл о нём) А есть мысли по поводу выбора типа доставки? Почему может не срабатывать?
02 октября 2015, 18:39
0
Спасибо, то что нужно)
02 октября 2015, 17:15
0
Нужна сумма одной единицы товара умноженная на количество, на скрине даже выделил) Хотелось проще, но походу через API MODX прийдётся брать.
01 октября 2015, 12:45
0
А я и не вам писал, а Владимиру)
30 сентября 2015, 19:17
0
Накликать можно всё что угодно) Только вот разработчики врядли будут подобное использовать, а вы как я понимаю делаете это для конечного пользователя. Так что главное это простота. Обилие кучи непонятных вкладок и ссылок зачастую пугают тех же менеджеров, которые наполняют сайты обычно, но если вы сами будете по просьбе заказчика делать определённые сборки, то это не плохо. Сам имел опыт со сборками MODX Evo, но это совсем разные системы и репозитория с кучей компонентов устанавливаемых в пару кликов не было.
30 сентября 2015, 18:27
0
По теме, тема отнюдь не новая, ещё помниться где-то видел подобное, был сервис сборок MODX с необходимыми дополнениями, на сайте надо было галочки раставлять нужных дополнений и потом собирался архив с предустановкой всего этого)
30 сентября 2015, 18:22
-3
Почитайте лицензию MODX Revo, для неё по идее нельзя выпускать платные скрипты с закрытым кодом, это противоречит её философии чтоли. Поэтому и придумываются разные методы обхода существующей лицензии. А согласно лицензии исходные коды дополнений к системе должны быть открытыми и выложены на не коммерческой основе.