포럼
서드파티에서 Rewrite Rule을 쉽게 추가할 수 있도록 코어를 수정하고 있습니다.
2014.01.21 00:07
코드이그나이터에는 라우터(Router)라는 기능이 있는데요. 이 기능을 이용해서 custom rewrite rule 정의가 가능합니다.
반면에, XE에는 미리 작성된 .htaccess 파일이 있고, 정해진 rewrite rule만을 사용할 수 있습니다.
새로운 모듈을 추가하면, 해당 모듈에 최적화 된 URL을 제공할 필요가 있는데, 현재 XE에서는 아래와 같이 제한된 짧은 주소를 지원하고 있습니다.
http://사이트주소/모듈명
http://사이트주소/모듈명/게시물번호
http://사이트주소/게시물번호
http://사이트주소/가상사이트/모듈명
http://사이트주소/가상사이트/모듈명/1234
http://사이트주소/모듈명/(rss|atom)
http://www.xpressengine.com/index.php?mid=userForum&act=dispBoardWrite
이러한 주소는 보기에도 지저분해 보이고 직접 (주소를 쳐서) 접근하기에 불편함이 많습니다.
또한, SEO에 최적화 된 URL이 아니기 때문에 검색 우선순위에서 밀려난다는 단점이 있습니다.
위 URL을 정리하면 아래와 같이 만들 수도 있겠죠.
http://www.xpressengine.com/userForum/write
또한, 쿼리 스트링에 변수명을 직접 노출하지 않기 때문에 깔끔해보이고, 보안적인 측면에서도 좋을거라고 생각합니다.
작동 구조
개발 계획
- router 클래스 추가
- Context::getUrl() 처리 방식 변경
- router 제어
- module trigger 혹은 애드온에서 router를 제어할 수 있도록 해야함
논의 사항
- 서드파티에서 어떻게 router 기능을 사용할 수 있을까?
- module.xml에 router 스펙을 추가하거나, 새로운 xml 파일을 추가해야 함
혹은 xml 스펙 추가 없이 php 구문으로 직접 추가하게 해야할듯
- module.xml에 router 스펙을 추가하거나, 새로운 xml 파일을 추가해야 함
- 중복되는 rewrite rule에 대한 처리?
댓글 22
-
푸시아
2014.01.21 00:26
-
이즈야
2014.01.21 00:52
오….(3)
-
퍼니엑스이
2014.01.21 00:57
@BNU @푸시아 @이즈야 이걸 만들어놔도 쓰실 분이 있을지? ^_^
-
이즈야
2014.01.21 01:03
@퍼니엑스이
짧은 주소일 때도 저런 긴 주소가 떠버려서 골치 아프던 참이었습니다~
-
푸시아
2014.01.21 01:04
seo 를 위해서 쓸것 같아요~
-
라르게덴
2014.01.21 01:50
Context::getUrl(...);
$Context = new Context();
$Context->getUrl(...);
우선은 태생이 위와 같은 호출이었다면 좀 더 유연했을건데...
제 생각엔 context에 $setUserUrl = ''; 하나 넣어주고,
function getUrl (...)
{
...블라블라 중간에
$oUserModel = getModel($self->setUserUrl);
$query = $oUserModel->getUrl(...);
if($query) return $query;
...
}
moduleHandler.init 로 트리거 받아서
$url = Context::getInstance();
$url->setUserUrl = 'user';이렇게 getUrl이 외부인터셉트를 허용해준다면 좀 더 룰이 개방적이지 않을까...
근데 그냥 편하게 자기모듈에 getUrl 만들어서 각 스킨 수정해도 그럭저럭 사용될듯...
-
착한악마
2014.01.21 10:59
오~~~~오~~~ 이기능 고급지다...이기능 누려~~~이 기능을 누려~~
-
퍼니엑스이
2014.01.21 13:12
생각보다 금방 구현이 되는군요. 얼른 Pull Request 해볼게요~
-
銀童
2014.01.21 13:19
라우터를 지원하는게 훨씬 나아보이긴 합니다. 좋은 아이디어네요 :) 빨리 반영되길 기대해봅니다.
-
KrteamENT
2014.01.21 14:23
오….(4)
-
퍼니엑스이
2014.01.21 16:47
아무도 없는 틈을 타서 Pull Request 하고 왔습니다.
https://github.com/xpressengine/xe-core/pull/354
-
퍼니엑스이
2014.01.21 16:54
@BNU oEmbed 애드온에 있는 접기/펼치기 버튼 좀 손봐주세요ㅠ.ㅠ 너무 투박해요.
-
socialskyo
2014.01.21 18:40
오….(5)...이건 뭐 멋있다고 말 밖에....기술이 모두를 이롭게 하네요~~
-
윈컴이
2014.01.21 19:13
대박..
-
라르게덴
2014.01.21 20:09
@퍼니엑스이
잠깐 해봤는데 구조를 잘 짜신거 같아요. 잘 사용하면 XE가 한층더 좋아질거 같네요.
근데 동작엔 실패했습니다 .ㅠㅠ 이슈에 글남겼어요.
-
퍼니엑스이
2014.01.21 20:52
중간에 코드를 수정하다가 실수를 한 것 같네요. 정리해서 내일 다시 Pull Request 올리겠습니다ㅎㅎ
-
퍼니엑스이
2014.01.22 12:57
@라르게덴 칭찬을 받을 정도로 잘 짠건가요? 3시간 만에 짠건데.. ㅎㅎ 아무튼 감사합니다. -
멀티비타민
2014.01.24 16:22
오….(7)
-
이온디
2014.01.25 02:13
오...(12)
-
Xiso
2014.02.04 18:06
언젠가 저도 서드파티모듈을 짜면서 고민을 많이했던 부분이네요
그땐 서드파티모듈에서 xml을 통해수정하진않았고, Context 초기화시점에 document_srl과 mid를 읽는시점 이전에 소스를 추가하여 해결을 봤었죠..
꼭 멋지게 성공하시기바랄게요 ^^
-
퍼니엑스이
2014.02.09 23:59
@라르게덴 @銀童
https://github.com/xpressengine/xe-core/pull/453 코드를 약간 정리해서 다시 올렸습니다^^
-
chansol
2014.01.24 00:35
오….(2)