diff options
Diffstat (limited to 'pages/shop')
| -rw-r--r-- | pages/shop/_product/edit.fnl | 2 | ||||
| -rw-r--r-- | pages/shop/_product/index.fnl | 21 | ||||
| -rw-r--r-- | pages/shop/add.fnl | 2 | ||||
| -rw-r--r-- | pages/shop/cart/add.fnl | 2 | ||||
| -rw-r--r-- | pages/shop/cart/remove.fnl | 2 | ||||
| -rw-r--r-- | pages/shop/index.fnl | 28 | ||||
| -rw-r--r-- | pages/shop/order/_id.fnl | 5 | ||||
| -rw-r--r-- | pages/shop/order/index.fnl | 71 |
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} |
