Перейти к содержанию
Официальный форум поддержки Simpla

Ввод цен вариантов в любой удобной валюте(поставки в евро-долларах)


Перейти к решению Решено ExtraBash,

Рекомендуемые сообщения

Еще поправка в пункте 2.4.2. забыл про пересчет цены расчетной при изменении обычной.


Добавил:

$('input.price').focusout(function() {
    recount_Price( $(this).parents('li').find('select.products_currency'));
});
Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 142
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Изображения в теме

ExtraBash, подскажите, пожалуйста.

Вроде все шаг за шагом делал правильно,.. но где-то ошибка. По ссылке http://ge.tt/16977u42?c скрин админки для продуктов и для продукта,.. я так понимаю, что ошибка в файле продукт.тпл,... я его загрузил тоже,.. 

 

Не подскажите,.. что где я пропустил?...

 

Заранее большое спасибо за помощь!

Ссылка на сообщение
Поделиться на другие сайты

ExtraBash, подскажите, пожалуйста.

Вроде все шаг за шагом делал правильно,.. но где-то ошибка. По ссылке http://ge.tt/16977u42?c скрин админки для продуктов и для продукта,.. я так понимаю, что ошибка в файле продукт.тпл,... я его загрузил тоже,.. 

 

Не подскажите,.. что где я пропустил?...

 

Заранее большое спасибо за помощь!

Починили.

 

----------------------------------------------------------------------------------------------------

Если кому нужна установка, тк. несколько человек уже обращались,

пишите в скайп - abashyrov, цена ориентировочно - 1000р.

Или могу вам дать доступ на готовые файлы от версии 2.3.6. - 500р.

Или делаете по инструкции, должно все получиться - Бесплатно.

----------------------------------------------------------------------------------------------------
Ссылка на сообщение
Поделиться на другие сайты

Ребята, в ходе эксплуатации товарищ Zetwin нашел недоработку - при сохранении курса валюты наши пересчитанные валюты не пересчитывались, странно, что так долго никто не замечал, и я сам не подумал. Так что спасибо.

В файле api/Money.php обновим функцию update_currency

public function update_currency($id, $currency)
{	
	$query = $this->db->placehold('UPDATE __currencies
					SET ?%
					WHERE id in (?@)',
				$currency, (array)$id);
	if(!$this->db->query($query))
		return false;
	
	$counter = $currency->rate_to/$currency->rate_from;
	
	$query = $this->db->placehold("UPDATE __variants SET `price`=`base_price`*? , `compare_price`=`base_compare_price`*? WHERE currency=?", $counter, $counter, $currency->id);
	if(!$this->db->query($query))
		return false;

	$this->init_currencies();
	return $id;
}
Ссылка на сообщение
Поделиться на другие сайты

Ребята, в ходе эксплуатации товарищ Zetwin нашел недоработку - при сохранении курса валюты наши пересчитанные валюты не пересчитывались, странно, что так долго никто не замечал...

Не только замечал, но и намекал:

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

Странно, что так долго разработчик не реагировал...
Ссылка на сообщение
Поделиться на другие сайты

Не только замечал, но и намекал:Странно, что так долго разработчик не реагировал...

 

Ну ничосе, ниже за тем комментарием следовала просьба уточнить

что имелось в виду за твоей расплывчатой формулировкой.

Чего как я могу заметить - не последовало.

 

Ты вообще можешь объяснить зачем ты оставляешь все эти странные комментарии,

странные формулировкой, странные смыслом?

 

Инструкция как пользоваться комментариями:

 

 Думаешь свою мысль;
 Решаешь написать комментарий;
   
 Проверяешь наполнен ли смыслом будущий текст;
 Если неполнен
   пишешь;
 иначе
   Думаешь свою мысль и не пишешь)));

Заранее спасибо)))
Ссылка на сообщение
Поделиться на другие сайты

Ну ничосе, ниже за тем комментарием следовала просьба уточнить

что имелось в виду за твоей расплывчатой формулировкой.

Чего как я могу заметить - не последовало.

За той просьбой следовала просьба установить демо, чтобы на нем все показать живьем (и, конечно, немного сомневался, так как полностью не устанавливал).

Что, как легко видеть, Вы сделать не пожелали.

Обычно авторы весьма интересуются ошибками в своих творениях, дабы их поскорее исправить. Потому как найти ошибку - это работа непростая. А Вы даже поленились затратить несколько минут на установку. Вот я и решил, что Вы не сильно хотите знать ...

