Андрей Копп

Андрей Копп

С нами с 07 октября 2013; Место в рейтинге пользователей: #175
Андрей Копп
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, для неё по идее нельзя выпускать платные скрипты с закрытым кодом, это противоречит её философии чтоли. Поэтому и придумываются разные методы обхода существующей лицензии. А согласно лицензии исходные коды дополнений к системе должны быть открытыми и выложены на не коммерческой основе.