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

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

MaximKAA M
Аватара
MaximKAA M
Репутация: 1
Сообщения: 58
Зарегистрирован: 18.02.2016
С нами: 8 лет 1 месяц

Сообщение #1 MaximKAA » 30.03.2016, 06:38

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

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

OkayCMS M
Администратор
Аватара
OkayCMS M
Администратор
Репутация: 216
Сообщения: 1627
Зарегистрирован: 12.11.2015
С нами: 8 лет 4 месяца
Сайт Skype

Сообщение #2 OkayCMS » 30.03.2016, 06:45

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

MaximKAA M
Аватара
MaximKAA M
Репутация: 1
Сообщения: 58
Зарегистрирован: 18.02.2016
С нами: 8 лет 1 месяц

Сообщение #3 MaximKAA » 30.03.2016, 07:12

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 Варианты товара *}


zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #4 zyxer » 01.04.2016, 07:00

Как вариант можно в 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) в карточке товара по такому же принципу
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

MaximKAA M
Аватара
MaximKAA M
Репутация: 1
Сообщения: 58
Зарегистрирован: 18.02.2016
С нами: 8 лет 1 месяц

Сообщение #5 MaximKAA » 01.04.2016, 11:15

Решение хорошее.
В 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 ?

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #6 zyxer » 01.04.2016, 13:18

Снова таки можно сделать так: (файл 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>
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

MaximKAA M
Аватара
MaximKAA M
Репутация: 1
Сообщения: 58
Зарегистрирован: 18.02.2016
С нами: 8 лет 1 месяц

Сообщение #7 MaximKAA » 01.04.2016, 13:28

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>
Спасибо!

exid
exid
Репутация: 0
Сообщения: 12
Зарегистрирован: 26.10.2018
С нами: 5 лет 5 месяцев

Сообщение #8 exid » 08.06.2019, 05:43

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 Цена *}

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

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #9 zyxer » 19.06.2019, 11:03

решение не самое изящное, набросал на быструю руку.
в дизайне в 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. Еще раз, решение имеет ряд недостатков, но как быстрое решение задачи сгодится ) Если нужно более изящно, могу отдельно сделать на сайте или обращайтесь к партнерам окая
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

exid
exid
Репутация: 0
Сообщения: 12
Зарегистрирован: 26.10.2018
С нами: 5 лет 5 месяцев

Сообщение #10 exid » 20.06.2019, 12:49

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

Edo555
Edo555

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

Сообщение #11 Edo555 » 29.03.2020, 06:26

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

Maks_13444
Maks_13444

Сообщение #12 Maks_13444 » 19.11.2021, 12:16

tiny_products.tpl где он лежит?


Название раздела: Предложения по улучшению OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Предложения по улучшению OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 24 гостя