Download - 오픈세미나 플러그인만들기
![Page 1: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/1.jpg)
플러그인 만들기오승훈
@akasima XEHub
1
![Page 2: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/2.jpg)
InstallInstaller 를 이용한 설치
- http://xpressengine.io/docs/3.0/install#Linux
Git 을 이용한 설치
- http://xpressengine.io/docs/3.0/install#Git
2
![Page 3: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/3.jpg)
플러그인 둘러보기
3
![Page 4: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/4.jpg)
플러그인 규칙
디렉토리이름은 소문자, 숫자와 언더스코어(언더바)로 작성 plugin.php, composer.json 필수
4
![Page 5: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/5.jpg)
plugin.php - 필수 요소1
5
<?phpnamespace Akasima; use …; class Plugin extends AbstractPlugin{ /** * 이 메소드는 활성화(activate) 된 플러그인이 부트될 때 항상 실행됩니다. * * @return void */ public function boot() { }
![Page 6: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/6.jpg)
AbstractPlugin
6
http://api.xpressengine.io/master/Xpressengine/Plugin/AbstractPlugin.html
![Page 7: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/7.jpg)
composer.json - 필수 요소2
7
{ "name": "xpressengine-plugin/my_plugin", "description": "플러그인소개", "keywords": [ "xpressengine", "plugin" ], "license": "LGPL-2.0", "version": "1.0.0", "type": "xpressengine-plugin", "support": { "email": "[email protected]" }, "authors": [ { "name": "input your name", "email": "[email protected]", "homepage": "http://mysite.com", "role": "Developer" } ],
"extra": { "xpressengine": { "title": "my_plugin_title", "icon": "myicon.png", "component": [] } }, "repositories": [ { "type": "composer", "url": "http://packagist.xpressengine.io/" } ], "require": { }, "autoload": { "psr-4": { "Akasima\\": "src/" } }}
app/Console/Commands/stubs/composer.json.stub 복사
![Page 8: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/8.jpg)
생성된 플러그인 구조
8
composer.json
pluing.php
![Page 10: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/10.jpg)
플러그인 켜기
10
![Page 11: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/11.jpg)
플러그인 동작 확인
11
public function boot(){ $this->route(); } protected function route(){ // implement code Route::fixed($this->getId(), function () { Route::get('/', [ 'as' => 'my_plugin::index', 'uses' => function (Request $request) { echo "Hello World"; } ]); }); }
plugin.php 수정
![Page 12: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/12.jpg)
12
컴포넌트?
my_plugin
테마 스킨 매뉴얼
위젯 게시판 스킨
플러그인은 설치/실행 기능 꾸러미 관리의 목적
플러그인은 여러개의 기능 요소로 이루어짐
(컴포넌트가 있을 수 있음)
![Page 13: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/13.jpg)
13
컴포넌트
Interface XE3
Module\AbstractModule 모듈
Skin\AbstractSkin 스킨
Theme\AbstractTheme 테마
Widget\AbstractWidget 위젯
UIObject\AbstractUIObject UI Object
DynamicField\AbstractType FieldType
DynamicField\AbstractSkin FieldSkin
![Page 14: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/14.jpg)
14
ComponentInterfacehttp://api.xpressengine.io/master/Xpressengine/Plugin/ComponentInterface.html
![Page 15: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/15.jpg)
15
컴포넌트 ID
등록된 컴포넌트 리스트
![Page 16: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/16.jpg)
컴포넌트 ID란?
module/board@board
module/my_plugin@manual
컴포넌트종류/플러그인@컴포넌트이름
![Page 17: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/17.jpg)
컴포넌트 ID
module/board@board
module/my_plugin@manual
// my_plugin 에서 등록한 게시판 모듈용 redSkin module/board@board/skin/my_plugin@redSkin
// my_plugin 에서 등록한 매뉴얼 모듈용 redSkin module/my_plugin@manual@skin/my_plugin@blueSkin
컴포넌트종류/플러그인@컴포넌트이름/컴포넌트종류/플러그인@컴포넌트이름
대상아이디/컴포넌트종류/플러그인@컴포넌트이름
![Page 18: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/18.jpg)
플러그인 생성
18
![Page 19: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/19.jpg)
$ php artisan make:plugin pluginName nameSpace desc
19
Command 로 플러그인 생성
![Page 20: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/20.jpg)
20
vendor
view
생성된 디렉토리
assets
src
composer.json
pluing.php
js, css, imagePHP source
템플릿
![Page 21: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/21.jpg)
21
플러그인 직접 생성
$ mkdir plugin_name $ cd plugin_name $ touch plugin.php, composer.json $ composer install
플러그인 관리자에서 플러그인을 켜야 동작됨!
![Page 22: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/22.jpg)
22
Github clone
$ git clone https://github.com/repository.git $ cd repository $ composer install
플러그인 관리자에서 플러그인을 켜야 동작됨!
![Page 23: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/23.jpg)
예제코드https://github.com/akasima/openseminar_1212
git clone https://github.com/akasima/openseminar_1212
23
![Page 24: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/24.jpg)
포인트 적립
24
![Page 25: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/25.jpg)
데이터 베이스 테이블 생성
Migration 인터페이스를 따르는 클래스 생성
points, point_logs 테이블 추가
Migration/Points.php Migration/PointLogs.php 추가
플러그인 install 할 때 생성될 수 있도록 코드 추가
25
http://xpressengine.github.io/laravel-korean-docs/docs/5.0/schema/
![Page 26: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/26.jpg)
인터셉트 추가
문서, 댓글 등록할 때 포인트를 지급할 수 있도록 플러그인 boot() 에 인터셉트 추가
포인트 정보를 테이블에 등록하기 위해 Model 클래스 생성
26
http://xpressengine.io/plugin/xe_aoplist
http://api.xpressengine.io/master/Xpressengine/Document/DocumentHandler.html#method_add
http://api.xpressengine.io/master/Xpressengine/Comment/CommentHandler.html#method_add
http://xpressengine.github.io/laravel-korean-docs/docs/5.0/eloquent/
![Page 27: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/27.jpg)
플러그인 설정 페이지
27
![Page 28: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/28.jpg)
설정 페이지 추가
플러그인 목록에서 플러그인을 설정할 수 있는 페이지 추가
플러그인 설정 페이지 라이트 추가
컨트롤러 추가
플러그인의 getSettingsURI() 에 url 등록
28
![Page 29: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/29.jpg)
Config 로 설정 등록 및 사용
설정 페이지에서 Config 패키지를 이용해 설정 관리
인터셉트에 등록된 설정을 사용하도록 수정
29
![Page 30: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/30.jpg)
관리자 메뉴 추가
30
![Page 31: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/31.jpg)
포인트 로그 페이지 추가
관리자 > 컨텐츠 영역에 ‘포인트’ 메뉴 추가
포인트 로그 라우트 추가 및 view 파일 작성
플러그인 boot() 에서 Register 를 이용해 관리자 메뉴 정보 추가
31
![Page 32: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/32.jpg)
메뉴 만들기
32
![Page 33: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/33.jpg)
메뉴 생성
DirectLink 모듈
SimplePage 모듈
ExternalPage 모듈 - 플러그인에 외부 페이지 파일 추가하여 연결하기. 플러그인에 externalPage.php 파일을 만들고 연결하기.
33
![Page 34: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/34.jpg)
모듈 컴포넌트 만들기
34
![Page 35: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/35.jpg)
모듈 추가
Module/MyModule 클래스 생성
composer.json 에 컴포넌트 정보 추가
메뉴 아이템 추가할 때 설정 항목 추가
Config 패키지를 이용해 모듈 설정 등록
MyModule 로 메뉴 추가
35
![Page 36: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/36.jpg)
Route 등록
모듈 boot() 할 때 라우트 등록하고 UserController 에 연결되도록 설정
UserController 클래스 추가하고 View blade 파일 추가
36
![Page 37: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/37.jpg)
스킨 컴포넌트 만들기
37
![Page 38: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/38.jpg)
스킨 추가
Skin/DefaultSkin 클래스 생성
composer.json 에 컴포넌트 정보 추가
UserController 에 스킨을 사용하도록 수정하고 view 정보 수정
38
![Page 39: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/39.jpg)
Command 추가
39
![Page 40: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/40.jpg)
로그 삭제
Command/RemoveLog 클래스 추가
handler() 에 로그 삭제 코드 추가
서버에서 $ php artisan 으로 추가된 명령어 확인
40
http://xpressengine.github.io/laravel-korean-docs/docs/5.0/commands/
![Page 41: 오픈세미나 플러그인만들기](https://reader034.vdocuments.pub/reader034/viewer/2022050614/5880260b1a28ab9f0f8b46a9/html5/thumbnails/41.jpg)
Q & A
감사합니다
41