Инструкция как пользоваться комментариями:

 

 

 Думаешь свою мысль;
 Решаешь написать комментарий;
   
 Проверяешь наполнен ли смыслом будущий текст;
 Если неполнен
   пишешь;
 иначе
   Думаешь свою мысль и не пишешь)));

Заранее спасибо)))

 

 

Инструкция, конечно, очень сильная. Я из нее узнал много нового. Раньше я по простоте считал, что пользоваться комментариями можно в основном одним способом - их читать.
Ссылка на сообщение
Поделиться на другие сайты

Дается мне ты лютый какой-то тип)))
Мне кажется, что ты слишком уж мудришь на бесплатном дополнении.

Для тех кто только зашел поглядеть чего изменилось - добавился пункт 2.5.

Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте. После того как отредактировал Money.php, после изменения валюты, стало вылазить следующее сообщение:


Warning: Division by zero in B:\home\localhost\www\TEST\api\Money.php on line 107

Warning: Placeholder substitution error. Diagnostics: "UPDATE s_variants SET `price`=`base_price`*? , `compare_price`=`base_compare_price`*? WHERE currency=UNKNOWN_PLACEHOLDER_2" in B:\home\localhost\www\TEST\api\Database.php on line 132

Warning: Query was empty [] in B:\home\localhost\www\TEST\api\Database.php on line 105

Warning: Division by zero in B:\home\localhost\www\TEST\api\Money.php on line 107

Warning: Placeholder substitution error. Diagnostics: "UPDATE s_variants SET `price`=`base_price`*? , `compare_price`=`base_compare_price`*? WHERE currency=UNKNOWN_PLACEHOLDER_2" in B:\home\localhost\www\TEST\api\Database.php on line 132

Warning: Query was empty [] in B:\home\localhost\www\TEST\api\Database.php on line 105

Как это исправить? Подскажите пожалуйста.


 

Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте. После того как отредактировал Money.php, после изменения валюты, стало вылазить следующее сообщение:


Warning: Division by zero in B:\home\localhost\www\TEST\api\Money.php on line 107

Warning: Placeholder substitution error. Diagnostics: "UPDATE s_variants SET `price`=`base_price`*? , `compare_price`=`base_compare_price`*? WHERE currency=UNKNOWN_PLACEHOLDER_2" in B:\home\localhost\www\TEST\api\Database.php on line 132

Warning: Query was empty [] in B:\home\localhost\www\TEST\api\Database.php on line 105

Warning: Division by zero in B:\home\localhost\www\TEST\api\Money.php on line 107

Warning: Placeholder substitution error. Diagnostics: "UPDATE s_variants SET `price`=`base_price`*? , `compare_price`=`base_compare_price`*? WHERE currency=UNKNOWN_PLACEHOLDER_2" in B:\home\localhost\www\TEST\api\Database.php on line 132

Warning: Query was empty [] in B:\home\localhost\www\TEST\api\Database.php on line 105

Как это исправить? Подскажите пожалуйста.

Не знаю, нужно посмотреть подробно. До этого все остальные шаги провернув, у вас все работало?

Пишите в скайп - Abashyrov

Поглядим.

Ссылка на сообщение
Поделиться на другие сайты

Опробовал новую функцию.  При проверке в действии сразу видны две грубейшие ошибки. Похоже, автор не особо утруждает себя даже элементарным тестированием перед выкладыванием своих материалов...

Ссылка на сообщение
Поделиться на другие сайты

Опробовал новую функцию.  При проверке в действии сразу видны две грубейшие ошибки. Похоже, автор не особо утруждает себя даже элементарным тестированием перед выкладыванием своих материалов...

На 3 сайтах протестировали, все работало как нужно. Тут никто, кроме тебя на позицию самого умного не претендует. Или помогай, или не пиши, в очередной раз говорю, без тебя разберемся как нибудь, если ты не желаешь писать сути, или предлагать своего решения получше.

 

Для ребят - сегодня решение обновлю использоваться будут стандартные симпловские функции.

Ссылка на сообщение
Поделиться на другие сайты

Не знаю, нужно посмотреть подробно. До этого все остальные шаги провернув, у вас все работало?

Пишите в скайп - Abashyrov

Поглядим.

 

Да, все работало, да и сейчас работает, просто в админке (на вкладке изменения валюты) вылазят ошибки.

