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

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

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

 

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

 

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

 

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

 

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

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

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

 

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

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

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

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

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

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}
Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

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

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

 

оберните кнопку в условие и добавте при этом условие класс со стилем 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>
Ссылка на сообщение
Поделиться на другие сайты

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

 {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}                                    
           
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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

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

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

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

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

Ну, скажем так: Если вы хотите очень подробную инстукцию- я не буду этого делать.

Могу подсказать, натолкнуть, помочь...

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

 

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

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

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

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

вы не поняли, теперь вам нет смысла ставить условие {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}

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

 

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

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

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

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

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

поставил

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

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

 

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

 

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

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

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

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

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

да, это я и написал, только если у вас больше 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-й есть в наличии, чтоб отсутствующий вариант не выводился ?

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

я делаю так

<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. если таких вариантов нет (все варианты не в наличии) то селект будет скрыватся. проверьте.

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

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

<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-го варианта?

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

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

 

{$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>
Ссылка на сообщение
Поделиться на другие сайты

 

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

 

Ваш Вариант работает отлично, не реагирует на 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>

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

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

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

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

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

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

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

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

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

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

Загрузка...
×
×
  • Создать...