SlideShare a Scribd company logo
1 of 66
Download to read offline
XpressEngine
Module제작가이드
작성자:오봉근,김예솔
소속팀/상위부서:XE개발팀
                       
작성년월일:2011.11.26




                                                 ⓒ 2010NHNCORPORATION
1.XE동작구조
index.php
Context




ModuleHandler




   ProcModule




DisplayHandler


                                 HTMLResponse
Context




ModuleHandler




   ProcModule




DisplayHandler


                                 HTMLResponse
2.Memo모듈
Memo모듈기능

1.  메모쓰기
2.  메모리스트보기
3.  메모내용보기
기능을Action으로!

1.  메모쓰기(화면):dispMemoWrite
2.  메모쓰기(DB삽입):procMemoInsert
3.  메모리스트보기(화면):dispMemoList
4.  메모내용보기(화면):dispMemoView
3.Memo모듈구조
XE설치디렉토리/modules/memo/


      conf                             memo.class.php
      lang                             memo.controller.php
      queries                          memo.model.php
      rulesets                         memo.view.php
      schemas                          
      skins
      tpl
memo.class.php
=memo모듈의최상위class

모듈설치시,모듈업데이트시
memo.controller.php
=memoControllerClass

DB/File에데이터저장,수정,삭제
memo.model.php
=memoModelClass

DB/File에서데이터읽기
memo.view.php
=memoViewClass

템플릿과연결하여화면출력
4.기본파일생성
./conf/info.xml



moduleversion=0.2
titlexml:lang=ko메모/title
descriptionxml:lang=ko메모모듈입니다./description
version0.1/version
date2011-10-14/date
categorycontent/category

authoremail_address=developers@xpressengine.com
link=http://xpressengine.com/
namexml:lang=koNHN/name
namexml:lang=jpNHN/name
namexml:lang=enNHN/name
/author
/module
./conf/module.xml
               
               
               
     module
     grants/
     permissions/
     actions/
     menus/
     /module



http://code.google.com/p/xe-core/wiki/module_xml
memo.class.php


classmemoextendsModuleObject{

functionmoduleInstall(){}

functionmoduleUninstall(){}

functioncheckUpdate(){}

functionmoduleUpdate(){}

functionrecompileCache(){}
}
5.본격적인개발
5-1.Memo쓰기화면
/index.php?module=memoact=dispMemoWrite




                     Context          memo.view.php

                                                   dispMemoWrite()


                 ModuleHandler



                                                   memo_view.html
/index.php?module=memoact=dispMemoWrite




                     Context                        memo.view.php

                                                                dispMemoWrite()


                 ModuleHandler



                                                                memo_view.html



                                       module.xml
./conf/module.xml


module
grants/
permissions/
actions
actionname=dispMemoWritetype=viewstandalone=true/
/actions
menus/
/module
/index.php?module=memoact=dispMemoWrite




                     Context          memo.view.php

                                                   dispMemoWrite()


                 ModuleHandler



                                                   memo_write.html
memo.view.php

classMemoViewextendsmemo
{
          functioninit()
          {
          $template_path=sprintf(%sskins/%s/,$this-module_path,
          $this-module_info-skin);
          
          if(!is_dir($template_path)||!$this-module_info-skin){
          $this-module_info-skin=‘xe_default';
          $template_path=sprintf(%sskins/%s/,$this-module_path,
          $this-module_info-skin);
          }
          $this-setTemplatePath($template_path);
          }
}
memo.view.php


classMemoViewextendsmemo
{
…⋯

                                                        functiondispMemoWrite()
                                                        {
                                                        if(!Context::get('is_logged'))
                                                        returnnewObject(-1,'msg_invalid_request');
                                                        
                                                        $logged_info=Context::get('logged_info');
                                                        
                                                        $this-setTemplateFile('memo_write');
                                                        }
}
/index.php?module=memoact=dispMemoWrite




                     Context                        memo.view.php

                                                                dispMemoWrite()


                 ModuleHandler



                                         Template       memo_write.html
./skins/xe_default/memo_write.html




