Пишем функционал определения скидки посредством родных полей InstantCms

+10
1.03K
Пишем функционал определения скидки посредством родных полей InstantCms

Многие сайты на InstantCms имеют доску объявлений, но практически нигде не реализована функция добавления скидки для конечного продукта. В сегодняшнем уроке мы напишем такой функционал, причем — мы будем делать реализацию данного решения только при помощи родных полей системы. Данный урок подойдет для версий InstantCms 2.15.0 — 2.15.1, так как мы будем создавать зависимости полей, которые появились в системе сравнительно недавно.

Шаг 1. Создание полей. 

В том типе контента, в котором будут наши объявления, нам необходимо будет создать три поля.

1) — Стоимость продукта (поле число)

2) — Действует скидка (поле флаг)

3) — Размер скидки (поле число) — в процентах

Давайте сразу определимся, что я не буду здесь полностью описывать настройки самих полей — их я думаю Вы сделаете сами без особого труда, включив или отключив необходимые опции. Единственная настройка, которая не обойдется без внимания — это наше третье поле "Размер скидки". Его мы будем показывать только в том случае, если отмечено второе поле — "Действует скидка". Для него укажем такие настройки:

Изображение

Напомню Вам простое правило — почему мы будем показывать третье поле, если второе равно 1. По факту, на языке PHP в виде кода это будет выглядеть примерно так:

  1. <?php if ($item['is_discount'] == true) {....} ?>

В любом языке программирования есть булевы значения — true или false. Так вот в нашем случае true — это единица, а false — это 0. Исходя из этого, мы и задаем в админке следующее правило — показывать поле № 3 только тогда, когда поле № 2 == true (в нашем случае единица)

Что еще очень важно — для всех трех полей Вы должны отключить показ в записи и списке — так как выводить мы их будем посредством своего кода.

Шаг 2. Пишем код для поля № 2 — действует скидка

Нашу задачу можно реализовать множеством методов, например — написать функцию, которая будет определять конечную стоимость при условии, что отмечено поле № 2. Или написать самый простой код, который будет работать точно также, без использования функции. Определимся, что три созданных поля у нас имеют следующие системные имена:

1) Поле 1 Стоимость продукта — price

2) Поле 2 Действует скидка — is_discount

3) Поле 3 Размер скидки — discount_price

Исходя из вышеуказанного, логику можно определить так:

Если поле2 отмечено (имеет значение true), то определить новую переменную, в которую будет записываться результат вычисления скидки из полей № 1 и № 3. Отлично, теперь напишем все это кодом:

  1. <?php if ($item['is_discount'] == true) { ?>
  2. <?php $new_price = $item['price'] - ($item['price'] * ($item['discount_price']/100)); ?>
  3. <?php } else { ?>
  4. <?php $new_price = $item['price']; ?>
  5. <?php } ?>

Отлично, теперь у нас есть новая переменная $new_price, которая принимает значение стоимости — оригинальное или со скидкой. Давайте теперь выведем нашу новую переменную в список контента. По умолчанию, будем использовать default_list_tiles.tpl.php

Сразу после строки 32

  1. <?php foreach($items as $item){ ?>

Вставим наш код, написанный выше.

И сразу выведем его в списке. Для этого после строки 90 вставим следующий код:

  1. <span class = "new_price"><?php echo $new_price; ?> руб</span>

Ну вот практически все. Теперь Вам осталось описать класс css «new_price» в любой подключенной к сайту таблице стилей. Пускай это будет небольшим домашним заданием.

В следующем уроке расширим наш код и перепишем его в виде функции — научим выводить в списке две цены — новую и старую, причем старую цену будем перечеркивать и говорить посетителям о том, что на данный товар продавец установил скидку и она уже действует n дней. Для этого в функции задействуем еще несколько переменных и научимся работать с датами — простыми средствами PHP будем определять — сколько дней на товар действует скидка.

Данное решение лишь демонстрирует, как можно манипулировать созданными полями в типе контента посредством простейших действий. Для девелоперов с черным поясом данная демонстрация будет выглядеть детской побрякушкой, ведь для серьезных вещей есть ООП. 😃

+1
abasia abasia 2 года назад #

Спасибо, полезно.

+2
IamB IamB 2 года назад #

В заголовок статьи лучше вынести слово функциональность или функционал, поскольку по факту никакой функции в понимании языка программирования в посте нет. 😬

Make Make 2 года назад #
Комментарий удален
0
Сергей Сергей 2 года назад #

+++ конечно пригодится.

Еще от автора

Бесплатный компонент - управление страницами 404
Простой компонент, который позволяет переопределить настройки дефолтной страницы 404, а также установить новую на выбор из двух представленных шаблоно
User-Panel v.1.0.4
Большое обновление виджета, множество улучшений, а также дополнительный запланированный функционал.
User-панель. Функциональное меню для вашего сайта
Виджет, который позволит вывести на вашем сайте функциональную панель с различными настройками.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.