SlideShare une entreprise Scribd logo
1  sur  44
2014.11.08 Session 2-2 XECon + PHPFest 2014 
XpressEngine 
레이아웃 제작 실무 노하우 
@treasurej 고진화 
CAMERON 
cameron.co.kr
1. 소스코드 속도향상 노하우 
2. 모바일/태블릿 기기 식별 노하우 
3. 인터넷 익스플로러 식별 노하우 
4. 외부 파일 로딩 노하우 
5. 네비게이션 노하우 
6. 위젯 노하우 
1 
소스코드 노하우
1. 소스코드 속도향상 노하우
layout.html 기본 소스코드 예제 1/3
layout.html 기본 소스코드 예제 2/3
layout.html 기본 소스코드 예제 3/3
[속도] html 파일 모듈화 
settings.html 
global_menu.html 
side_menu.html 
sign.html 
search.html 
… 
<include target="settings.html" />
[속도] html 모듈화 예 - settings.html
[속도] include 로 재정리한 layout.html
[속도] 인라인 스타일, 인라인 스크립트를 파일 
인라인 스타일 <style> → .css 파일 
인라인 스크립트 <script> → .js 파일 
CSS, JS 파일은 브라우저 캐싱됨.
[속도] 파일 요청수 줄이기 
CSS 파일수 줄이기 
JS 파일수 줄이기 
서버와 주고 받는 요청수를 최소화
[속도] JS 파일을 하단에서 불러오기 
<load target="js/layout.js" type="body" />
[속도] 속도 노하우 정리 
• HTML 파일 모듈화 <include> 
• 인라인 스타일, 인라인 스크립트 → CSS, JS 파일 
– CSS, JS 파일은 브라우저 캐싱이 됨. 
• CSS, JS 파일수 줄이기 
– 서버와 주고 받는 요청수를 최소화 
• JS 파일을 하단에서 로딩하기 
– <load target="js/layout.js" type="body" />
2. Mobile · Tablet 기기 식별 노하우
[기기] 모바일과 태블릿 식별 
모바일 식별코드 
{Mobile::isMobileCheckByAgent()} 
태블릿 식별코드 
{Mobile::isMobilePadCheckByAgent()}
[기기] 태블릿과 모바일 식별 사용 예 
모바일에서는 모바일 기기 사이즈로, 태블릿에서는 1024px로 보이기 
<!--@if(Mobile::isMobilePadCheckByAgent())--> 
<meta name="viewport" content="width=1024"> 
<!--@else if(Mobile::isMobileCheckByAgent())--> 
<meta name="viewport" 
content="width=device-width, initial-scale=1, maximum-scale=1"> 
<!--@endif-->
width=1024 width=device-width
[기기] 모바일 식별 사용 예 
PC와 모바일에서 bxslider 이미지 전환 효과 다르게 하기 
<!--@if(Mobile::isMobileCheckByAgent())--> 
{@ $easing = 'easeOutBack'; $speed = 300} 
<!--@else--> 
{@ $easing = 'swing'; $speed = 200} 
<!--@endif--> 
jQuery(function($){ 
$slider.bxSlider({ 
speed: {$speed}, 
easing: '{$easing}', 
}); 
}); 
cameron.co.kr 
PC와 모바일 효과 비교
3. Internet Explorer 식별 노하우
[IE] 구버전 IE 식별 
{@ $browser_type = getenv("HTTP_USER_AGENT")} 
<!--@if(preg_match("/MSIE 8.0/",$browser_type))--> 
{@ $IE='8'; $oldIE='1'} 
<!--@else if(preg_match("/MSIE 7.0/",$browser_type))--> 
{@ $IE='7'; $oldIE='1'} 
<!--@else if(preg_match("/MSIE 6.0/",$browser_type))--> 
{@ $IE='6'; $oldIE='1'} 
<!--@endif-->
[IE] IE 버전식별 사용 예 
<load cond="$oldIE" target="respond.min.js" />
[IE] IE 호환성모드 제거 
{@ Context::addMetaTag('X-UA-Compatible', 'IE=edge', true); }
[IE] IE CSS HACK 
Media Hack IE6 IE7 IE8 IE9 IE10 
@media screen0 {…} × × ○ ○ ○ 
@media screen9 {…} ○ ○ × × × 
@media 0screen {…} × × ○ × × 
@media 0screen,screen9 {…} ○ ○ ○ × × 
@media screen and (min-width:00) {…} × × ○ ○ ○
[IE] IE CSS HACK 사용 예 
CSS파일 
#cameron-logo{top:20px} 
/*--[ IE 8~11 ]--*/ 
@media screen0 { 
#cameron-logo{top:21px} 
} 
/*--[ IE 6~7 ]--*/ 
@media screen9 { 
#cameron-logo{top:22px} 
}
4. 외부 파일 로딩 노하우
[기타] http:// https:// 유동 외부링크 
<load target="//fonts.googleapis.com/css?family=Open+Sans:400,700" /> 
{@ Context::addHtmlHeader('<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Open+Sans:400,700">'); } 
{@ Context::addHtmlFooter('<script type="text/javascript" src="//maxcdn…/bootstrap.js"></script>'); }
[기타] jQuery 가져오기 
jQuery(function($){ 
$(…) 
}
5. Navigation 노하우
[메뉴] 메뉴 기본코드 
<ul id="global_menu" cond="$global_menu->list"> 
<li loop="$global_menu->list=>$key,$val" class="selected"|cond="$val['selected']"> 
<a href="{$val['href']}" target="_blank"|cond="$val['open_window']=='Y'">{$val['link']}</a> 
</li> 
</ul>
[메뉴] 메뉴 코드분석 - cond 
<ul id="global_menu" cond="$global_menu->list"> 
<li loop="$global_menu->list=>$key,$val" class="selected"|cond="$val['selected']"> 
<a href="{$val['href']}" target="_blank"|cond="$val['open_window']=='Y'">{$val['link']}</a> 
</li> 
</ul> 
– cond="조건" : 조건이 참이면 출력 
– cond="$global_menu->list" : 메뉴가 연결되어 있으면 ul 출력 
– |cond="조건" : 조건이 참이면 attribute(속성) 추가 
– target="_blank"|cond="$val['open_window']=='Y'" : 메뉴설정에서 새창으로 가기를 체크했으면 새창으로 링크 열기
[메뉴] 메뉴 코드분석 - loop 
<ul id="global_menu" cond="$global_menu->list"> 
<li loop="$global_menu->list=>$key,$val" class="selected"|cond="$val['selected']"> 
<a href="{$val['href']}" target="_blank"|cond="$val['open_window']=='Y'">{$val['link']}</a> 
</li> 
</ul> 
– loop="" : 반복 실행 
– loop="$global_menu->list=>$key,$val" : 메뉴 개수($key)만큼 반복(loop)하여 출력(li)하고 
$key에 해당하는 메뉴 정보는 $val에 저장한다.
[메뉴] 메뉴 코드분석 - $val 
<ul id="global_menu" cond="$global_menu->list"> 
<li loop="$global_menu->list=>$key,$val" class="selected"|cond="$val['selected']"> 
<a href="{$val['href']}" target="_blank"|cond="$val['open_window']=='Y'">{$val['link']}</a> 
</li> 
</ul> 
– $val['link'] : 메뉴 이미지 출력, 이미지가 없을 경우 텍스트 출력 
– $val['text'] : 메뉴 텍스트 출력 
– $val['href'] : 메뉴 링크주소 
– $val['selected'] : 현재 선택된 메뉴 
– $val['open_window']=='Y' : 메뉴 설정에서 새창으로 열기 설정을 했을 때
[메뉴] 메뉴 기본코드 - 3차 메뉴 
<ul id="global_menu" cond="$global_menu->list"> 
<li loop="$global_menu->list=>$key1,$val1" class="selected"|cond="$val1['selected']"> 
<a href="{$val1['href']}" target="_blank"|cond="$val1['open_window']=='Y'">{$val1['link']}</a> 
<ul cond="$val1['list']"> 
<li loop="$val1['list']=>$key2,$val2" class="selected"|cond="$val2['selected']"> 
<a href="{$val2['href']}" target="_blank"|cond="$val2['open_window']=='Y'">{$val2['link']}</a> 
<ul cond="$val2['list']"> 
<li loop="$val2['list']=>$key3,$val3" class="selected"|cond="$val3['selected']"> 
<a href="{$val3['href']}" target="_blank"|cond="$val3['open_window']=='Y'">{$val3['link']}</a> 
</li> 
</ul> 
</li> 
</ul> 
</li> 
</ul>
[메뉴] 메뉴의 확장 
사이드메뉴 페이지 타이틀 
빵조각(BREADCRUMB)
[메뉴] 메뉴 확장코드 
<ul id="global_menu" cond="$global_menu->list"> 
<li loop="$global_menu->list=>$key1,$val1" class="selected"|cond="$val1['selected']"> 
<a href="{$val1['href']}" target="_blank"|cond="$val1['open_window']=='Y'">{$val1['link']}</a> 
<block cond="$val1['selected']">{@ $nav1st=$val1; $page_title=$val1; }</block> 
<ul cond="$val1['list']"> 
<li loop="$val1['list']=>$key2,$val2" class="selected"|cond="$val2['selected']"> 
<a href="{$val2['href']}" target="_blank"|cond="$val2['open_window']=='Y'">{$val2['link']}</a> 
<block cond="$val2['selected']">{@ $nav2nd=$val2; $page_title=$val2; }</block> 
<ul cond="$val2['list']"> 
<li loop="$val2['list']=>$key3,$val3" class="selected"|cond="$val3['selected']"> 
<a href="{$val3['href']}" target="_blank"|cond="$val3['open_window']=='Y'">{$val3['link']}</a> 
<block cond="$val3['selected']">{@ $nav3rd=$val3; $page_title=$val3; }</block> 
</li> 
</ul> 
</li> 
</ul> 
</li> 
</ul>
[메뉴] 페이지 타이틀 
<div class="page-title"> 
<h1> 
<!--@if($mi->title)--> 
{$mi->title} 
<!--@elseif($page_title)--> 
{$page_title} 
<!--@endif--> 
</h1> 
<h2 cond="$mi->sub_title">{$mi->sub_title}</h2> 
</div>
[메뉴] 빵조각 (Breadcrumb) 
<ul class="breadcrumb"> 
<li><a href="{getFullurl()}">HOME</a></li> 
<li cond="$nav1st"><a href="{$nav1st['href']}">{$nav1st['text']}</a></li> 
<li cond="$nav2nd"><a href="{$nav2nd['href']}">{$nav2nd['text']}</a></li> 
<li cond="$nav3rd"><a href="{$nav3rd['href']}">{$nav3rd['text']}</a></li> 
</ul>
[메뉴] 사이드메뉴 
<ul id="side_menu"> 
<li loop="$global_menu->list=>$key1,$val1" cond="$val1['selected'] && $val1['list']"> 
<a href="{$val1['href']}" target="_blank"|cond="$val1['open_window']=='Y'">{$val1['text']}</a> 
<ul cond="$val1['list']"> 
<li loop="$val1['list']=>$key2,$val2" cond="$val2['list']"> 
<a href="{$val2['href']}" target="_blank"|cond="$val2['open_window']=='Y'">{$val2['text']}</a> 
<ul cond="$val2['list']"> 
<li loop="$val2['list']=>$key3,$val3" cond="$val3['list']"> 
<a href="{$val3['href']}" target="_blank"|cond="$val3['open_window']=='Y'">{$val3['text']}</a> 
</li> 
</ul> 
</li> 
</ul> 
</li> 
</ul>
6. 위젯 노하우
[위젯] 위젯 소스코드
[위젯] 레이아웃과 위젯의 JS 중복 로딩 방지 
전역변수를 사용하여 레이아웃과 위젯 등 JS, CSS 파일의 중복 로딩을 방지할 수 있습니다. 
레이아웃 
<load target="js/jquery.bxslider.min.js" type="body" /> 
{@ $__Context->global['bxslider'] = 1; } 
위젯 
<load cond="!$global['bxslider']" target="js/jquery.bxslider.min.js" type="body" /> 
{@ $__Context->global['bxslider'] = 1; }
같은 jQuery 위젯 여러 개 사용하기
[위젯] 같은 jQuery 위젯 여러 개 사용하기 
전역변수를 사용하여 위젯 ID명 변경 
<!--@if(!$global['csi'])-->{@ $__Context->global['csi'] = 1}<!--@endif--> 
{@ $__Context->global['csi']++} 
<div id="bxslider{$global['csi']}" class="slider newclearfix"> 
… 
</div> 
<script> 
jQuery('#bxslider{$global["csi"]}'). bxSlider(); 
</script>
1. 세계 웹디자인 트렌드 
2. 한국의 웹 이슈들 
3. 디자인 – 공간과 간격 
4. 디자인 - 선 
5. 디자인 - 폰트 
6. 효과 
2 
디자인 이야기

Contenu connexe

Tendances

Vuejs 시작하기
Vuejs 시작하기Vuejs 시작하기
Vuejs 시작하기성일 한
 
Xe3.0 frontend validator
Xe3.0 frontend validatorXe3.0 frontend validator
Xe3.0 frontend validator승훈 오
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기Jeado Ko
 
PHP를 이용한 간단한 방명록 만들기
PHP를 이용한 간단한 방명록 만들기PHP를 이용한 간단한 방명록 만들기
PHP를 이용한 간단한 방명록 만들기Yoonwhan Lee
 
Opinion 프로젝트 발표 자료
Opinion 프로젝트 발표 자료Opinion 프로젝트 발표 자료
Opinion 프로젝트 발표 자료joonseokkim11
 
웹성능최적화 20130405
웹성능최적화 20130405웹성능최적화 20130405
웹성능최적화 20130405주형 전
 
Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기영우 박
 
Html5&css 3장
Html5&css 3장Html5&css 3장
Html5&css 3장홍준 김
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device accessJinKyoungHeo
 
Web vulnerability seminar2
Web vulnerability seminar2Web vulnerability seminar2
Web vulnerability seminar2Sakuya Izayoi
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?Sang-ho Choi
 
Node.js + Express + MongoDB
Node.js + Express + MongoDBNode.js + Express + MongoDB
Node.js + Express + MongoDBVincent Park
 
챗봇 시작해보기
챗봇 시작해보기챗봇 시작해보기
챗봇 시작해보기성일 한
 
처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2성일 한
 

Tendances (17)

Vuejs 시작하기
Vuejs 시작하기Vuejs 시작하기
Vuejs 시작하기
 
Xe3.0 frontend validator
Xe3.0 frontend validatorXe3.0 frontend validator
Xe3.0 frontend validator
 
Vue.js 입문 02 템플릿 문법
Vue.js 입문 02 템플릿 문법Vue.js 입문 02 템플릿 문법
Vue.js 입문 02 템플릿 문법
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
Shit if
Shit ifShit if
Shit if
 
PHP를 이용한 간단한 방명록 만들기
PHP를 이용한 간단한 방명록 만들기PHP를 이용한 간단한 방명록 만들기
PHP를 이용한 간단한 방명록 만들기
 
Opinion 프로젝트 발표 자료
Opinion 프로젝트 발표 자료Opinion 프로젝트 발표 자료
Opinion 프로젝트 발표 자료
 
웹성능최적화 20130405
웹성능최적화 20130405웹성능최적화 20130405
웹성능최적화 20130405
 
Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기
 
Html5&css 3장
Html5&css 3장Html5&css 3장
Html5&css 3장
 
Vue.js 입문 04 조건부 랜더링
Vue.js 입문 04 조건부 랜더링Vue.js 입문 04 조건부 랜더링
Vue.js 입문 04 조건부 랜더링
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device access
 
Web vulnerability seminar2
Web vulnerability seminar2Web vulnerability seminar2
Web vulnerability seminar2
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
 
Node.js + Express + MongoDB
Node.js + Express + MongoDBNode.js + Express + MongoDB
Node.js + Express + MongoDB
 
챗봇 시작해보기
챗봇 시작해보기챗봇 시작해보기
챗봇 시작해보기
 
처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2
 

En vedette

Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발JongKwang Kim
 
나의 jQuery 실력 향상기
나의 jQuery 실력 향상기나의 jQuery 실력 향상기
나의 jQuery 실력 향상기정석 양
 
[별천지 세미나] 세션1 Sencha로 끝장내는 Front-End 개발과 Architect
[별천지 세미나] 세션1 Sencha로 끝장내는 Front-End 개발과 Architect[별천지 세미나] 세션1 Sencha로 끝장내는 Front-End 개발과 Architect
[별천지 세미나] 세션1 Sencha로 끝장내는 Front-End 개발과 ArchitectJongKwang Kim
 
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XpressEngine
 
진도와켄도모바일
진도와켄도모바일진도와켄도모바일
진도와켄도모바일용성 양
 
Bootstrap에 대해서 정기철
Bootstrap에 대해서 정기철Bootstrap에 대해서 정기철
Bootstrap에 대해서 정기철Kichul Jung
 
How jQuery event works
How jQuery event worksHow jQuery event works
How jQuery event worksJae Sung Park
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksSunuk Park
 
카톡, CGV, 네이버 등 히트 앱 UI/UX 쪼개기(분석)
카톡, CGV, 네이버 등 히트 앱 UI/UX 쪼개기(분석)카톡, CGV, 네이버 등 히트 앱 UI/UX 쪼개기(분석)
카톡, CGV, 네이버 등 히트 앱 UI/UX 쪼개기(분석)mosaicnet
 
제 3회 DGMIT UI&UX 컨퍼런스 : UI디자이너에게 유용한 툴
 제 3회 DGMIT UI&UX 컨퍼런스 : UI디자이너에게 유용한 툴 제 3회 DGMIT UI&UX 컨퍼런스 : UI디자이너에게 유용한 툴
제 3회 DGMIT UI&UX 컨퍼런스 : UI디자이너에게 유용한 툴dgmit2009
 
Spring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trendsSpring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trendsArawn Park
 
Introduction to jQuery Mobile
Introduction to jQuery MobileIntroduction to jQuery Mobile
Introduction to jQuery Mobileejlp12
 
모바일 웹/앱 UI & UX 설계 이론(2)
모바일 웹/앱 UI & UX 설계 이론(2)모바일 웹/앱 UI & UX 설계 이론(2)
모바일 웹/앱 UI & UX 설계 이론(2)mosaicnet
 
모바일 웹/앱 UI & UX 설계 이론(1)
모바일 웹/앱 UI & UX 설계 이론(1)모바일 웹/앱 UI & UX 설계 이론(1)
모바일 웹/앱 UI & UX 설계 이론(1)mosaicnet
 
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...Sang Seok Lim
 

En vedette (20)

Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
 
나의 jQuery 실력 향상기
나의 jQuery 실력 향상기나의 jQuery 실력 향상기
나의 jQuery 실력 향상기
 
Jquery핵심노토
Jquery핵심노토Jquery핵심노토
Jquery핵심노토
 
[별천지 세미나] 세션1 Sencha로 끝장내는 Front-End 개발과 Architect
[별천지 세미나] 세션1 Sencha로 끝장내는 Front-End 개발과 Architect[별천지 세미나] 세션1 Sencha로 끝장내는 Front-End 개발과 Architect
[별천지 세미나] 세션1 Sencha로 끝장내는 Front-End 개발과 Architect
 
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
 
Hacosa jquery 1th
Hacosa jquery 1thHacosa jquery 1th
Hacosa jquery 1th
 
진도와켄도모바일
진도와켄도모바일진도와켄도모바일
진도와켄도모바일
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
Bootstrap에 대해서 정기철
Bootstrap에 대해서 정기철Bootstrap에 대해서 정기철
Bootstrap에 대해서 정기철
 
How jQuery event works
How jQuery event worksHow jQuery event works
How jQuery event works
 
Jquerymobile ppt
Jquerymobile pptJquerymobile ppt
Jquerymobile ppt
 
jQuery 구조와 기능
jQuery 구조와 기능jQuery 구조와 기능
jQuery 구조와 기능
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworks
 
카톡, CGV, 네이버 등 히트 앱 UI/UX 쪼개기(분석)
카톡, CGV, 네이버 등 히트 앱 UI/UX 쪼개기(분석)카톡, CGV, 네이버 등 히트 앱 UI/UX 쪼개기(분석)
카톡, CGV, 네이버 등 히트 앱 UI/UX 쪼개기(분석)
 
제 3회 DGMIT UI&UX 컨퍼런스 : UI디자이너에게 유용한 툴
 제 3회 DGMIT UI&UX 컨퍼런스 : UI디자이너에게 유용한 툴 제 3회 DGMIT UI&UX 컨퍼런스 : UI디자이너에게 유용한 툴
제 3회 DGMIT UI&UX 컨퍼런스 : UI디자이너에게 유용한 툴
 
Spring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trendsSpring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trends
 
Introduction to jQuery Mobile
Introduction to jQuery MobileIntroduction to jQuery Mobile
Introduction to jQuery Mobile
 
모바일 웹/앱 UI & UX 설계 이론(2)
모바일 웹/앱 UI & UX 설계 이론(2)모바일 웹/앱 UI & UX 설계 이론(2)
모바일 웹/앱 UI & UX 설계 이론(2)
 
모바일 웹/앱 UI & UX 설계 이론(1)
모바일 웹/앱 UI & UX 설계 이론(1)모바일 웹/앱 UI & UX 설계 이론(1)
모바일 웹/앱 UI & UX 설계 이론(1)
 
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
 

Similaire à XE 레이아웃 제작 실무 노하우 1 - XECon2014 by 고진화

Apache solr소개 20120629
Apache solr소개 20120629Apache solr소개 20120629
Apache solr소개 20120629Dosang Yoon
 
Deep dive into Modern frameworks - HTML5 Forum 2018
Deep dive into Modern frameworks - HTML5 Forum 2018Deep dive into Modern frameworks - HTML5 Forum 2018
Deep dive into Modern frameworks - HTML5 Forum 2018Kenneth Ceyer
 
응답하라 반응형웹 - 3. bootstrap
응답하라 반응형웹 - 3. bootstrap응답하라 반응형웹 - 3. bootstrap
응답하라 반응형웹 - 3. bootstrapredribbon1307
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나JeongHun Byeon
 
Ionic으로 모바일앱 만들기 #2
Ionic으로 모바일앱 만들기 #2Ionic으로 모바일앱 만들기 #2
Ionic으로 모바일앱 만들기 #2성일 한
 
모바일 코딩의 종류
모바일 코딩의 종류모바일 코딩의 종류
모바일 코딩의 종류승제 이
 
Webframeworks angular js 세미나
Webframeworks angular js 세미나Webframeworks angular js 세미나
Webframeworks angular js 세미나WebFrameworks
 
HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3J B
 
더 나은 웹표준을 위한 Web Components
더 나은 웹표준을 위한 Web Components더 나은 웹표준을 위한 Web Components
더 나은 웹표준을 위한 Web Components정호 전
 
[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수NAVER D2
 
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기Kenneth Ceyer
 
웹 접근성을 고려한 UI 컴포넌트 디자인 - 캐로셀(carousel) 편
웹 접근성을 고려한 UI 컴포넌트 디자인 - 캐로셀(carousel) 편웹 접근성을 고려한 UI 컴포넌트 디자인 - 캐로셀(carousel) 편
웹 접근성을 고려한 UI 컴포넌트 디자인 - 캐로셀(carousel) 편yamoo9
 
Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션Jeado Ko
 
현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)Ukjae Jeong
 

Similaire à XE 레이아웃 제작 실무 노하우 1 - XECon2014 by 고진화 (20)

Apache solr소개 20120629
Apache solr소개 20120629Apache solr소개 20120629
Apache solr소개 20120629
 
Deep dive into Modern frameworks - HTML5 Forum 2018
Deep dive into Modern frameworks - HTML5 Forum 2018Deep dive into Modern frameworks - HTML5 Forum 2018
Deep dive into Modern frameworks - HTML5 Forum 2018
 
Hacosa j query 2th
Hacosa j query 2thHacosa j query 2th
Hacosa j query 2th
 
응답하라 반응형웹 - 3. bootstrap
응답하라 반응형웹 - 3. bootstrap응답하라 반응형웹 - 3. bootstrap
응답하라 반응형웹 - 3. bootstrap
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나
 
Ionic으로 모바일앱 만들기 #2
Ionic으로 모바일앱 만들기 #2Ionic으로 모바일앱 만들기 #2
Ionic으로 모바일앱 만들기 #2
 
모바일 코딩의 종류
모바일 코딩의 종류모바일 코딩의 종류
모바일 코딩의 종류
 
테스트
테스트테스트
테스트
 
Webframeworks angular js 세미나
Webframeworks angular js 세미나Webframeworks angular js 세미나
Webframeworks angular js 세미나
 
HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3
 
더 나은 웹표준을 위한 Web Components
더 나은 웹표준을 위한 Web Components더 나은 웹표준을 위한 Web Components
더 나은 웹표준을 위한 Web Components
 
Class10
Class10Class10
Class10
 
[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수
 
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
 
웹 접근성을 고려한 UI 컴포넌트 디자인 - 캐로셀(carousel) 편
웹 접근성을 고려한 UI 컴포넌트 디자인 - 캐로셀(carousel) 편웹 접근성을 고려한 UI 컴포넌트 디자인 - 캐로셀(carousel) 편
웹 접근성을 고려한 UI 컴포넌트 디자인 - 캐로셀(carousel) 편
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션
 
Hacosa j query 4th
Hacosa j query 4thHacosa j query 4th
Hacosa j query 4th
 
현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)
현대고등학교 PHP 강의 - 7,8차시 (설리번 프로젝트)
 
(C#, WPF강좌)WPF, XAML 데이터바인딩이란? Data Binding 개요 및 예제_WPF학원/WPF교육
(C#, WPF강좌)WPF, XAML 데이터바인딩이란? Data Binding 개요 및 예제_WPF학원/WPF교육(C#, WPF강좌)WPF, XAML 데이터바인딩이란? Data Binding 개요 및 예제_WPF학원/WPF교육
(C#, WPF강좌)WPF, XAML 데이터바인딩이란? Data Binding 개요 및 예제_WPF학원/WPF교육
 

XE 레이아웃 제작 실무 노하우 1 - XECon2014 by 고진화

  • 1. 2014.11.08 Session 2-2 XECon + PHPFest 2014 XpressEngine 레이아웃 제작 실무 노하우 @treasurej 고진화 CAMERON cameron.co.kr
  • 2. 1. 소스코드 속도향상 노하우 2. 모바일/태블릿 기기 식별 노하우 3. 인터넷 익스플로러 식별 노하우 4. 외부 파일 로딩 노하우 5. 네비게이션 노하우 6. 위젯 노하우 1 소스코드 노하우
  • 7. [속도] html 파일 모듈화 settings.html global_menu.html side_menu.html sign.html search.html … <include target="settings.html" />
  • 8. [속도] html 모듈화 예 - settings.html
  • 9. [속도] include 로 재정리한 layout.html
  • 10. [속도] 인라인 스타일, 인라인 스크립트를 파일 인라인 스타일 <style> → .css 파일 인라인 스크립트 <script> → .js 파일 CSS, JS 파일은 브라우저 캐싱됨.
  • 11. [속도] 파일 요청수 줄이기 CSS 파일수 줄이기 JS 파일수 줄이기 서버와 주고 받는 요청수를 최소화
  • 12. [속도] JS 파일을 하단에서 불러오기 <load target="js/layout.js" type="body" />
  • 13. [속도] 속도 노하우 정리 • HTML 파일 모듈화 <include> • 인라인 스타일, 인라인 스크립트 → CSS, JS 파일 – CSS, JS 파일은 브라우저 캐싱이 됨. • CSS, JS 파일수 줄이기 – 서버와 주고 받는 요청수를 최소화 • JS 파일을 하단에서 로딩하기 – <load target="js/layout.js" type="body" />
  • 14. 2. Mobile · Tablet 기기 식별 노하우
  • 15. [기기] 모바일과 태블릿 식별 모바일 식별코드 {Mobile::isMobileCheckByAgent()} 태블릿 식별코드 {Mobile::isMobilePadCheckByAgent()}
  • 16. [기기] 태블릿과 모바일 식별 사용 예 모바일에서는 모바일 기기 사이즈로, 태블릿에서는 1024px로 보이기 <!--@if(Mobile::isMobilePadCheckByAgent())--> <meta name="viewport" content="width=1024"> <!--@else if(Mobile::isMobileCheckByAgent())--> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <!--@endif-->
  • 18. [기기] 모바일 식별 사용 예 PC와 모바일에서 bxslider 이미지 전환 효과 다르게 하기 <!--@if(Mobile::isMobileCheckByAgent())--> {@ $easing = 'easeOutBack'; $speed = 300} <!--@else--> {@ $easing = 'swing'; $speed = 200} <!--@endif--> jQuery(function($){ $slider.bxSlider({ speed: {$speed}, easing: '{$easing}', }); }); cameron.co.kr PC와 모바일 효과 비교
  • 19. 3. Internet Explorer 식별 노하우
  • 20. [IE] 구버전 IE 식별 {@ $browser_type = getenv("HTTP_USER_AGENT")} <!--@if(preg_match("/MSIE 8.0/",$browser_type))--> {@ $IE='8'; $oldIE='1'} <!--@else if(preg_match("/MSIE 7.0/",$browser_type))--> {@ $IE='7'; $oldIE='1'} <!--@else if(preg_match("/MSIE 6.0/",$browser_type))--> {@ $IE='6'; $oldIE='1'} <!--@endif-->
  • 21. [IE] IE 버전식별 사용 예 <load cond="$oldIE" target="respond.min.js" />
  • 22. [IE] IE 호환성모드 제거 {@ Context::addMetaTag('X-UA-Compatible', 'IE=edge', true); }
  • 23. [IE] IE CSS HACK Media Hack IE6 IE7 IE8 IE9 IE10 @media screen0 {…} × × ○ ○ ○ @media screen9 {…} ○ ○ × × × @media 0screen {…} × × ○ × × @media 0screen,screen9 {…} ○ ○ ○ × × @media screen and (min-width:00) {…} × × ○ ○ ○
  • 24. [IE] IE CSS HACK 사용 예 CSS파일 #cameron-logo{top:20px} /*--[ IE 8~11 ]--*/ @media screen0 { #cameron-logo{top:21px} } /*--[ IE 6~7 ]--*/ @media screen9 { #cameron-logo{top:22px} }
  • 25. 4. 외부 파일 로딩 노하우
  • 26. [기타] http:// https:// 유동 외부링크 <load target="//fonts.googleapis.com/css?family=Open+Sans:400,700" /> {@ Context::addHtmlHeader('<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Open+Sans:400,700">'); } {@ Context::addHtmlFooter('<script type="text/javascript" src="//maxcdn…/bootstrap.js"></script>'); }
  • 27. [기타] jQuery 가져오기 jQuery(function($){ $(…) }
  • 29. [메뉴] 메뉴 기본코드 <ul id="global_menu" cond="$global_menu->list"> <li loop="$global_menu->list=>$key,$val" class="selected"|cond="$val['selected']"> <a href="{$val['href']}" target="_blank"|cond="$val['open_window']=='Y'">{$val['link']}</a> </li> </ul>
  • 30. [메뉴] 메뉴 코드분석 - cond <ul id="global_menu" cond="$global_menu->list"> <li loop="$global_menu->list=>$key,$val" class="selected"|cond="$val['selected']"> <a href="{$val['href']}" target="_blank"|cond="$val['open_window']=='Y'">{$val['link']}</a> </li> </ul> – cond="조건" : 조건이 참이면 출력 – cond="$global_menu->list" : 메뉴가 연결되어 있으면 ul 출력 – |cond="조건" : 조건이 참이면 attribute(속성) 추가 – target="_blank"|cond="$val['open_window']=='Y'" : 메뉴설정에서 새창으로 가기를 체크했으면 새창으로 링크 열기
  • 31. [메뉴] 메뉴 코드분석 - loop <ul id="global_menu" cond="$global_menu->list"> <li loop="$global_menu->list=>$key,$val" class="selected"|cond="$val['selected']"> <a href="{$val['href']}" target="_blank"|cond="$val['open_window']=='Y'">{$val['link']}</a> </li> </ul> – loop="" : 반복 실행 – loop="$global_menu->list=>$key,$val" : 메뉴 개수($key)만큼 반복(loop)하여 출력(li)하고 $key에 해당하는 메뉴 정보는 $val에 저장한다.
  • 32. [메뉴] 메뉴 코드분석 - $val <ul id="global_menu" cond="$global_menu->list"> <li loop="$global_menu->list=>$key,$val" class="selected"|cond="$val['selected']"> <a href="{$val['href']}" target="_blank"|cond="$val['open_window']=='Y'">{$val['link']}</a> </li> </ul> – $val['link'] : 메뉴 이미지 출력, 이미지가 없을 경우 텍스트 출력 – $val['text'] : 메뉴 텍스트 출력 – $val['href'] : 메뉴 링크주소 – $val['selected'] : 현재 선택된 메뉴 – $val['open_window']=='Y' : 메뉴 설정에서 새창으로 열기 설정을 했을 때
  • 33. [메뉴] 메뉴 기본코드 - 3차 메뉴 <ul id="global_menu" cond="$global_menu->list"> <li loop="$global_menu->list=>$key1,$val1" class="selected"|cond="$val1['selected']"> <a href="{$val1['href']}" target="_blank"|cond="$val1['open_window']=='Y'">{$val1['link']}</a> <ul cond="$val1['list']"> <li loop="$val1['list']=>$key2,$val2" class="selected"|cond="$val2['selected']"> <a href="{$val2['href']}" target="_blank"|cond="$val2['open_window']=='Y'">{$val2['link']}</a> <ul cond="$val2['list']"> <li loop="$val2['list']=>$key3,$val3" class="selected"|cond="$val3['selected']"> <a href="{$val3['href']}" target="_blank"|cond="$val3['open_window']=='Y'">{$val3['link']}</a> </li> </ul> </li> </ul> </li> </ul>
  • 34. [메뉴] 메뉴의 확장 사이드메뉴 페이지 타이틀 빵조각(BREADCRUMB)
  • 35. [메뉴] 메뉴 확장코드 <ul id="global_menu" cond="$global_menu->list"> <li loop="$global_menu->list=>$key1,$val1" class="selected"|cond="$val1['selected']"> <a href="{$val1['href']}" target="_blank"|cond="$val1['open_window']=='Y'">{$val1['link']}</a> <block cond="$val1['selected']">{@ $nav1st=$val1; $page_title=$val1; }</block> <ul cond="$val1['list']"> <li loop="$val1['list']=>$key2,$val2" class="selected"|cond="$val2['selected']"> <a href="{$val2['href']}" target="_blank"|cond="$val2['open_window']=='Y'">{$val2['link']}</a> <block cond="$val2['selected']">{@ $nav2nd=$val2; $page_title=$val2; }</block> <ul cond="$val2['list']"> <li loop="$val2['list']=>$key3,$val3" class="selected"|cond="$val3['selected']"> <a href="{$val3['href']}" target="_blank"|cond="$val3['open_window']=='Y'">{$val3['link']}</a> <block cond="$val3['selected']">{@ $nav3rd=$val3; $page_title=$val3; }</block> </li> </ul> </li> </ul> </li> </ul>
  • 36. [메뉴] 페이지 타이틀 <div class="page-title"> <h1> <!--@if($mi->title)--> {$mi->title} <!--@elseif($page_title)--> {$page_title} <!--@endif--> </h1> <h2 cond="$mi->sub_title">{$mi->sub_title}</h2> </div>
  • 37. [메뉴] 빵조각 (Breadcrumb) <ul class="breadcrumb"> <li><a href="{getFullurl()}">HOME</a></li> <li cond="$nav1st"><a href="{$nav1st['href']}">{$nav1st['text']}</a></li> <li cond="$nav2nd"><a href="{$nav2nd['href']}">{$nav2nd['text']}</a></li> <li cond="$nav3rd"><a href="{$nav3rd['href']}">{$nav3rd['text']}</a></li> </ul>
  • 38. [메뉴] 사이드메뉴 <ul id="side_menu"> <li loop="$global_menu->list=>$key1,$val1" cond="$val1['selected'] && $val1['list']"> <a href="{$val1['href']}" target="_blank"|cond="$val1['open_window']=='Y'">{$val1['text']}</a> <ul cond="$val1['list']"> <li loop="$val1['list']=>$key2,$val2" cond="$val2['list']"> <a href="{$val2['href']}" target="_blank"|cond="$val2['open_window']=='Y'">{$val2['text']}</a> <ul cond="$val2['list']"> <li loop="$val2['list']=>$key3,$val3" cond="$val3['list']"> <a href="{$val3['href']}" target="_blank"|cond="$val3['open_window']=='Y'">{$val3['text']}</a> </li> </ul> </li> </ul> </li> </ul>
  • 41. [위젯] 레이아웃과 위젯의 JS 중복 로딩 방지 전역변수를 사용하여 레이아웃과 위젯 등 JS, CSS 파일의 중복 로딩을 방지할 수 있습니다. 레이아웃 <load target="js/jquery.bxslider.min.js" type="body" /> {@ $__Context->global['bxslider'] = 1; } 위젯 <load cond="!$global['bxslider']" target="js/jquery.bxslider.min.js" type="body" /> {@ $__Context->global['bxslider'] = 1; }
  • 42. 같은 jQuery 위젯 여러 개 사용하기
  • 43. [위젯] 같은 jQuery 위젯 여러 개 사용하기 전역변수를 사용하여 위젯 ID명 변경 <!--@if(!$global['csi'])-->{@ $__Context->global['csi'] = 1}<!--@endif--> {@ $__Context->global['csi']++} <div id="bxslider{$global['csi']}" class="slider newclearfix"> … </div> <script> jQuery('#bxslider{$global["csi"]}'). bxSlider(); </script>
  • 44. 1. 세계 웹디자인 트렌드 2. 한국의 웹 이슈들 3. 디자인 – 공간과 간격 4. 디자인 - 선 5. 디자인 - 폰트 6. 효과 2 디자인 이야기