diff options
Diffstat (limited to 'bin/serve.fnl')
| -rw-r--r-- | bin/serve.fnl | 56 |
1 files changed, 29 insertions, 27 deletions
diff --git a/bin/serve.fnl b/bin/serve.fnl index bec5a94..d4dbf4c 100644 --- a/bin/serve.fnl +++ b/bin/serve.fnl @@ -105,9 +105,23 @@ [:div {} "Всего результатов: " [:strong {} (string.format "%d" total)]]] "")) -(fn base-template [query sort page total ...] +(fn aside-template [query tags paginator] + [:aside {:class "aside"} + [:div {:class "aside-content"} + (if (~= query "") + [:a {:href "/" :style "display: block;"} + [:img {:class "logo" :src "static/logo.svg" + :alt "Логотип meicha.ru" :title "Логотип meicha.ru"}]] + [:img {:class "logo" :src "static/logo.svg" + :alt "Логотип meicha.ru" :title "Логотип meicha.ru"}]) + [:form {:class "form"} + [:input {:type :search :name :query :value query + :autofocus true :placeholder "Поисковый запрос"}] + [:button {:type :submit} "Искать"]] + paginator]]) + +(fn base-template [query tags page total ...] (local paginator (paginator-template query page 48 total)) - [:html {:lang "en"} [:head {} [:meta {:charset "UTF-8"}] @@ -116,19 +130,7 @@ [:body {} [:div {:class "container"} [:div {:class "content"} - [:aside {:class "aside"} - [:div {:class "aside-content"} - (if (~= query "") - [:a {:href "/" :style "display: block;"} - [:img {:class "logo" :src "static/logo.svg" - :alt "Логотип meicha.ru" :title "Логотип meicha.ru"}]] - [:img {:class "logo" :src "static/logo.svg" - :alt "Логотип meicha.ru" :title "Логотип meicha.ru"}]) - [:form {:class "form"} - [:input {:type :search :name :query :value query - :autofocus true :placeholder "Поисковый запрос"}] - [:button {:type :submit} "Искать"]] - paginator]] + (aside-template query tags paginator) [:section {} [:div {:class "list"} ...] [:footer {} paginator]]]]]]) @@ -137,8 +139,7 @@ (assert (< 0 limit) "limit must be > 0") (luna.db.query* db - "SELECT id, - site, + "SELECT site, title, description, image, @@ -167,14 +168,13 @@ "SELECT count(*) FROM search WHERE search.`table` = 'products' - AND search.name MATCH ?" + AND search.title MATCH ?" [query])) {:results (luna.db.query* db - "SELECT products.id, - highlight(search, 0, '<i>', '</i>') AS \"title\", + "SELECT highlight(search, 0, '<i>', '</i>') AS \"title\", products.site, products.description, products.image, @@ -182,11 +182,13 @@ products.price, products.weight, products.price_per AS \"price-per\", - products.year + products.year, + products.archived, + products.creation_time AS \"creation-time\" FROM search - INNER JOIN products ON search.fid = products.id + INNER JOIN products ON search.fid = products.url WHERE search.`table` = 'products' - AND search.name MATCH ? + AND search.title MATCH ? ORDER BY rank LIMIT 48 OFFSET ?" [query (* (- page 1) 48)]) @@ -198,17 +200,17 @@ (if (= path "/") (let [headers {:content-type "text/html"} page (or (tonumber query.page) 1) - search (or query.query "") - sort "ASC" + search (str.trim (or query.query "")) + tags (or query.tags []) {: results : total} (if (~= "" search) - (query-products page search sort) + (query-products page search) {:total 48 :results (random-products 48)})] (values 200 headers (html.render (base-template - search sort page total + search tags page total (table.unpack (map #(item-template $2) results))) true))) (values 404 {} "not found"))) |
