오픈세미나 플러그인만들기(한번더)

54
플플플플 플플플 플플플 @akasima XEHub

Upload: -

Post on 14-Apr-2017

1.097 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: 오픈세미나 플러그인만들기(한번더)

플러그인 만들기오승훈

@akasimaXEHub

Page 2: 오픈세미나 플러그인만들기(한번더)

예제코드https://github.com/akasima/openseminar_1212

git clone https://github.com/akasima/openseminar_1212

Page 3: 오픈세미나 플러그인만들기(한번더)

Get started

Page 4: 오픈세미나 플러그인만들기(한번더)

InstallInstaller 를 이용한 설치 - http://xpressengine.io/docs/3.0/install#Linux

Git 을 이용한 설치 - http://xpressengine.io/docs/3.0/install#Git

Page 5: 오픈세미나 플러그인만들기(한번더)

Debuging/.env => APP_DEBUG=true

/storage/logs/laravel.log

dd();http://xpressengine.github.io/laravel-korean-docs/docs/5.0/helpers/

Page 6: 오픈세미나 플러그인만들기(한번더)

Config/config/cms 디렉토리에 파일 추가 또는 수정설치 과정에서 입력한 설정 값들은 /config/cms/*php 에 있음/config/*php 설정 내용을 확인하고 config/cms/*php 에 동일한 형태로 작성

Page 7: 오픈세미나 플러그인만들기(한번더)

플러그인 둘러보기

Page 8: 오픈세미나 플러그인만들기(한번더)

플러그인 규칙1. 디렉토리이름은 소문자 , 숫자와 언더스코어 ( 언더바 ) 로 작성2. plugin.php, composer.json 필수

Page 9: 오픈세미나 플러그인만들기(한번더)

plugin.php - 필수 요소 1<?phpnamespace Akasima;

use …;

class Plugin extends AbstractPlugin{ /** * 이 메소드는 활성화 (activate) 된 플러그인이 부트될 때 항상 실행됩니다 . * * @return void */ public function boot() { }

Page 10: 오픈세미나 플러그인만들기(한번더)

composer.json - 필수 요소 2

{ "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 11: 오픈세미나 플러그인만들기(한번더)

composer.json - 필수 요소 2

"extra": { "xpressengine": { "title": "my_plugin_title", "icon": "myicon.png", "component": [] } }, "repositories": [ { "type": "composer", "url": "http://packagist.xpressengine.io/" } ], "require": {

}, "autoload": { "psr-4": { "Akasima\\": "src/" } }}

Page 12: 오픈세미나 플러그인만들기(한번더)

composer.json - 필수 요소 2

"require": {

}, "autoload": { "psr-4": { "Akasima\\": "src/" } }}

"extra": { "xpressengine": { "title": "my_plugin_title", "icon": "myicon.png", "component": [] } }, "repositories": [ { "type": "composer", "url": "http://packagist.xpressengine.io/" } ], "require": {

}, "autoload": { "psr-4": { "Akasima\\": "src/" } }}

Page 13: 오픈세미나 플러그인만들기(한번더)

생성된 플러그인 구조

13

composer.jsonpluing.php

Page 14: 오픈세미나 플러그인만들기(한번더)

플러그인 생성 확인

14

http://your.domain/settings/plugins

Page 15: 오픈세미나 플러그인만들기(한번더)

플러그인 켜기

15

Page 16: 오픈세미나 플러그인만들기(한번더)

플러그인 동작 확인

16

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 17: 오픈세미나 플러그인만들기(한번더)

AbstractPlugin

Core Plugin 패키지에 의해 동작하기 위해 반드시 상속해야 하는 Class

Page 18: 오픈세미나 플러그인만들기(한번더)

AbstractPluginhttp://api.xpressengine.io/master/Xpressengine/Plugin/AbstractPlugin.html

Page 19: 오픈세미나 플러그인만들기(한번더)