Ссылка на сообщение
Поделиться на другие сайты

Спасибо за решение протестировал все рабоате гуд и выгрузку в яндекс маркет тоже просмотрел все ок есть маленький нюанс наверное просто забыли добавить изменения для нового варианта товара

 

в файле simpla/design/html/product.tpl в блоке <ul id=new_variant ...> заменить вывод цен на

 

<li class="variant_price"><input name="variants[base_price][]" type="text" value="" /></li>
                        <li class="variant_discount">  <input name="variants[base_compare_price][]" type="text"   value="" /></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="" /></li>
                        <li class="variant_main_currency_discount"><div class="op_cover"></div><input name="variants[compare_price][]" type="text"   value="" /></li>

Еще раз спасибо за решение)

Ссылка на сообщение
Поделиться на другие сайты

В соответствии с Вашими пожеланиями помогаю следующими подсказками.

 

 


Ребята, в ходе эксплуатации товарищ Zetwin нашел недоработку - при сохранении курса валюты наши пересчитанные валюты не пересчитывались, странно, что так долго никто не замечал, и я сам не подумал. Так что спасибо.

В файле api/Money.php обновим функцию update_currency

public function update_currency($id, $currency)
{	
	$query = $this->db->placehold('UPDATE __currencies
					SET ?%
					WHERE id in (?@)',
				$currency, (array)$id);
	if(!$this->db->query($query))
		return false;
	
	$counter = $currency->rate_to/$currency->rate_from;
	
	$query = $this->db->placehold("UPDATE __variants SET `price`=`base_price`*? , `compare_price`=`base_compare_price`*? WHERE currency=?", $counter, $counter, $currency->id);
	if(!$this->db->query($query))
		return false;

	$this->init_currencies();
	return $id;
}

 

Допустим, в админке на странице валют есть 3 валюты.

 

1. Что будет при изменении курсов и нажатии на кнопку Применить? Модифицированная Вами функция вызовется 6 раз. Первые 3 раза выполнятся правильно запросы по изменению цен.
Четвертый-шестой вызовы имеют вид (в simpla/CurrencyAdmin.php)
$this->money->update_currency($currencies_ids[$i], array('position'=>$currency_id));
То есть внутри измененной функции значения $currency->rate_to, $currency->rate_from будут неопределенными, и возникнет деление на 0.
2. Что будет, если попробовать установить или снять копейки? Ошибок явно не выйдет, но изменений не будет, причины примерно такие же.
3. Также не будет работать активация/деактивация валюты.
4. При добавлении валюты - аналогичные ошибки с делением на 0.
5. При удалении валюты - аналогичные ошибки с делением на 0.
6. При изменении порядка валют и сохранении - аналогичные ошибки с делением на 0.

То есть практически весь функционал на странице валют в админке работать перестает. Для меня загадка, как можно такое не заметить. А говорите, на 3 сайтах работает...

 

Вообще надо заметить, что прием Ваш в принципе неверный, функция обновления из api для такого не предназначена.

 

Конечно, можно добавить условия типа if(isset($currency->rate_to)), но это стиль плохой, идет вразрез с общей идеологией Simpla и представляет собой, как говорят, костыль. Если у Вас один сайт без особых доработок, то такое вполне допустимо. Но прежде чем публично тиражировать такое, я бы семь раз подумал...

Ссылка на сообщение
Поделиться на другие сайты

Спасибо за решение протестировал все рабоате гуд и выгрузку в яндекс маркет тоже просмотрел все ок есть маленький нюанс наверное просто забыли добавить изменения для нового варианта товара

 

в файле simpla/design/html/product.tpl в блоке <ul id=new_variant ...> заменить вывод цен на

 

<li class="variant_price"><input name="variants[base_price][]" type="text" value="" /></li>
                        <li class="variant_discount">  <input name="variants[base_compare_price][]" type="text"   value="" /></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="" /></li>
                        <li class="variant_main_currency_discount"><div class="op_cover"></div><input name="variants[compare_price][]" type="text"   value="" /></li>

Еще раз спасибо за решение)

Да, спасибо, добавлю.

Ссылка на сообщение
Поделиться на другие сайты

В соответствии с Вашими пожеланиями помогаю следующими подсказками.

 

 

Допустим, в админке на странице валют есть 3 валюты.

 

1. Что будет при изменении курсов и нажатии на кнопку Применить? Модифицированная Вами функция вызовется 6 раз. Первые 3 раза выполнятся правильно запросы по изменению цен.

