Онлайн-руководство разработчика NetCat
Модуль «Поиск по сайту» 12.2.1Начало работы с модулем 12.2.2Язык запросов 12.2.3Способы хранения индекса 12.2.4Интерфейс модуля в панели управления сайтом 12.2.5Области индексирования 12.2.6Области HTML-страниц 12.2.7Области поиска на сайте 12.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 12.2.9Правила индексирования 12.2.10Постановка задачи переиндексирования в очередь 12.2.11Интеграция модуля в макеты дизайна сайта 12.2.12Простая форма поиска 12.2.13Расширенная форма поиска 12.2.14Вывод результатов поиска 12.2.15Стилизация списка подсказок 12.2.16Расширенные настройки 12.2.17Разработка расширений модуля 12.2.18Обзор архитектуры модуля 12.2.19Обработчики документов различных типов 12.2.20Текстовые фильтры 12.2.21Анализаторы текста 12.2.22Корректировщики запросов 12.2.23Подключение других поисковых систем 12.2.24Решение проблем с поиском 12.2.25Решение проблем с индексированием 12.2.26Справочник API
Модуль «Интернет-магазин» 12.8.1Настройка модуля 12.8.2Настройка интернет-магазина 12.8.3Валюты 12.8.4Цены для разных групп пользователей 12.8.5Минимальная цена 12.8.6Способы доставки 12.8.7Способы оплаты 12.8.8Настройка шаблонов писем 12.8.9Бланки 12.8.10Скидки 12.8.11Сиюминутные скидки 12.8.12Купоны 12.8.13Редактирование заказов 12.8.14Статистика 12.8.15Компоненты товаров 12.8.16Варианты товаров 12.8.17Коллекции объектов 12.8.18Фильтр товаров 12.8.19Списки товаров 12.8.20Корзина 12.8.21Заказ 12.8.22Выгрузка предложений в Яндекс.Маркет 12.8.23Заказ на Маркете 12.8.24Выгрузка предложений в Товары@Mail.Ru 12.8.25Выгрузка товаров в Google Merchant 12.8.26Обмен данными с 1С 12.8.27Обмен данными с 1С 8-ой версии 12.8.28Обмен данными с 1С 7-ой версии 12.8.29Обмен данными с сервисом МойСклад 12.8.30Виджеты интернет-магазина 12.8.31Классы расчёта доставки 12.8.32Интернет-магазин <5.3 12.8.33Переход с прежней версии модуля 12.8.34Справочник API

Скидки

В модуле «Интернет-магазин» системы NetCat имеются два уровня скидок: скидки на товары, скидки на корзину и скидки на доставку.

Чтобы создать скидку, откройте раздел «Скидки» в настройке модуля Интернет-магазин.

Каждая скидка должна иметь понятное название с указанием размера скидки, например: «Скидка 5% при покупке на сумму более 1000 руб.».

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

Заполните необходимые поля и сохраните скидку. Добавленная скидка появится в списке.

Добавление скидки для товаров

Как было упомянуто выше вы можете добавить скидку на товар, корзину или доставку. Рассмотрим пример добавления скидки для товара.

Откройте страницу «Скидки на товары» и нажмите кнопку «Добавить». 

Введите название для скидки и её описание.

Здесь же укажите размер скидки: в процентах либо фиксированную сумму, а также при необходимости включите опцию суммирования добавляемой скидки с другими.

Если на товар действует несколько скидок без флага «суммируется с другими скидками», будет применена максимальная скидка; скидки с флагом «суммируется с другими скидками» будут добавлены к максимальной скидке, выбранной среди скидок, которые не суммируются. При применении нескольких относительных (в процентах) скидок их размер всегда рассчитывается от полной цены товара.

Далее добавляем условие действия этой скидки. Например, сделаем единственное условие: скидку на конкретный товар. Для этого выберем «Добавить условие» => «Товар» 

Нажмите на ссылку выбора товара

Во всплывающем окне выберите товар

В итоге покупатель получит 5% скидку на выбранный товар.