formruleset=insertMemoname=memo_writemethod=postaction=./
         inputtype=hiddenname=modulevalue=memo/
         inputtype=hiddenname=actvalue=procMemoInsert/
         
         textareaname=contentcols=100rows=15/textarea
         
         inputtype=submitvalue=등록
/form
c
c
/index.php?module=memoact=dispMemoWrite




                     Context                       memo.view.php

                                                               dispMemoWrite()


                 ModuleHandler



                                                               memo_write.html



                                         ruleset        insertMemo.xml
./rulesets/insertMemo.xml
      
      
      rulesetversion=1.5.0
      customrules/
      fields
      fieldname=contentrequired=true/
      /fields
      /ruleset



http://code.google.com/p/xe-core/wiki/ValidateFormInput
./skins/xe_default/memo_write.html


divcond=$XE_VALIDATOR_MESSAGE
class=message{$XE_VALIDATOR_MESSAGE_TYPE}
p{$XE_VALIDATOR_MESSAGE}/p
/div


formruleset=insertMemoname=memo_writemethod=postaction=./
                                  inputtype=hiddenname=modulevalue=memo/
                                  inputtype=hiddenname=actvalue=procMemoInsert/
                                  
                                  textareaname=contentcols=100rows=15/textarea
                                  inputtype=submitvalue=등록
/form
./skins/xe_default/memo_write.html


divcond=$XE_VALIDATOR_MESSAGE
class=message{$XE_VALIDATOR_MESSAGE_TYPE}
p{$XE_VALIDATOR_MESSAGE}/p
/div


formruleset=insertMemoname=memo_writemethod=postaction=./
                                  inputtype=hiddenname=modulevalue=memo/
                                  inputtype=hiddenname=actvalue=procMemoInsert/
                                  
                                  textareaname=contentcols=100rows=15/textarea
                                  inputtype=submitvalue=등록
/form
5-2.MemoDB저장
메모등록!!




     Context
                          memo.controller.php



                                 procMemoInsert()
ModuleHandler
                                  insertMemo.xml(xmlquery)




                                                 memo
./conf/module.xml


module
grants/
permissions/
actions
actionname=dispMemoWritetype=viewstandalone=true/
actionname=procMemoInserttype=controller
standalone=trueruleset=insertMemo/
/actions
menus/
/module
메모등록!!




     Context
                          memo.controller.php



                                 procMemoInsert()
ModuleHandler
                                  insertMemo.xml(xmlquery)




                                                 memo
insertMemo.xml(XMLQuery)


queryid=insertMemoaction=insert
tables
tablename=memo/
/tables
columns
columnname=memo_srlvar=memoSrl“
notnull=notnullfilter=number/
columnname=member_srlvar=memberSrl“
notnull=notnullfilter=number/
columnname=contentvar=content/
columnname=regdatevar=regdatedefault=curdate()/
columnname=last_updatevar=lastUpdatedefault=curdate()/
columnname=ipaddressvar=ipaddressdefault=ipaddress()/
/columns
/query
메모등록!!




     Context
                          memo.controller.php



                                 procMemoInsert()
ModuleHandler
                                  insertMemo.xml(xmlquery)




                                                 memo
memo.controller.php

ClassmemoControllerextendsmemo
{
                  functionprocMemoInsert()
                  {
                  if(!Context::get('is_logged'))returnnewObject(-1,'msg_invalid_request');
                  $logged_info=Context::get('logged_info');
                  
                  $vars=Context::getRequestVars();
                  
                  $args-memoSrl=getNextSequence();
                  $args-memberSrl=$logged_info-member_srl;
                  $args-content=htmlspecialchars($vars-content);
                  
                  $output=executeQuery('memo.insertMemo',$args);
                  if(!$output-toBool())returnnewObject(-1,'msg_error');
                  
                  if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))){
                  $returnUrl=Context::get('success_return_url')?
                  Context::get('success_return_url'):
                  getNotEncodedUrl('','module','memo','act','dispMemoList');
                  $this-setRedirectUrl($returnUrl);
                  return;
                  }
                  
                  return$output;
                  }
memo.controller.php