AbstractPluginhttp://api.xpressengine.io/master/Xpressengine/Plugin/AbstractPlugin.html

Page 20: 오픈세미나 플러그인만들기(한번더)

컴포넌트

Page 21: 오픈세미나 플러그인만들기(한번더)

21

컴포넌트 ?

my_plugin

플러그인 - 설치 / 실행 기능 - 꾸러미 관리 목적

boot()install()activate()

Page 22: 오픈세미나 플러그인만들기(한번더)

22

컴포넌트 ?

my_plugin

테마 스킨 매뉴얼위젯 게시판 스킨

플러그인은 여러개의 기능 요소로 이루어짐

( 컴포넌트가 있을 수 있음 )

Page 23: 오픈세미나 플러그인만들기(한번더)

23

컴포넌트 종류 및 추상 클래스Interface XE3

Module\AbstractModule 모듈Skin\AbstractSkin 스킨Theme\AbstractTheme 테마Widget\AbstractWidget 위젯UIObject\AbstractUIObject UI Object

DynamicField\AbstractType FieldType

DynamicField\AbstractSkin FieldSkin

Page 24: 오픈세미나 플러그인만들기(한번더)

24

ComponentInterfacehttp://api.xpressengine.io/master/Xpressengine/Plugin/ComponentInterface.html

Page 25: 오픈세미나 플러그인만들기(한번더)

25

ComponentInterfacehttp://api.xpressengine.io/master/Xpressengine/Plugin/ComponentInterface.html

Page 26: 오픈세미나 플러그인만들기(한번더)

26

컴포넌트 ID

등록된 컴포넌트 리스트dd(app('xe.register'));

Page 27: 오픈세미나 플러그인만들기(한번더)

27

컴퍼넌트 실행 순서

my_plugin

테마 스킨 매뉴얼

Page 28: 오픈세미나 플러그인만들기(한번더)

28

컴퍼넌트 실행 순서

my_plugin

테마 스킨 매뉴얼

컴포넌트 boot

Page 29: 오픈세미나 플러그인만들기(한번더)

29

컴퍼넌트 실행 순서

my_plugin

테마 스킨 매뉴얼

플러그인 boot

Page 30: 오픈세미나 플러그인만들기(한번더)

컴포넌트 ID 란 ?

module/board@board

module/my_plugin@manual

컴포넌트종류 / 플러그인 @ 컴포넌트이름

Page 31: 오픈세미나 플러그인만들기(한번더)

컴포넌트 ID

module/board@board

module/my_plugin@manual

// my_plugin 에서 등록한 게시판 모듈용 redSkinmodule/board@board/skin/my_plugin@redSkin

// my_plugin 에서 등록한 매뉴얼 모듈용 redSkinmodule/my_plugin@manual@skin/my_plugin@blueSkin

컴포넌트종류 / 플러그인 @ 컴포넌트이름 / 컴포넌트종류 / 플러그인 @ 컴포넌트이름대상아이디 / 컴포넌트종류 / 플러그인 @ 컴포넌트이름

Page 32: 오픈세미나 플러그인만들기(한번더)

플러그인 만들기

Page 33: 오픈세미나 플러그인만들기(한번더)

$ php artisan make:plugin pluginName nameSpace description

Command 로 플러그인 생성

Page 34: 오픈세미나 플러그인만들기(한번더)

34

vendorview

생성된 디렉토리

assets

src

composer.jsonpluing.php

js, css, imagePHP source

템플릿

Page 35: 오픈세미나 플러그인만들기(한번더)

플러그인 직접 생성$ mkdir plugin_name$ cd plugin_name $ touch plugin.php, composer.json$ composer install

플러그인 관리자에서 플러그인을 켜야 동작됨 !

Page 36: 오픈세미나 플러그인만들기(한번더)

Github clone$ git clone https://github.com/repository.git$ cd repository$ composer install

플러그인 관리자에서 플러그인을 켜야 동작됨 !

Page 37: 오픈세미나 플러그인만들기(한번더)