Если выбран товар с вариантами, скидка будет действовать на все варианты данного товара. При выборе варианта товара скидка будет действовать только на данный вариант.

Теперь можно добавить дополнительное условие. Например, ограничить срок действия скидки. В добавлении услуг выберите поле «Дата»

и укажите время действия скидки

В итоге получаем скидку на книгу, действующую в конкретный временной промежуток.

Если же мы изменим логику взаимодействия условий с «И» на «ИЛИ», то получим скидку, которая применяется на все товары в промежуток времени, и на конкретный товар – всегда:

Добавление скидки на доставку

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

Далее указывается условие применения скидки. Выберите желаемое условие:

и укажите условие

При необходимости можно добавить несколько условий. Сохраните скидку.

Пример функции для использования в условиях скидок

Помимо простых условий можно задать вызов пользовательской функции. Пример функции приведён ниже:

<?php
/**
 * Пример функции для использования в условиях скидок
 *
 * @param nc_netshop_condition_context $context
 *      Объект окружения (состав корзины, свойства пользователя).
 * @param nc_netshop_item $current_item
 *      Товар, по отношению к которому проверяется условие.
 * @return boolean
 */
function my_custom_discount_condition(nc_netshop_condition_context $context, nc_netshop_item $current_item = null) {

    // Примеры получения свойств окружения:

    // Содержимое корзины (объект nc_netshop_item_collection):
    $context->get_cart_contents()

    // ID пользователя:
    $context->get_user_id()

    // Активированные купоны (объект nc_netshop_promotion_coupon_collection):
    $context->get_coupons()

    // Получение суммы заказов за определённый промежуток времени
    $context->get_user_previous_orders_sum($from_date_timestamp, $to_date_timestamp)

    // Количество заказов за определённый промежуток времени:
    $context->get_user_previous_orders_count($from_date_timestamp, $to_date_timestamp)
    // где $from_date_timestamp — время начала периода в виде UNIX timestamp (или NULL — за всё время)
    //     $from_date_timestamp — время окончания периода в виде UNIX timestamp (или NULL — до текущего времени)

    // Проверка прошлых заказов на наличие товара из компонента $component_id:
    $context->previous_orders_had_item($component_id, $item_id = null)
    // Если $item_id === null, то любой товар из компонента


    // Внимание! При использовании свойств объекта $current_item нельзя запрашивать
    // свойства, зависящие от скидок, например ItemPrice, ItemDiscount и т.п., так как
    // это приведёт к бесконечному циклу.
    // То же самое относится к свойствам корзины, зависящим от размера скидок!

    // В качестве простого примера — скидка на товары,
    // целая часть цены (без скидки) которых — чётное число:
    $price_is_even = ($current_item['OriginalPrice'] % 2) == 0;
    return $price_is_even;
}

Пример использования функции для проверки условий: скидка по купону отменяет другие скидки на товар

Задача: на товары имеются скидки с флагом «суммируется с другими скидками» и скидки по купону. Скидка по купону является максимально возможной и не должна суммироваться с прочими скидками (то есть, если активирован купон со скидкой на товар, другие скидки к нему не должны применяться).

Решение: добавить к скидкам на товары не по купону условие «И» «Функция „my_discount_condition_no_active_coupons“ возвращает значение „истина“». Код функции:

// Файл: /netcat/modules/default/function.inc.php
/**
 * Функция проверяет, применён ли купон на скидку на указанный товар
 * @param nc_netshop_condition_context $context
 * @param nc_netshop_item|null $current_item
 * @return bool
 */
function my_discount_condition_no_active_coupons(nc_netshop_condition_context $context, nc_netshop_item $current_item = null) {
    if ($current_item) {
        $active_coupons = $context->get_coupons();
        if ($active_coupons) {
            /* Нас интересуют только купоны со скидкой на товар (deal_type == 'discount_item') */
            /** @var nc_netshop_promotion_discount_item $discount */
            foreach ($active_coupons->where('deal_type', 'discount_item')->each('get_deal') as $discount) {
                if ($discount->applies_to($current_item, $context)) {
                    return false;
                }
            }
        }
    }
    return true;
}
Описание проекта