Страница 1 из 1

Отображение товара с учетом цены

Добавлено: 30.03.2016, 06:38
MaximKAA
Добрый день!
Для разработчиков появилось предложение по модернизации.
Предлагается убрать отображение цены в шаблоне и кнопку Купить заменить на Предзаказ, если цена не установлена или 0,00 в административной панели.

Будет логично, что товар купить за 0,00 нельзя. Часто бывает, что на товар не установили цену и при этом его можно купить. Также будет логично вообще убрать отображение цены, если её нет, а просто оставить кнопочку Предзаказ

Добавлено: 30.03.2016, 06:45
OkayCMS
Некоторые используют товары с ценой ноль для обозначения подарков. Также в некоторых магазинах сопутсвующие услуги создаются в виде товаров с ценой 0. Например, если вы берете телевизор, то вы также можете получить услуги по его установке и настройке бесплатно. Но это нужно не всем, поэтому создается отдельный товар с ценой 0, а дальше клиент если хочет - добавляет себе такой товар, если не хочет - заказывает только телевизор.

Добавлено: 30.03.2016, 07:12
MaximKAA
OkayCMS писал(а):Некоторые используют товары с ценой ноль для обозначения подарков. Также в некоторых магазинах сопутсвующие услуги создаются в виде товаров с ценой 0. Например, если вы берете телевизор, то вы также можете получить услуги по его установке и настройке бесплатно. Но это нужно не всем, поэтому создается отдельный товар с ценой 0, а дальше клиент если хочет - добавляет себе такой товар, если не хочет - заказывает только телевизор.
Если кому понадобится убрать отображение цены, если она не установлена на товар:
В файле tiny_products.tpl поправить

Код: Выделить всё

{* Цена *}
   {if $product->variant->price>0}
      <div class="{if !$product->variant->compare_price}col-xs-12{else}col-xs-6{/if} h5 font-weight-bold m-b-0">
         <span class="fn-price">{$product->variant->price|convert}</span> {$currency->sign|escape}
      </div>
   {/if}
{* @END Цена *}

И в файле product.tpl

Код: Выделить всё

{* Цена *}
   {if $product->variant->price>0}
      <div class="h4 font-weight-bold">
         <span class="fn-price">{$product->variant->price|convert}</span> {$currency->sign|escape}
      </div>
   {/if}
{* @END Цена *}


Добавлено спустя 3 часа 7 минут:
Если присутствуют варианты товаров, не работает. Прошу помощи. Как реализовать и для вариантов товаров?

Код: Выделить всё

         {* Варианты товара *}
         
         <select name="variant" class="fn-variant okaycms form-control c-select{if $product->variants|count < 2} hidden-xs-up{/if}">
              
            {foreach $product->variants as $v}
            
                   <option value="{$v->id}" data-price="{$v->price|convert}" data-stock="{$v->stock}"{if $v->compare_price > 0} data-cprice="{$v->compare_price|convert}"{/if}{if $v->sku} data-sku="{$v->sku}"{/if}{if $v@first} selected{/if}>{if $v->name}{$v->name}{else}{$product->name|escape}{/if}</option>
              
            {/foreach}
            
           </select>
         
         {* @END Варианты товара *}


Добавлено: 01.04.2016, 07:00
zyxer
Как вариант можно в okay.js изменить "price.html( selected.data( 'price' ) );" на

Код: Выделить всё

if(selected.data( 'price' )){
   price.html( selected.data( 'price' ) );
   price.parent().removeClass( 'hidden-xs-up' );
} else {
   price.parent().addClass( 'hidden-xs-up' );
}

Блок цены меняем на:

Код: Выделить всё

{* Цена *}
<div class="{if !$product->variant->compare_price}col-xs-12{else}col-xs-6{/if} h5 font-weight-bold m-b-0 {if $product->variant->price == 0}hidden-xs-up{/if}">
   <span class="fn-price">{$product->variant->price|convert}</span> {$currency->sign|escape}
</div>
{* @END Цена *}

И селект заменить на:

Код: Выделить всё

{* Варианты товара *}
<select name="variant" class="fn-variant okaycms form-control c-select{if $product->variants|count < 2} hidden-xs-up{/if}">
   {foreach $product->variants as $v}
      <option value="{$v->id}" {if $v->price > 0}data-price="{$v->price|convert}"{/if} data-stock="{$v->stock}"{if $v->compare_price > 0} data-cprice="{$v->compare_price|convert}"{/if}{if $v->sku} data-sku="{$v->sku}"{/if}{if $v@first} selected{/if}>{if $v->name}{$v->name}{else}{$product->name|escape}{/if}</option>
   {/foreach}
</select>
{* @END Варианты товара *}


Это для привью товара (файл tiny_products.tpl) в карточке товара по такому же принципу

Добавлено: 01.04.2016, 11:15
MaximKAA
Решение хорошее.
В tiny_products.tpl корректно работает, а вот в карточке товара product.tpl при смене вариантов товара цена если отсутствует все равно отображается

Добавлено спустя 1 час:
zyxer писал(а):Как вариант можно в okay.js изменить "price.html( selected.data( 'price' ) );" на

Код: Выделить всё

if(selected.data( 'price' )){
   price.html( selected.data( 'price' ) );
   price.parent().removeClass( 'hidden-xs-up' );
} else {
   price.parent().addClass( 'hidden-xs-up' );
}

