Полезняшка. ССК поле с актуальной скидкой на товар

Главные вкладки

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 21 июля 2010 в 16:42

Наверное многу народу задавалось вопросом - как делать и главное, как показать эту скидку в каталоге магазина. Или: как организовать отдельную страничку, где бы были автоматически показаны товары со скидкой.

Между тем, проблема достаточно легко решаема. Сейчас я попытаюсь рассказать, как это сделал я.

Итак,нам понадобится совершенно замечательный модуль - 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)*1000);
}
$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.txt9.15 КБ

Комментарии

Аватар пользователя gorr gorr 21 июля 2010 в 18:56

А если впоследствии настройки скидок поменять, скажем на другой процент, было -10%, а стало -5%.
Поле сохраняется в базе в момент сохранения ноды, поэтому если все товары не пересохранить будет показывать старое значение.
А если не сохранять значение в базу, а при выводе всегда пересчитывать, то это поле не доступно для вьюза.
Можно оттемизовать сам вьюз и шаблон ноды товара вместо сохранения в базу.

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 21 июля 2010 в 19:29

gorr: у меня почему-то работает как надо.

Кстати, про "пересохранение". Видел модулёк похожего назначения, от Влада Савицкого, regenerate называется, есть где то в issue модуля Computed Field

"gorr" wrote:
Можно оттемизовать сам вьюз и шаблон ноды товара вместо сохранения в базу.

Я так и делал ранее, но:

1)Возня с этими шаблонами
2)Мы лишаемся этого самого драгоценного ССК поля. Скажем, простейшая задача организовать на сайте раздел "Скидки до 20%", "Скидки до 40%" и тд или просто контекстный блок в категориях с актуальными скидками товаров из этой категории

Аватар пользователя timonissimo timonissimo 7 декабря 2010 в 8:21

Простите, пожалуйста, очень надо сделать на сайте именно то, о чем вы пишите. Первая часть получилась, а вторую не понимаю, как делать - имею в виду
«В аттаче экспорт вида, который создаёт отдельную страничку c адресом discount, где выводятся все товары со скидкой, большей чем 10%»

как его применить? что с ним делать?

Аватар пользователя timonissimo timonissimo 7 декабря 2010 в 9:37

С экспортом вида разобрался, но при редактировании товара и выставлении цены продажи ниже нормативной цены выдается ошибка:

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

Аватар пользователя timonissimo timonissimo 7 декабря 2010 в 9:47

Всем чайникам (таким как я) на будущее:

Parse error: syntax error, unexpected может возникать из-за того, что используется обертка <?php ?> - попробуйте без него при отключенном модуле fckeditor

Аватар пользователя veshiyi veshiyi 24 сентября 2011 в 20:15

Да, здорово у меня все получилось.
Но, ПОДСКАЖИТЕ ПОЖАЛУЙСТА, как сделать чтобы стиль сетки продуктов был такой же как у меня в каталоге???
Использую advanced catalog.
Все облазил, ответа не нашел Sad