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

+10
683
Пишем функционал определения скидки посредством родных полей 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 месяца назад #

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

+1
Make Make 2 месяца назад #

Да, верно, нормальную функцию уже будем во втором посте писать, это пока разминка — можно сказать, небольшое баловство)

0
Сергей Сергей 2 месяца назад #

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

Еще от автора

Поле "Поделиться записью в соцсетях" с разными настройками
Блок "Поделиться" от Яндекса с настройками. Позволяет выводить в записях типа контента иконки для шеринга в соцсети.
Planet9 - шаблон городского портала
Planet9 — это функциональный и полностью настраиваемый шаблон для InstantCms.
Fox - бесплатный шаблон
Fox — это простой и светлый шаблон для InstantCms, созданный как дочерний на основе Modern.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.