포럼
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
template override 개념 제안.
2011.05.23 12:17
XE 코어에서 기본으로 제공되는 tpl 파일을 수정하는것은,
가끔 필수적인 일이기도 합니다.
실제로, member, document 등의 템플렛 파일의 수정을 해야하는 경우가 많은데
이경우, XE 코어에서 제공하는 파일을 수정하기떄문에 이후 유지보수에서 신경쓸 측면이 많아지게 됩니다.
물론 module 을 extend 해서 대치하면 되지만
단순히 템플릿 파일을 교체하기위해서 확장 모듈을 만드는것은 시간과, 비용면에서 손해가 많이 들게 됩니다.
그래서 제안하건데,
template 파일을 override 할수 있도록 지원되면 좋겠습니다.
예를들어서
관리 화면에서 template 파일의 경로를 선택하고,
override 할 템플릿 파일을 선택한뒤에
그 저장된걸 xml 로 저장해서
템플릿을 불러올때 override 된 부분을 체크해서 불러오게 만들면 된다고 생각합니다.
ui 상으로는, 윈도우즈 탐색기처럼 XE 의 폴더/파일 구조를 보여주고, override를 등록할수 있게 하면,
프로그램을 잘 모르는 디자이너들도 템플릿 파일의 교체가 편리하게 이루어질것이라고 생각합니다.
* 근데 이름은 override 인데 상속할건 없네요 딱히 ('-';;)
** 가상의 tpl 도 만들수있도록 작업을 해주는게 필요하지 않을까 싶습니다.
가끔 필수적인 일이기도 합니다.
실제로, member, document 등의 템플렛 파일의 수정을 해야하는 경우가 많은데
이경우, XE 코어에서 제공하는 파일을 수정하기떄문에 이후 유지보수에서 신경쓸 측면이 많아지게 됩니다.
물론 module 을 extend 해서 대치하면 되지만
단순히 템플릿 파일을 교체하기위해서 확장 모듈을 만드는것은 시간과, 비용면에서 손해가 많이 들게 됩니다.
그래서 제안하건데,
template 파일을 override 할수 있도록 지원되면 좋겠습니다.
예를들어서
관리 화면에서 template 파일의 경로를 선택하고,
override 할 템플릿 파일을 선택한뒤에
그 저장된걸 xml 로 저장해서
템플릿을 불러올때 override 된 부분을 체크해서 불러오게 만들면 된다고 생각합니다.
ui 상으로는, 윈도우즈 탐색기처럼 XE 의 폴더/파일 구조를 보여주고, override를 등록할수 있게 하면,
프로그램을 잘 모르는 디자이너들도 템플릿 파일의 교체가 편리하게 이루어질것이라고 생각합니다.
* 근데 이름은 override 인데 상속할건 없네요 딱히 ('-';;)
** 가상의 tpl 도 만들수있도록 작업을 해주는게 필요하지 않을까 싶습니다.
댓글 5
-
앙까?
2011.05.23 13:34
-
銀童
2011.05.23 13:46
일단 디렉토리로 구별하는 방법도 괜찮을꺼 같긴한데 , 구조가 더러워질수 있는 단점이 있지 않나 싶습니다.
모듈을 상속하거나, 코드를 수정하지 않고 쉽게 교체할수 있는 방법을 구상해보자는 이야기지요.
setTemplatePath를 쓸려면 모듈을 상속받는 extended module 을 만들어야하잖아요? '-'//
그리고 각 모듈에 존재하는 tpl 파일과 skins 은 좀 개념이 다르다고 생각해서 말이죠. -
앙까?
2011.05.23 14:20
setTemplatePath를 쓸려면 모듈을 상속받는 extended module 을 만들어야하잖아요? '-'//
그렇지 않습니다.
물론 XE코어에서 이부분을 반영해주어야 가능하긴 합니다.
통상적인 모듈의 스킨은 view클래스에서 사용하기때문에
현재 view클래스(adminview역시)의 init() 멤버함수 호출시 스킨경로를 지정하게 되어있습니다.
init()멤버함수 부분의 템플릿경로지정 부분만
XE코어에서 모듈 설정에서 지정한 경로로 변경하는 루틴만 업그레이드시에 반영한다면 가능한 방식입니다.
저같은 경우는 회원가입폼(signup.html, modify_info.html, member_info.html) 부분만 다르게 사용하고 싶을때
편법으로 애드온에서 before_module_proc 호출시점에서 템플릿경로를 변경하여 사용하고 있습니다.
저도 은동님의 템플릿 override(또는 overloading 두개념이 좀 헷갈려서 어느게 맞는지는 잘모르겠습니다^^) 기법은
구현된다면 매우 좋은 개념임에는 틀림없습니다. ^^
하지만 현실적으로 가능한가와 가능하다면 지금의 방식보다 나은가라는 문제에 부딪힐것 같습니다. -
銀童
2011.05.23 14:37
아 오해가 있었네요. 제가 생각한건
지금 상태에서 setTemplatePath 함수를 써서 경로를 따로 지정하라는 이야기인줄 알았습니다.
module 소스를 고칠수 없는 이상 이경우는 extend 해버리면 해결이 되긴 하지요.
앙까님의 말은 XE 코어의 테플렛 로딩 부분을 바꿔서,
modules/member/tpl/header.html 이라면
그걸 별도의 지정된 주소에 덮어씌울 템플릿이 존재하는지 확인해보자는 뜻인가요?
뭐, 제가 말한건 관리측면의 ui 도 존재하는거고.
별도의 주소로 만들어두는건 폴더단위에서 문제가 있을꺼같아서, 파일 하나하나당 경로를 설정할수 있게 해주자는 이야기입니다.
사실 아주 심플하게 만든다면
템플릿 로딩 ->
템플릿 주소 가져오기 (ex :: /modules/member/header.html) ->
대체 가능한 템플릿 확인 ( /template/modules/member/header.html) ->
존재하면 로딩, 그렇지 않으면 원래 파일 로딩 ->
컴파일 ->
캐시 등록
의 수순을 밟게 짜도 되겠지요.
template 의 폴더 추가를 각오한다면 이 방식이 제일 심플해보이긴 합니다. -
앙까?
2011.05.23 14:52
본문글을 다시 읽고 은동님의 답글을 보니 제생각과 비슷하군요 ^^
override라는 용어를 사용하셔서
기존 스킨의 속성을 모두 살리면서 특정부분만 원하는 형태로 바꾸는 방식인줄 알았습니다.
예를들면 스킨이 구조적으로 header/body/footer(더 세분화시킬수도 있겠지만)로 구성되어 있을때
body부분만 별도로 제작해서 대체시키는 방식으로 이해를 했습니다.
제가 독해력이 좀 부족했군요 ^^
아무튼 은동님과 저의 생각과 차이점은
은동님 방식은 대체가능한 템플릿을 체크하고 있으면 대체 없으면 디폴트
저는 유효성 유무 체크없이 무조건 대체 템플릿경로의 템플릿 사용 없으면 없다고 에러표시
정도네요 ^^
xe/modules/skins/스킨명 에 디폴트로 하면서
xe/skins/module명/스킨명 으로 둘 수 있도록
모듈설정에서 지정하도록하면 어떨까 생각합니다.
어차피 Moduleobject.class.php에서
function setTemplatePath($path) 멤버함수로 스킨파일 경로를 지정할 수 있기때문에
현재로서도 크게 문제는 없어보입니다.