Я создал небольшое веб-приложение compojure, которое может отображать несколько значений, извлекаемых с другого сайта, используя предоставленный URL. На данный момент этот URL-адрес жестко закодирован в одной из моих функций, и теперь я хотел бы добавить функцию для динамического создания URL-адресов на основе значений в текстовом поле и флажке.Разбор значений из нескольких флажков с использованием compojure
Это как моя страница выглядит следующим образом:
(defn view-layout [& content]
(html [:body content]))
(defn view-input []
(view-layout
[:h2 "Find"]
[:form {:method "post" :action "/"}
(for [category ["Cat1" "Cat2" "Cat3"]]
[:input {:type "checkbox" :id category } category ])
[:br]
[:input {:type "text" :id "a" :value "insert manga name"}] [:br]
[:input.action {:type "submit" :value "Find"}]
[:a {:href "/downloads"} "Downloads"]]))
(defn view-output []
(view-layout
[:h2 "default images"]
[:form {:method "post" :action "/"}
(for [name (get-content-from-url (create-url))]
[:label name [:br]]
)]))
(defn create-manga-url
[]
"http://www.mysite.net/search/?tfield=&check=000")
Вот маршруты:
(defroutes main-routes
(GET "/" []
(view-input))
(GET "/downloads" []
(view-downloads))
(POST "/" []
(view-output)))
На данный момент, мне нужна помощь с (create-url)
функции (возвращает строку), где я бы например, чтобы получить все поля, обязательные для моего поиска (одно текстовое поле и 3 флажка), и проанализировать значения из них, которые будут загружены в (конкатенированный) флажок URL - для флажка, если флажок установлен, раздел проверки будет иметь значение 1, вместо 0 или оставаться 0, если нет (check = 100 или 010, 011, если было выбрано два флажка). В текстовом поле tfield = userinputtext.
EDIT Я провел много времени в качестве разработчика .Net и Java, и эта часть compojure - полная тайна для меня. Это то, что я хотел бы достичь с (create-url)
функции (псевдо код, написанный в стиле OO):
(defn create-url [*text_field cbox1 cbox2 cbox3*]
(def url "http://www.mysite.net/search/?")
(def tfield "tfield=")
(def cbox "&check=")
(if (checked? cbox1)
(str cbox "1")
(str cbox "0"))
(if (checked? cbox2)
(str cbox "1")
(str cbox "0"))
(if (checked? cbox3)
(str cbox "1")
(str cbox "0"))
(str tfield (:value text_field))
(str url tbox cbox))
Я извиняюсь за то, как этот псевдо код выглядит, но это та часть, что я хотел бы узнать: Как я могу извлекать данные из формы и анализировать ее (в этом случае я хотел бы добавить значения из полей формы в строку)
Может ли кто-нибудь мне помочь?
Может быть полезно, если вы предоставите несколько примеров вызовов 'create-url' с параметрами и ожидаемыми возвращаемыми значениями. – ivant
Привет ivat, спасибо, что ответили. К сожалению, я не знаю, как анализировать значения из html-страницы в clojure. Я могу только предоставить псевдо-код, который мог бы объяснить, чего бы хотелось достичь. –
ivat, я предоставил псевдокод для моей функции. Но проблема в том, что я не знаю, как работать с путями, и я действительно не знаю, как предоставить правильные параметры для моей функции. Как вы думаете, вы можете мне помочь? –