[Weblocks] 지저분한(?) 태그 없애기

Weblocks 로 Web Programming 을 하다보면 자동으로 생성되는 Tag 들이 보기 싫을 때가 있습니다.

자동으로 만들어 주면서 관련된 javascript, stylesheet 를 연결해서 최소한도로 손을 안대도 코딩이 되게 할려는 목적으로 만들어서  편하기는 한데, 공부를 하는 차원에서는 이 태그 저 태그 붙어서 정신 없는 것보다 깔끔하게 내가 원하는 만큼의 HTML을 생성하는 것이 여러모로 편리할 때가 많습니다. 이러한 방법을 알아보기로 하지요.

http://uint32t.blogspot.com/2008/01/weblocks-starting-with-blank-slate.html 조금 예전 자료긴 하지만 충분히 참조할 만합니다.

자동으로 붙어 나오는 tag 는 page-wrapper , page-extra-top , page-extra-bottom 등 3개씩 붙어 나와서 보기 흉합니다. 이렇게 붙어 나오는 이유는

weblocks/src/page-template.lisp 안에 있는 render-page-body 함수 때문입니다.

(defmethod render-page-body ((app weblocks-webapp) body-string)
  "Default page-body rendering method"
  (with-html
    (:div :class "page-wrapper"
      (render-extra-tags "page-extra-top-" 3)
      (htm (str body-string))
      (render-extra-tags "page-extra-bottom-" 3))))

보시면 weblocks-webapp 객체의 method 인 render-page-body 입니다. 태그를 붙이는 코드의 내용이 확인됩니다. 그렇다면 이 부분을 수정해서 재컴파일 하면 되는 것이냐.. 하는 것인데. 절대 그럴 필요 없습니다. lisp 의 막강한 기능인 함수 오버라이딩을 바로 해줄 수 있습니다.

weblocks 으로 만들어준 temp-cloud 라는 프로젝트에서 temp-cloud/src/init-session.lisp 파일을 열어줍니다. 최 상단에 있는 (in-package :temp-cloud) 구문 아래에 바로 오버라이딩 함수를 추가해줍니다.

(in-package :temp-cloud)


(defmethod render-page-body ((app weblocks-webapp) body-string)
  "Default page-body rendering method"
  (with-html
          (cl-who:htm (str body-string))))


단지 이렇게 해준 것만으로 깔끔하게 태그가 사라진 결과물을 볼 수 있습니다.