Jump to content

Обновление количество товара при принятии заказа


Recommended Posts

При принятии админом заказа, кол-во товара, что в этом заказе, автоматически уменьшается в базе магазина.

Подскажите пожалуйста - в каком месте кода это делается.

Есть нужда иметь возможность отключить эту опцию.

Link to post
Share on other sites

Вдогонку сопутствующий вопрос - как показывать цену на странице товара, даже если товар кончился?

В этом случае $product->variants перестает содержать данные - в том числе и цену при выводе данных в product.tpl и product_block.tpl

Где это в коде логичнее поправить?

Link to post
Share on other sites

При принятии админом заказа, кол-во товара, что в этом заказе, автоматически уменьшается в базе магазина.

Подскажите пожалуйста - в каком месте кода это делается.

Есть нужда иметь возможность отключить эту опцию.

 

api/Orders.php

public function open($order_id)

public function close($order_id)

Link to post
Share on other sites

Вдогонку сопутствующий вопрос - как показывать цену на странице товара, даже если товар кончился?

В этом случае $product->variants перестает содержать данные - в том числе и цену при выводе данных в product.tpl и product_block.tpl

Где это в коде логичнее поправить?

 

Пробуйте во view/ProductView.php заменить

        foreach($this->variants->get_variants(array('product_id'=>$product->id, 'in_stock'=>true)) as $v)

на

        foreach($this->variants->get_variants(array('product_id'=>$product->id)) as $v)

 

При этом возникают недостатки - можно отсутствующий товар положить в корзину.

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

 

 

Вопрос время от времени всплывает на форуме. Но полностью хорошего простого решения пока не найдено.

http://simpla-tuning.com/pokazyvat-tsenu-dazhe-esli-tovara-net-v-nalichii

Link to post
Share on other sites

Вдогонку сопутствующий вопрос - как показывать цену на странице товара, даже если товар кончился?

В этом случае $product->variants перестает содержать данные - в том числе и цену при выводе данных в product.tpl и product_block.tpl

Где это в коде логичнее поправить?

Для этого надо чуть-чуть поломать api  :)

В файле api/Variants.php находим

$variant_id_filter = $this->db->placehold('AND (v.stock>0 OR v.stock IS NULL)');

И добавляем, чтобы и при нулевом значении, тоже думало, что товар in_stock, вот так:

$variant_id_filter = $this->db->placehold('AND (v.stock>0 OR v.stock IS NULL OR v.stock = 0)');

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

 

Стандартное:

{if $product->variants|count > 0}
<!-- Выбор варианта товара -->
<form class="variants" action="/cart">
<table>
	{foreach $product->variants as $v}
	<tr class="variant">
	<td>
	<input id="product_{$v->id}" name="variant" value="{$v->id}" type="radio" class="variant_radiobutton" {if $product->variant->id==$v->id}checked{/if} {if $product->variants|count<2}style="display:none;"{/if}/>
	</td>
	<td>
	{if $v->name}<label class="variant_name" for="product_{$v->id}">{$v->name}</label>{/if}
	</td>
	<td>
	{if $v->compare_price > 0}<span class="compare_price">{$v->compare_price|convert}</span>{/if}
	<span class="price">{$v->price|convert} <span class="currency">{$currency->sign|escape}</span></span>
	</td>
	</tr>
	{/foreach}
	</table>
	<input type="submit" class="button" value="в корзину" data-result-text="добавлено"/>
</form>
<!-- Выбор варианта товара (The End) -->
{else}
	Нет в наличии
{/if}

Меняем на:

<!-- Выбор варианта товара -->
<form class="variants" action="/cart">
<table>
	{foreach $product->variants as $v}
	<tr class="variant">
	<td>
	<input id="product_{$v->id}" name="variant" value="{$v->id}" type="radio" class="variant_radiobutton" {if $product->variant->id==$v->id}checked{/if} {if $product->variants|count<2}style="display:none;"{/if}/>
	</td>
	<td>
	{if $v->name}<label class="variant_name" for="product_{$v->id}">{$v->name}</label>{/if}
	</td>
	<td>
	{if $v->compare_price > 0}<span class="compare_price">{$v->compare_price|convert}</span>{/if}
	<span class="price">{$v->price|convert} <span class="currency">{$currency->sign|escape}</span></span>
	</td>
	</tr>
	{/foreach}
	</table>
{if $product->variant->stock > 0}
	<input type="submit" class="button" value="в корзину" data-result-text="добавлено"/>
{/if}
</form>
<!-- Выбор варианта товара (The End) -->
{if $product->variant->stock = 0}
	Нет в наличии
{/if}

Получается удаляем стандартную проверку на заполненность массивна, потому что он у нас в любом случае будет заполнен, и вставляет два условия: в случае если товаров больше чем 0 (if $product->variant->stock > 0) — показываем кнопку заказа, в случае если количество товаров 0, показываем "нет в наличии". 

 

На мой взгляд решение довольно простое, но возможно с "косяками" :)

Link to post
Share on other sites

Для этого надо чуть-чуть поломать api  :)

В файле api/Variants.php находим

$variant_id_filter = $this->db->placehold('AND (v.stock>0 OR v.stock IS NULL)');

И добавляем, чтобы и при нулевом значении, тоже думало, что товар in_stock, вот так:

$variant_id_filter = $this->db->placehold('AND (v.stock>0 OR v.stock IS NULL OR v.stock = 0)');

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

 

Получается удаляем стандартную проверку на заполненность массивна, потому что он у нас в любом случае будет заполнен, и вставляет два условия: в случае если товаров больше чем 0 (if $product->variant->stock > 0) — показываем кнопку заказа, в случае если количество товаров 0, показываем "нет в наличии". 

 

На мой взгляд решение довольно простое, но возможно с "косяками" :)

 

а зачем? достаточно не передавать $filter['in_stock'] для метода get_variants в view/ProductView.php, view/ProductsView.php

Link to post
Share on other sites

1. Упоминаемая Вами строка 34 совсем не такая. То, что написано у Вас - смесь двух недалеко расположенных строк.
2. Как заметил ранее mishanya, предложенное новое условие для строки 34
(v.stock>0 OR v.stock IS NULL OR v.stock = 0)
довольно бессмысленно, оно выполняется практически ВСЕГДА. Не выполняется лишь для v.stock<0, но это для Simpla - ситуация нештатная, которая при нормальной работе возникать не должна...
3. Предложенное изменение в шаблоне - совсем негодное. Например,
3.1 если у товара два варианта с кол-вами 0 и 7, то будет показано Нет в наличии.
3.2 а если у товара два варианта с кол-вами 7 и 0, то будет показано В корзину.
3.3 В то время как по сути 3.1 и 3.2 представляют ОДИНАКОВЫЕ ситуации.

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

 

Для этого надо чуть-чуть поломать api :)
...
На мой взгляд решение довольно простое, но возможно с "косяками" :)

 

Поломать API Вашему решению удалось превосходно.
С "косяками" - не просто возможно, а гарантированно...

 

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