Jump to content

Recommended Posts

Добрый день, друзья!

 

Возник такой момент. Нужно чтоб при нулевом количестве отображалась цена товара (также варианты, если они есть).

 

Как такое сделать и где править, подскажите, пожалуйста.

 

Спасибо за любую информацию.

 

Link to post
Share on other sites

Как ни странно, это не совсем просто.

Иногда встречаются советы при выводе убрать значение in_stock => 1,  но это чревато другими ошибками и не всегда работает верно.

 

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

Link to post
Share on other sites

вот тут написано про то как вывести. + надо закрыть кнопку купить для таких вариантов. или выводить что нет товара

Kors и mishanya, спасибо за ответы. 

'in_stock'=>true убрал, но корзину не получается скрыть, даже методами css ))

 

У меня такой код сейчас, как тут можно закрыть кнопку "В корзину" ?

{if $product->variants|count > 0}
		<!-- Выбор варианта товара -->
		<form class="variants" action="/cart">
		                                                                          
 {if $product->variant->compare_price}            
			<div class="price-box">
                                
                    <p class="old-price">
                <span class="price-label">Regular Price:</span>
                <span class="price" id="old-price"><span>{$product->variant->compare_price|convert}</span></span>
            </p>

                        <p class="special-price">
                <span class="price-label">Special Price:</span>
              <span class="price" id="product-price"><span>{$product->variant->price|convert}</span> {$currency->sign|escape}</span>
            </p>
                    
    
        </div>            
 {else} 
            <div class="price-box">                                                            
              <span class="regular-price">                                            
              <span class="price" id="product-price"><span>{$product->variant->price|convert}</span> {$currency->sign|escape}</span>                                    
              </span>                                 
            </div> 
{/if}

			<!-- Выбор варианта товара -->
			{* Не показывать выбор варианта, если он один и без названия *}
			<select name="variant" {if $product->variants|count==1  && !$product->variant->name}style='display:none;'{/if}>
				{foreach $product->variants as $v}
				<option value="{$v->id}" {if $v->compare_price > 0}compare_price="{$v->compare_price|convert}"{/if} price="{$v->price|convert}">
				{$v->name}
				</option>
				{/foreach}
			</select>
			<!-- Выбор варианта товара (The End) -->
 
                                                                                                                                                                                       
            <div class="add-to-cart">                        
              <div class="qty">                
            <label for="qty">К-во:</label>                
            <input id="qty" class="input-text qty" type="text" title="Количество товара" value="1" maxlength="12" name="amount" />
              </div>                        
              <button class="button btn-cart" title="В корзину" type="submit">
                <i class="icon-basket"></i>В корзину
              </button>    
            </div>
            </form> 
           
            {/if}
Link to post
Share on other sites

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

Link to post
Share on other sites

скойте кнопку методом ксс

 

оберните кнопку в условие и добавте при этом условие класс со стилем display:none

Делаю так, но не выходит ((

<div class="add-to-cart" style="{if $product->variants|count == 0}display:none;{/if}">                        
              <div class="qty">                
            <label for="qty">К-во:</label>                
            <input id="qty" class="input-text qty" type="text" title="Количество товара" value="1" maxlength="12" name="amount" />
              </div>                        
              <button class="button btn-cart" title="В корзину" type="submit">
                <i class="icon-basket"></i>В корзину
              </button>    
            </div>
Link to post
Share on other sites

Ну или вот так ставлю условие, все равно ((:

 {if $product->variants|count > 0}
           	 <div class="add-to-cart">                        
              <div class="qty">                
            <label for="qty">К-во:</label>                
            <input id="qty" class="input-text qty" type="text" title="Количество товара" value="1" maxlength="12" name="amount" />
              </div>                        
              <button class="button btn-cart" title="В корзину" type="submit">
                <i class="icon-basket"></i>В корзину
              </button>    
            </div>
  {else}
	<div class="add-to-cart" style="display:none;">  </div>
{/if}                                    
           
Link to post
Share on other sites

Т.е. сначала вы убили проверку, и сделали вывод ВСЕХ вариантов, с любой ценой и количеством на складе...

Долго радовались и праздновали)))

А потом оказалось, что проверка - не работает :)

Интересно, почему???