Четвертый-шестой вызовы имеют вид (в simpla/CurrencyAdmin.php)

$this->money->update_currency($currencies_ids[$i], array('position'=>$currency_id));

То есть внутри измененной функции значения $currency->rate_to, $currency->rate_from будут неопределенными, и возникнет деление на 0.

2. Что будет, если попробовать установить или снять копейки? Ошибок явно не выйдет, но изменений не будет, причины примерно такие же.

3. Также не будет работать активация/деактивация валюты.

4. При добавлении валюты - аналогичные ошибки с делением на 0.

5. При удалении валюты - аналогичные ошибки с делением на 0.

6. При изменении порядка валют и сохранении - аналогичные ошибки с делением на 0.

 

То есть практически весь функционал на странице валют в админке работать перестает. Для меня загадка, как можно такое не заметить. А говорите, на 3 сайтах работает...

 

Вообще надо заметить, что прием Ваш в принципе неверный, функция обновления из api для такого не предназначена.

 

Конечно, можно добавить условия типа if(isset($currency->rate_to)), но это стиль плохой, идет вразрез с общей идеологией Simpla и представляет собой, как говорят, костыль. Если у Вас один сайт без особых доработок, то такое вполне допустимо. Но прежде чем публично тиражировать такое, я бы семь раз подумал...

Вот, нормально ответил, спасибо.

Да, согласен, подошел не слишком вдумчиво, не было времени засесть.

На 3 сайтах 1 единственное изменение цифры валюты проходило нормально.

Ссылка на сообщение
Поделиться на другие сайты

На 3 сайтах 1 единственное изменение цифры валюты проходило нормально.

Для того серьезные разработчики должны непременно делать демо. Это не только забота о пользователе, это зачастую свой собственный интерес - экономия на РАЗНОСТОРОННЕМ тестировании и диагностике ошибок.

Хостингов бесплатных, слава богу, хватает...

Ссылка на сообщение
Поделиться на другие сайты

Ребята, есть менее кривое решение проблемы обновления расчетных цен на сайте.
Функцию 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;

/////////////////////////////////////////////////////////////

$products = array();
foreach($this->products->get_products($filter) as $p)
	$products[$p->id] = $p;

if(!empty($products))
{
	// Товары 
	$products_ids = array_keys($products);
	foreach($products as &$product)
	{
		$product->variants = array();
	}

	$variants = $this->variants->get_variants(array('product_id'=>$products_ids));

	foreach($variants as &$variant)
	{
		$products[$variant->product_id]->variants[] = $variant;
	}
}

$currencies_ids = array();
foreach($currencies as $currency)
{
	if($currency->id)
	{
		$this->money->update_currency($currency->id, $currency);
		$counter = $currency->rate_to/$currency->rate_from;
		foreach($products as &$p)
		{
			foreach($p->variants as &$v)
			{
				if($v->currency == $currency->id)
				{
					$v->price = $v->base_price * $counter;
					$v->compare_price = $v->base_compare_price * $counter;
					$this->variants->update_variant($v->id, array('price'=>$v->price, 'compare_price'=>$v->compare_price));
				}
			}
		}	
	}
	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);
Ссылка на сообщение
Поделиться на другие сайты

Очень странный скрипт. 

1. Сначала  скрипт получает список товаров (products). При этом используется в качестве фильтра  параметр $filter, который вообще НЕ определен. Значит, извлекаются все товары. Уже плохо, но это еще полбеды.

2. Потом из базы извлекаются все варианты и прописываются  к массиву товаров.

3. Запускается само изменение, для чего используются три вложенных  цикла -  по валютам, товарам, вариантам. И в третьем цикле сам запрос к базе на обновление.

 

Теоретически оно правильно.  А сам скрипт - это классический пример того, как НЕЛЬЗЯ писать скрипты.

 

Во-первых, будут перебираться все валюты, товары, варианты. И для каждого варианта свой запрос к базе. Крайне нерационально и затратно. Практически для магазина с большим объемом товаров имеем риск того, что сервер не даст скрипту достаточно времени, выполнение прервется в случайном месте. Будет обработана лишь часть товаров. Другая часть будет иметь неверные цены - если автор в этот момент попадется админу на глаза, то будет подвергать свою жизнь немалому риску...