functionprocMemoInsert()
{
if(!Context::get('is_logged'))returnnewObject(-1,'msg_invalid_request');
$logged_info=Context::get('logged_info');

$vars=Context::getRequestVars();

$args-memoSrl=getNextSequence();
$args-memberSrl=$logged_info-member_srl;
$args-content=htmlspecialchars($vars-content);

$output=executeQuery('memo.insertMemo',$args);
if(!$output-toBool())returnnewObject(-1,'msg_error');
memo.controller.php

…⋯

if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))){
$returnUrl=Context::get('success_return_url')?
Context::get('success_return_url'):
getNotEncodedUrl('','module','memo','act','dispMemoList');
$this-setRedirectUrl($returnUrl);
return;
}

return$output;
}
5-3.Memo목록화면
/index.php?module=memoact=dispMemoList




                     Context          memo.view.php

                                                   dispMemoList()


                 ModuleHandler



                                                   memo_list.html
./conf/module.xml



module
grants/
permissions/

actions
actionname=dispMemoWritetype=viewstandalone=true/
actionname=procMemoInserttype=controller“
standalone=trueruleset=insertMemo/
actionname=dispMemoListtype=viewstandalone=true/
/actions

menus/
/module
memo.model.php
memo.view.php
                                     getMemoList()
     dispMemoList()
                                      getMemoList.xml




     memo_list.html

                                             memo
memo.model.php



