Перейти к содержанию
Форум поддержки пользователей VamShop

[Решено] Как определить, что товар со скидкой?


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

Как определить, что товар со скидкой? Мне нужно в этом случае у него специальный значёк выводить. И полностью убрать фразы "Розничная цена" со старой ценой и "Специальная цена товара".

Через smarty можно как-то?

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

link=topic=5744.msg47946#msg47946 date=1274056490]

Как определить, что товар со скидкой? ....

Через smarty можно как-то?

Используйте, например, в шаблоне product_info_v1.html условие:

{if $PRODUCTS_DISCOUNT}

специальный значёк

{/if}

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

link=topic=5744.msg47946#msg47946 date=1274056490]

... И полностью убрать фразы "Розничная цена" со старой ценой и "Специальная цена товара".

"Специальная цена товара" и "Розничная цена" определены в файле \lang\russian\russian.php

define('YOUR_SPECIAL_PRICE','Специальная цена товара ');

define('RETAIL_PRICE','Розничная цена ');

Они используются в файле \includes\classes\vam_price.php

Там и можно подправить их под свои потребности, например, удалить ненужное.

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

Внёс для проверки в карточку товара product_info_v1.html код:

{if $PRODUCTS_DISCOUNT}
<p>специальный значёк</p>
{/if}[/code]

и ничего не появилось.

Кэш чистил, версия 1.58, локально на Денвере, MySQL 5.0.45, PHP 5.2.4.

Скидка отображается как положено - старая цена зачеркнута, новая написана.

А при выводе списка товаров это работает или запрос править нужно?

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

link=topic=5744.msg47960#msg47960 date=1274084760]

и ничего не появилось.

Да, $PRODUCTS_DISCOUNT - это для макс. возм. скидки. Я перепутал немного.

Далее по теме:

link=topic=5744.msg47946#msg47946 date=1274056490]

Как определить, что товар со скидкой? Мне нужно в этом случае у него специальный значёк выводить. И полностью убрать фразы "Розничная цена" со старой ценой и "Специальная цена товара".

Через smarty можно как-то?

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

Вот рабочий вариант для удаления этих слов.

Правьте includes\classes\vam_price.php (ок. 420-й строки)

Замените

$price = '<span class="productOldPrice">'.$message_old_price.$this->Format($pPrice, $format).'</span><br />'.YOUR_SPECIAL_PRICE.$this->checkAttributes($pID).$this->Format($sPrice, $format);
на
$price = '<img src="/images/ok.gif" width="22" height="22">'.$this->Format($sPrice, $format);

P.S.: Естественно, что картинку /images/ok.gif - надо заменить на свою.

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

Спасибо. Только картинку мне нужно совсем в другом месте выводить, а не в цене товара.

Грубо говоря нужно получить флаг, что товар со скидкой, и выводить такие товары с другим css.

Я по-этому про smarty и спрашивал, т.к в php уже проверил.

Алгоритм такой требуется:

определяем, что в строке цены есть эта фраза и выводим некоторые места в карточке другим кодом. Потом если так возможно, то и эти слова вырезаем (ну или в языковом файле просто их грохаем).

Просто хочется товары со скидкой, лидеры продаж, избранные, новинки, красиво выделять в общем списке - такого на ВамШоп никто еще не делал.

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

изменяем тот файл что писао бубу функции FormatSpecialDiscount, FormatSpecial идобавляя не картинку а в какой то спан или див с определенным классом к примеру


'<span class="discounted_product">'. $this->Format($sPrice, $format).'</span>';
[/code] потом через js проверяем если есть в цены такой класс то изменяем\добавляем что то меняем цвеи рамки :) или кому что больше нравиться) к примеру
[code]
$(function(){
var products = $(".product_wrapper");
products.each(function(i){
if ($(this).find("span").hasClass("discounted")){
$(this).css({"border": "1px solid red"});
        }
});
});

где product_wrapper оболочка нашего товара

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

link=topic=5744.msg47969#msg47969 date=1274091714]

Грубо говоря нужно получить флаг, что товар со скидкой, ...

Хорошо. Делаем флаг.

Он будет называться $HAVE_SKIDKA. Будет такая метка в шаблоне.

В includes\classes\vam_price.php добавь функцию:

   function GetHaveSkidka($pID) {
    if ($sPrice = $this->CheckSpecial($pID)) {
        return true;
    } else {
    return false;
    }; 
  }[/code]

в \includes\modules\product_info.php

вставь (выделено красным)

