first form
This commit is contained in:
+28
-10
@@ -2,12 +2,17 @@
|
|||||||
|
|
||||||
(defun get-product (n)
|
(defun get-product (n)
|
||||||
;; Query the DB.
|
;; Query the DB.
|
||||||
(list n (format nil "Product nb ~a" n) 9.99))
|
(list n (format nil "Product nb ~R" n) 9.99))
|
||||||
|
|
||||||
(defun products (&optional (n 5))
|
(defun products (&optional (n 5))
|
||||||
(loop for i from 0 below n
|
(loop for i from 0 below n
|
||||||
collect (get-product i)))
|
collect (get-product i)))
|
||||||
|
|
||||||
|
(defun search-products (products query)
|
||||||
|
(loop for product in products
|
||||||
|
if (search query (second product) :test #'equalp)
|
||||||
|
collect product))
|
||||||
|
|
||||||
(defvar *server* nil
|
(defvar *server* nil
|
||||||
"Server instance (Hunchentoot acceptor).")
|
"Server instance (Hunchentoot acceptor).")
|
||||||
|
|
||||||
@@ -21,16 +26,28 @@
|
|||||||
args))
|
args))
|
||||||
|
|
||||||
(defparameter *template-root* "
|
(defparameter *template-root* "
|
||||||
<title> Lisp web app </title>
|
|
||||||
<body>
|
<form action=\"/\" method=\"GET\">
|
||||||
|
<div>
|
||||||
|
<label for=\"query\">What do you search for?</label>
|
||||||
|
<input name=\"query\" id=\"query\" placeholder=\"Search…\" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<button>Search</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
{% if query %}
|
||||||
|
<div> query is: {{ query }} </div>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{% for product in products %}
|
{% for product in results %}
|
||||||
<li>
|
<li>
|
||||||
<a href=\"/product/{{ product.0 }}\">{{ product.1 }} - {{ product.2 }}</a>
|
<a href=\"/product/{{ product.0 }}\">{{ product.1 }} - {{ product.2 }}</a>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</body>
|
{% endif %}
|
||||||
")
|
")
|
||||||
|
|
||||||
(defparameter *template-product* "
|
(defparameter *template-product* "
|
||||||
@@ -42,15 +59,16 @@
|
|||||||
</body>
|
</body>
|
||||||
")
|
")
|
||||||
|
|
||||||
(easy-routes:defroute root ("/") ()
|
|
||||||
(render *template-root* :products (products)))
|
|
||||||
|
|
||||||
(easy-routes:defroute product-route ("/product/:n")
|
|
||||||
|
(defroute product-route ("/product/:n")
|
||||||
(&get debug &path (n 'integer))
|
(&get debug &path (n 'integer))
|
||||||
(render *template-product* :product (get-product n) :debug debug))
|
(render *template-product* :product (get-product n) :debug debug))
|
||||||
|
|
||||||
(defroute root ("/" :method :get) ()
|
(defroute root ("/" :method :get) (query)
|
||||||
(render-products))
|
(render *template-root*
|
||||||
|
:results (search-products (products) query)
|
||||||
|
:query query))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user