Блок цены меняем на:

Код: Выделить всё

{* Цена *}
<div class="{if !$product->variant->compare_price}col-xs-12{else}col-xs-6{/if} h5 font-weight-bold m-b-0 {if $product->variant->price == 0}hidden-xs-up{/if}">
   <span class="fn-price">{$product->variant->price|convert}</span> {$currency->sign|escape}
</div>
{* @END Цена *}

И селект заменить на:

Код: Выделить всё

{* Варианты товара *}
<select name="variant" class="fn-variant okaycms form-control c-select{if $product->variants|count < 2} hidden-xs-up{/if}">
   {foreach $product->variants as $v}
      <option value="{$v->id}" {if $v->price > 0}data-price="{$v->price|convert}"{/if} data-stock="{$v->stock}"{if $v->compare_price > 0} data-cprice="{$v->compare_price|convert}"{/if}{if $v->sku} data-sku="{$v->sku}"{/if}{if $v@first} selected{/if}>{if $v->name}{$v->name}{else}{$product->name|escape}{/if}</option>
   {/foreach}
</select>
{* @END Варианты товара *}


Это для привью товара (файл tiny_products.tpl) в карточке товара по такому же принципу
А как тоже самое сделать для корзины? Убрать отображение в cart_purchases.tpl ?

Добавлено: 01.04.2016, 13:18
zyxer
Снова таки можно сделать так: (файл cart_purchases.tpl)

Код: Выделить всё

{* Цена за ед. *}
<div class="purchase-price hidden-md-down">
   <span {if $purchase->variant->price == 0}class="hidden-xs-up"{/if}>{($purchase->variant->price)|convert} {$currency->sign}</span>
</div>


и

Код: Выделить всё

{* Общая цена *}
<div class="purchase-full-price">
   <span {if $purchase->variant->price == 0}class="hidden-xs-up"{/if}>{($purchase->variant->price*$purchase->amount)|convert}&nbsp;{$currency->sign}</span>
</div>

Добавлено: 01.04.2016, 13:28
MaximKAA
zyxer писал(а):{* Общая цена *}
<div class="purchase-full-price">
   <span {if $purchase->variant->price == 0}class="hidden-xs-up"{/if}>{($purchase->variant->price*$purchase->amount)|convert}&nbsp;{$currency->sign}</span>
</div>
Спасибо!

Добавлено: 08.06.2019, 05:43
exid
zyxer писал(а):Блок цены меняем на:

Код: Выделить всё
{* Цена *}
<div class="{if !$product->variant->compare_price}col-xs-12{else}col-xs-6{/if} h5 font-weight-bold m-b-0 {if $product->variant->price == 0}hidden-xs-up{/if}">
<span class="fn-price">{$product->variant->price|convert}</span> {$currency->sign|escape}
</div>
{* @END Цена *}

Здравствуйте!
Подскажите пожалуйста как сделать в поиске если у товаров нулевая цена что бы их не выводить или написать вместо цены нет в наличии?

Добавлено: 19.06.2019, 11:03
zyxer
решение не самое изящное, набросал на быструю руку.
в дизайне в js/okay.js где блок $( ".fn_search" ).autocomplete( {...} ) есть метод formatResult вот в нем нужно удалить часть

Код: Выделить всё

 + " " + suggestion.currency

чтобы эта строка имела вид

Код: Выделить всё

 return "<div>" + (suggestion.data.image ? "<img align=absmiddle src='" + suggestion.data.image + "'> " : '') + "</div>" + "<a href=" + suggestion.lang + "products/" + suggestion.data.url + '>' + suggestion.value.replace( new RegExp( pattern, 'gi' ), '<strong>$1<\/strong>' ) + '<\/a>' + "<span>" + suggestion.price + "</span>";

и в ajax/search_products.php где foreach($products as $product) {}
заменить его на

Код: Выделить всё

foreach($products as $product) {
    $suggestion = new stdClass();
    if(isset($images[$product->id])) {
        $product->image = $okay->design->resize_modifier($images[$product->id], 35, 35);
    }
    if ($variants[$product->id][0]->price > 0) {
        $suggestion->price = $okay->money->convert($variants[$product->id][0]->price, $currency->id) . ' ' . $currency->sign;
    } else {
        $suggestion->price = 'нет в наличии';
    }
    $suggestion->value = $product->name;
    $suggestion->data = $product;
    $suggestion->lang = $lang_link;
    $suggestions[] = $suggestion;
}


в итоге будет такой результат http://prntscr.com/o3tr3y. На самой странице поиска будет по прежнему выводиться цена 0. Еще раз, решение имеет ряд недостатков, но как быстрое решение задачи сгодится ) Если нужно более изящно, могу отдельно сделать на сайте или обращайтесь к партнерам окая

Добавлено: 20.06.2019, 12:49
exid
zyxer писал(а):решение не самое изящное, набросал на быструю руку.
Спасибо, решение рабочее.
А можете сделать что бы вообще не выводились товары с нулевыми ценами в поиске?

Карточка товара цена

Добавлено: 29.03.2020, 06:26
Edo555
В карточка товара сделайте если цена стоит 0 то на сайте отображала цена по запросу (и при нажатии на кнопку открывается форма обратной связи)

Добавлено: 19.11.2021, 12:16
Maks_13444
tiny_products.tpl где он лежит?