Наверное многу народу задавалось вопросом - как делать и главное, как показать эту скидку в каталоге магазина. Или: как организовать отдельную страничку, где бы были автоматически показаны товары со скидкой.
Между тем, проблема достаточно легко решаема. Сейчас я попытаюсь рассказать, как это сделал я.
Итак,нам понадобится совершенно замечательный модуль - Computed Fields
Если кто не в курсе, сей модуль представляет собой аддон (плагин) к супермодулю ССК, который, несомненно, уже у вас установлен. Этот плагин позволяет создавать поле, которое принимает значение, рассчитанное по условиям, определённым вами с помощью php. После установки модуля идём на страницу управления полями нужного нам типа ноды. К примеру это будет "product"
Открываем admin/content/node-type/product/fields, внизу видим строку добавления нового поля "New field". Пишем название для человека (Скидка), пишем латинскими буквами системное название поля, скажем discount, в выпадающем списке "Select a field type" выбираем "Computed",в выпадающем списке "Select a widget" выбираем "Computed"
Жмём "Save" и попадаем на страницу настройки поля. Настройки у нас будут такие:
Help text: на ваш вкус
Default value: пока не трогаем
Required: нет
Number of values: 1
Computed Code: вставляем код вічисления скидки:
<?php
$pricelist
= $node->list_price;
$pricesell = $node->sell_price;
if ($pricesell < $pricelist) {
$disc_percent_value = round((($pricelist - $pricesell)/$pricelist)*100, 0);
}
$node_field[0]['value'] = $disc_percent_value;
?>
Display Format:
<?php
$display
= $node_field_item['value'];
?>
Store using the database settings below: ставим галку
Data Type: выбираем "int" (целое число)
Data Length: 2
Default Value: 0
Not NULL: нет
Sortable: ставим галку
Сохраняем это дело.
Создаём тестовый товар, ставим одинаковые цены в поле "Price list" и "Sell price". Если значения в этих двух полях одинаковы, следовательно мы продаём по обычной рекомендованной цене из прайс листа и скидка будет равна нулю. Как только мы уменьшим реальную продажную цену товара в поле "Sell price", только что созданное нами поле field_discount покажет округлённое процентное значение скидки.
Поскольку созданное нами поле является ССK полем от мозга до костей, мы получаем такие блага:
1)его можно показывать обычным полем в видах
2)его можно использовать как фильтр для видов
3)его можно использовать как аргумент в видах
....и делать всё то, что можно делать с обычным CCK полем
В аттаче экспорт вида, который создаёт отдельную страничку c адресом discount, где выводятся все товары со скидкой, большей чем 10%
Также, применяя код с аргументом, можно создать блок, который будет показан на страницах каталога и будет содержать товары со скидкой только этой категории.
Вложение | Размер |
---|---|
discount.txt | 9.15 КБ |
Комментарии
А если впоследствии настройки скидок поменять, скажем на другой процент, было -10%, а стало -5%.
Поле сохраняется в базе в момент сохранения ноды, поэтому если все товары не пересохранить будет показывать старое значение.
А если не сохранять значение в базу, а при выводе всегда пересчитывать, то это поле не доступно для вьюза.
Можно оттемизовать сам вьюз и шаблон ноды товара вместо сохранения в базу.
gorr: у меня почему-то работает как надо.
Кстати, про "пересохранение". Видел модулёк похожего назначения, от Влада Савицкого, regenerate называется, есть где то в issue модуля Computed Field
Я так и делал ранее, но:
1)Возня с этими шаблонами
2)Мы лишаемся этого самого драгоценного ССК поля. Скажем, простейшая задача организовать на сайте раздел "Скидки до 20%", "Скидки до 40%" и тд или просто контекстный блок в категориях с актуальными скидками товаров из этой категории
Любопытно, спасибо
Подписался
Простите, пожалуйста, очень надо сделать на сайте именно то, о чем вы пишите. Первая часть получилась, а вторую не понимаю, как делать - имею в виду
«В аттаче экспорт вида, который создаёт отдельную страничку c адресом discount, где выводятся все товары со скидкой, большей чем 10%»
как его применить? что с ним делать?
С экспортом вида разобрался, но при редактировании товара и выставлении цены продажи ниже нормативной цены выдается ошибка:
Parse error: syntax error, unexpected '<' in Z:\home\reman\www\modules\computed_field\computed_field.module(161) : eval()'d code on line 1
Parse error: syntax error, unexpected '<' in Z:\home\reman\www\modules\computed_field\computed_field.module(296) : eval()'d code on line 1
Всем чайникам (таким как я) на будущее:
Parse error: syntax error, unexpected может возникать из-за того, что используется обертка
<?php ?>
- попробуйте без него при отключенном модуле fckeditorДа, здорово у меня все получилось.
Но, ПОДСКАЖИТЕ ПОЖАЛУЙСТА, как сделать чтобы стиль сетки продуктов был такой же как у меня в каталоге???
Использую advanced catalog.
Все облазил, ответа не нашел