Link to post
Share on other sites

В принципе, есть другой вариант, но он достаточно геморройный, плюс не известно, подойдет или нет...

Писать инструкции я точно не буду, максимум - могу натолкнуть на правильный путь))

Link to post
Share on other sites

Самый простой вариант - обойти массив вариантов ДВА раза.

Точнее, обход идет ДВА раза только если есть вариант с количеством на складе, отличным от нуля.

Если нет таких вариантов - выводится цена первого варианта и все (чисто как пример)

Если такие варианты есть - выводится цена первого из них,  выбор вариантов и кнопка В корзину.

Link to post
Share on other sites

 

Делаю так, но не выходит ((

<div class="add-to-cart" style="{if $product->variants|count == 0}display:none;{/if}">                        
              <div class="qty">                
            <label for="qty">К-во:</label>                
            <input id="qty" class="input-text qty" type="text" title="Количество товара" value="1" maxlength="12" name="amount" />
              </div>                        
              <button class="button btn-cart" title="В корзину" type="submit">
                <i class="icon-basket"></i>В корзину
              </button>    
            </div>

 

вы не поняли, теперь вам нет смысла ставить условие {if $product->variants|count == 0} или {if $product->variants|count > 0}

у вас всегда теперь количество вариантов больше 0. вам надо проверять $product->variant->stock


<div class="add-to-cart" style="{if $product->variant->stock>0}display:none;{/if}">
<div class="qty">
<label for="qty">К-во:</label>
<input id="qty" class="input-text qty" type="text" title="Количество товара" value="1" maxlength="12" name="amount" />
</div>
<button class="button btn-cart" title="В корзину" type="submit">
<i class="icon-basket"></i>В корзину
</button>
</div>

а дальше если меняется вариант в селекте скрывать или показывать этот же блок

Link to post
Share on other sites

вы не поняли, теперь вам нет смысла ставить условие {if $product->variants|count == 0} или {if $product->variants|count > 0}

у вас всегда теперь количество вариантов больше 0. вам надо проверять $product->variant->stock


<div class="add-to-cart" style="{if $product->variant->stock>0}display:none;{/if}">
<div class="qty">
<label for="qty">К-во:</label>
<input id="qty" class="input-text qty" type="text" title="Количество товара" value="1" maxlength="12" name="amount" />
</div>
<button class="button btn-cart" title="В корзину" type="submit">
<i class="icon-basket"></i>В корзину
</button>
</div>

а дальше если меняется вариант в селекте скрывать или показывать этот же блок

Спасибо огромное за ответ! Очень выручили.

Я вместо условия

{if $product->variants|count > 0}

поставил

{if $product->variant->stock > 0}

и все встало на свои места ))

 

Спасибо еще раз!

Link to post
Share on other sites

Спасибо огромное за ответ! Очень выручили.

Я вместо условия

{if $product->variants|count > 0}

поставил

{if $product->variant->stock > 0}

и все встало на свои места ))

 

Спасибо еще раз!

 

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

Link to post
Share on other sites

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

Спасибо, дружище! ;)

Link to post
Share on other sites

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

я делаю так

<select name="variant" {if $product->variants|count==1  && !$product->variant->name}style='display:none;'{/if}>
	{foreach $product->variants as $v}
  <option style="{if $product->variant->stock>0}display:none;{/if}" value="{$v->id}" 
                {if $v->compare_price > 0}compare_price="{$v->compare_price|convert}"{/if} price="{$v->price|convert}">
                {$v->name}
		</option>			
         {/foreach}
			</select>

и ничего не получается. в этом случае option  весь пустой.

Как сделать, чтоб при нулевом количестве к примеру 1-го варианта товара, а 2-й есть в наличии, чтоб отсутствующий вариант не выводился ?

Link to post
Share on other sites

я делаю так

<select name="variant" {if $product->variants|count==1  && !$product->variant->name}style='display:none;'{/if}>
	{foreach $product->variants as $v}
  <option style="{if $product->variant->stock>0}display:none;{/if}" value="{$v->id}" 
                {if $v->compare_price > 0}compare_price="{$v->compare_price|convert}"{/if} price="{$v->price|convert}">
                {$v->name}
		</option>			
         {/foreach}
			</select>