$info->assign('PRODUCTS_PRICE', $products_price['formated']);

[color=red]$info->assign('HAVE_SKIDKA', $vamPrice->GetHaveSkidka($product->data['products_id']));[/color]

$info->assign('PRODUCTS_PRICE_PLAIN', $products_price['plain']);

ну и в product_info_v1.html используй метку как:

{if $HAVE_SKIDKA}

<p>

специальный значёк

</p>

{/if}

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

Спасибо! Я вот именно сейчас этот кусок сел делать - пример работает.

Вы меня направили в нужном направлении. Дальше я уже сам добавлю остальные функции для проверки товара на присутствие в других топ-категориях. Или универсальную функцию сделаю.

Тем более, что нужно переделать это для списка товаров.

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

Огромное спасибо! В карточке товара замечательно работает :)

А можно ли этот флаг вывести на товаре при просмотре всей категории? :rolleyes:

Спасибо!

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

в \includes\classes\product.php вставить строку как-то так:

'PRODUCTS_PRICE' => $products_price['formated'],

'PRODUCTS_PRICE_PLAIN' => $products_price['plain'],

'HAVE_SKIDKA' => $vamPrice->GetHaveSkidka($array['products_id']),

'PRODUCTS_TAX_INFO' => $main->getTaxInfo($tax_rate),

'PRODUCTS_SHIPPING_LINK' => $main->getShippingLink(),

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

' timestamp='1306366220' post='68384']

'HAVE_SKIDKA' => $vamPrice->GetHaveSkidka($array['products_id']),

Да, я так и делала, но у меня не выводит :'(

В product_listing_columns пишу

{if $HAVE_SKIDKA}<div id="metka"></div>{/if}

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

Если Вы вставляете в шаблон списка товаров, то нужно ведь использовать условие:


{if $module_data.HAVE_SKIDKA}
...
[/code]

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

Спасибо!

А не подскажете еще, как определять соответствие товара какому-либо условию, например:

если этот товар есть в новинках, то выводить слой <div id="metka1"></div>;

если к этому товару приклеены акции, то <div id="metka2"></div>;

если этот товар в лучших, то <div id="metka3"></div>;

если в рекомендованных, - <div id="metka4"></div>?

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

Наверно так так:


{if $module_data.HAVE_SKIDKA}<div id="metka1"></div>{/if}
{if $module_data.Что-то-еще}<div id="metka2"></div>{/if}
{if $module_data.Что-то-еще}<div id="metka3"></div>{/if}
[/code]

Только для остальных тоже нужно запросы добавлять.

Но лучше классы присваивать - тогда можно сразу несколько классов одному диву одновременно назначить.

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

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

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

Хорошо. Делаем флаг.

Он будет называться $HAVE_SKIDKA. Будет такая метка в шаблоне.

В includes\classes\vam_price.php добавь функцию:

   function GetHaveSkidka($pID) {
if ($sPrice = $this->CheckSpecial($pID)) {
return true;
} else {
return false;
};
}[/code]

...

Помогите, пожалуйста, сделать такие же функции для новинок и рекомендуемых

Ссылка на сообщение
Поделиться на другие сайты
  • 1 year later...
  • 1 month later...

Мне вот в дополнение к выводу картинки "Акция" понадобилось еще на акционных товарах рядом с ценой вывести срок действия акции.

Написал по аналогии с приведенными выше примерами:

 

В includes\classes\vam_price.php добавляем функцию:

 

function GetSkidkaExpiresDate($pID) {
if ($sPrice = $this->CheckSpecial($pID)) {
$product_query = "select expires_date from ".TABLE_SPECIALS." where products_id = '".$pID."' and status=1";
$product_query = vamDBquery($product_query);
$product = vam_db_fetch_array($product_query, true);
return vam_date_short($product['expires_date']);
} else {
return false;
};  }
 

 

 
в \includes\modules\product_info.php вставляем:

 

$info->assign('SKIDKA_EXPIRES_DATE', $vamPrice->GetSkidkaExpiresDate($product->data['products_id']));
 

 

 
ну и наконец в product_info_v1.html используем метку:

 

{if $SKIDKA_EXPIRES_DATE}
<p>Акция действует до {$SKIDKA_EXPIRES_DATE}</p>
{/if}
 

 

Работает.

Интересно, не задел ли чего-нибудь существенного этими правками?

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

Раз работает, но не задели, видимо.

Да и судя по коду, Вы ж прсото новый код добавили, всё правильно, по идее.

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