classmemoModelextendsmemo
{
          
          functiongetMemoList($member_srl,$page=1)
          {
          $args-memberSrl=$member_srl;
          $args-page=$page;
          
          $output=executeQuery('memo.getMemoList',$args);
          if(!$output-toBool())returnnewObject(-1,'msg_error');
          
          return$output;
          }
./queries/getMemoList.xml

queryid=getMemoListaction=select
tables
tablename=memo/
/tables
columns
columnname=*/
/columns
conditions
conditionoperation=equalcolumn=member_srl“
var=memberSrlfilter=numbernotnull=notnull/
/conditions
navigation
indexvar=list_orderdefault=memo_srlorder=desc/
list_countvar=list_countdefault=5/
page_countvar=page_countdefault=5/
pagevar=pagedefault=1/
/navigation
/query
memo.model.php
memo.view.php
                                     getMemoList()
     dispMemoList()
                                      getMemoList.xml




     memo_list.html

                                             memo
memo.view.php

classmemoViewextendsmemo
{
…⋯
                                                                functiondispMemoList()
                                                                {
                                                                if(!Context::get('is_logged'))returnnewObject(-1,'msg_invalid_request');
                                                                $logged_info=Context::get('logged_info');
                                                                
                                                                $oMemoModel=getModel('memo');
                                                                $output=$oMemoModel-getMemoList(
                                                                  $logged_info-member_srl,Context::get('page'));
                                                                
                                                                Context::set('memo_list',$output-data);
                                                                Context::set('total_count',$output-total_count);
                                                                Context::set('total_page',$output-total_page);
                                                                Context::set('page',$output-page);
                                                                Context::set('page_navigation',$output-page_navigation);
                                                                
                                                                $this-setTemplateFile('memo_list');
                                                                }
memo.view.php

classmemoViewextendsmemo
{
…⋯
                                                         functiondispMemoList()
                                                         {
                                                         if(!Context::get('is_logged'))returnnewObject(-1,'msg_invalid_request');
                                                         $logged_info=Context::get('logged_info');
                                                         
                                                         $oMemoModel=getModel('memo');
                                                         $output=$oMemoModel-getMemoList(
                                                                                                           $logged_info-member_srl,Context::get('page'));
                                                         
                                                         Context::set('memo_list',$output-data);
                                                         Context::set('total_count',$output-total_count);
                                                         Context::set('total_page',$output-total_page);
                                                         Context::set('page',$output-page);
                                                         Context::set('page_navigation',$output-page_navigation);
                                                         
                                                         $this-setTemplateFile('memo_list');
                                                         }
memo.model.php
memo.view.php
                                     getMemoList()
     dispMemoList()
                                      getMemoList.xml




     memo_list.html

                                             memo
memo_list.html


tbody
trloop=$memo_list=$key,$value
td{$value-memo_srl}/td
td
ahref={getUrl('','module','memo',
'act','dispMemoView','memo_srl',$value-memo_srl)}
{$value-content}/a/td
td{date('Y-m-dH:i:s',strtotime($value-regdate))}/td
td{date('Y-m-dH:i:s',strtotime($value-last_update))}/td
td
ahref={getUrl('','module','memo',
'act','procMemoDelete','memo_srl',$value-memo_srl)}
Delete/a/td
/tr
/tbody
5-4.Memo보기
./conf/module.xml


module
grants/
permissions/

actions
actionname=dispMemoWritetype=viewstandalone=true/
actionname=procMemoInserttype=controller“
standalone=trueruleset=insertMemo/
actionname=dispMemoListtype=viewstandalone=true/
actionname=dispMemoViewtype=viewstandalone=true/
/actions

menus/
/module
memo.view.php



classmemoViewextendsmemo
{
…⋯
                                                         functiondispMemoView()
                                                         {
                                                         $memo_srl=Context::get('memo_srl');
                                                         
                                                         $oMemoModel=getModel('memo');
                                                         $output=$oMemoModel-getMemo($memo_srl);
                                                         
                                                         Context::set('memo',$output-data);
                                                         
                                                         $this-setTemplateFile('memo_view');
                                                         }
memo.model.php



classmemoModelextendsmemo
{
…⋯
                                                        functiongetMemo($memo_srl)
                                                        {
                                                        $args-memoSrl=$memo_srl;
                                                        
                                                        $output=executeQuery('memo.getMemo',$args);
                                                        if(!$output-toBool())returnnewObject(-1,'msg_error');
                                                        
                                                        return$output;
                                                        }
./skins/xe_default/memo_view.html



ul
limemo_srl:{$memo-memo_srl}/li
limember_srl:{$memo-member_srl}/li
licontent:{$memo-content}/li
liregdate:{$memo-regdate}/li
lilast_update:{$memo-last_update}/li
liipaddress:{$memo-ipaddress}/li
liother_column:{$memo-other_column}/li
/ul
br/
ahref={getUrl('','module','memo',
'act','dispMemoModify','memo_srl',$memo_srl)}수정/a
6.memo모듈정리
memo.class.php           ./conf/info.xml


   memo.view.php
                                  ./conf/module.xml

  memo.model.php
                              ./ruleset/insertMemo.xml

memo.controller.php
                              ./queries/insertMemo.xml


                              ./skins/xe_default/*.html
Thankyou.

More Related Content

What's hot

ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf Conference
 
Drupal Step-by-Step: How We Built Our Training Site, Part 1
Drupal Step-by-Step: How We Built Our Training Site, Part 1Drupal Step-by-Step: How We Built Our Training Site, Part 1
Drupal Step-by-Step: How We Built Our Training Site, Part 1
Acquia
 
Cleaner, Leaner, Meaner: Refactoring your jQuery
Cleaner, Leaner, Meaner: Refactoring your jQueryCleaner, Leaner, Meaner: Refactoring your jQuery
Cleaner, Leaner, Meaner: Refactoring your jQuery
Rebecca Murphey
 

What's hot (10)

Drupal Development (Part 2)
Drupal Development (Part 2)Drupal Development (Part 2)
Drupal Development (Part 2)
 
Bacbkone js
Bacbkone jsBacbkone js
Bacbkone js
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
 
Drupal 8 Routing
Drupal 8 RoutingDrupal 8 Routing
Drupal 8 Routing
 
BEAR DI
BEAR DIBEAR DI
BEAR DI
 
Routing in Drupal 8
Routing in Drupal 8Routing in Drupal 8
Routing in Drupal 8
 
Goodbye hook_menu() - Routing and Menus in Drupal 8
Goodbye hook_menu() - Routing and Menus in Drupal 8Goodbye hook_menu() - Routing and Menus in Drupal 8
Goodbye hook_menu() - Routing and Menus in Drupal 8
 
Web 11 | AJAX + JSON + PHP
Web 11 | AJAX + JSON + PHPWeb 11 | AJAX + JSON + PHP
Web 11 | AJAX + JSON + PHP
 
Drupal Step-by-Step: How We Built Our Training Site, Part 1
Drupal Step-by-Step: How We Built Our Training Site, Part 1Drupal Step-by-Step: How We Built Our Training Site, Part 1
Drupal Step-by-Step: How We Built Our Training Site, Part 1
 
Cleaner, Leaner, Meaner: Refactoring your jQuery
Cleaner, Leaner, Meaner: Refactoring your jQueryCleaner, Leaner, Meaner: Refactoring your jQuery
Cleaner, Leaner, Meaner: Refactoring your jQuery
 

Viewers also liked (6)

XE 모듈 개발 - 걸음마부터 날기까지 - 걸음마
XE 모듈 개발 - 걸음마부터 날기까지 - 걸음마XE 모듈 개발 - 걸음마부터 날기까지 - 걸음마
XE 모듈 개발 - 걸음마부터 날기까지 - 걸음마
 
XE 모듈 개발 - 걸음마부터 날기까지 - 달리기
XE 모듈 개발 - 걸음마부터 날기까지 - 달리기XE 모듈 개발 - 걸음마부터 날기까지 - 달리기
XE 모듈 개발 - 걸음마부터 날기까지 - 달리기
 
XE 모듈 개발 - 걸음마부터 날기까지 - 날기
XE 모듈 개발 - 걸음마부터 날기까지 - 날기XE 모듈 개발 - 걸음마부터 날기까지 - 날기
XE 모듈 개발 - 걸음마부터 날기까지 - 날기
 
XE 모듈 개발 - 걸음마부터 날기까지 - 걷기
XE 모듈 개발 - 걸음마부터 날기까지 - 걷기XE 모듈 개발 - 걸음마부터 날기까지 - 걷기
XE 모듈 개발 - 걸음마부터 날기까지 - 걷기
 
Xe 구조에 대한 이해
Xe 구조에 대한 이해Xe 구조에 대한 이해
Xe 구조에 대한 이해
 
GitHub 실습 교육
GitHub 실습 교육GitHub 실습 교육
GitHub 실습 교육
 

Similar to 2011 XE Camp 모듈제작가이드

How to create a magento controller in magento extension
How to create a magento controller in magento extensionHow to create a magento controller in magento extension
How to create a magento controller in magento extension
Hendy Irawan
 
Documenting from the Trenches
Documenting from the TrenchesDocumenting from the Trenches
Documenting from the Trenches
Xavier Noria
 
Requiring your own files.pptx
Requiring your own files.pptxRequiring your own files.pptx
Requiring your own files.pptx
Lovely Professional University
 
Zend Framework 2 - presentation
Zend Framework 2 - presentationZend Framework 2 - presentation
Zend Framework 2 - presentation
yamcsha
 
Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3
Fabien Potencier
 

Similar to 2011 XE Camp 모듈제작가이드 (20)

Alfredo-PUMEX
Alfredo-PUMEXAlfredo-PUMEX
Alfredo-PUMEX
 
Alfredo-PUMEX
Alfredo-PUMEXAlfredo-PUMEX
Alfredo-PUMEX
 
Alfredo-PUMEX
Alfredo-PUMEXAlfredo-PUMEX
Alfredo-PUMEX
 
How to Create A Magento Adminhtml Controller in Magento Extension
How to Create A Magento Adminhtml Controller in Magento ExtensionHow to Create A Magento Adminhtml Controller in Magento Extension
How to Create A Magento Adminhtml Controller in Magento Extension
 
Zend Framework 2 - Basic Components
Zend Framework 2  - Basic ComponentsZend Framework 2  - Basic Components
Zend Framework 2 - Basic Components
 
Drupal 7 Theming - Behind the scenes
Drupal 7 Theming - Behind the scenes Drupal 7 Theming - Behind the scenes
Drupal 7 Theming - Behind the scenes
 
Drupal 8 Hooks
Drupal 8 HooksDrupal 8 Hooks
Drupal 8 Hooks
 
Trustparency web doc spring 2.5 & hibernate
Trustparency web doc   spring 2.5 & hibernateTrustparency web doc   spring 2.5 & hibernate
Trustparency web doc spring 2.5 & hibernate
 
Clean Javascript
Clean JavascriptClean Javascript
Clean Javascript
 
How to create a magento controller in magento extension
How to create a magento controller in magento extensionHow to create a magento controller in magento extension
How to create a magento controller in magento extension
 
Symfony2 - from the trenches
Symfony2 - from the trenchesSymfony2 - from the trenches
Symfony2 - from the trenches
 
Backbone to React. What it says about awesome UI Code.
Backbone to React. What it says about awesome UI Code.Backbone to React. What it says about awesome UI Code.
Backbone to React. What it says about awesome UI Code.
 
May the core be with you - JandBeyond 2014
May the core be with you - JandBeyond 2014May the core be with you - JandBeyond 2014
May the core be with you - JandBeyond 2014
 
Zf2 phpquebec
Zf2 phpquebecZf2 phpquebec
Zf2 phpquebec
 
Documenting from the Trenches
Documenting from the TrenchesDocumenting from the Trenches
Documenting from the Trenches
 
Requiring your own files.pptx
Requiring your own files.pptxRequiring your own files.pptx
Requiring your own files.pptx
 
Zend Framework 2 - presentation
Zend Framework 2 - presentationZend Framework 2 - presentation
Zend Framework 2 - presentation
 
Symfony2 from the Trenches
Symfony2 from the TrenchesSymfony2 from the Trenches
Symfony2 from the Trenches
 
Backbone Basics with Examples
Backbone Basics with ExamplesBackbone Basics with Examples
Backbone Basics with Examples
 
Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3
 

More from Sol Kim

Xe 제주대 강의_2014_ver2
Xe 제주대 강의_2014_ver2Xe 제주대 강의_2014_ver2
Xe 제주대 강의_2014_ver2
Sol Kim
 
2014년 03월 XE세미나 XE 애드온 개발 강좌(2/2)
2014년 03월 XE세미나 XE 애드온 개발 강좌(2/2)2014년 03월 XE세미나 XE 애드온 개발 강좌(2/2)
2014년 03월 XE세미나 XE 애드온 개발 강좌(2/2)
Sol Kim
 
2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)
2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)
2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)
Sol Kim
 
Selenium and XpressEngine
Selenium and XpressEngineSelenium and XpressEngine
Selenium and XpressEngine
Sol Kim
 

More from Sol Kim (12)

XECon + PHPFest 2014 XE 프로젝트 이야기
XECon + PHPFest 2014 XE 프로젝트 이야기XECon + PHPFest 2014 XE 프로젝트 이야기
XECon + PHPFest 2014 XE 프로젝트 이야기
 
XECon + PHPFest 2014 Keynote
XECon + PHPFest 2014 KeynoteXECon + PHPFest 2014 Keynote
XECon + PHPFest 2014 Keynote
 
Vim for php
Vim for phpVim for php
Vim for php
 
Xe 제주대 강의_2014_ver2
Xe 제주대 강의_2014_ver2Xe 제주대 강의_2014_ver2
Xe 제주대 강의_2014_ver2
 
2014년 03월 XE세미나 XE 애드온 개발 강좌(2/2)
2014년 03월 XE세미나 XE 애드온 개발 강좌(2/2)2014년 03월 XE세미나 XE 애드온 개발 강좌(2/2)
2014년 03월 XE세미나 XE 애드온 개발 강좌(2/2)
 
2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)
2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)
2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)
 
2014년 02월 XE세미나 XE서버서능개선
2014년 02월 XE세미나 XE서버서능개선2014년 02월 XE세미나 XE서버서능개선
2014년 02월 XE세미나 XE서버서능개선
 
2014년 02월 XE세미나 About XE 1.7.4
2014년 02월 XE세미나 About XE 1.7.42014년 02월 XE세미나 About XE 1.7.4
2014년 02월 XE세미나 About XE 1.7.4
 
2014년 02월 XE 세미나 XE with Community
2014년 02월 XE 세미나 XE with Community2014년 02월 XE 세미나 XE with Community
2014년 02월 XE 세미나 XE with Community
 
Network path reference
Network path referenceNetwork path reference
Network path reference
 
Selenium and XpressEngine
Selenium and XpressEngineSelenium and XpressEngine
Selenium and XpressEngine
 
20110702 xeuser
20110702 xeuser20110702 xeuser
20110702 xeuser
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 

2011 XE Camp 모듈제작가이드