포럼
XE 개발 질문 받아요
2013.12.06 20:51
현역 XE 개발자(?)가 개발에 대한 질문에 답변 해드려요.
너무 어려운 질문은 무리고
댓글로 답변 가능할 정도로의 질문만 해주세요.
저도 모르는게 많은 XE이기 때문에 모르는 것도 있을 수 있고요.
XE 개발하시는 분들께 많이 도움 됐으면 좋겠습니다.
댓글 98
-
윈컴이
2013.12.06 20:57
-
Lansi
2013.12.06 21:01
module.xml에 정의되있어야 합니다(없을 경우 잘못된 요청 오류).
그리고 모듈.view.php에 함수(disp~)를 정의해야합니다(없을 경우 success만 리턴).
그러면 act 값을 넣어서 접속할 수 있습니다.
-
윈컴이
2013.12.06 23:54
넵! 답변 감사합니다.
그 부분은 알고 있고요, module.xml 부분을 XE 코어 어느 파일에서 처리해서 ?act=disp~~ 등으로 접속하면 화면을 표시하게 하는지 궁금합니다 :)
-
Lansi
2013.12.07 00:27
열심히 찾아봤지만 정확히는 모르겠네요...
ModuleHandler 클래스의 생성자와 Context 클래스의 init()에서 처리되는 것 같습니다.
-
sejin7940
2013.12.07 07:55
classes/module/ModuleHandler.class.php 에서
function procModule 함수가 있고
이 내부에
$xml_info = $oModuleModel->getModuleActionXml($this->module); 를 통해서
conf/module.xml 파일의 action 정보를 가져와서 분석합니다
그리고 그 이하에서 $this->act 값을 통해 (이 값은 act 변수로 받거나, 없으면 xml_info 내의 default_index_act 를 통해서 구합니다) $xml_info 와 연계해, $type,$reulset,$kind 등을 구해 작동하게 됩니다.
(실제 xml 을 분석한는 건 modules/module/module.model.php 의 getModuleActionXml 함수를 참조하면 됩니다)
-
정도의길을걷기싫다
2013.12.07 10:40
...... 감사합니다
원컴이님과 라나시?님과 세준님께 감사를드립니다
-
Lansi
2013.12.07 16:33
윈컴이님과 랑시와 세진님입니다... 일부러 그러신거죠?
-
Lansi
2013.12.07 16:32
저도 잘 배워갑니다 ㅎㅎ
-
윈컴이
2013.12.07 16:47
잘 알아갑니다 :)
감사합니다!
-
Lansi
2013.12.06 21:24
설명하기 어렵네요 ㅎㅎ
간단히 말해서 뷰에서 처리합니다! 모듈.view.php!
-
벨몽이
2013.12.06 21:13
php에 대한 간단한 질문인데요 -> 지시자의 쓰임새와 정의에 대한 설명을
들을수 있을까요 :)
c++에서의 -> 와는 약간 다르게 쓰이는것 같더라구요
변수에도 쓰이고 함수에도 쓰이던데.. XE스쿨 모듈부분을 보고있는데
객체지향부분에서 막히는군요..ㅜ
-
Lansi
2013.12.06 21:23
객체를 참조하는 연산자입니다.
변수에 클래스가 담겨있다면 함수를 참조 가능하고,
변수가 담겨있다면 변수를 참조할 수 있습니다.
// 클래스
$page_navigation = new PageHandler();
$page_navigation->getNextPage();
// 변수
$args = new stdClass()
$args->xe = '1.7.4';
-
벨몽이
2013.12.06 21:32
감사합니다. 조금만 더 여쭤볼게요..
xe스쿨 예제에서 보면
$args
=
Context
::getRequestVars();
$args
->module =
'example'
;
이렇게 new로 객체를 생성해주지 않고
곧바로 변수에 대입해주는 부분이 나오는데
이런 부분은 어떻게 해석해줘야 될까요?
또한 함수에서
function
dispExampleAdminInsert() {
$this
->setTemplateFile(
'example_admin_insert'
);
}
이런식으로 this 변수에 함수를 참조하는 것은 어떤
의미인가요?
자바 위주로 사용하다가 php 문법을 배우려니 신박하면서도
어질어질 하네요..ㅠ 염치불구하고 여쭙겠습니다.
-
Lansi
2013.12.06 21:50
getRequestVars() 같은 경우엔 함수에서 객체를 생성해서 return 해주는 겁니다.
function getRequestVars() {
$output = new stdClass();
return $output;
}
이런 식이겠죠.
this 변수는 자기 자신(상속받은 부모 클래스 포함)을 가르키는 예약된(다른 용도로 사용할 수 없음) 변수입니다.
$this->setTemplateFile('example_admin_insert');는 view 클래스가 ModuleObject를 상속받았기 때문에
ModuleObject의 함수를 사용할 수 있는겁니다.
$this->dispExampleAdminInsert(); 자기 자신 클래스의 함수를 사용할 수도 있구요.
-
벨몽이
2013.12.06 21:54
우와 굉장히 유연한 기능을 하는군요.. 멋지네요 php
개념 정리하는데 많은 도움이 되었습니다 감사합니다 ㅜㅜ
-
Lansi
2013.12.06 22:11
설명을 잘 못해서 알아들으셨을까 궁금했는데 다행이네요 ㅎㅎ
-
socialskyo
2013.12.06 21:25
XE 개발하시면서 가장 보람이 있었던경우는요?
-
Lansi
2013.12.06 21:30
프로젝트 하나 끝냈을 때죠!
그리고 신기능을 도입해서 만족스럽게 됐을 경우 보람찹니다!
업데이트할 때도요 ㅋㅋㅋ
-
구름나무바위
2013.12.06 22:02
반가습니다.
예전에 네이버 개발자들을 보니 설계도 역활을 하는 도식화표 같은게 있던데
XE 개발시에 설계도 같은 도식화표 같은 것을 가지고 있나요?
아니면 그냥 코드 보고 그때 그때 생각나는대로 개발하나요?
-
Lansi
2013.12.06 22:14
저는 기획서를 받아서 따로 설계도 없이 구현합니다.
XE를 잘 이해하면 작은 프로젝트는 그냥 간단하게 만들어버릴 수 있습니다.
물론 큰 프로젝트는 설계까지 다 하고 하겠지만요.
개발자 문서 말씀하시는 거라면 현재 없어서 그냥 코어를 직접 뜯어보고 개발합니다 ㅠ
-
쿡래빗
2013.12.06 22:29
앞으로 틈틈히 여기에서 질문 드리겠습니다. 너무 감사합니다 ~!
-
Lansi
2013.12.06 22:31
대신 좋은 레이아웃 만들어주세요 ㅎㅎ
-
윈컴이
2013.12.06 23:57
하나 더 질문합니다 :)
XE에서 캐시는 어떻게 처리하고 어떻게 표시하나요?
-
Lansi
2013.12.07 00:27
캐시 사용법이 궁금하신가요 동작 원리가 궁금하신가요?
-
윈컴이
2013.12.07 08:45
둘다 궁금합니다. ^^;
-
Lansi
2013.12.07 16:40
사용 방법은
CacheHandler 클래스의 인스턴스를 getInstance()로 받아와서
현재 서버에서 isSupport()로 캐시가 사용이 가능한지 확인을 합니다.
캐시를 사용할 수 있다면 put()과 get()으로 캐시를 다룹니다.
동작 원리는
CacheHandler에서 XE 설정에 따라 클래스를 다르게 include_once 해줍니다.
캐시 방법 종류는 Apc, File, Memcache, Wincache가 있습니다.
-
윈컴이
2013.12.07 16:48
좀 어렵군요. ^^;;
답변 감사합니다.
-
Lansi
2013.12.07 16:49
사용은 되게 간단하게 만들어 놔서 쓰기 좋아요 ㅎㅎ
-
BJ람보
2013.12.07 17:23
윈컴이님! 연락 가능한 번호나.. 카톡좀 알려주세요../쪽찌로/
-
정도의길을걷기싫다
2013.12.07 10:45
모듈을 하나 제작중인데(유료) 90%완성되었는데 xe스쿨 및 구글링을 참조해서 모듈을 만들다보니 1.7버전 , 1.4버전과의 호환성이 안맞는부분이 몇 있습니다. 이경우는 어떻게 처리를 해줘야 할까요. 나와있는 가이드가 대부분 1.5코어에 맞춰져서 이것에 맞춰 제작을 했는데 추후 1.4는 안되더라도 1.7과의 호환성이 맞아야만 구입하시는분이 많아지실것 같아 이렇게 조심스리 여쭈어봅니다 ㅠ.ㅠ
-
Lansi
2013.12.07 16:44
일단 전 1.7 개발자라 확실히는 모르는데
다른 모듈, 애드온 소스를 보면 __XE_VERSION__ 확인해서 분기 또는
is_function() 함수로 함수가 존재하는지 확인한 후 다른 처리를 해줍니다.
결국 if 문 노가다입니다.
근데 1.4까지 지원해줘야 할까요...
-
구름나무바위
2013.12.08 16:28
태그 입력(input)를 2개이상 늘리고 출력도 2개 이상 할 수 없을까요?
예를들어 태그1번은 사자, 호랑이, 기린등과 같은 포유를 입력하고 태그2번은 갈매기, 참새, 독수리등처럼 조류를 입력 가능하게요.
출력은 태그1, 태그2 따로 출력되게 말입니다.
-
Lansi
2013.12.08 17:16
태그 두개를 사용할 수는 없습니다.
하지만 이런 경우엔 확장 변수를 사용하시면 되겠네요.
-
서기에요
2013.12.08 18:05
광범위한 질문을...... PHP는 어떻게 공부해야 하옵니까 ㅠㅠ
-
Lansi
2013.12.08 18:09
하나하나 차근차근 배우시는 수밖에 없습니다...
전 http://handsome.pe.kr/ 여기에서 배웠습니다.
-
쿡래빗
2013.12.09 20:49
<query id="getNewestDocuments" action="select"> <tables> <table name="documents" /> </tables> <columns> <column name="documents.*" /> </columns> <conditions> <condition operation="in" column="documents.module_srl" var="module_srl" filter="number" pipe="and" /> </conditions> <navigation> <index var="sort_index" default="documents.list_order" order="order_type" /> <list_count var="list_count" default="20" /> </navigation> </query>
대충 위에서
operation="in" 하고 pipe="and"
은 어떤 쓰임세인가요?? operation하고 pipe...
몰라서 아직 못쓰고 있는데..OTL.....
-
웹엔진
2013.12.17 22:02
이건, 개발자 매뉴얼 42페이지(PDF 파일 기준)를 참고해 보세요. ^^
-
Lansi
2013.12.18 01:04
이렇게 변환됩니다.
document.module_srl IN(module_srl) (AND)
뒤에 AND는 이어지는 컨디션이 없기 때문에 딱히 필요 없어보이네요.
-
쿡래빗
2013.12.18 09:51
다른모듈과의 연계를 하고싶은데 이럴려면 트리거를 이용해야 하는걸로 알고 있습니다.
1. 트리거 기능이 무엇인지
2. 사용방법
3. 추천예제
위3개가 너무 궁금합니다. 매뉴얼로는 뭔가 부족함이..
-
Lansi
2013.12.18 10:10
1. 트리거는 애드온과 비슷합니다. 하지만 호출 시점과 모듈에서 실행(애드온이 필요 없음) 된다는게 다르죠.
2. 기본적으로 연계할 모듈에서 트리거를 지원해줘야 합니다. 그 모듈에서 triggerCall()을 호출해줘야 합니다.
트리거는 두개가 있습니다. before과 after가 있는데 호출 시점이 다릅니다.
애드온은 Module Proc 전과 후에서만 실행되는 것에 비해 트리거는 호출 시점이 모듈마다 다릅니다(그래도 before & after 시점인 건 같음).
모듈 컨트롤러에서 insertTrigger()로 트리거를 추가(주로 모듈 설치할 때 추가)해주고 컨트롤러에 트리거 함수를 정의해주면 됩니다.
3. document 모듈이 참고하시기에 좋습니다.
class.php: moduleInstall() - 트리거 추가
controller.php: insertDocument() - 트리거 호출
triggerDeleteModuleDocuments() - 트리거 정의
-
쿡래빗
2013.12.18 10:46
좋은답변 감사합니다
학습해서 좋은결과물 나올수 있도록 하겠습니다.
-
oksky
2013.12.22 06:45
질문 받아주셔서 감사합니다.
- '현재' 위치의 module_info 는 {print_r($module_info)}로 출력할 수 있는데요.
- mid = aaa 인 module_info 는 어떻게 출력할 수 있나요?
- module_srl = 111 인 module_info 는 어떻게 출력할 수 있나요? - '현재' 위치의 category_list 혹은 document_list 도 역시
{print_r($category_list)}, 혹은 {print_r($document_list)}로 확인할 수 있는데요,
- mid = aaa 인 module의 category_list 혹은 document_list 는 어떻게 출력할 수 있나요?
- module_srl = 111 인 module의 category_list 혹은 document_list 는 어떻게 출력할 수 있나요?
질문의 기회를 주셔서 감사합니다~! - '현재' 위치의 module_info 는 {print_r($module_info)}로 출력할 수 있는데요.
-
oksky
2013.12.22 18:53
혼자 찾아냈네요ㅎ;; get ~~~~ 들을 이용하니 되네요,,
역시 아쉬운건 개발문서의 부재네요ㅠ
-
Lansi
2013.12.22 19:38
이제야 봤군요;
document 모델의 getDocumentList() 또는 getCategoryList()를 이용하시면 됩니다.
-
캠핑메이트
2013.12.22 08:11
성인 사진을 올리는 이용자.. 어떻게 사전에 미리 차단이 안될까요..ㅠㅠ
골치덩어리입니다.. ㅠㅠ
-
Lansi
2013.12.22 19:38
스팸인가요? 스팸은 딱히 답이 없죠.
저는 수동으로 등업하는 방식으로 합니다.
-
멀티비타민
2013.12.23 19:05
Lansi님이 올리신 댓글 새로고침 팁 잘되네요
그런데 comment.html을 불러올때 html뿐만 아니라 다른 요소들까지 포함되서 오는데요
스크립트 등등
제외하고 순수하게 html만 불러오려면 어떻게해야되는지 알수있을까요?
HTMLDisplayHandler에서 고쳐야되는건지요?
-
Lansi
2013.12.24 09:24
Context::setResponseMethod('JSON');
이 코드를 추가해주면 됩니다.
-
멀티비타민
2013.12.24 09:44
잘되네요 감사합니다.
포인트 애드온 문제 묻고답하기에 질문 다신거 봤는데 혹시 해결하셨나요??
https://github.com/xpressengine/xe-core/issues/1
이거 보고 삭제하니 동작 하긴하는데 다른곳에 문제가 생길거 같기도하네요
-
Lansi
2013.12.24 09:51
포인트 레벨 아이콘 표시 애드온과 충돌나는 건가요?
그거 해결해서 올린게 그 소스입니다.
실제 사용중이기도 하구요.
function disp~~~ 이런 형식으로 되어있는건 어느 파일에서 처리해서 ?act=disp~~ 이렇게 접속하면 되는지 궁금합니다.