Gandalf Posted April 9, 2015 Report Share Posted April 9, 2015 Проверьте на ошибки, у меня все работает Quote Link to post Share on other sites
trainracing Posted April 12, 2015 Report Share Posted April 12, 2015 Валюты я добавлял в ручную, может id поменялся и из за этого так? Quote Link to post Share on other sites
Konan Posted April 12, 2015 Report Share Posted April 12, 2015 Валюты я добавлял в ручную, может id поменялся и из за этого так?Сегодня вообще ни чего не делай. Отдыхай. Так будет лучше Quote Link to post Share on other sites
trainracing Posted April 14, 2015 Report Share Posted April 14, 2015 Поправьте шапку пожалуйста на : 2.1. В файле /api/Variants.php поправим запросы в базу:get_variants$query = $this->db->placehold("SELECT v.id, v.product_id , v.price, v.base_price as base_price, NULLIF(v.compare_price, 0) as compare_price, NULLIF(v.base_compare_price, 0) as base_compare_price, v.sku, IFNULL(v.stock, ?) as stock, (v.stock IS NULL) as infinity, v.currency as currency, v.name, v.attachment, v.position FROM __variants AS v WHERE 1 $product_id_filter $variant_id_filter ORDER BY v.position ", $this->settings->max_order_amount);get_variant$query = $this->db->placehold("SELECT v.id, v.product_id , v.price, v.base_price as base_price, NULLIF(v.compare_price, 0) as compare_price, NULLIF(v.base_compare_price, 0) as base_compare_price, v.sku, IFNULL(v.stock, ?) as stock, (v.stock IS NULL) as infinity, v.currency as currency, v.name, v.attachment FROM __variants v WHERE id=? LIMIT 1", $this->settings->max_order_amount, $id); чтоб такие тугие как я видели какие строки нужно добавить Quote Link to post Share on other sites
ExtraBash Posted April 14, 2015 Author Report Share Posted April 14, 2015 Поправьте шапку пожалуйста на : 2.1. В файле /api/Variants.php поправим запросы в базу:get_variants$query = $this->db->placehold("SELECT v.id, v.product_id , v.price, v.base_price as base_price, NULLIF(v.compare_price, 0) as compare_price, NULLIF(v.base_compare_price, 0) as base_compare_price, v.sku, IFNULL(v.stock, ?) as stock, (v.stock IS NULL) as infinity, v.currency as currency, v.name, v.attachment, v.position FROM __variants AS v WHERE 1 $product_id_filter $variant_id_filter ORDER BY v.position ", $this->settings->max_order_amount);get_variant$query = $this->db->placehold("SELECT v.id, v.product_id , v.price, v.base_price as base_price, NULLIF(v.compare_price, 0) as compare_price, NULLIF(v.base_compare_price, 0) as base_compare_price, v.sku, IFNULL(v.stock, ?) as stock, (v.stock IS NULL) as infinity, v.currency as currency, v.name, v.attachment FROM __variants v WHERE id=? LIMIT 1", $this->settings->max_order_amount, $id); чтоб такие тугие как я видели какие строки нужно добавитьА чего было просто полностью не скопировать? Закрыли возможность корректировать посты старые, скоро поправлю - сделаю новый со всеми правками. Там еще на 5 странице правка с currencyadmin.php Quote Link to post Share on other sites
trainracing Posted April 14, 2015 Report Share Posted April 14, 2015 А чего было просто полностью не скопировать? Закрыли возможность корректировать посты старые, скоро поправлю - сделаю новый со всеми правками. Там еще на 5 странице правка с currencyadmin.phpЗдравствуйте Антон, у меня много сторонних модулей, и просто скопировать и заменить код невозможно (3 дня искал почему выбранная валюта не сохраняется, и только сегодня заметил что не добавит в вариантс.пхп v.currency as currency Quote Link to post Share on other sites
ExtraBash Posted December 10, 2015 Author Report Share Posted December 10, 2015 Исправленные стили, все сразу, в файле simpla/design/css/style.css: /* Мультивалютность */ .variant_currency { width: 107px; } .variant_currency > select { padding: 4px; height: 27px; } li.variant_main_currency, .variant_main_currency_discount { width: 89px; text-align: left; } li.variant_main_currency_discount { margin-right: 20px; } li.variant_main_currency input, .variant_main_currency_discount input { width: 77px; background-color: rgb(223, 223, 223); border: 2px solid lightgrey; } .op_cover { position: absolute; width: 93px; height: 27px; } #variants_block li.variant_download { width: 50px; } #variants_block li.variant_name { width: 167px; } #variants_block li.variant_name input { width: 132px; } #variants_block li.variant_sku { width: 80px; } #variants_block li.variant_sku input { width: 70px; } #variants_block li.variant_price { width: 107px; } #variants_block li.variant_discount { width: 83px; } .old_price > input { float: left; width: 80px; text-align: right; background-color: rgb(223, 223, 223); border: 2px solid lightgrey; } .old_price > .op_cover { width: 84px; height: 21px; } #list .variants ul .stock { float: left; margin-left: 6px; } select.products_currency { height: 22px; padding: 2px; margin-bottom: 5px; width: 89px; } span.v_unit { float: left; margin-top: 3px; } .old_wrap { float: right; width: 182px; } li.curr-id { width: 20px; padding-top: 5px; text-align: center; margin-right: 9px; } #header li.curr-id { padding-top: 0px; } h4.currency-state { padding: 0 0 5px 5px; } div#variants_block h4.currency-state { padding: 0 0 10px 41px; } /* Мультивалютность end */ Исправленный simpla/CurrencyAdmin.php: $currencies_ids = array(); foreach($currencies as $currency) { if($currency->id) { $this->money->update_currency($currency->id, $currency); // Мультивалютность $this->db->query("UPDATE __variants SET price=base_price*?, compare_price=base_compare_price*? WHERE currency=?" , $currency->rate_to/$currency->rate_from , $currency->rate_to/$currency->rate_from , $currency->id); // Мультивалютность end } else $currency->id = $this->money->add_currency($currency); $currencies_ids[] = $currency->id; } if($this->request->post('recalculate') == 1) { // Мультивалютность $this->db->query("UPDATE __variants SET price=IFNULL(base_price, price)*?", $coef); $this->db->query("UPDATE __variants SET currency=IFNULL(currency, ?)", $old_currency); // Мультивалютность end $this->db->query("UPDATE __delivery SET price=price*?, free_from=free_from*?", $coef, $coef); $this->db->query("UPDATE __orders SET delivery_price=delivery_price*?", $coef); $this->db->query("UPDATE __orders SET total_price=total_price*?", $coef); $this->db->query("UPDATE __purchases SET price=price*?", $coef); $this->db->query("UPDATE __coupons SET value=value*? WHERE type='absolute'", $coef); $this->db->query("UPDATE __coupons SET min_order_price=min_order_price*?", $coef); $this->db->query("UPDATE __orders SET coupon_discount=coupon_discount*?", $coef); } case 'delete': { // Мультивалютность $this->db->query("UPDATE __variants SET base_price=price, base_compare_price=compare_price, currency=NULL WHERE currency=?" , $id); // Мультивалютность end $this->money->delete_currency($id); break; } Quote Link to post Share on other sites
Guest test Posted January 11, 2016 Report Share Posted January 11, 2016 Демо не работает Quote Link to post Share on other sites
alexandr_azd Posted April 30, 2016 Report Share Posted April 30, 2016 а может кто скинет готовый файл product.tpl ?эrusli@i.uaзаранее спасибо Скинул. Антон, во первых тебе огромное спасибо (вырожу отдельно Яденьгами))).Но проблема такая же как и у RusLi - все работеат, но вот в товаре "косяк" (скрины приложил). Можно тоже файлик product.tpl Quote Link to post Share on other sites
ExtraBash Posted April 30, 2016 Author Report Share Posted April 30, 2016 да, заменились знаки бесконечности тут на форуме simpla1.pngsimpla2.png Антон, во первых тебе огромное спасибо (вырожу отдельно Яденьгами))).Но проблема такая же как и у RusLi - все работеат, но вот в товаре "косяк" (скрины приложил). Можно тоже файлик product.tpl День добрый - 1, заменились на форуме знаки бесконечности на вопросики - {if $variant->infinity}?{else}Там должна быть бесконечность, она есть в стандартных файлах если чего.По второй проблеме - нужно заного просто сделать этот файл, криво заменили, нужно внимтельней.Заменяем 2 li с ценой и со скидочной ценой на наши ровненько с соблюдением всех закрытых тегов.И все будет в огне. Quote Link to post Share on other sites
alexandr_azd Posted May 1, 2016 Report Share Posted May 1, 2016 да, заменились знаки бесконечности тут на форуме День добрый - 1, заменились на форуме знаки бесконечности на вопросики - {if $variant->infinity}?{else}Там должна быть бесконечность, она есть в стандартных файлах если чего. По второй проблеме - нужно заного просто сделать этот файл, криво заменили, нужно внимтельней.Заменяем 2 li с ценой и со скидочной ценой на наши ровненько с соблюдением всех закрытых тегов.И все будет в огне. Спасибо, помогло (на знаю как конечно))), т.к. целый день копи-пастил), как говорится "дело мастера боится" )).Спасибо тебе Антон!!! Еще хотел сразу извинится перед вами и форумом, за дополнительные вопросы, могут показаться глупыми, но я на умника не претендую)). Вобщем ситуация следующая: все исправилось, но при изменении старой цены, в страницы единичного товара (product.tpl), после сохранения, на страницы сайта цена не отображается, только после повторного сохранения.С чем может быть связанно? "Тыкните носом" или подскажите, заранее благодарен! И Спасибо за уделенное время! Quote Link to post Share on other sites
teplogaz Posted May 25, 2016 Report Share Posted May 25, 2016 *****Бесплатно - Читайте зелененькую инструкцию, и последние правки, которые я выложу завтра, это для личного пользования, для своего сайта. ***Прошу информации: для самостоятельного внесения изменений есть общее, окончательное решение? Или делать из шапки а потом правки... - если правки, то с какого момента? Quote Link to post Share on other sites
mishanya Posted May 25, 2016 Report Share Posted May 25, 2016 Прошу информации: для самостоятельного внесения изменений есть общее, окончательное решение? Или делать из шапки а потом правки... - если правки, то с какого момента? вот то что отмечено зеленым как решение это и есть все решение. там учтены правки Quote Link to post Share on other sites
Solution ExtraBash Posted May 25, 2016 Author Solution Report Share Posted May 25, 2016 (edited) https://drive.google.com/folderview?id=0BxlGmfugE_k7N2cyYWRCbmhNTzQ&usp=sharing Привет ребята, не знаю зачем, но решил раздобреть, вот последнее наиболее актуальное решение, все файлы. Будьте внимательны и осторожны, заменив файлы вы сможете подбить свои сборки и дополнения, лить только поверх чистых. Приложен так-же запрос в базу для создания таблиц нужных и присвоения вторых цен и валют для вариантов. Кому интересно как это все работает - ВОТ пост с инструкцией, не могу его редактировать, пилить заново лень. Пост с еще несколькими важными правками - Вот он, палите. Инструкция уже не самая актуальная, лучше пользуйтесь кодом из файлов. Позже были найдены затыки при синхронизации, и еще несколько мелких неурядиц, которые очень редко вспывают. Скайп - abashyrov Телефон и киви +79372046907 Сбер на том-же телефоне) Всем спасибо за интерес. Edited October 28, 2020 by Kasha мы не продаем свои доработки в этом разделе! Quote Link to post Share on other sites
Ponch Posted June 29, 2016 Report Share Posted June 29, 2016 Пасиба работает! я как раз искал разработчика.... Quote Link to post Share on other sites
ARTBVD Posted April 17, 2018 Report Share Posted April 17, 2018 Все работает, но теперь пакетное изменение цен перестало работать! Может кто подскажет, где чего подправить. Код пакетного изменения цен ниже:case 'change_price': { $operation = $this->request->post('op_type', 'integer'); $save_old = $this->request->post('save_old', 'integer'); $value = floatval(str_replace(',','.',$this->request->post('value'))); foreach($this->variants->get_variants(array('product_id' => $ids)) as $variant) { $price = $variant->price; $old_price = ($save_old == 1) ? $variant->price : $variant->compare_price; if($operation == 0) $price = $price + $value; elseif($operation == 1 && $value != 0) $price = $price * $value; $this->variants->update_variant($variant->id, array('price'=>$price, 'compare_price'=>$old_price, 'stock'=>$stock)); } break; } Quote Link to post Share on other sites
a13x Posted October 27, 2020 Report Share Posted October 27, 2020 (edited) В 11.11.2014 в 01:51, ExtraBash сказал: Итак вот оно, ребята, новое решение. Третье, обратите внимание! Нашли несколько несовершенств, связанных с использованием сортировок и иных местах, где товар должен учитываться в новой валюте, а все еще спрашивается с базы напрямую в старой. На ум пришло новое очень простое решение - хранить в переменной цены именно пересчитанную, а в админке вводить валютную. ---------------------------------------------------------------------------------------------------- Если кому нужна установка, тк. несколько человек уже обращались, пишите в скайп - abashyrov, цена ориентировочно - 1000р. Или могу вам дать доступ на готовые файлы от версии 2.3.6. - 500р. Или делаете по инструкции, должно все получиться - Бесплатно. ---------------------------------------------------------------------------------------------------- Для тех, кто не знает - нужно сделать, чтобы каждый товар мог быть введен в любой валюте, чтобы менять только курс. Повторю, что поставки из разных источников и 1 валюта для магазина становится не вариантом, товары будут вводиться в разных валютах. Поехали: 1. Добавим в таблицу с вариантами товаров соответствующее поле. Таблица `s_variants` - новая колонка валюты - `currency`, а так-же две новые колонки для хранения исходной величины цены без пересчета в валюту. ALTER TABLE `s_variants` ADD `currency` TEXT, ADD `base_compare_price` FLOAT( 14, 2 ) AFTER `compare_price`, ADD `base_price` FLOAT( 14, 2 ) AFTER `price` 2. Так как мы хотим сделать выбор валюты нужно вывести варианты. Я сделал вывод вариантов выпадающим списком в админках товара и товаров. Для этого в первую очередь нужно вызвать список валют в соответствующие шаблоны админки. Новое - добавил пересчитанную скидочную цену, все цены - реальные input, которые запишутся в базу, переложил пересчет цены при изменении валюты в jquery, не только при перезагрузке изменится сумма. Продукт: Продукты: 2.1. В файле /api/Variants.php поправим запросы в базу: get_variants $query = $this->db->placehold("SELECT v.id, v.product_id , v.price, v.base_price as base_price, NULLIF(v.compare_price, 0) as compare_price, NULLIF(v.base_compare_price, 0) as base_compare_price, v.sku, IFNULL(v.stock, ?) as stock, (v.stock IS NULL) as infinity, v.currency as currency, v.name, v.attachment, v.position FROM __variants AS v WHERE 1 $product_id_filter $variant_id_filter ORDER BY v.position ", $this->settings->max_order_amount); get_variant $query = $this->db->placehold("SELECT v.id, v.product_id , v.price, v.base_price as base_price, NULLIF(v.compare_price, 0) as compare_price, NULLIF(v.base_compare_price, 0) as base_compare_price, v.sku, IFNULL(v.stock, ?) as stock, (v.stock IS NULL) as infinity, v.currency as currency, v.name, v.attachment FROM __variants v WHERE id=? LIMIT 1", $this->settings->max_order_amount, $id); 2.2. В файлах /simpla/ProductAdmin.php и /simpla/ProductsAdmin.php добавим: // Все валюты $currencies = $this->money->get_currencies(); $this->design->assign('currencies', $currencies); Это даст нам доступ к массиву $currencies в шаблонах редактирования 1 товара и списка товаров. В массиве располагаются все валюты магазина по их id. 2.3. Правка шаблона админки одного товара 2.3.1. В файле /simpla/design/html/product.tpl добавим новые столбцы к варианту товара в div id="variants_block" > ul id="header" добавим: <ul id="header"> <li class="variant_move"></li> <li class="variant_name">Название варианта</li> <li class="variant_sku">Артикул</li> <li class="variant_price">Цена в валюте</li> <li class="variant_discount">Старая</li> <li class="variant_currency">Валюта</li> <li class="variant_main_currency">В {$currency->sign}</li> <li class="variant_main_currency">Старая В {$currency->sign}</li> <li class="variant_amount">Кол-во</li> </ul> Затем новая часть для конкретного варианта: <li class="variant_price"><input name="variants[base_price][]" type="text" value="{if $variant->base_price}{$variant->base_price|escape}{else}{$variant->price|escape}{/if}" /></li> <li class="variant_discount"> <input name="variants[base_compare_price][]" type="text" value="{if $variant->base_compare_price}{$variant->base_compare_price|escape}{else}{$variant->compare_price|escape}{/if}" /></li> <li class="variant_currency"> <select type="text" name="variants[currency][]"> {foreach $currencies as $c} <option {if $variant->currency} {if $variant->currency == $c->id} selected {/if} {else} {if $currency->id == $c->id} selected {/if} {/if} mnozhitel="{$c->rate_to/$c->rate_from}" value="{$c->id}">{$c->code} ({$c->rate_to/$c->rate_from})</option> {/foreach} </select> </li> <li class="variant_main_currency"><div class="op_cover"></div><input name="variants[price][]" type="text" value="{if $variant->currency}{if $variant->base_price}{$variant->base_price*$currencies[$variant->currency]->rate_to/$currencies[$variant->currency]->rate_from|escape}{else}{$variant->price*$currencies[$variant->currency]->rate_to/$currencies[$variant->currency]->rate_from|escape}{/if}{else}{$variant->price}{/if}" /></li> <li class="variant_main_currency_discount"><div class="op_cover"></div><input name="variants[compare_price][]" type="text" value="{if $variant->currency}{if $variant->base_compare_price}{$variant->base_compare_price*$currencies[$variant->currency]->rate_to/$currencies[$variant->currency]->rate_from|escape}{else}{$variant->compare_price*$currencies[$variant->currency]->rate_to/$currencies[$variant->currency]->rate_from|escape}{/if}{else}{$variant->compare_price}{/if}" /></li> 2.3.2. В том-же файле добавим jquery код - наверху страницы, часть кода, отвечающая за события вниз функции после загрузки, функцию отдельно к функциям: //Пересчет цен товара и скидочных цен $('.variant_currency > select').change(function(){ recount_Price( this ); }); $('.variant_price > input, .variant_discount > input').focusout(function(){ recount_Price($(this).parents('ul').find('.variant_currency > select')); }); Чуть ниже, после закрытия функции, где лежат остальные функции: //Пересчет цен товара и скидочных цен function recount_Price(selected_curr){ var mnozhitel = $("option:selected", selected_curr).attr('mnozhitel'); var ul = $(selected_curr).parents('ul'); var Counted_price = parseFloat($(ul).find('.variant_price > input').val()) * parseFloat(mnozhitel); $(ul).find('.variant_main_currency > input').val(Counted_price); Counted_price = parseFloat($(ul).find('.variant_discount > input').val()) * parseFloat(mnozhitel); $(ul).find('.variant_main_currency_discount > input').val(Counted_price); }; 2.3.3. Добавим новые стили в /simpla/design/css/style.css: .variant_currency { width: 111px; } .variant_currency > select { padding: 4px; height: 27px; } li.variant_main_currency, .variant_main_currency_discount { width: 93px; text-align: left; margin-right: 19px; } li.variant_main_currency input, .variant_main_currency_discount input { width: 87px; background-color: rgb(223, 223, 223); border: 2px solid lightgrey; } .op_cover { position: absolute; width: 93px; height: 27px; } #variants_block li.variant_download { width: 50px; } 2.4. Добавим аналогичный функционал в шаблон для нескольких товаров 2.4.1. Правим /simpla/design/html/products.tpl - внутри div.variants mtyztv гд на новый, тут выводятся валюты, два окошка input, всё красиво, все дела <ul> {foreach $product->variants as $variant} <li {if !$variant@first}class="variant" style="display:none;"{/if}> <i title="{$variant->name|escape}">{$variant->name|escape|truncate:30:'…':true:true}</i> <input class="price {if $variant->compare_price>0}compare_price{/if}" type="text" name="base_price[{$variant->id}]" value="{if $variant->base_price}{$variant->base_price}{else}{$variant->price}{/if}" {if $variant->base_compare_price>0}title="Старая цена — {$variant->base_compare_price} {$currency->sign}"{elseif $variant->compare_price>0}title="Старая цена — {$variant->compare_price} {$currency->sign}"{/if} /> <select class="products_currency" type="text" name="v_currency[{$variant->id}]"> {foreach $currencies as $c} <option {if $variant->currency} {if $variant->currency == $c->id} selected {/if} {else} {if $currency->id == $c->id} selected {/if} {/if} mnozhitel="{$c->rate_to/$c->rate_from}" value="{$c->id}">{$c->code} ({$c->rate_to/$c->rate_from})</option> {/foreach} </select> <br/> <div class="old_wrap"> <div class="old_price"> <div class="op_cover" {if $variant->compare_price>0}title="Старая цена — {$variant->compare_price} {$currency->sign}"{elseif $variant->base_compare_price>0}title="Старая цена — {$variant->base_compare_price} {$currency->sign}"{/if}></div> <input type="text" name="price[{$variant->id}]" value="{if $variant->currency}{if $variant->base_price}{$variant->base_price*$currencies[$variant->currency]->rate_to/$currencies[$variant->currency]->rate_from|escape}{else}{$variant->price*$currencies[$variant->currency]->rate_to/$currencies[$variant->currency]->rate_from|escape}{/if}{else}{$variant->price}{/if}"/> </div> <input class="stock" type="text" name="stock[{$variant->id}]" value="{if $variant->infinity}?{else}{$variant->stock}{/if}" /><span class="v_unit">{$settings->units}</span> </div> </li> {/foreach} </ul> Внутри div#action добавим новый пункт для массового изменения валюты <span id="select"> <select class="action_sel" name="action"> <option value="enable">Сделать видимыми</option> <option value="disable">Сделать невидимыми</option> <option value="set_featured">Сделать рекомендуемым</option> <option value="unset_featured">Отменить рекомендуемый</option> <option value="duplicate">Создать дубликат</option> {if $pages_count>1} <option value="move_to_page">Переместить на страницу</option> {/if} {if $categories|count>1} <option value="move_to_category">Переместить в категорию</option> {/if} {if $brands|count>0} <option value="move_to_brand">Указать бренд</option> {/if} <option value="delete">Удалить</option> <option value="change_currency">Изменить валюту</option> </select> <select disabled class="currencies_sel" name="currencies" style="display: none;"> <option disabled selected value="0">Не менять</option> {foreach $currencies as $c} <option value="{$c->id}">{$c->code} ({if $c->code != "RUR"}{$c->rate_to}{else}1{/if})</option> {/foreach} </select> 2.4.2. В том-же файле /simpla/design/html/products.tpl добавим нужные скрипты внизу: // Работа с валютами $('input.price').focusout(function() { recount_Price( $(this).parents('li').find('select.products_currency')); }); $('select.products_currency').change(function() { recount_Price(this); }); function recount_Price(selected_curr){ var mnozhitel = $("option:selected", selected_curr).attr('mnozhitel'); var base_price = $(selected_curr).parents('li').find('input.price').val(); var price_container = $(selected_curr).parents('li').find('.old_price > input'); var Counted_price = parseFloat(base_price) * parseFloat(mnozhitel); price_container.val(Counted_price); }; $('select.action_sel').change(function (){ if ($("option:selected", this).val() == "change_currency") { $("select.currencies_sel").fadeIn(); $("select.currencies_sel").prop( "disabled", false ); } else { $("select.currencies_sel").fadeOut(); $("select.currencies_sel").prop( "disabled", true ); } }); $('select.currencies_sel').change(function () { if ($("option:selected", this).val() != "0") { var sel_opt = ( "'" + $("option:selected", this).val() + "'" ) ; $( '.row' ).each(function() { if ($(this).find('input[type="checkbox"]').prop("checked")) { $(this).find('li').each(function() { var row_sel = $(this).find('select.products_currency'); $("option[value=" + sel_opt + "]", row_sel).prop("selected", true); row_sel.change(); }); } }); } }); 2.4.3. Правим обработку переменных в /simpla/ProductsAdmin.php // Сохранение цен и наличия $prices = $this->request->post('price'); $base_prices = $this->request->post('base_price'); $stocks = $this->request->post('stock'); $v_currencies = $this->request->post('v_currency'); foreach($prices as $id=>$price) { $base_price = $base_prices[$id]; $stock = $stocks[$id]; $v_currency = $v_currencies[$id]; if($stock == '?' || $stock == '') $stock = null; $this->variants->update_variant($id, array('price'=>$price, 'base_price'=>$base_price,'stock'=>$stock, 'currency'=>$v_currency)); } 2.4.4. Добавим новые стили в /simpla/design/css/style.css: .old_price > input { float: left; width: 80px; text-align: right; background-color: rgb(223, 223, 223); border: 2px solid lightgrey; } .old_price > .op_cover { width: 84px; height: 21px; } #list .variants ul .stock { float: left; margin-left: 6px; } select.products_currency { height: 22px; padding: 2px; margin-bottom: 5px; } span.v_unit { float: left; margin-top: 3px; } .old_wrap { float: right; width: 182px; } 2.5. Решение проблемы обновления расчетных цен на сайте. (кто использовал старое - Функцию update_currency в api/Money.php меняем на стандартную) Будем менять /simpla/CurrencyAdmin.php При обновлении измененной валюты обновим и все варианты с такой-же валютой, начало и конец заменяемого кода обрамлены неизменными частями кода, обратите внимание, в 2.3.6 самое начало кода выглядит не совсем так, так что отчеркрутое слешами не советую копировать: foreach($this->request->post('currency') as $n=>$va) foreach($va as $i=>$v) $currencies[$i]->$n = $v; ////////////////////////////////////////////////////////////// $currencies_ids = array(); foreach($currencies as $currency) { if($currency->id) { $this->money->update_currency($currency->id, $currency); $this->db->query("UPDATE __variants SET price=base_price*? WHERE currency=?" , $currency->rate_to/$currency->rate_from, $currency->id); } else $currency->id = $this->money->add_currency($currency); $currencies_ids[] = $currency->id; } ////////////////////////////////////////////////////////////// // Удалить непереданные валюты $query = $this->db->placehold('DELETE FROM __currencies WHERE id NOT IN(?@)', $currencies_ids); $this->db->query($query); 3. Импорт - Экспорт Осталась небольшая часть, как сделать импорт и экспорт сия чуда. Очень просто. 3.1. Правим /simpla/ajax/export.php - добавляем новую колонку для экспорта в объявлении массива $columns_names: private $columns_names = array( 'category'=> 'Категория', 'name'=> 'Товар', 'price'=> 'Цена', 'currency'=> 'Валюта', 'url'=> 'Адрес', 'visible'=> 'Видим', 'featured'=> 'Рекомендуемый', 'brand'=> 'Бренд', 'variant'=> 'Вариант', 'compare_price'=> 'Старая цена', 'sku'=> 'Артикул', 'stock'=> 'Склад', 'meta_title'=> 'Заголовок страницы', 'meta_keywords'=> 'Ключевые слова', 'meta_description'=> 'Описание страницы', 'annotation'=> 'Аннотация', 'body'=> 'Описание', 'images'=> 'Изображения' ); Ниже добавляем аналогично данные в соответствующую переменную, обратите внимание на цену: if(isset($products[$variant->product_id])) { $v = array(); $v['variant'] = $variant->name; $v['price'] = $variant->price; $v['currency'] = $variant->currency; if ($variant->base_price) $v['price'] = $variant->base_price; else $v['price'] = $variant->price; if ($variant->base_price) $v['base_compare_price'] = $variant->base_compare_price; else $v['compare_price'] = $variant->compare_price; $v['sku'] = $variant->sku; $v['stock'] = $variant->stock; if($variant->infinity) $v['stock'] = ''; $products[$variant->product_id]['variants'][] = $v; } 3.2. Правим /simpla/ajax/import.php - колонки: // Соответствие полей в базе и имён колонок в файле private $columns_names = array( 'name'=> array('product', 'name', 'товар', 'название', 'наименование'), 'url'=> array('url', 'адрес'), 'visible'=> array('visible', 'published', 'видим'), 'featured'=> array('featured', 'hit', 'хит', 'рекомендуемый'), 'category'=> array('category', 'категория'), 'brand'=> array('brand', 'бренд'), 'variant'=> array('variant', 'вариант'), 'price'=> array('price', 'цена'), 'currency'=> array('currency', 'валюта'), 'compare_price'=> array('compare price', 'старая цена'), 'sku'=> array('sku', 'артикул'), 'stock'=> array('stock', 'склад', 'на складе'), 'meta_title'=> array('meta title', 'заголовок страницы'), 'meta_keywords'=> array('meta keywords', 'ключевые слова'), 'meta_description'=> array('meta description', 'описание страницы'), 'annotation'=> array('annotation', 'аннотация', 'краткое описание'), 'description'=> array('description', 'описание'), 'images'=> array('images', 'изображения') ); Ниже заменяем обработки price и compare_price и добавляем обработку валют и цен, что позволит записать сразу во все 4 переменные необходимые данные, сразу пересчитывая из нужной валюты: // Подготовим вариант товара if(isset($item['variant'])) $variant['name'] = trim($item['variant']); if(isset($item['currency'])) if($item['currency'] == '') $variant['currency'] = null; else { $variant['currency'] = str_replace(',', '.', trim($item['currency'])); $currency = $this->money->get_currency(intval($variant['currency'])); } if(isset($item['price'])) { $variant['base_price'] = str_replace(',', '.', trim($item['price'])); if ($currency) $variant['price'] = floatval($variant['base_price'])*$currency->rate_to/$currency->rate_from; else $variant['price'] = $variant['base_price']; } if(isset($item['compare_price'])) { $variant['base_compare_price'] = str_replace(',', '.', trim($item['compare_price'])); if ($currency) $variant['compare_price'] = floatval($variant['base_compare_price'])*$currency->rate_to/$currency->rate_from; else $variant['compare_price'] = $variant['base_compare_price']; } В файле импорта добавляется всего одна колонка - Валюта, все остальное как было. Цены писать НЕ пересчитанные. Обратите внимание, что валюты у вас уже должны быть на сайте и следите за айди валюты. Всё, на этом всё. У меня все прекрасно работает, если чего - пишите. Данный код использует максимум стандартного из симплы, поэтому все сортировки и все дела работают. Спасибо Kors за найденные несовершенства. ------------------------------------------------------------ Продали клиенту, или порадовались сами - буду рад, если поделитесь бабулями - +7 937 204-69-07 Киви Жесть, вместо того чтобы добавить 1 поле по которому просто делать сортировку и хранить там одно значение (цену в рублях например), сделано 2 поля + куча ненужных правок кода. По умолчанию в этом модуле, в админке, даже есть поле с ценой в рублях, им и можно обновлять базу, но кто-то не ищет легких путей. Edited October 27, 2020 by a13x Quote Link to post Share on other sites
ExtraBash Posted May 11, 2023 Author Report Share Posted May 11, 2023 В 27.10.2020 в 13:52, a13x сказал: не ищет легких путей Добрый день. Подоспел ответ, через всего 3 года) Когда клиент захочет тут поменять, тут не поменять, часть так заполнена, часть так, одна валюта, вторая, третья, выводить четвертую, магазин работает тоже только на одной, нужно хранить это всё, и пересчитывать только то что необходимо. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.