Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

거 XE 모듈 개발하기 좋은 날씨네 - XECon + PHPFest 2014

2,790 views

Published on

거 XE 모듈 개발하기 좋은 날씨네 - XECon + PHPFest 2014
2014.11.08

Published in: Technology
  • Be the first to comment

거 XE 모듈 개발하기 좋은 날씨네 - XECon + PHPFest 2014

  1. 1. 거 XE 모듈 개발하기 좋은 날씨네 게시판 하나는 만들 수 있게 해드릴게 신승엽 NHN Entertainment 2014.11.08 Session 2-4 XECon + PHPFest 2014
  2. 2. 신승엽 @ NHN Entertainment •SocialXE 개발 (2011) •XE Core 개발 (~2013)
  3. 3. 모듈 구상 목표 XE의 기본 요소들을 활용하는 간단한 모듈을 제작 요구사항 Document, Comment 모듈 사용 사이트 메뉴 편집과 호환
  4. 4. 나의 게시판 목록 보기 내용 보기 글 쓰기 댓글 쓰기 사이트 메뉴 편집을 통해 추가/설정
  5. 5. 모듈 폴더 생성 XE ROOT/modules/myboard 폴더 생성
  6. 6. info.xml 생성 MODULE ROOT/conf/info.xml 파일 생성
  7. 7. http://me2.do/5nfH4nyf
  8. 8. module.xml 생성 MODULE ROOT/conf/module.xml 파일 생성 권한 관련 정보 액션 실행 퍼미션 관련 정보 모듈이 가진 액션 관련 정보 http://me2.do/54gObkCW
  9. 9. module.xml 생성 MODULE ROOT/myboard.class.php 파일 생성
  10. 10. XE의 모든 모듈 class 파일은 ModuleObject를 상속 받아야 함 XE 초기 설치/ 쉬운설치 시에 호출됨 모듈 업데이트 여부를 체크하기 위해 호출 됨 http://me2.do/GPf5odjx
  11. 11. 모듈 업데이트 시 호출 됨 모듈 삭제 시 호출 됨 모듈이 쉬운 설치에 올라가 있을 때만 삭제가 가능 http://me2.do/GPf5odjx
  12. 12. 메뉴 타입으로 등록 MODULE ROOT/myboard.class.php 파일 수정
  13. 13. 트리거 발생 시 실행할 모듈 이름 http://me2.do/5Mfg7fNd
  14. 14. http://me2.do/5Mfg7fNd 모듈과 관련된 조작 메소드를 가지고 있음 트리거를 등록하는 메소드 모듈 설치 시...
  15. 15. http://me2.do/5Mfg7fNd 트리거를 정보를 받는 메소드 if (트리거가 없다) { 업데이트가 필요하다 } 모듈 업데이트 체크 시...
  16. 16. http://me2.do/5Mfg7fNd 모듈 업데이트 시...
  17. 17. if (트리거가 없다) { 트리거 등록 } http://me2.do/5Mfg7fNd end of foreach
  18. 18. http://me2.do/5Mfg7fNd 트리거를 제거하는 메소드 모듈 업데이트 삭제 시...
  19. 19. 메뉴 타입으로 등록 MODULE ROOT/myboard.model.php 파일 생성
  20. 20. http://me2.do/xuYhaz0i
  21. 21. 클래스 이름 규칙 파일명 클래스명 상위 클래스 myboard.class.php myboard ModuleObject myboard.admin.controller.php myboardAdminController myboard myboard.admin.model.php myboardAdminModel myboard.admin.view.php myboardAdminView myboard.controller.php myboardController myboard.model.php myboardModel myboard.view.php myboardView
  22. 22. http://me2.do/xuYhaz0i 트리거 정보
  23. 23. http://me2.do/xuYhaz0i 파라미터로 받은 배열에 모듈 이름을 추가
  24. 24. 메뉴 타입으로 등록 지금까지 잘 따라왔다면 관리자 페이지 접속 시 모듈 업데이트가 표시 됨
  25. 25. 메뉴 타입으로 등록 업데이트 후 사이트 메뉴 편집으로 접속한 후 메뉴 추가를 눌러보면 '나의 게시판'이 추가된 것을 확인할 수 있음
  26. 26. 권한 설정 만들기 MODULE ROOT/conf/module.xml 파일 수정
  27. 27. http://me2.do/59pJ1jtr
  28. 28. http://me2.do/59pJ1jtr 코드에서 사용할 이름 기본 권한 설정 - guest: 모든 사용자 - member: 로그인 사용자 - manager: 관리자 권한 체크를 자동으로 해주진 않는다 코드에서 직접 처리
  29. 29. 권한 설정 만들기
  30. 30. 간단 설정 만들기 MODULE ROOT/conf/module.xml 파일 수정
  31. 31. Front에서 요청할 수 있는 모듈의 특정 액션에 대한 정보 true이면 간단 설정용으로 사용한다는 의미이며 응답은 설정을 위한 HTML http://me2.do/GOBAs7xo
  32. 32. 액션에 사용할 '퍼미션' - 퍼미션은 '권한1'과는 다른 개념 - 해당 액션의 최소한 '권한2' - 액션 실행 전 자동 체크 퍼미션 적용할 액션 이름 적용할 퍼미션 - guest - member - manager http://me2.do/GOBAs7xo
  33. 33. 액션 이름 규칙 파일명 접두어 결과 myboard.admin.controller.php procMyboardAdmin procMyboardAdminXxxx myboard.admin.model.php getMyboardAdmin getMyboardAdminXxxx myboard.admin.view.php dispMyboardAdmin dispMyboardAdminXxxx myboard.controller.php procMyboard procMyboardXxxx myboard.model.php getMyboard getMyboardXxxx myboard.view.php dispMyboard dispMyboardXxxx
  34. 34. 간단 설정 만들기 MODULE ROOT/myboard.admin.model.php 파일 생성
  35. 35. http://me2.do/5MfEonvo 여기서 할일 - 모듈 정보, 모듈 설정을 가져와서 - 템플릿에서 사용할 수 있도록 세팅하고 - 템플릿 컴파일한 결과를 반환
  36. 36. 김예솔님의 생일을 축하드립니다. 1월 10일에 태어난 신승엽님! 생일을 진심으로 축하드립니다. 생일이신 회원님을 위한 혜택... 홍경원님의 생일을 축하드립니다. 8월 14일에 태어난 신승엽님! 생일을 진심으로 축하드립니다. 생일이신 회원님을 위한 혜택... 템플릿? 출력 내용을 미리 준비해 두고 필요한 부분만 대치하여 사용 메일 머지 기능과 유사 [NAME]님의 생일을 축하드립니다. [DATE]에 태어난 [NAME]님! 생일을 진심으로 축하드립니다. 생일이신 회원님을 위한 혜택... NAME DATE 신승엽 4월 23일 홍경원 8월 14일 김예솔 1월 10일 신승엽님의 생일을 축하드립니다. 4월 23일에 태어난 신승엽님! 생일을 진심으로 축하드립니다. 생일이신 회원님을 위한 혜택... 미리 준비된 내용 Data 결과 머지
  37. 37. 템플릿? 미리 준비된 내용: 템플릿 Data: Context 변수 머지: 템플릿 컴파일 템플릿 Context 변수 결과 컴파일
  38. 38. http://me2.do/5MfEonvo 여기서 할일 - 모듈 정보, 모듈 설정을 가져와서 - 템플릿에서 사용할 수 있도록 세팅하고 - 템플릿 컴파일한 결과를 반환 모듈 번호 상세 설정 URL
  39. 39. http://me2.do/5MfEonvo
  40. 40. http://me2.do/5MfEonvo 모듈 번호 상세 설정 URL 여기서 할일 - 모듈 정보, 모듈 설정을 가져와서 - 템플릿에서 사용할 수 있도록 세팅하고 - 템플릿 컴파일한 결과를 반환 모듈의 정보를 반환 모듈의 설정을 반환
  41. 41. http://me2.do/5MfEonvo 여기서 할일 - 모듈 정보, 모듈 설정을 가져와서 - 템플릿에서 사용할 수 있도록 세팅하고 - 템플릿 컴파일한 결과를 반환 템플릿 변수를 세팅하는 메소드 변수 이름 값
  42. 42. http://me2.do/5MfEonvo 여기서 할일 - 모듈 정보, 모듈 설정을 가져와서 - 템플릿에서 사용할 수 있도록 세팅하고 - 템플릿 컴파일한 결과를 반환 템플릿을 다루기 위한 클래스 특정 템플릿을 컴파일한 결과를 반환
  43. 43. 간단 설정 만들기 MODULE ROOT/tpl/simple_setup.html 파일 생성
  44. 44. http://me2.do/FOxkPBoJ
  45. 45. http://me2.do/FOxkPBoJ 설정 저장할 모듈의 번호 실행할 액션
  46. 46. http://me2.do/FOxkPBoJ {$varname}: 변수를 출력하는 템플릿 문법 $lang: 언어 변수
  47. 47. 간단 설정 만들기 MODULE ROOT/lang/lang.xml 파일 생성
  48. 48. http://me2.do/FYvjt1Tl
  49. 49. http://me2.do/FYvjt1Tl 언어 변수 언어를 지정
  50. 50. 간단 설정 만들기 MODULE ROOT/myboard.admin.controller.php 파일 생성
  51. 51. http://me2.do/GZta9W7q 여기서 할일 - 정상적인 요청인지 확인한 후 - 설정을 저장
  52. 52. http://me2.do/GZta9W7q
  53. 53. http://me2.do/GZta9W7q 여기서 할일 - 정상적인 요청인지 확인한 후 - 설정을 저장 요청 파라미터를 받는 메소드
  54. 54. http://me2.do/GZta9W7q 여기서 할일 - 정상적인 요청인지 확인한 후 - 설정을 저장 if (module_srl에 해당하는 모듈이 myboard가 아니면) { 잘못된 요청 }
  55. 55. http://me2.do/GZta9W7q 여기서 할일 - 정상적인 요청인지 확인한 후 - 설정을 저장 개별 모듈에 대한 설정을 저장하는 메소드
  56. 56. 간단 설정 만들기
  57. 57. XE Control Path Context 초기화 실행 모듈 결정 모듈 실행 결과 출력 요청 응답
  58. 58. XE Control Path 요청 index.php?act=procMyboardAdminUpdateSimpleSetup
  59. 59. XE Control Path 요청 Context 초기화
  60. 60. XE Control Path 요청 Context 초기화 실행 모듈 결정 procMyboardAdminUpdateSimpleSetup XE: 내가 실행할 모듈은... Type은 Controller Module은 Myboard Admin 계열이군
  61. 61. 액션 이름 규칙 파일명 접두어 결과 myboard.admin.controller.php procMyboardAdmin procMyboardAdminXxxx myboard.admin.model.php getMyboardAdmin getMyboardAdminXxxx myboard.admin.view.php dispMyboardAdmin dispMyboardAdminXxxx myboard.controller.php procMyboard procMyboardXxxx myboard.model.php getMyboard getMyboardXxxx myboard.view.php dispMyboard dispMyboardXxxx
  62. 62. 클래스 이름 규칙 파일명 클래스명 상위 클래스 myboard.class.php myboard ModuleObject myboard.admin.controller.php myboardAdminController myboard myboard.admin.model.php myboardAdminModel myboard.admin.view.php myboardAdminView myboard.controller.php myboardController myboard.model.php myboardModel myboard.view.php myboardView
  63. 63. XE Control Path 요청 Context 초기화 실행 모듈 결정 XE: 내가 실행할 모듈은... myboard.admin.controller.php를 include하면 되고 필요한 클래스는 myboardAdminController구나!
  64. 64. XE Control Path 요청 Context 초기화 실행 모듈 결정 myboardAdminController의 procMyboardAdminUpdateSimpleSetup 메서드 실행 모듈 실행
  65. 65. XE Control Path 요청 Context 초기화 실행 모듈 결정 모듈 실행 결과 출력 응답
  66. 66. 글 쓰기 화면 만들기 MODULE ROOT/conf/module.xml 파일 수정
  67. 67. 해당 액션이 반드시 mid를 가지고 실행되어야 할 경우 false로 세팅 이 속성을 사용하지 않으면 보안 문제가 생길 수 있음 http://me2.do/FecSNlje
  68. 68. 글 쓰기 화면 만들기 MODULE ROOT/myboard.view.php 파일 생성
  69. 69. http://me2.do/GdsHTOaw
  70. 70. 여기서 할일 - 모듈 설정을 가져와서 - 템플릿에서 사용할 수 있도록 세팅하고 - 템플릿 파일을 세팅 액션 실행 전 먼저 실행되는 메소드 http://me2.do/GdsHTOaw
  71. 71. http://me2.do/GdsHTOaw
  72. 72. 여기서 할일 - 모듈 설정을 가져와서 - 템플릿에서 사용할 수 있도록 세팅하고 - 템플릿 파일을 세팅 http://me2.do/GdsHTOaw
  73. 73. 여기서 할일 - 모듈 설정을 가져와서 - 템플릿에서 사용할 수 있도록 세팅하고 - 템플릿 파일을 세팅 PC 스킨 경로로 템플릿 경로 설정 액션명에서 접두어만 제외하고 템플릿 파일명으로 사용 http://me2.do/GdsHTOaw
  74. 74. 권한만을 체크하고 따로 하는 것은 없음 권한(grant)는 코드에서 직접 체크! http://me2.do/GdsHTOaw
  75. 75. 글 쓰기 화면 만들기 MODULE ROOT/skins/default/skin.xml 파일 생성 skins 폴더 아래 스킨 위치 기본 스킨 폴더명은 무조건 default
  76. 76. 글 쓰기 화면 만들기 MODULE ROOT/skins/default/_head.html 파일 생성 http://me2.do/5ZfB1VaH
  77. 77. 글 쓰기 화면 만들기 MODULE ROOT/skins/default/Write.html 파일 생성
  78. 78. http://me2.do/xKdaLajQ 현재 위치에 다른 템플릿 삽입 XE 템플릿에서만 사용되는 가상 태그 cond 속성 조건에 맞을 경우에만 태그가 표시 됨
  79. 79. 글 쓰기 화면 만들기
  80. 80. 글 쓰기 처리 만들기 MODULE ROOT/conf/module.xml 파일 수정
  81. 81. http://me2.do/IGToqmv4
  82. 82. 글 쓰기 처리 만들기 MODULE ROOT/myboard.controller.php 파일 생성
  83. 83. 여기서 할일 - 권한 체크하고 - 데이터를 준비한 후 - document 모듈에 등록하고 - 글보기 화면으로 이동 http://me2.do/xLoLzp02
  84. 84. http://me2.do/xLoLzp02
  85. 85. 여기서 할일 - 권한 체크하고 - 데이터를 준비한 후 - document 모듈에 등록하고 - 글보기 화면으로 이동 http://me2.do/xLoLzp02
  86. 86. 여기서 할일 - 권한 체크하고 - 데이터를 준비한 후 - document 모듈에 등록하고 - 글보기 화면으로 이동 http://me2.do/xLoLzp02
  87. 87. 여기서 할일 - 권한 체크하고 - 데이터를 준비한 후 - document 모듈에 등록하고 - 글보기 화면으로 이동 http://me2.do/xLoLzp02
  88. 88. 여기서 할일 - 권한 체크하고 - 데이터를 준비한 후 - document 모듈에 등록하고 - 글보기 화면으로 이동 http://me2.do/xLoLzp02
  89. 89. 글 보기 화면 만들기 MODULE ROOT/conf/module.xml 파일 수정
  90. 90. true로 세팅하면 act 값이 없어도 해당 모듈 접속 시 해당 액션이 실행 됨 http://me2.do/5xbzWMQU
  91. 91. 글 보기 화면 만들기 MODULE ROOT/myboard.view.php 파일 수정
  92. 92. http://me2.do/G97uVvrl
  93. 93. http://me2.do/xO6tyuuN 여기서 할일 - 권한 체크하고 - document 모듈에서 글을 가져오고 - 조회수를 증가시키고 - 템플릿을 지정한다
  94. 94. http://me2.do/xO6tyuuN
  95. 95. http://me2.do/xO6tyuuN 여기서 할일 - 권한 체크하고 - document 모듈에서 글을 가져오고 - 조회수를 증가시키고 - 템플릿을 지정한다
  96. 96. http://me2.do/xO6tyuuN 여기서 할일 - 권한 체크하고 - document 모듈에서 글을 가져오고 - 조회수를 증가시키고 - 템플릿을 지정한다
  97. 97. http://me2.do/xO6tyuuN 여기서 할일 - 권한 체크하고 - document 모듈에서 글을 가져오고 - 조회수를 증가시키고 - 템플릿을 지정한다
  98. 98. http://me2.do/xO6tyuuN 여기서 할일 - 권한 체크하고 - document 모듈에서 글을 가져오고 - 조회수를 증가시키고 - 템플릿을 지정한다
  99. 99. 글 보기 화면 만들기 MODULE ROOT/skins/default/View.html 파일 생성
  100. 100. http://me2.do/5eEkr53g
  101. 101. 글 보기 화면 만들기
  102. 102. 글 보기 화면 만들기 MODULE ROOT/myboard.view.php 파일 수정
  103. 103. http://me2.do/x4XqDrqn 여기서 할일 - 권한 체크하고 - document 모듈에서 글 목록을 가져오고 - 템플릿을 지정한다
  104. 104. http://me2.do/x4XqDrqn
  105. 105. http://me2.do/x4XqDrqn 여기서 할일 - 권한 체크하고 - document 모듈에서 글 목록을 가져오고 - 템플릿을 지정한다
  106. 106. http://me2.do/x4XqDrqn 여기서 할일 - 권한 체크하고 - document 모듈에서 글 목록을 가져오고 - 템플릿을 지정한다
  107. 107. http://me2.do/x4XqDrqn 여기서 할일 - 권한 체크하고 - document 모듈에서 글 목록을 가져오고 - 템플릿을 지정한다
  108. 108. 글 보기 화면 만들기 MODULE ROOT/skins/default/List.html 파일 생성
  109. 109. http://me2.do/x4XqDrqn
  110. 110. http://me2.do/x4XqDrqn
  111. 111. 글 보기 화면 만들기
  112. 112. 못 다한 이야기... XE 모듈 개발 강좌 참고 http://www.xpressengine.com/learn/22801598

×