summaryrefslogtreecommitdiff
path: root/pages/shop
diff options
context:
space:
mode:
authorunwox <me@unwox.com>2025-10-30 19:01:32 +0600
committerunwox <me@unwox.com>2025-10-30 20:36:58 +0600
commit4151e7a73ef0476b4aea5a356d391a7060b8a01c (patch)
treea576a0017fa5fa0c368d39c270a1df99b79b6014 /pages/shop
parentb06fdc9c3b4b6dc0d5d60098303dd57d5c098e13 (diff)
small improvements here and there
Diffstat (limited to 'pages/shop')
-rw-r--r--pages/shop/_product/edit.fnl2
-rw-r--r--pages/shop/_product/index.fnl21
-rw-r--r--pages/shop/add.fnl2
-rw-r--r--pages/shop/cart/add.fnl2
-rw-r--r--pages/shop/cart/remove.fnl2
-rw-r--r--pages/shop/index.fnl28
-rw-r--r--pages/shop/order/_id.fnl5
-rw-r--r--pages/shop/order/index.fnl71
8 files changed, 88 insertions, 45 deletions
diff --git a/pages/shop/_product/edit.fnl b/pages/shop/_product/edit.fnl
index 3995096..2568aff 100644
--- a/pages/shop/_product/edit.fnl
+++ b/pages/shop/_product/edit.fnl
@@ -63,7 +63,7 @@
(values 302 {:Location "/shop"} "")
(if request.form
(let [data (forms.html-form->data product-form request.form db)
- errors (forms.validate-form product-form data)
+ errors (forms.validate product-form data)
has-errors? (not (lib.empty-table? errors))]
(if has-errors?
(values 400 {} (templates.base (content product-form data errors
diff --git a/pages/shop/_product/index.fnl b/pages/shop/_product/index.fnl
index 0dd5ff9..aabd713 100644
--- a/pages/shop/_product/index.fnl
+++ b/pages/shop/_product/index.fnl
@@ -41,7 +41,7 @@
[name]))
1))
-(fn content [product basket authenticated?]
+(fn content [product basket agreed-to-cookies? authenticated?]
(local redirect-url (.. "/shop/" product.name))
(local images [])
(for [i 1 5]
@@ -50,9 +50,13 @@
[(HTML
[:aside {}
(templates.header "/shop" authenticated?)
- (if (< 0 (# basket)) (templates.basket basket redirect-url) "")])
+ (if (< 0 (# basket)) (templates.basket basket redirect-url) "")
+ (templates.address-block)
+ (templates.conditions-block)
+ (templates.contact-block)])
(HTML
[:div {:class "content"}
+ (if (not agreed-to-cookies?) (templates.cookies-agreement) "")
[:div {:class "back"} [:a {:href "/shop"} "⟵ Обратно к списку"]]
[:div {:class "product-page-layout"}
@@ -64,8 +68,8 @@
[:a {:href (.. "/shop/" product.name "/edit")}
"% Редактировать"]])
"")
+ (templates.product-overview product "mb-0-25")
(templates.add-to-basket-form product basket "mb-0-5" redirect-url)
- (templates.product-overview product "mb-0-5")
[:div {:class "mb-1" :style "font-style: italic;"}
product.short-description]
@@ -93,11 +97,16 @@
(HTML [:img {:class "product-page-img" :src (.. link "-thumbnail.jpg")}]))]))))]]])])
(fn render [request db authenticated?]
- (let [product (find-product db request.params._product)
- order-id (shop.order-id request)
+ (let [agreed-to-cookies? request.cookies.agreed-to-cookies
+ product (find-product db request.params._product)
+ order-id request.cookies.order
basket (if order-id (shop.basket db order-id) [])]
(if (and product (or product.published authenticated?))
- (values 200 {} (templates.base (content product basket authenticated?)))
+ (values 200 {}
+ (templates.base
+ (content product basket agreed-to-cookies? authenticated?)
+ product.title
+ (.. "Купить " product.title " в Омске: " product.short-description)))
(values 404 {} "not found"))))
{: render}
diff --git a/pages/shop/add.fnl b/pages/shop/add.fnl
index 460cc81..02ec731 100644
--- a/pages/shop/add.fnl
+++ b/pages/shop/add.fnl
@@ -82,7 +82,7 @@
(values 302 {:Location "/shop"} "")
(if request.form
(let [data (forms.html-form->data product-form request.form db)
- errors (forms.validate-form product-form request.form)
+ errors (forms.validate product-form request.form)
has-errors? (not (lib.empty-table? errors))]
(if has-errors?
(values 200 {} (templates.base (content product-form request.form errors
diff --git a/pages/shop/cart/add.fnl b/pages/shop/cart/add.fnl
index b276608..f6b3d54 100644
--- a/pages/shop/cart/add.fnl
+++ b/pages/shop/cart/add.fnl
@@ -4,7 +4,7 @@
(fn render [request db]
(if (= request.method "POST")
(do
- (var order-id (shop.order-id request))
+ (var order-id request.cookies.order)
(var headers {})
(when (not order-id)
diff --git a/pages/shop/cart/remove.fnl b/pages/shop/cart/remove.fnl
index 0cdc417..fd514f0 100644
--- a/pages/shop/cart/remove.fnl
+++ b/pages/shop/cart/remove.fnl
@@ -3,7 +3,7 @@
(fn render [request db]
(if (= request.method "POST")
- (let [order-id (shop.order-id request)]
+ (let [order-id request.cookies.order]
(if (and order-id request.body)
(do
(local body-values (lib.parse-values request.body))
diff --git a/pages/shop/index.fnl b/pages/shop/index.fnl
index 0d78b0a..63a1cc9 100644
--- a/pages/shop/index.fnl
+++ b/pages/shop/index.fnl
@@ -7,6 +7,12 @@
(local pagination-limit 12)
+(local texts {
+ :address
+ (lib.improve-typography
+ "г. Омск, ул. Пушкина, д. 133/9, этаж 2. Вход с крыльца Магнита, дверь
+ слева, домофон 4. Дверь в офисе узнаете по нашему логотипу.")})
+
(fn all-products [db page filters]
(local where-stmts [])
(local where-args [])
@@ -125,22 +131,24 @@
"left: calc(100% / " (# without-videos) " * " (- idx 1) ")")}]))))]]
[:a {:href item-url}
[:h3 {:class "shop-item-title"} product.title]]
+ (templates.product-overview product "mb-0-25 font-size-0-875")
[:div {:class "shop-item-price"}
(templates.add-to-basket-form product basket "" redirect-url)]
- (templates.product-overview product "mb-0-25 font-size-0-875")
[:div {} product.short-description]]))
-(fn content [db products page total filters basket authenticated?]
+(fn content [db products page total filters basket agreed-to-cookies? authenticated?]
(local redirect-url (filters-path page filters))
[(HTML
[:aside {}
(templates.header "/shop" authenticated?)
(if (< 0 (# basket)) (templates.basket basket redirect-url) "")
- ;; [:section {} [:h2 {} "Условия"] [:p {} ""]]
- ])
+ (templates.address-block)
+ (templates.conditions-block)
+ (templates.contact-block)])
(HTML
[:div {:class "content"}
+ (if (not agreed-to-cookies?) (templates.cookies-agreement) "")
[:div {:class "back"} [:a {:href "/"} "⟵ Обратно на главную"]]
[:h2 {:class "product-page-title"} "Магазин"]
(if authenticated?
@@ -172,7 +180,8 @@
(paginator-template filters page pagination-limit total "mt-2")])])
(fn render [request db authenticated?]
- (let [order-id (shop.order-id request)
+ (let [agreed-to-cookies? request.cookies.agreed-to-cookies
+ order-id request.cookies.order
basket (if order-id (shop.basket db order-id) [])
type (if (and request.query.type
(not (lib.empty? (. request.query.type 1))))
@@ -189,8 +198,11 @@
only-published? (not authenticated?)
filters {: type : search : page : only-published?}
{: total : products} (all-products db page filters)]
- (values 200 {} (templates.base
- (content db products page total
- filters basket authenticated?)))))
+ (values 200 {}
+ (templates.base
+ (content db products page total filters basket
+ agreed-to-cookies? authenticated?)
+ "Магазин чая"
+ "Купить вкусный китайский чай с доставкой по Омску"))))
{: render}
diff --git a/pages/shop/order/_id.fnl b/pages/shop/order/_id.fnl
index 5c929a3..03ec0a9 100644
--- a/pages/shop/order/_id.fnl
+++ b/pages/shop/order/_id.fnl
@@ -15,7 +15,10 @@
(+ sum (* v.quantity v.price-per))))
[(HTML [:aside {}
- (templates.header "/shop/order" authenticated?)])
+ (templates.header "/shop/order" authenticated?)
+ (templates.address-block)
+ (templates.conditions-block)
+ (templates.contact-block)])
(HTML
[:div {:class "content"}
[:div {:class "back"} [:a {:href "/shop"} "⟵ Обратно к списку"]]
diff --git a/pages/shop/order/index.fnl b/pages/shop/order/index.fnl
index 019b61a..35a48aa 100644
--- a/pages/shop/order/index.fnl
+++ b/pages/shop/order/index.fnl
@@ -4,7 +4,8 @@
(local shop (require :shop))
(local templates (require :templates))
-(local order-form
+(local %page-title "Оформление заказ")
+(local %order-form
[{:title ""
:fields [
(forms.text-input "name" "Как к вам обращаться?" true)
@@ -12,21 +13,26 @@
(forms.checkbox-input "correct-order" "Данные заказа верны" true)
(forms.checkbox-input "consent"
(..
- "Я даю согласие " ;; "ИП «Горенкин Владислав Константинович» (ИНН ...)")
- " на хранение и обработку предоставленных персональных данных для уточнения деталей заказа.")
+ "Я согласен с <a target=\"_blank\" href=\"/information/privacy-policy\">условиями обработки персональных данных</a>."
+ ;;"а также с <a target=\"_blank\" href=\"/information/offer\">нашей публичной офертой</a>."
+ )
true)]}])
-(fn content-template [db basket data errors]
+(fn content [db basket data errors agreed-to-cookies? authenticated?]
[(HTML
[:aside {}
(templates.header "/shop/order")
- (if (< 0 (# basket)) (templates.basket basket "/shop/order") "")])
+ (if (< 0 (# basket)) (templates.basket basket "/shop/order") "")
+ (templates.address-block)
+ (templates.conditions-block)
+ (templates.contact-block)])
(HTML
[:div {:class "content"}
+ (if (not agreed-to-cookies?) (templates.cookies-agreement) "")
[:div {:class "back"} [:a {:href "/shop"} "⟵ Обратно к списку"]]
[:section {}
[:h2 {} "Оформление заказа"]
- (forms.render-form order-form data errors)]])])
+ (forms.render-form %order-form data errors)]])])
(fn check-stocks [db basket]
(var error nil)
@@ -44,29 +50,42 @@
error)
-(fn render [request db]
- (let [order-id (shop.order-id request)
+(fn render [request db authenticated?]
+ (let [order-id request.cookies.order
+ agreed-to-cookies? request.cookies.agreed-to-cookies
basket (if order-id (shop.basket db order-id) [])]
(if (= request.method "POST")
- (let [data (forms.html-form->data order-form request.form)
- stock-error (check-stocks db basket)]
- (if (not stock-error)
- (do
- (shop.place-order db order-id data.name data.contact data.consent)
- (lib.notify
- (.. "Новый заказ "
- "<a href=\"https://whitetoad.ru/shop/order/" order-id "\">"
- order-id
- "</a> от <b>" data.name "</b>.\n\n"
- "<a href=\"https://whitetoad.ru/shop/order/list\">Список заказов</a>"))
- ;; redirect and clear order cookie
- (values 302 {:Location (.. "/shop/order/" order-id)
- :Set-Cookie "order=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT"}
- ""))
- (values 400 {}
- (templates.base (content-template db basket data {:consent stock-error})))))
+ (let [errors (forms.validate %order-form request.form)
+ has-errors? (not (lib.empty-table? errors))]
+ (if has-errors?
+ (values 400 {} (templates.base
+ (content db basket request.form errors
+ agreed-to-cookies? authenticated?)
+ %page-title))
+ (let [data (forms.html-form->data %order-form request.form)
+ stock-error (check-stocks db basket)]
+ (if (not stock-error)
+ (do
+ (shop.place-order db order-id data.name data.contact data.consent)
+ (lib.notify
+ (.. "Новый заказ "
+ "<a href=\"https://whitetoad.ru/shop/order/" order-id "\">"
+ order-id
+ "</a> от <b>" data.name "</b>.\n\n"
+ "<a href=\"https://whitetoad.ru/shop/order/list\">Список заказов</a>"))
+ ;; redirect and clear order cookie
+ (values 302 {:Location (.. "/shop/order/" order-id)
+ :Set-Cookie "order=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT"}
+ ""))
+ (values 400 {}
+ (templates.base (content db basket data {:consent stock-error}
+ agreed-to-cookies? authenticated?))
+ %page-title)))))
(if (< 0 (# basket))
- (values 200 {} (templates.base (content-template db basket {} {})))
+ (values 200 {} (templates.base
+ (content db basket {} {} agreed-to-cookies?
+ authenticated?)
+ %page-title))
(values 302 {:Location "/shop"} "")))))
{: render}