и ничего не получается. в этом случае option  весь пустой.

Как сделать, чтоб при нулевом количестве к примеру 1-го варианта товара, а 2-й есть в наличии, чтоб отсутствующий вариант не выводился ?

 

потому что так нельзя делать.

 

{$v_count=$product->variants|count}
{$v_stock=0}
<select name="variant" {if $v_count==1  && !$product->variant->name}style='display:none;'{/if}>
	{foreach $product->variants as $v}
	{if $v->stock>0}
                {$v_stock=$v_stock+1}
		<option value="{$v->id}" {if $v->compare_price > 0}compare_price="{$v->compare_price|convert}"{/if} price="{$v->price|convert}">
		    {$v->name}
		</option>
	{/if}
	{/foreach}
</select>
{if $v_stock==0}<script>$( "select[name=variant]" ).hide();</script>{/if}

 

так будут выводится только те варианты у которых наличие больше 0. если таких вариантов нет (все варианты не в наличии) то селект будет скрыватся. проверьте.

Link to post
Share on other sites

Добился сделать так

<select name="variant" {if $product->variants|count==1  && !$product->variant->name}style='display:none;'{/if}>
				{foreach $product->variants as $v}
               <option style="{if $v->stock==0}display:none;{/if}" value="{$v->id}"
                {if $v->compare_price > 0}compare_price="{$v->compare_price|convert}"{/if} price="{$v->price|convert}">
                
               {$v->name}
              </option>
              {/foreach}
</select>

но в этом случаи в Админке если 1-й вариант 0 шт., то на сайте показывает, что товара нет вообще, но при этом селекты присутствуют и отображаются не верно.

 

НО! если не ставить на 1-й вариант 0 шт., а ставить на 2-й и т.п., то тогда все отлично работает. и отсутствующие варианты хорошо убираются в  селектах.

 

То есть получается у нас скрипт сейчас реагирует на 1-й вариант товара.

Как сделать иначе, чтоб не было зависимость от 1-го варианта?

Link to post
Share on other sites

потому что так нельзя делать.

 

{$v_count=$product->variants|count}
{$v_stock=0}
<select name="variant" {if $v_count==1  && !$product->variant->name}style='display:none;'{/if}>
	{foreach $product->variants as $v}
	{if $v->stock>0}
                {$v_stock=$v_stock+1}
		<option value="{$v->id}" {if $v->compare_price > 0}compare_price="{$v->compare_price|convert}"{/if} price="{$v->price|convert}">
		    {$v->name}
		</option>
	{/if}
	{/foreach}
</select>
{if $v_stock==0}<script>$( "select[name=variant]" ).hide();</script>{/if}

 

так будут выводится только те варианты у которых наличие больше 0. если таких вариантов нет (все варианты не в наличии) то селект будет скрыватся. проверьте.

Спасибо большое.

 

Ваш Вариант работает отлично, не реагирует на 1-й вариант, что я писал.

Но теперь он не дружит с кнопкой "В корзину". У меня она идет после Вашего кода

<div class="add-to-cart" style="{if $product->variant->stock==0}display:none;{/if}">                        
              <div class="qty">                
            <label for="qty">К-во:</label>                
            <input id="qty" class="input-text qty" type="text" title="Количество товара" value="1" maxlength="12" name="amount" />
              </div>                        
              <button class="button btn-cart" title="В корзину" type="submit">
                <i class="icon-basket"></i>В корзину
              </button>    
            </div>
Link to post
Share on other sites

 

Спасибо большое.

 

Ваш Вариант работает отлично, не реагирует на 1-й вариант, что я писал.

Но теперь он не дружит с кнопкой "В корзину". У меня она идет после Вашего кода

<div class="add-to-cart" style="{if $product->variant->stock==0}display:none;{/if}">                        
              <div class="qty">                
            <label for="qty">К-во:</label>                
            <input id="qty" class="input-text qty" type="text" title="Количество товара" value="1" maxlength="12" name="amount" />
              </div>                        
              <button class="button btn-cart" title="В корзину" type="submit">
                <i class="icon-basket"></i>В корзину
              </button>    
            </div>

правильно это то о чем я выше писал. нужно при переключении селекта скрывать/выводить блок купить если товар есть в наличии или нет.

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