Во-вторых, предлагаемая обработка выполняется ДО стандартного пересчета цен. Значит, если она прервется, то стандартная обработка сделана не будет ВООБЩЕ. Это означает, что неверные цены будут не только у товаров, но и в уже сделанных заказах, в ценах доставки и еще некоторых позициях. Практически во всех ценах будет полное безобразие.  Для активно работающего магазина - просто катастрофа!

 

В то же время есть простой и легкий способ выполнить всю работу чуть ли не за один запрос. Причем рядышком, в том же файле, который автор пытается модифицировать, проводится подобная обработка и видны хорошие примеры того, как это можно делать легко и просто...

Ссылка на сообщение
Поделиться на другие сайты

1. Сначала  скрипт получает список товаров (products). При этом используется в качестве фильтра  параметр $filter, который вообще НЕ определен. Значит, извлекаются все товары. Уже плохо, но это еще полбеды.

 

2. Потом из базы извлекаются все варианты и прописываются  к массиву товаров.

//////////////////
В любом соседнем файле вызов товаров тот-же самый.
Ничего ты фильтром не отфильтруешь, тк указание о валюте идет в варианте.

 

3. Запускается само изменение, для чего используются три вложенных  цикла -  по валютам, товарам, вариантам. И в третьем цикле сам запрос к базе на обновление.

//////////////////

Да изменение запускается так-же как и во всей остальной симпле.
Согласен, можно вынести пробег по массивам товаров и вариантов наружу и бегать по ним 1 раз.

 

Теоретически оно правильно.  А сам скрипт - это классический пример того, как НЕЛЬЗЯ писать скрипты.

//////////////////

Ты несколько комментариев назад гворил в числе прочего, что аналогичный метод противоречит принципам симплы)
Но да, можно залезть и напрямую в таблицу вариантов, ничего не запрашивая.

Отмечу, что даже данным неэффективным методом 10 000 товаров нормально без задержек перетряхиваются.

Ссылка на сообщение
Поделиться на другие сайты

Ошибся я немного в своем предыдущем посте. Оказывается, предлагаемый скрипт неверно работает даже теоретически.

Если его использовать и он полностью отработает до конца, то цены все равно будут неверными.
Потому как  сначала произойдет установка правильных цен по предлагаемому скрипту, а потом  (при изменении основной валюты) - стандартный пересчет, который испортит цены.

Ссылка на сообщение
Поделиться на другие сайты

Но да, можно залезть и напрямую в таблицу вариантов, ничего не запрашивая.

Не только МОЖНО, но и НУЖНО.

 

А то, что предлагается сейчас, это означает - носить сметану ложками из погреба. И оправдываться заботой о свежести продукта...

Ссылка на сообщение
Поделиться на другие сайты

Ошибся я немного в своем предыдущем посте. Оказывается, предлагаемый скрипт неверно работает даже теоретически.

Если его использовать и он полностью отработает до конца, то цены все равно будут неверными.

Потому как  сначала произойдет установка правильных цен по предлагаемому скрипту, а потом  (при изменении основной валюты) - стандартный пересчет, который испортит цены.

Никто и не отменял то, что нужно следить за айди валюты и за самими валютами, суть последней доработки - пересчитать цены при изменении курса, в общем-то всё. 

 

Проверил, при изменении основной валюты всё нормально, но естественно айди валюты в вариантах не поменяется. Но пересчитывается нормально.

 

В общем спасибо за идею вынести цикл, о мастер художественной аллегории))

Ссылка на сообщение
Поделиться на другие сайты

В общем спасибо, о мастер проверки!
 
Только сомневаюсь, что Вы проверили как следует, учитывая то, как Вы проверяли в предыдущий раз: чтобы довести до Вас простую мысль, потребовалось несколько постов разъяснений очевидного, а в конце Вы написали весьма туманную фразу
 

На 3 сайтах 1 единственное изменение цифры валюты проходило нормально.

 

А последняя Ваша фраза о проверке

 

Проверил, при изменении основной валюты всё нормально, но естественно айди валюты в вариантах не поменяется. Но пересчитывается нормально.

 

довольно неопределенна и показывает в очередной раз Вашу небрежность в серьезном вопросе...

Никак не могу не напомнить, что серьезные разработчики должны непременно делать демо. Это не только забота о пользователе, это зачастую свой собственный интерес - экономия на РАЗНОСТОРОННЕМ тестировании и диагностике ошибок.

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

×
×
  • Создать...