포인트 적립 플러그인게시물 , 댓글 등록할 때 포인트 지급 기능

Page 38: 오픈세미나 플러그인만들기(한번더)

데이터 베이스 테이블 생성points, point_logs 테이블 추가플러그인 install 메소드에 코드 추가

http://xpressengine.github.io/laravel-korean-docs/docs/5.0/schema/

Page 39: 오픈세미나 플러그인만들기(한번더)

인터셉트 추가게시물 , 댓글 등록할 때 포인트를 지급할 수 있도록 플러그인 boot() 에 인터셉트 추가포인트 정보를 테이블에 등록하기 위해 Model 클래스 생성

http://xpressengine.io/plugin/xe_aoplisthttp://api.xpressengine.io/master/Xpressengine/Document/DocumentHandler.html#method_add

http://xpressengine.github.io/laravel-korean-docs/docs/5.0/eloquent/

Page 40: 오픈세미나 플러그인만들기(한번더)

플러그인 설정 페이지

Page 41: 오픈세미나 플러그인만들기(한번더)

설정 페이지 추가플러그인 목록에서 플러그인을 설정할 수 있는 페이지 추가플러그인 설정 페이지 Route 추가컨트롤러 추가플러그인의 getSettingsURI() 에 url 등록

Page 42: 오픈세미나 플러그인만들기(한번더)

Config 패키지 사용설정 페이지에서 Config 패키지를 이용해 설정 관리추가한 인터셉트에서 설정이 적용될 수 있도록 수정

Page 43: 오픈세미나 플러그인만들기(한번더)

관리자 메뉴 추가

Page 44: 오픈세미나 플러그인만들기(한번더)

포인트 로그 페이지 추가관리자 > 컨텐츠 영역에 ‘포인트’ 메뉴 추가포인트 로그 Route 추가 및 view 파일 작성플러그인 boot() 에서 Register 를 이용해 관리자 메뉴 정보 추가

Page 45: 오픈세미나 플러그인만들기(한번더)

메뉴 만들기

Page 46: 오픈세미나 플러그인만들기(한번더)

메뉴 생성DirectLink 모듈SimplePage 모듈ExternalPage 모듈 - 플러그인에 외부 페이지 파일 추가하여 연결하기 . 플러그인에 externalPage.php 파일을 만들고 연결하기 .

Page 47: 오픈세미나 플러그인만들기(한번더)

모듈 컴포넌트 만들기

Page 48: 오픈세미나 플러그인만들기(한번더)

모듈 추가Module/MyModule 클래스 생성composer.json 에 컴포넌트 정보 추가메뉴 아이템 추가할 때 설정 항목 추가Config 패키지를 이용해 모듈 설정 등록MyModule 로 메뉴 추가

Page 49: 오픈세미나 플러그인만들기(한번더)

Route 등록모듈 boot() 할 때 Route 등록하고 UserController 에 연결되도록 설정UserController 클래스 추가하고 View blade 파일 추가

http://xpressengine.github.io/laravel-korean-docs/docs/5.0/routing/

Page 50: 오픈세미나 플러그인만들기(한번더)

스킨 컴포넌트 만들기

Page 51: 오픈세미나 플러그인만들기(한번더)

스킨 추가Skin/DefaultSkin 클래스 생성composer.json 에 컴포넌트 정보 추가UserController 에 스킨을 사용하도록 수정하고 view 정보 수정MyModule 에서 스킨을 선택하도록 수정

Page 52: 오픈세미나 플러그인만들기(한번더)

Command 추가

Page 53: 오픈세미나 플러그인만들기(한번더)

포인 로그 삭제Command/RemoveLog 클래스 추가handler() 에 로그 삭제 코드 추가서버에서 $ php artisan 으로 추가된 명령어 확인

http://xpressengine.github.io/laravel-korean-docs/docs/5.0/commands/

Page 54: 오픈세미나 플러그인만들기(한번더)

Q & A

감사합니다