Jump to content

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


Go to solution Solved by ExtraBash,

Recommended Posts

  • Replies 141
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

В denver показывает ошибку 

Warning: Invalid argument supplied for foreach() in Z:\home\site\www\simpla\ProductsAdmin.php on line 75

Так а что у вас на этой строке в этом файле?

 

перевод гласит неправильный аргумент для foreach

Link to post
Share on other sites

для начала перед
 

foreach($prices as $id=>$price)

print_r('<pre>');
print_r($prices);

покажет приходит ли массив с ценами от инпута price[]

 

Если нет данных из него, смотрите сам инпут

 

 

Ставить просто нет желания, если хотите пишите в личку помогу бесплатно.

Link to post
Share on other sites
  • 2 weeks later...

У меня проблема. Все установил. Все работает. Но при сохранении нового товара или при изменении старого. Добавляются пустые варианты товар. Причем кол-во пустых совпадает с кол-вом нормальных 

 

Link to post
Share on other sites

У меня проблема. Все установил. Все работает. Но при сохранении нового товара или при изменении старого. Добавляются пустые варианты товар. Причем кол-во пустых совпадает с кол-вом нормальных 

 

Скорее всего где-то скобку не закрыли. Пересмотрите еще раз код.

Link to post
Share on other sites

 

Хорошо сделал и молодец что выложил с подробным описанием. Рекомендую проделать немного по другому в файле api/Variants.php создай функцию для пересчета цен и постоянно обращайся к ней в функциях get_variants, get_variant.

Пример моей реализации:

А как реализовать такое количество типов цен? 

Link to post
Share on other sites

Ребята, я внес небольшие правки, добавились несколько стилей, обрамили в шаблоне Products.tpl нашу новую строчку в  div.old_wrap:

 <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>

Два новых стиля, первый ясно откуда, второй для того чтобы в Product.tpl не съезжала кнопка загрузки электронного контента:

.old_wrap {
	float: right;
	width: 182px;
}
#variants_block li.variant_download {
	width: 50px;
}

 


Упростил метод обновления цен на сайте при изменении валюты, он стал значительно проще:

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);

 

 

Пока всё, позже может еще чего допилю, как будет время.

Link to post
Share on other sites

Упростил метод обновления цен на сайте при изменении валюты, он стал значительно проще:

2.5. Решение проблемы обновления расчетных цен на сайте.

Да, стало лучше в плане рациональности.

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

Метод правильно работает лишь в простейших случаях.

 

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

Link to post
Share on other sites
  • 4 weeks later...

Ребята, я внес небольшие правки, добавились несколько стилей, обрамили в шаблоне Products.tpl нашу новую строчку в  div.old_wrap:

 <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>

Два новых стиля, первый ясно откуда, второй для того чтобы в Product.tpl не съезжала кнопка загрузки электронного контента:

.old_wrap {
	float: right;
	width: 182px;
}
#variants_block li.variant_download {
	width: 50px;
}

 

 

Упростил метод обновления цен на сайте при изменении валюты, он стал значительно проще:

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);

 

 

Пока всё, позже может еще чего допилю, как будет время.

Можно ли сделать чтоб еще в карточке товара или на весь товар в категории можно было изменять курс валют? Например: Общий курс евро в интернет-магазине 23грн. но у меня есть позиции товара которым нужно задать курс евро 19грн.

Link to post
Share on other sites

Можно ли сделать чтоб еще в карточке товара или на весь товар в категории можно было изменять курс валют? Например: Общий курс евро в интернет-магазине 23грн. но у меня есть позиции товара которым нужно задать курс евро 19грн.

Создай еще 1 валюту, назови ее евро2 и сделай товары по 19 - евро2.

Link to post
Share on other sites

Спасибо за код, все работает, но столкнулся с 2-мя проблемами, при добавлении в ручную товар, при сохранении карточки появляеются пустые поля где артикул и т.д. Если импортировать товар, то в карточке товара не отображается артикул. В чем может быть проблема подскажите плиз

Link to post
Share on other sites

Спасибо за код, все работает, но столкнулся с 2-мя проблемами, при добавлении в ручную товар, при сохранении карточки появляеются пустые поля где артикул и т.д. Если импортировать товар, то в карточке товара не отображается артикул. В чем может быть проблема подскажите плиз

Напишите в скайп, обсудим. abashyrov

Link to post
Share on other sites
  • 1 month later...

Господа, нашел ошибку в пункте 2.5 в файле simpla/CurrencyAdmin.php

Забыл обновить цены скидочные, правильный запрос:

$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);


П.С.
Вопрос к местным - стало нельзя редактировать свои старые сообщения?
Мне нужно полную инструкцию поправить.

Edited by ExtraBash
Link to post
Share on other sites
  • 2 weeks later...

Не понял, что испортил? Давай подробности.

У всех работает...

 

Логика уже работает нормально, я изначально не понял логику... все цены слетели, я так и не понял, моя была ли вина или нет. Но это не проблема, одним запросом в БД вылечил.

 

сделал все по инструкции, но:

1. в карточке товара в админке исчез диск и кол-во товара, поправил

2. в карточке товара в админке при добавлении нового варианта отсутствуют поля с выбором валюты и ценой пересчета, поправил.

3. изменил базовые стили, ибо все поля не вмещались в одну строку (с диском и кол-вом товара на складе)

Edited by cernos
Link to post
Share on other sites

Логика уже работает нормально, я изначально не понял логику... все цены слетели, я так и не понял, моя была ли вина или нет. Но это не проблема, одним запросом в БД вылечил.

 

сделал все по инструкции, но:

1. в карточке товара в админке исчез диск и кол-во товара, поправил

2. в карточке товара в админке при добавлении нового варианта отсутствуют поля с выбором валюты и ценой пересчета, поправил.

3. изменил базовые стили, ибо все поля не вмещались в одну строку (с диском и кол-вом товара на складе)

Ну ничосе ты хакер)))

 

1. Странно, видимо лишнего заменил

2. Ага

3. Можно любоваться)

Link to post
Share on other sites

Желательно все эти изменения внести сразу : )

 

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

Одно только но, в запросе у тебя есть "ADD `currency` TEXT,"

замени TEXT на varchar 255 - зачем этому полю более 10 000 символов? ))) Не принципиально в данном случае, но правильнее будет varchar

Link to post
Share on other sites

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

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

Метод правильно работает лишь в простейших случаях.

 

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

Link to post
Share on other sites

 

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

>>Но в плане правильности метода и надежности работы практически ничего не изменилось.

Метод правильно работает лишь в простейших случаях.

 

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

 

В некотором плане соглашусь, в некотором нет.

 

У меня логика более сложна, тобишь в моей реализации цены хранятся в валюте, а при выводе в запросе уже перемножаются в валюту магазина. С одной стороны - это правильно, с другой стороны мне пришлось править слишком много запросов связанных с отображением товара + нагрузка на БД.

 

В данном примере цены уже хранятся пересчитанные, что конечно может повлечь проблемы с неправильным обращением, но значительно упрощает установку + снижает нагрузку на БД.

Edited by cernos
Link to post
Share on other sites

Корс Просто продает свою, там проработан более качественно функционал CurrencyAdmin, если я все правильно понимаю...

Edited by ExtraBash
Link to post
Share on other sites

Автору безграничный респект!

 

Но в шапке последнее верное решение? пилю, пилю.... и все криво :) Я ясен пень нуб в вебдеве, но в кризис приходится вспоминать уроки информатики :)

 

 

в товарах вроде норм:

Edited by RusLi
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...