반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리

Kurogo Tutorial 06 - 소스 코드 여행 -

2012. 5. 8. 23:41 | Posted by 솔웅


반응형

Source code tour

이 섹션에서는 Kurogo 소스 코드 프로젝트에 있는 다양한 파일들과 디렉토리들을 여행해 볼겁니다. 프로젝트의 레이아웃을 안다는 것은 코딩 이전에 무엇인가를 결정할 때 그리고 여러분의 파일을 어디에 위치 시켜야 할지를 결정할 때 도움을 줄 겁니다.

Basic Layout

Kurogo 폴더의 루트는 몇개의 폴더가 있습니다.

add-ons
이 디렉토리에는 추가적인 scripts나 code들이 들어갑니다. 주로 다른 어플리케이션과  interact 하는데 사용될 수 있습니다.
app
이 대렉토리에는 Kurogo가 제공하는 각 모듈의 code 와 templates 이 들어 있습니다. 또한 각 모듈에 의해 사용되는 shared template도 있습니다. (including headers and footers). lib 폴더에 이런 파일을 add 하거나 altering 하지 말고 Site folder  안에 새로운 파일이나 altered 파일을 넣으세요.
config
이 디렉토리에는 전체 프로젝트에 대한 메인 configuration file들이 들어 있습니다. 가장 주목할 파일은 kurogo.ini file 입니다.
doc (only included in source distribution)
이 디렉토리에는 이 guide를 포함해서 다양한 documentation 파일들이 있습니다. 이 가이드는 Sphinx documentation system 을 사용해서 만들어 졌습니다.
lib
이 디렉토리는 Kurogo에서 제공하는 라이브러리가 있습니다. data retrieval, parsing, authentication, database access 라이브러리와 configuration 등이 있습니다. 일반적으로 Kurogo가 제공하는 라이브러리만 이 디렉토리에 있어야 합니다. 여러분의 라이브러리는 SITE_FOLDER/lib 폴더에 넣어야 나중에 프로젝트를 업데이터 할 때 혼동이 없습니다.
site
이 디렉토리에는 각 사이트의 entry 가 있습니다. 좀 더 자세항 사항은 다음을 보세요. Site folder
www
이 디렉토리에는 사이트의 DocumentRoot가 있습니다. 여기에는 모든 incoming request들을 핸들링하는 메인 스크립트인 index.php 가 있습니다. 여기에 또한 css와 javascript가 있게 됩니다. .htaccess 와 web.config 파일은 Apache와 IIS를 위한 URL redirection이 있습니다.


Case Sensitivity

여러분 사이트를 개발 하실 때 대소문자를 구분한다는 사실을 항상 염두에 두세요. 많은 개발자들이 대소문자 구분을 하지 않는 시스템에서 작업을 하십니다. 대부분의 서버에서는 대소문자 구분을 합니다. 그러니까 폴더위치나 url등을 정할 때 이 부분을 잘 염두에 두셔야 합니다.

Provided vs. Site files

레이아웃 섹션에서 말했듯이 app,lib,www 같은 Kurogo에서 제공하는 파일들과 여러분이 사이트 작업을 위해 사용하시는 파일 등이 있습니다. 쿠로고는 오픈소스이기 때문에 여러분의 필요에 따라 소스를 고치셔도 됩니다. 만약 여러분이 프로젝트 디렉토리의 파일을 수정하거나 새 파일을 추가했다면 다음 버전에 업데이트 할 때 문제가 될 수 있습니다. 업그레이드 할 때 이런 부분을 도와주는 것으로 add additional functionality이 있습니다.

그리고 여러분이 좀 더 낫게 수정하면 여러분의 수정사항을  submit your changes 에 알려주시면 감사하겠습니다.

Libraries

이 프레임워크는 모듈라이즈와 특정 프로세스를 추상화하고 코드 재사용을 용이하게 하기 위해 많은 라이브러리를 사용하도록 하고 있습니다. 모든 라이브러리는 PHP 클래스로 돼 있습니다.

Packages

특정 클래스 파일들이나 클래스들을 하나의 패키지로 관리할 수 있습니다. 패키지로 관리함으로서 필요한 파일들을 하나로 묶어서 관리를 편하게 해 줍니다.(use: Kurogo::includePackage(‘PackageName’) in your module code) 현재 아래 패키지들이 사용 가능합니다.

  • Authentication (included automatically when authentication is enabled)
  • Authorization - for connecting to various OAuth based web services
  • Cache - classes dealing with in-memory and disk caching
  • Calendar - includes classes to deal with calendar data
  • Config - classes to deal with configuration files
  • DataController - legacy classes dealing with the pre 1.4 DataController class
  • DataModel - subclasses of the DataModel class
  • DataParser - subclasses of the DataParser class
  • DataResponse - subclasses of the DataResponse class
  • DataRetriever - subclasses of the DataRetriever class
  • DateTime - classes for handling date and time
  • db - used when you wish to interact with a database
  • Emergency - used by the emergency module
  • Maps - used by the map module
  • People - used by the people module
  • RSS - classes for handling RSS data
  • Session - Subclasses of the session object, used for session management
  • Video - used by the video module

Core / Support Files

  • compat - defines several functions that normalize behavior throughout PHP versions
  • exceptions - defines exception subclasses and sets up exception handling behavior
  • Kurogo - a singleton class used to consolidate common operations like initialization, site configuration, and administration. See more
  • minify - interface between the framework and the included open source minify library
  • DeviceClassifier - An interface between the framework and the Device Detection Service
  • deviceData.db - A SQLite database that contains browser entries used by the internal device detection system.
  • Validator - A utility class to validate certain types of data

Native API Functions

이 함수는 특정 모듈함수에 접근권한을 주는 API interface를 다루는 함수 입니다. 이 인터페이스들은 native application에 의해 주로 이용됩니다. 그리고 AJAX 를 위한 모듈에 의해서도 사용되어 집니다.

  • APIModule - The base class for API modules, inherits from Module
  • APIResponse - A class that encapsulates the common response message for API requests

더 자세한 사항은 The APIModule Object 를 보세요.

External Data Retrieval

더 자세한 사항은 Data Retrieval  를 보세요.

Database Access

Kurogo는 데이터베이스 연결관련 configuration을 위해 database connection abstraction library를 제공합니다.

  • db - A database access library based on PDO. It includes abstractions for MySQL, SQLite, PostgreSQL and MS SQL. This support is dependent on support in your PHP installation. The setting up and maintaining of databases and their associated extensions is beyond the scope of this document.
  • SiteDB - Uses the main database configuration for access.

더 자세한 사항은 Database Access  를 보세요.

User Access and Authentication

  • AuthenticationAuthority - 이것은 authenticating users 에 대한 루트 클래스 입니다. It is designed to be subclassed so each authority can provide the means of actually authenticating users, but still maintain a consistent interface for the login module. See Authentication for more information about the included authorities.
  • AccessControlList - A class used by the authorization system to restrict access to modules based on user or group membership. This is especially useful for the Administration Module.
  • User - The base class for identifying logged in users
  • UserGroup - The base class for identifying groups

더 자세한 사항은 Authentication 를 보세요.

Session Management

  • Session -  유저의 상태를 저장해서 관리합니다. 현재는 두 종류의 세션이 있습니다.

    • SessionFiles - Save and restore session data using the built in file handler
    • SessionDB - Save and restore session data using a database

Configuration

  • Config - An abstract class that stores key/value data and has logic for handling replacement values (i.e referencing other keys’ values within a value)
  • ConfigFile - Provides an interface for reading and writing an ini configuration file
  • ConfigGroup - Provides an interface for coalescing multiple configuration files to provide a single key/value store
  • ModuleConfigFile - A specific config file class to load module config files.
  • SiteConfig - A specific ConfigGroup that loads the critical site and project-wide configuration files.

configuring Kurogo에 대한 더 자세한 사항은 Configuration 를 보세요. 

Modules and Templates

  • Module - The core class that all modules inherit from. Provides a variety of necessary services and behavior to module subclasses. See Writing Modules.
  • WebModule - The core class that all web modules inherit from.
  • HTMLPager - A support class used to paginate content
  • smarty - The Smarty Template System
  • TemplateEngine - An subclass of the smarty object used by the framework

더 자세한 사항은 Writing Modules 를 보세요.

Other

  • ga - 자바스크립트를 지원하지 않는 브라우저를 위한 google analytics implementation 

Modules and Templates

app 폴더 안에 모듈과 탬플릿 파일들이 있습니다.

Common

common folder 안에는 모든 모듈에서 사용할 수 있는 template과 css 파일들이 있습니다. 이 각각의 탬플릿들은 다른 디바이스별로 몇가지 variant를 가지고 있습니다. (탬플릿 시스템과 파일 네이밍에 대한 좀 더 자세한 정보는 Templates을 보세요.) 이 탬플릿들은 아래와 같은 것들이있습니다.

  • footer.tpl content placed at the bottom of most pages
  • header.tpl content placed at the top of most pages
  • help.tpl template used for displaying help pages
  • formList.tpl template used for showing a list that enables input
    • formListItem.tpl template used for an individual form item in a list
  • navlist.tpl template used for showing items as a list
    • listitem.tpl template used for an individual item in a list
  • pager.tpl - template for providing pagination for long-form content
  • results.tpl - template for displaying results in a list
  • search.tpl - template for presenting a search box
  • share.tpl - template for presenting a sharing content via social networking
  • springboard - template for displaying content as a grid of icons
  • tabs.tpl - template for displaying content in tabs

Modules

modules 폴더에는 Kurogo와 같이 bundle 된 모든 모듈들이 들어 있습니다. 각 모듈들은 PHP 코드와 탬플릿 파일들이 있습니다. 또한 CSS와 Javascript 파일들도 있습니다. 모듈 디자인에 대한 좀 더 자세한 사항은 Writing Modules 를 보세요.

여기서 naming convention은 아주 중요합니다. (특히 대소문자를 구분하는 시스템에서는요.)

  • The folder must be lower case and be the same as the url of the module (/about, /home, /links). You can create modules at other urls by copying the module
  • The folder must contain a PHP file named ModulenameWebModule.php. If the module is located in the site folder and it extends an existing module then it should be called SiteModulenameWebModule.php.
  • The first (and ONLY) letter of the module must be capitalized and followed by WebModule.php.
    • AboutWebModule.php (NOT aboutwebmodule.php or AboutWebmodule.php)
    • FullwebWebModule.php (NOT FullWebModule.php or FullwebWebmodule.php)
    • SiteNewsWebModule.php (NOT siteNewsWebModule.php or Sitenewswebmodule.php)
  • Template files go into the templates folder. There should be a .tpl for each page of the module. At minimum there should be an index.tpl which represents the default page (unless the module alters that behavior). Each page should be in all lower case.
  • If you are overriding a project module you only need to include the pages that you are overriding.
  • You may choose to place additional css style sheets in a folder named css
  • You may choose to place additional javascript scripts in a folder named javascript
  • You can provide default configuration files in a folder named config

site folder에 다른 모듈을 생성함으로서 included된 모듈의 behavior를 override 하는 것이 가능합니다. 좀 더 자세한 사항은 Extending an existing module를 보세요. 

Site folder

site folder에는 각 site를 위한 폴더 모임들이 있습니다. 이렇게 함으로서 각 사이트들은 각각 다른 configuration, design, custom code 등을 가질 수 있습니다. 처음 제공되는 디폴트 파일에는 한개의 active site만 있습니다. root Kurogo directory의 config/kurogo.ini file에서 active site를 설정하실 수 있습니다. 여기서 폴더의 이름은 kurogo.ini 파일에 있는 ACTIVE_SITE와 일치해야 합니다.

Multiple site folder는 사이트를 각각 다른 버전으로 개발하고 싶은 경우에 유용하게 사용될 수 있습니다. 각각의 사이트에는 아래와 같은 디렉토리들이 있습니다.

  • app - Site specific templates and modules. Inside this folder you will find 2 folders
    • common - Site specific common templates and css
    • modules - Site specific modules. To promote ease when updating the framework to new versions, it is important that you keep site specific modules in this folder rather than in the root app/modules folder. If you wish to include your work in Kurogo, please see GitHub Repository. Also see Extending an existing module.
  • cache - Contains server generated files that are cached for performance. This folder is created as needed, but must be writable by the web server process.
  • config - Contains the site specific configuration files in .ini format. Many of these files can be managed using the Administration Module
    • site.ini - The general configuration file that affects all site behavior such as timezone, log file locations, database configuration, and more.
    • acls.ini - Site wide access control lists
    • authentication.ini - The configuration for user Authentication.
    • strings.ini - a configuration file containing strings used by the site
    • Each module’s configuration is contained a folder named by its module id. There are several standard files for each module:
      • module.ini - Settings for disabling, access control, search and module variables and strings
      • feeds.ini - Specifies external data connections
      • pages.ini - Titles for each page
      • Modules may have other config files as needed
  • data - a folder that contains data files meant to be used by the server. Unlike cache folders, these files cannot be safely deleted. Examples would include data that is not able to be generated from a web service, SQLite databases, or flat authentication files. It is also possible that certain deployments would have nothing in the data folder.
  • lib - an optional folder that contains code libraries used by site modules. The Kurogo autoloader will discover and find classes and packages in this folder.
  • logs - Log files
  • themes - Contains the themes available for this site. Each theme folder contains a common and modules folder that contains the CSS and image assets for the site. See Templates for more information.

WWW Folder

www폴더에 있는 파일과 폴더들은 사이트의 기본 위치인 DocumentRoot 에 있는 겁니다. 바로 대문 앞에 있는 것이죠. 이 구조를 잘 유지하시려면 모든 request,들은 index.php file을 통해서 전달되도록 하셔야 합니다. (예외인 경우는 min이나 minify url 처럼 이미 존재하는 path 나 폴더들일 경우입니다.)

index.php

이 index script 는 프레임워크의 메인 controller입니다. 모든 request들은 .htaccess를 override하고 아파치의 경우 mod_rewrite 를 그리고 IIS의 경우 URL Rewrite extension 사용해서 처리 됩니다. .htaccess file 은 모든 request들을 rewrite 합니다. request된 path를 포함한 $_GET variable _path 등을 rewrite 한느 것이죠. 예를 들어 http://server/module/pagehttp://server/index.php?_page=module/page가 됩니다. $_GET이나 $_POST 변수의 다른 추가적인 데이터도 가능합니다. 좀 더 자세한 사항은 Handling Requests 을 보세요


반응형

'WEB_APP > Kurogo' 카테고리의 다른 글

Kurogo Tutorial 11 - News Module -  (0) 2012.05.17
Kurogo Tutorial 10 - Module 만들기 -  (0) 2012.05.13
Kurogo Tutorial 09 - MAP Module -  (0) 2012.05.12
Kurogo Tutorial 08 - Configuration-  (1) 2012.05.11
Kurogo Tutorial 07 - Device Detection -  (0) 2012.05.09
Kurogo Tutorial 05 - 모듈 생성하기 -  (0) 2012.05.08
Kurogo Tutorial 04  (0) 2012.05.08
Kurogo Tutorial 03  (1) 2012.05.08
Kurogo Tutorial 02  (0) 2012.05.08
Kurogo Tutorial 01  (0) 2012.05.04

Kurogo Tutorial 05 - 모듈 생성하기 -

2012. 5. 8. 23:32 | Posted by 솔웅


반응형

Making Your First Module - Hello World


이 섹션에서는 모듈 생성 과정에 대한 overview를 보여 드릴 겁니다. 그냥 따라하시기만 하시면 됩니다. 좀 더 자세한 테크닉을 원하시면 Creating a new module  를 보세요.이 섹션에서 설명된 대부분의 내용은 좀 더 자세한 설명들이 Documentation 안에있습니다.

 

Case Sensitivity

일단 대소문자 구분을 한다는 것을 명심해 두세요. 많은 개발자들이 대소문자 구분을 하지 않는 파일 시스템을 사용하고 있습니다. 대부분의 서버들 특히 리눅스 베이스 서버들은 대소문자를 구분하는 파일 시스템을 사용하고 있습니다. 그렇기 때문에 폴더 위치나 url을 사용할 때 이 규칙을 따르는 것은 매우 중요합니다. 웬만하면 폴더나 url들은 소문자를 사용하시면 좋습니다.


Creating the module folder structure

Noteinstallation steps 을 따라서 설치하고 site folder도 생성한 상태여야 합니다. SITE_DIR 은  site/YOURSITE 로 돼 있어야 합니다. YOURSITE는 여러분이 생성한 사이트의 이름입니다.

Kurogo 프레임워크는 다양한 위치에 모듈 데이터를 생성할 수 있습니다. (see Source code tour) 일단 여러분의 모듈들을 여러분 사이트의 app/modules folder에 생성하세요. Kurogo 모듈로서 이미 사용되고 있는 폴더를 /app/modules 에 넣지 마세요.


 

  • SITE_DIR/app/moduleshello 라는 폴더를 만드세요. 
  • SITE_DIR/app/modules/hello folder 안에templates 라는 폴더를 만드세요.

Creating the module class file

hello directory 안에 HelloWebModule.php 라는 파일을 만드세요. 그리고 아래 내용을 그 파일안에 작성하세요.

<?php

class HelloWebModule extends WebModule
{
  protected $id='hello';
  protected function initializeForPage() {
    $this->assign('message', 'Hello World!');
  }
}

Creating the template file

hello/templates directory 안에 index.tpl 라는 파일을 만들고 아래 내용을 넣으세요. 

{include file="findInclude:common/templates/header.tpl"}

<h1 class="focal">{$message}</h1>

{include file="findInclude:common/templates/footer.tpl"}

이제 폴더 구조가 아래처럼 됐을 겁니다.



Creating the nav bar image

56 x 56 PNG file 을 만들고 title-hello.png 라고 이름을 넣어 주세요. 그리고 이 이미지 파일을 아래 폴더에 넣어주세요.  SITE_FOLDER/themes/default/common/images/compliant.

Creating the config folder

이 모듈을 로드하기 위해 configuration 폴더가 필요합니다.

  • SITE_FOLDER/config 안에 hello 폴더를 생성하세요
  • SITE_FOLDER/config/hello/module.ini 파일을 생성하시고 아래와 같이 내용을 넣으세요. 
[module]
title="Hello"
disabled = 0
protected = 0
search = 0
secure = 0

Viewing the module

여기까지만 하면 여러분의 웹 브라우저에서 여러분의 새로운 모듈을 보실 수 있을 겁니다. 여러분 사이트가 8888이라고 가정하고 여러분의 컴퓨터의 브라우저에 http://localhost:8888/hello 를 넣으세요. 성공했다면 아래와 같은 화면을 보실 수 있을 겁니다.

 




축하드립니다. 방금 아주 간단한 모듈을 직접 만드셨습니다.



반응형

'WEB_APP > Kurogo' 카테고리의 다른 글

Kurogo Tutorial 10 - Module 만들기 -  (0) 2012.05.13
Kurogo Tutorial 09 - MAP Module -  (0) 2012.05.12
Kurogo Tutorial 08 - Configuration-  (1) 2012.05.11
Kurogo Tutorial 07 - Device Detection -  (0) 2012.05.09
Kurogo Tutorial 06 - 소스 코드 여행 -  (0) 2012.05.08
Kurogo Tutorial 04  (0) 2012.05.08
Kurogo Tutorial 03  (1) 2012.05.08
Kurogo Tutorial 02  (0) 2012.05.08
Kurogo Tutorial 01  (0) 2012.05.04
Kurogo Platform Demo 체험기  (0) 2012.04.25

Kurogo Tutorial 04

2012. 5. 8. 23:03 | Posted by 솔웅


반응형

Upgrading from Previous Versions

Kurogo는 간단하고 쉽게 업그레이드를 할 수 있도록 디자인 됐습니다. 이전에 소개했던 대로 사이트를 생성하고 extension 했다면 여러분의 customizations를 overwrite 할 필요 없이 간단하게 Kurogo new version을 업데이트 할 수 있습니다.

If you have forked the git repository

Git은 새로운 변경사항을 쉽게 implement 하도록 해 줍니다. 여러분은 단지 master repository로부터 간단하게 변경된 사항들을 pull down 해서 여러분의 repository에 merge 하시면 됩니다.

  1. In your repository, set up an upstream remote:
    • git remote add upstream git://github.com/modolabs/Kurogo-Mobile-Web.git
    • git fetch upstream
  2. When new changes come down you can run:
    • git fetch upstream
    • git merge upstream/master Merge changes into your master branch

여러분의site folder에서만 작업이 이루어 졌다면 이 버전 업데이트 작업은 깨끗하게 완료 될 겁니다.

If you used a downloaded version

git을 사용하지 않는다면 새 버전을 다운로드 받으시고 여러분의 site folder에 복사해 넣으시면 됩니다. 주의하셔야 할 점은 여러분의 kurogo.ini file은 사용하시던 것을 그대로 유지 하셔야 합니다.




MultiSite

MultiSite는 Kurogo의 한 기능입니다. 이것을 사용하면 한 서버에서 여러개의 Kurogo site folder를 host 할 수 있도록 해 줍니다. 각각의 사이트는 나름대로의 configuration files, cache folders, themes, custom modules들을 가질 수 있습니다. 그리고 그 사이트들은 하나의 같은 Kurogo code를 공유를 합니다. 이 기능은 여러분의 사이트를 다국어로 서비스 할 때 유용하게 이용하실 수 있을 겁니다.

MultiSite는 각각의 site 를 subpath로서 관리하면서 구현됩니다. 예를 들어 2개의 en, es 사이트가 있다면 다음과 같은 방법으로 이 사이트들에 access 될 수 있습니다. (home 모듈에 access 하는 방법을 예로 들었습니다.)

Setting up MultiSite

multi site를 사용하시려면 Kurogo가 반드시 여러분 도메인의 root로서 설정 돼 있어야 합니다. 만약에 Kurogo를 subpath로 설정하면 MultiSite가 제대로 작동을 안 할 겁니다.

MultiSite를 셋업하려면 먼저 config/kurogo.ini file에서 이 부분을 세팅해야 합니다.

  • Open up config/kurogo.ini. If it does not exists, copy kurogo-default.ini to kurogo.ini
  • Set MULTI_SITE = 1 in the [kurogo] section
  • Set DEFAULT_SITE to the default site you want people to see when they visit your site. For example DEFAULT_SITE=”en”
  • For added security and performance, you can set a series of ACTIVE_SITES[] values for each site that you wish to expose.
ACTIVE_SITES[] = "en"
ACTIVE_SITES[] = "es"

이렇게 설정하면 이 서버에서는 en 과 es 로 이루어 지는 MultiSite를 사용하실 수 있게 됩니다. 




반응형

Kurogo Tutorial 03

2012. 5. 8. 10:45 | Posted by 솔웅


반응형

Setup and Installation

Kurogo는 PHP 웹 어플리케이션 입니다. 당연히 웹 서버에 인스톨 되어야 겠죠. 현재까지는 2 종류의 웹 서버를 지원하고 있습니다.

System Requirements

  • Web Servers supported
  • PHP 5.2 or higher with the following extensions:
    • zlib
    • xml
    • dom
    • json
    • PDO (Used for Database Access)
    • mbstring
    • Zip (needed if parsing KMZ files)
  • Some PHP modules are optional depending on whether you need their backend functionality
    • LDAP



Installation

이 튜토리얼은 여러분이 기본적인 시스템을 가지고 있고 웹 서버 관리에 대한 기본적인 지식을 가지고 있는 것을 상정하고 작성했습니다. 좀 더 자세한 사항은 여러분의 시스템과 웹 서버 설명서를 참조하세요.

  1. Kurogo 파일을 웹 서버가 접근 가능한 위치에 넣으세요.
  2. 웹서버의 루트 폴더를 Kurogo의 www 폴더로 잡아 주세요.(Using Kurogo in a subfolder of a domain 을 보세요.)
  3. (Apache Only) .htaccess files 이 사용 가능해야 합니다.  적어도 FileInfo 에는  AllowOverride 가 세팅되 있어야 합니다. (MAMP on OS X 에는 이 기능이 디폴트로 설정 돼 있습니다. )
  4. (IIS Only) 전체 프로젝트 폴더에 Application Pool 이 read access 가 가능해야 합니다.  In IIS 7.5 this is the IIS AppPoolDefaultAppPool user
  5. site directory에, make a copy of the Universitas folder 를 그 안의 파일들까지 모두 복사해서 하나 더 만드세요. 여러분의 site name으로 사용할 이름을 그 폴더이름으로 사용하세요. 이 폴더를 SITE_FOLDER 로 사용할 겁니다.

    • Critical: 웹서버 유저는 SITE_FOLDER 내의 모든 파일에 쓰기 가능으로 설정 돼 있어야 합니다. (Apache typically: apache or www, IUSR on IIS) 
  6. kurogo-default.ini file 을 kurogo.ini 라는 이름으로 하나 더 복사해 넣으세요.
  7. 그 kurogo.ini file 의 ACTIVE_SITE option 을 SITE_FOLDER 하고 같게 설정하세요.
  8. 웹서버를 restart 하고  http://yourhost/admin 를 브라우저에서 불러보세요.

Using Kurogo in a subfolder of a domain

특정 환경에서는 Kurogo 가 도메인의 root 가 아니라 URL로 install 되어야 필요가 있습니다. 이렇게 하기 위한 몇가지 방법이 있습니다.

  • Unix environment 에서는 symbolic links 사용하기
  • IIS 에서는 Virtual Folders 사용하기 (requires manual configuration change)
  • 윈도우에서는 Junctions 사용하기

Note. Apache aliases는 aliases 와 mod_rewrite 를 실행하는데에는 지원하지 않습니다.

Using Virtual Folders in IIS

윈도우즈 환경에서 IIS 웹서버를 사용하신다면 virtual folder에 Kurogo를 인스톨 해야 합니다. 이렇게 하면 document root가 아닌 경로에서도 Kurogo를 사용할 수 있습니다. 이렇게 사용하기 위해서는 아래와 같이 하시면 됩니다.

  • kurogo www folder를 가리키는 vitual folder를 생성하세요.
  • Kurogo project folder에서 config/kurogo.ini 를 오픈하세요. 이 파일이 없으면 kurogo-default.ini를 복사해서 사용하시면 됩니다.  
  • [kurogo] section 에서, URL_BASE option의 주석을 풀고 해당 경로를 세팅해 주세요. 예를 들어 여러분의 사이트가  /kurogo 에 인스톨 돼 있으면 다음과 같이 세팅하시면 됩니다.  URL_BASE=”/kurogo”

Using Junctions in Windows

The following procedure should work in either IIS or Apache, however it is recommended to use Virtual Folders in IIS

아래 절차들은 IIS나 아파치 모두에서 작동합니다. 어쨌든 IIS에서는 Virtual Folder를 사용할 것을 권장합니다.

  •  서버에 junction program이 인스톨 되어 있어야 합니다. 이것은 마이크로 소프트 (Microsoft) 에서 배포합니다. 그리고 이 글을 쓰는 시점에는 다음 링크에서 받으실 수 있습니다. http://technet.microsoft.com/en-us/sysinternals/bb896768
  • junction program이 PATH내에 위치해 있어야 합니다. 대부분의 경우 junction.exe 파일을 시스템 루트 폴더 (C:Windows)에 카피해서 넣으면 됩니다.
  • same NTFS filesystem. 의 2개 path들 사이에 junction들을 생성하실 수 있습니다. FAT32로 포맷된 volumes 나 on volumes 사이에 junctions를 생성하실 수 없습니다.

아래와 같이 명령창에서 실행해 보세요. (조건에 따라 약간씩 다를 수 있습니다.)

junction C:\path\to\documentroot\mobile C:\path\to\kurogo\www


여기서는 subfolder 이름이 mobile이라는 것으로 가정했습니다. 폴더 이름은 임으로 정하시면 됩니다.

Common Installation Problems

설치하는 과정에서 문제가 발생할 수 있습니다. 대부분의 문제는 셋업이 제대로 안 됐거나 다른 요건들이 충족되지 않아서 입니다.

Apache: Viewing any of the modules results in a 404 Not Found error

설치 후 브라우저에서 열어봤는데 404 에러가 나올 수 있습니다. 이것은 Kurogo가 작동하고 있지만 .htaccess 파일을 Kurogo가 제대로 읽을 수 없기 때문입니다.


  • mod_rewrite 가 enabled 되 있어야 합니다. 이것은 httpd.conf 파일에서 enableing mod_rewrite 의 주석을 제거해 주시면 됩니다. 이 httpd.conf 가 어디에 있는지 아시려면 설치한 서버에서 제공하는 instructin을 참조하세요.
  • AllowOverride를 FileInfo나 All로 세팅해야 합니다. AllowOverride는 아파치가 .htaccess 파일을 읽을 수 있도록 해 주는 옵션입니다. 어떤 경우에슨 디폴트로 이것이 disabled 된 경우가 있습니다. (NONE으로 세팅되 있음) httpd.conf나 virtual host configuration에서 이 부분을 확실하게 enabled 시켜야 합니다.

Kurogo Error messages are shown as an Apache error message

에러메세지가 아파치 Apache 메세지 처럼 보인다면 아마도 서버가 /error urls 로 trapping 되고 있기 때문일 겁니다.

  • httpd.conf 나 virtual host configuration 파일에서 Alias /error 라인을 제거해 주세요.


반응형

Kurogo Tutorial 02

2012. 5. 8. 09:27 | Posted by 솔웅


반응형

Version History

Kurogo는 꾸준히 개선되고 있습니다. 아래 내용은 각 버전별 개선된 사항들 입니다. release notes에 대해 좀 더 자세히 알고 싶으시면 CHANGELOG file을 보세요.

Version 1.4 (March 5, 2012)

  • NEW Module: Athletics
  • NEW Module: Photos
  • Updated Map module
  • SOAP과 Database retrieval 메소드, 복잡한 데이터 모델을 좀 더 지원하기 위해 Data Retrieval classe 들 개선
  • 클라이언트 사이드 caching headers 개선
  • Added support for in-memory caching of Kurogo data structures using Memcache or APC.
  • Added developer support for encrypting data on disk (requires mcrypt)
  • Added option to locally save user credentials so they can be passed on to external services
  • Added support for Google Analytics domain names
  • Added support to show emergency notifications on the home screen
  • Federated search queries will now happen asynchronously on compliant devices.
  • Added support to create copied modules from the admin console.
  • Added support to remove modules from the admin console

Version 1.3 (October 13, 2011)

Version 1.2 (July 19, 2011)

Version 1.1 (June 1, 2011)

Version 1.0 (April 8, 2011)

Initial Release


============ o ============= o ================ o ==============

Getting Support

Kurogo 는 오픈소스 프로젝트이기 때문에 특별히 공식적인 지원은 없습니다. 단지 여러 비공식적으로 질문을 받고 지원을 하는 통로들이 있을 뿐입니다. 개별적인 지원을 받으시려면 유료 지원 서비스를 이용하실 수 있습니다.

Kurogo Google Group

사용자들에 대한 지원을 위해 Kurogo-dev라는 구글 그룹을 만들었습니다. 이 그룹에는 사용자들이 질문과 답변을 공유할 수 있는 메일링 리스트가 포함되 있습니다. 이 리스트는 Modo Labs의 구성원들 (Kurogo code 유지 보수 인력)에 의해 모니터 되고 있습니다. 답변은 공식적인 것이 아니고 구성원들간 자유롭게 주고 받는 메세지 입니다.

http://groups.google.com/group/kurogo-dev
kurogo-dev@googlegroups.com


Github Issues


버그를 발견하시면 아래 github 페이지에 그 내용을 올려 주세요.

https://github.com/modolabs/Kurogo-Mobile-Web/issues

Training and Support Through Modo Labs

좀 더 공식적인 지원을 원하시는 사용자는 sales@modolabs.com 로 연락 주시기 바랍니다. 공식적인 지원 내용은 아래와 같습니다.

•Initial Developer Training. Learning the framework, module development, theme design.
•Ramp up/implementation support
•Production / incident support


Professional Services

Modo Labs는 새로운 모듈이나 integration , user experiencce 그리고 인터페이스 디자인 등 좀 더  기술적인 요구가 있는 분들을 도와드리기 위해 professional development와 design service를 제공해 드릴 수 있습니다. 좀 더 자세한 정보는 sales@modolabs.com 로 연락 주세요.

============ o ============= o ================ o ==============


GitHub Repository




Kurogo 는 오픈 소스 프로젝트 입니다. 공짜로 다운로드 받을 수 있고 마음대로 소스를 수정해서 사용하실 수도 있ㅅ브니다. 이 프로젝트는 Git distributed version control system을 사용하고 있습니다. Git repository는 GitHub에서 운영하는 겁니다. 아래 웹사이트에서 만나실 수 있습니다.
https://github.com/modolabs/Kurogo-Mobile-Web

Git이나 GitHub가 생소하신 분은 GitHub Help Site를 먼저 보시기 바랍니다.

Forking and Managing your repository


간단하게 코드만 다운로드 받고 싶으신 분은 git clone git://github.com/modolabs/Kurogo-Mobile-Web.git 을 사용한 repository를 clone 하시면 됩니다.

만약 당신의 프로젝트를 maintaining 하시는데 관심이 있으시다면 그 프로젝트를 fork 하셔야 합지다.

1. GitHub 에 로그인 하기
2. https://github.com/modolabs/Kurogo-Mobile-Web 로 가기
3. 우상단에 있는 fork icon을 클릭하기
4. (Optional) 여러분 프로젝트 이름을 바꿀 수도 있습니다.
5. 여러분 로컬 컴퓨터에 프로젝트 clone 하기
6. Set up an upstream remote:
   ◦ git remote add upstream git://github.com/modolabs/Kurogo-Mobile-Web.git
   ◦ git fetch upstream
7. 변경할 내용이 있으면 아래와 같이 하면 됩니다.
   ◦ git fetch upstream Get updates to the upstream remote
   ◦ git merge upstream/master Merge changes into your master branch


다른 방법으로 여러분의 repository를 관리하는 방법이 있을겁니다. 하지만 이 방법으로 하면 좀 더 유연성있게 운영할 수 있습니다.

Creating your site

여러분의 프로젝트에는 master project에 있지 않은 elements (i.e. 이미지들이나 CSS assets 같은 것들)이 포함되어 있기 때문에 별도의 upstream branch를 유지할 것을 권장합니다. 이 branch는 clean 하게 남아 있을것이고 여러분의 master branch에 merge 될수도 있을겁니다. upstream branch를 생성함으로서 변경 이전 버전으로 돌아가는 기능도 아주 깨끗하게 처리할 수 있게 됩니다.

여러분의 master branch로부터 site/universitas 폴더들의 copy를 만드세요. 이것은 teplate site입니다. 여러분 site에 걸맞는 이름으로 바꿔주세요. 대부분 이 폴더에서 여러분의 코딩이 이루어질 겁니다. 새로운 모듈을 생성한다던가 기존의 모듈을 extend 하고 여러분의 site를 theming 하는것에 대해 좀 더 알아 보시면 많은 도움이 될 겁니다. 여러분만의 특별한 필요가 있지 않는 한 여러분 site의 디렉토리 밖에 있는 file을 수정해야 될 필요는 없을 겁니다.

Submitting your changes

만약에 여러분이 프로젝트 내의 버그를 수정했거나 새로운 기능을 추가해서 공유하고 싶으시면 여러분은 pull request 를 submit 할 수 있습니다. 그러면 Kurogo의 project 유지보수 인력에게 그 사실이 통보 될 것이고 여러분은 이 Kurogo 프로젝트의 주요한 일 부분이 되시는 겁니다.

pull request를 initiate 할 때 아래 매너들을 따라 주실것을 간곡히 부탁드립니다.

1. 여러분의 upstream branch 가 최신버전이어야 합니다.
2. fixes/features 를 implements 해서 새로운 branchm를 만들어 주세요.
3. 여러분의 웹 브라우저로 여러분의 GitHub project를 browse 해 주세요.
4. 여러븐의 fix/feature가 있는 branch로 switch 해 주세요.
5. pull request icon을 클릭해 주세요.
6. 작업에 대한 description을 넣어 주세요. 자세한 사항이 기재돼 있지 않으면 여러분의 request 가 accept 되지 않을 수도 있습니다.
7. 만약 별도의 branch에서 pull request를 initiate 하지 않았다면 여러분은 change commits 버튼을 클릭하시고 여러분의 fix가 포함돼 있는 commit들을 선택하셔야 합니다.
8.변경이 다 완료 됐으면 send pull request 를 click 해 주세요.


request 할 때 꼭 프로젝트에서 변경된 부분과 관련된 사항만 request에 포함시켜 주세요. main branch 쪽 부분도 되도록 포함시키지 말아주시구요. 너무 광범위한 자료를 포함시키면 가끔 의도치 않게 코딩 스타일이나 여러분의 patch 등에 대한 부분만 논의 되다 끝날 수 있습니다.


반응형


반응형

지난주 화요일 첫출근을 해서 개발환경 세팅하고 새로운 것들 세팅하면서 보냈어요.

주말엔 볼일이 있어서 뉴저지 까지 다녀오고..


주말도 장거리 여행으로 시간을 모두 보냈네요.


지난 주 Corona SDK 관련 정리할 것들 하나도 정리 못했는데... 벌써 일요일 밤이 됐어요.


지금 정리할 시간은 없고 공부할 것들 메모를 해 놔야 겠어요. 나중에 시간이 되면 차근차근 공부 하려구요.




1. 새로운 Lua File System 이 곧 선보일 거라는 소식입니다.

2. Coder/s Deilemma 라는 제목이 관심이 가서 한번 정리해 두고 싶네요.

3. 모바일 Ads 회사인 inneractive 사가 프로모션을 하네요. 당선작은 선물이 Kindle Fire 라니까 한번 응모해 보고 싶군요.

4. Game Engine Dating Guide 라는 글도 관심이 갑니다. 도움이 많이 될 것 같아요.

5. 수요일의 FAQ 가 이번주에도 나왔습니다. 반드시 정리하고 넘어가야 할 사항이죠!

6. Blast Monkeys 라는 앱을 개발한 개발자가 성공스토리를 강의하는 내용입니다.



7. Property Call Back Tutorial 입니다.




정리해 두고 싶은게 너무 많군요.

새로 join 한 프로젝트에서 사용하는 테크닉도 Research 해야 하고.


하나하나 해 나가다 보면 다 되겠죠 뭐...


다시 신나는 월요일이 시작 됩니다......

반응형

Kurogo Tutorial 01

2012. 5. 4. 20:05 | Posted by 솔웅


반응형

MODO Labs 의 Kurogo 시스템을 사용하게 됐습니다.

이전에는 몰랐던 새로운 기술을 배워야 되서 아주 신나네요.


제 스타일대로 Kurogo 웹사이트의 튜토리얼을 한번 쭉 정리해야겠습니다.


Kurogo Documentation

Kurogo Developer’s Guide¶

Kurogo 프레임워크는 PHP base 웹 어플리케이션 입니다. 광범위한 모바일 디바이스에 대한 서비스와 정보를 효율적으로 전달하는 것을 체계적으로 도와주는 툴입니다. MIT 프레임워크를 기반으로 했고 오픈 소스 프로젝트 입니다. 이 프로젝트는 확장성 있고 customizable 한 다양한 데이터 소스의 현재의 모바일 버전에 modular way 로 기능을 제공합니다.

Kurogo Framework에는 아래와 같은 것들이 포함 돼 있습니다.

• 디바이스의 특장을 감지하고 해당 디바이스에 알맞게 콘텐트를 display 하는 매커니즘
• 다양한 외부 소스로부터 데이터를 검색하고 parsing하고 display 하는것을 객체 지향적으로 처리함
• consistent한 유저 인터페이스를 손쉽게 개발할 수 있도록 테마별로 정리하고 재사용할 수 있도록 utilize해 효과적으로 탬플릿화 할 수 있도록 도와 줌
• 디렉토리와 뉴스 그리고 이벤트 정보들을 모으기 위해 prebuilt 와 customizable 모듈을 같이 사용할 수 있도록 지원
• 컨텐트와 관리자모드로의 접근시 이를 인증하고 검증하는 시스템

아래 내용들은 프로젝트 소스코드와 그 기능들에 대해 알 수 있는 가이드 입니다.


Overview

Kurogo는 다양한 종류의 모바일 기기에 delivering high quality와 data driven customizable content를 지원하기 위해 만들어진 PHP 프레임워크입니다. Kurogo는 다양한 source로부터 content를 받도록 해 주고 이를 피쳐폰이나 초기 스마트폰에서부터 최신 디바이스와 태블릿같은 광범위한 모바일 기기에 이를 표현할 수 있도록 해 줍니다. 모바일 웹 컴포넌트는 PHP를 사용한 웹 베이스의 어플리케이션 처럼 있습니다. 이 어플리케이션은 웹 서버에 호스트 되고 유저는 모바일 기기에 있는 웹 브라우저를 통해 이곳에 접근합니다.

이것은 liberal 오픈소스 MIT 라이센스를 사용해서 만들어 졌습니다. 이 의미는 여러분은 공짜로 이 제품을 다운로드 받아 설치하고 카피하고 수정하고 등등 여러분의 입맛에 맞게 고쳐서 사용할 수 있다는 겁니다.

Modules¶

Kurogo를 구성하는 부분 부분들은 Module입니다. 각각의 페이지 request는 url을 parse 하는 모듈에 의해서 처리됩니다. 그리고 나서 그 페이지를 표시합니다. 모듈은 코드의 조각들로 구성돼 있습니다. 그것들은 데이터를 처리하는 외부의 서비스들과 연결돼 있죠. 그리고 그 결과를 HTML과 CSS 표준을 사용해서 디바이스에 display 합니다. Kurogo는 여러 다양한 외부의 source들로부터 데이터를 받을 수 있도록 디자인 돼 있습니다. 그리고 그 데이터를 parse 하고 처리하고 화면에 출력하기 알맞는 포맷으로 준비합니다.

일반적인 유저 request는 데이터 소스를 query 하는 것을 포함하고 있습니다. 그리고 Data Parser를 사용해서 그 결과 data를 parsing 합니다. 그리고나서 그 모듈은 그 데이터를 template 엔진으로 pass 합니다. 이 탬플릿 엔진은 HTML,CSS, javascript 등을 사용해서 device에 결과를 출력하게 되는 것이죠.



Device Detection¶

 Kurogo의 중요한 기능중 하나는 현재 사용하고 있는 기기가 어떤 것인지 감지하는 것 입니다. 요즘의 모바일 기기들은 각각 다른 capability를 가지고 있고 그 성능도 각기 다릅니다. 그래서 현재 사용하는 디바이스를 구분해 내는 것은 유저에게 결과물을 보기 좋게 해당 디바이스로 제공하기 위해 아주 중요한 기능입니다.

Kurogo 는 pagetype과 platform에 따라 디바이스를 분류합니다. pagetype은 디바이스의 기본 capability를 기반으로해서 분류하는 겁니다. 이것은 CSS 지원이나 javascript, 이미지 처리 등의 기능에 따라 단계별로 구분 됩니다. platform은 그 디바이스가 사용하는 시스템이나 브라우저를 기반으로 분류하는 겁니다. 이러한 분류들은 해당 디바이스에 최선의 퍼포먼스를 보여주기 위해 여러 방법으로 사용됩니다. Kurogo는 이 각각의 기기별로 일반적인 유저 인터페이스 element들과 모듈들을 포함해 최선의 결과를 보여주기 위한 template과 CSS 파일의 시리즈들이 있습니다.

Customization¶

초기에 Kurogo는 customize 되기 위해 built 됐습니다. 여러분은 모듈로 어떻게 데이터를 get 하는지, 어떻게 이것을 parse 하는지 그리고 유저에게 이것이 어떻게 보여지는지에 대해 완벽하게 콘트롤 할 수 있습니다. 소프트웨어의 modular 세계는 여러분에게 어떤 단계에서든지 그 소스를 customize 할 수 있도록 개방하고 있습니다.

Data Customization¶

각각의 모듈은 여러분에게 여러분의 어플리케이션으로 data를 가져오기 위한 데이터 소스와 프로세스 방법을 선택할 수 있는 기회를 드립니다. 데이터를 retrieve하고 parsing하는 구체적인 방법을 추상화 했기 때문에 여러분의 어플리케이션은 아주 다양한 데이터 소스로 respond 할 수 있습니다. 대부분의 모듈들은 DataModel의 subclass를 사용하게 됩니다. 각 모듈은 Data Retriever라는 객체를 사용합니다. 이것은 data를 retrieve하고 Dataparser 객체를 사용해서 그 데이터를 parsing 하게 됩니다. DataParser 객체는 결과 data를 받고 그 데이터에 맞는 PHP structure를 생성합니다. configuration을 이용해서 여러분은 DataRetriever와 DataParser를 customize 할 수 있습니다. 또한 여러분 site의 데이터를 여러분만의 방식으로 다루기 위해 여러분만의 Data Retriever와 Data Parser도 만들 수있습니다.


Code Customization¶

각각의 모듈은 PHP 객체입니다. 이것은 WebModule 클래스로부터 상속됩니다. 개발자들은 직접 모듈을 생성해서 사용할 수도 있고 기존에 존재하는 것을 subclass 해서 사용할 수 있습니다. extending 할 때 여러분은 단지 특정 메소드를 override 하기만 하면 됩니다. 이렇게 함으로서 여러분은 로직이나 코딩보다도 기능이나 begavior에 집중할 수 있어서 여러분의 모듈을 독창적으로 만들 수 있도록 도와줍니다.

Output Customization¶

그 데이터가 출력되도록 준비가 됐으면 여러분은 그것을 여러분이 원하는대로 표시할 수 있는 몇가지 방법이 있습니다. 각각의 페이지는 HTML 문서로 구성돼 있습니다. 이러한 탬플릿들은 customize 될 수 있고 필요한대로 override 할 수 있습니다. 그리고 common user interface element와 각 디바이스별로 알맞게 customize 된 pieces 을 포함한 fragments들에 대한 라이브러리도 있습니다. HTML과 함께 여러분은 스타일 쉬트도 customize 하실 수 있습니다.

 


반응형


반응형

*** Dialogs

Creating dialogs


page anchor link 에 data-rel="dialog" 속성을 추가하면 어느 페이지에서든지 dialog 화면을 display 할 수 있습니다. 이 dialog 속성이 적용되면 프레임워크는 rounded corner 로 표시하도록 style을 추가하고 페이지 둘레에 margin을 넣고 dialog 만 선명하게 보이도록 그 이외의 부분은 어두운 background로 처리합니다.

<a href="foo.html" data-rel="dialog">Open dialog</a>


jQuery Mobile DOC 에 있는 버튼 링크는 아래 소스만 올립니다.


<a href="dialog.html" data-role="button" data-inline="true" data-rel="dialog" data-transition="pop">Open dialog</a>

직접 보시려면 모바일에서 여기로 접속해서 보세요.







Transitions

디폴트로 dialog 는 pop transition으로 열릴겁니다. 다른 페이지들 처럼 이 dialog에도 다른 화면전환 효과를 적용할 수 있습니다. data-transition 속성을사용하세요. 그런데 이게 좀 더 dialog 화면처럼 보이도록 하려면 pop이나 slideup, flip 화면전환 효과를 사용하실 것을 권합니다.

<a href="foo.html" data-rel="dialog" data-transition="pop">Open dialog</a>


jQuery Mobile DOC 에 있는 버튼 링크는 아래 소스만 올립니다.


<div>
    <a href="dialog.html" data-role="button" data-inline="true" data-rel="dialog" data-transition="pop">data-transition="pop"</a>
    <a href="dialog.html" data-role="button" data-inline="true" data-rel="dialog" data-transition="slidedown">data-transition="slidedown"</a>
    <a href="dialog.html" data-role="button" data-inline="true" data-rel="dialog" data-transition="flip">data-transition="flip"</a>
</div>


직접 보시려면 모바일에서 여기로 접속해서 보세요.


Closing dialogs

dialog안에 있는 아무 링크라도 click 되면은 프레임워크는 자동적으로 그 dialog를 닫고 해당 페이지로 화면을 전환합니다. cancel 버튼을 dialog 안에 넣고 싶은 경우 버튼을 만들고 링크에 data-rel="back"이라는 속성을 넣어 주면 됩니다. 이 기능은 dialog 뿐만이 아니라 다른 페이지에서도 유용하게 사용될 수 있으며 non-JS 디바이스에서도 사용하실 수 있습니다.

자바스크립트가 생성한 링크에 대해서는 그냥 href attribute를 #로 세팅하고 data-rel="back" 속성을 사용하세요. 그리고 프로그래밍으로 dialog의 close()메소드를 call 하셔도 됩니다.

예) $('.ui-dialog').dialog('close').

Setting the close button text

페이지 플러그 인 처럼 dialog의 close 버튼 text를 option이나 data 속성을 통해서 세팅할 수도 있습니다. option은 mobileinit 이벤트와 $.mobile.dialog.prototype.options.closeBtnText 프로퍼티를 사용해서 모든 dialog에 적용되도록 세팅할 수 있습니다. 그러면 여러분이 원하는 텍스트에 이 기능을 적용할 수 있습니다. 또는 data-close-btn-text 속성을 여러분의 markup에서 text 에 지정해 줄 수 있습니다.

History & Back button behavior

Dialog는 한 페이지 내에서 표시되고 없어지는 것이기 때문에 프레임워크는 이 dialog를 hash state history tracking에 포함시키지 않습니다. 즉 dialog 화면은 back 버튼을 눌렀을 때 뜨지 않을 거라는 거죠. 예를 달어 여러분이 한 페이지를 보고 있고 그 페이지에서 dialog를 열고 또 닫았다고 합시다. 그리고 나서 다른 페이지로 갔을 때 여기서 브라우저의 back 버튼을 누르면 원래의 페이지로 돌아가고 dialog 화면으로는 가지 않을 겁니다.

Styling & theming

Dialog는 다른 theme swatch들로 style 될 수 있습니다. 다른 일반적인 페이지들과 마찬가지로 data-theme 속성을 header,content,footer container들에 추가하시면 됩니다. 아래에 예제가 있습니다.


jQuery Mobile DOC 에 있는 버튼 링크는 아래 소스만 올립니다.


<a href="dialog-alt.html" data-role="button" data-inline="true" data-rel="dialog" data-transition="pop">An alternate color scheme</a>


직접 보시려면 모바일에서 여기로 접속해서 보세요.


Dialog는 overlay layer 위에 표시됩니다. 이 overlay는 디폴트로 swatch A content color를 적용받게 됩니다. 이것을 바꾸고 싶으면 data-overlay-them 속성을 page wrapper에 넣으시면 됩니다. 아래 swatch e 로 세팅한 예제가 있습니다.


jQuery Mobile DOC 에 있는 버튼 링크는 아래 소스만 올립니다.


<a href="dialog-overlay.html" data-role="button" data-inline="true" data-rel="dialog" data-transition="pop">Custom overlay swatch</a>


직접 보시려면 모바일에서 여기로 접속해서 보세요.



Dialog는 여러개의 버튼이 있는 control sheet 처럼 사용될 수도 있습니다. dialog의 inner container element에서 top margin을 없애면 됩니다. 예를 들어 dialog 페이지가 my-dialog라는 클래스를 가지고 있다고 한다면 여러분은 이 dialog를 top에 고정시키기 위해 CSS를 사용해야 합니다.: .ui-dialog.my-dialog .ui-dialog-contain { margin-top: 0 } 혹은 모든 dialog에 이런 스타일을 적용하셔야 합니다. .ui-dialog .ui-dialog-contain { margin-top: 0 } 사용 예제는 아래에 있습니다.


jQuery Mobile DOC 에 있는 버튼 링크는 아래 소스만 올립니다.


<a href="dialog-buttons.html" data-role="button" data-inline="true" data-rel="dialog" data-transition="slidedown">Share photos...</a>


직접 보시려면 모바일에서 여기로 접속해서 보세요.



Dialog width and margins

가독성이 있도록 하기 위해  dialog는 디폴트 max-width를 500픽셀로 가지고 있습니다. (여기에 15픽셀의 padding이 사방에 있습니다.) 그리고 더 큰 스크린에서는 10%의 top margin이 주어집니다. 그런데 더작은 스마트폰 화면 같은데서는 이것이 깨지기도 합니다. 이 스타일을 오버라이드 하려면 아래 CSS를 고쳐서 사용하세요.

.ui-dialog .ui-header,
.ui-dialog .ui-content,
.ui-dialog .ui-footer {
 max-width: 500px;
 margin: 10% auto 15px auto;
}


반응형


반응형

*** Page transitions

CSS 기반의 화면전환을 포함한 jQuery Mobile 프레임워크의 화면 전환 효과는 Ajax navigatin 과 함께 어느 link나 form submission에도 적용될 수가 있습니다.

아래는 jQuery Tutorial DOC 에서 제공하는 Sampler 의 이미지와 소스코드 입니다.

모바일에서 여기로 접속하셔서 직접 화면 전환 효과를 체험해 보세요.



<table margin="0">
    <tr>
        <th><h3>fade</h3></th>
        <td><a href="page-transitions-dialog.html" data-role="button" data-rel="dialog" data-transition="fade" data-inline="true">dialog</a></td>
        <td><a href="page-transitions-page.html" data-role="button" data-transition="fade" data-inline="true">page</a></td>
    </tr>
    <tr>
        <th><h3>pop</h3></th>
        <td><a href="page-transitions-dialog.html" data-role="button" data-rel="dialog" data-transition="pop" data-inline="true">dialog</a></td>
        <td><a href="page-transitions-page.html" data-role="button" data-transition="pop" data-inline="true">page</a></td>
    </tr>
    <tr>
        <th><h3>flip</h3></th>
        <td><a href="page-transitions-dialog.html" data-role="button" data-rel="dialog" data-transition="flip" data-inline="true">dialog</a></td>
        <td><a href="page-transitions-page.html" data-role="button" data-transition="flip" data-inline="true">page</a></td>
    </tr>
    <tr>
        <th><h3>turn</h3></th>
        <td><a href="page-transitions-dialog.html" data-role="button" data-rel="dialog" data-transition="turn" data-inline="true">dialog</a></td>
        <td><a href="page-transitions-page.html" data-role="button" data-transition="turn" data-inline="true">page</a></td>
    </tr>
    <tr>
        <th><h3>flow</h3></th>
        <td><a href="page-transitions-dialog.html" data-role="button" data-rel="dialog" data-transition="flow" data-inline="true">dialog</a></td>
        <td><a href="page-transitions-page.html" data-role="button" data-transition="flow" data-inline="true">page</a></td>
    </tr>
    <tr>
        <th><h3>slidefade</h3></th>
        <td><a href="page-transitions-dialog.html" data-role="button" data-rel="dialog" data-transition="slidefade" data-inline="true">dialog</a></td>
        <td><a href="page-transitions-page.html" data-role="button" data-transition="slidefade" data-inline="true">page</a></td>
    </tr>
    <tr>
        <th><h3>slide</h3></th>
        <td><a href="page-transitions-dialog.html" data-role="button" data-rel="dialog" data-transition="slide" data-inline="true">dialog</a></td>
        <td><a href="page-transitions-page.html" data-role="button" data-transition="slide" data-inline="true">page</a></td>
    </tr>
    <tr>
        <th><h3>slideup</h3></th>
        <td><a href="page-transitions-dialog.html" data-role="button" data-rel="dialog" data-transition="slideup" data-inline="true">dialog</a></td>
        <td><a href="page-transitions-page.html" data-role="button" data-transition="slideup" data-inline="true">page</a></td>
    </tr>
    <tr>
        <th><h3>slidedown</h3></th>
        <td><a href="page-transitions-dialog.html" data-role="button" data-rel="dialog" data-transition="slidedown" data-inline="true">dialog</a></td>
        <td><a href="page-transitions-page.html" data-role="button" data-transition="slidedown" data-inline="true">page</a></td>
    </tr>
    <tr>
        <th><h3>none</h3></th>
        <td><a href="page-transitions-dialog.html" data-role="button" data-rel="dialog" data-transition="none" data-inline="true">dialog</a></td>
        <td><a href="page-transitions-page.html" data-role="button" data-rel="dialog" data-transition="none" data-inline="true">page</a></td>
    </tr>
</table>


fade transition 만 볼 수 있으신가요? 모든 화면전환 효과를 보시려면 3D transform이 지원되는 브라우저라야 합니다. 3D 를 제대로 지원하지 않는 (Android 2.x 같은) 곳이서는 디폴트인 fade 효과가 보이게 될 겁니다.

Setting a transition on a link or form submit

디폴트로 프레임워크는 fade 화면전환을 지원합니다. 다른 화면전환효과를 원하시면 data-transition 속성을 링크에 추가하세요.

<a href="index.html" data-transition="pop">I'll pop</a>

Back 버튼이 눌려지면 이 프레임워크는 이 페이지를 보이도록 했던 페이지로 돌아갈 때 reverse version을 자동적으로 사용합니다. 이 기능을 명시하려면 data-direction="reverse" 속성을 링크에 넣어 주시면 됩니다.

Global configuration of transitions

만약 디폴트 화면전환을 다른것으로 하고 싶으면 defaultPageTransition 글로벌 옵션을 세팅하면 됩니다. Dialog는 defaultDialogTransition을 세팅하면 됩니다.

Browser support and performance

모든 화면전환은 CSS keyframe animation과 -webkit vendor prefixed rule 과 -moz rule을 사용해 만들어 졌습니다. -webkit 은 iOS,Blackberry, Android, Safari, Chrome browsers 에 적용되고 -moz 는 Firefox 브라우저에 적용 됩니다. keyframe animation과 부드러운 화면전환을 지원하는 것은 브라우저 버전이나 하드웨어에 따라 약간씩 다르게 나타날 수가 있습니다. 만약 animatin이 지원되지 않는 환경이라면 그냥 화면 전환 효과 없이 페이지 이동이 될 겁니다.

Defining fallback transitions for non-3D support

fade를 제외한 모든 화면전환 효과는 기본적으로 3D transform 이 지원 되어야 합니다. 이 기능이 지원되지 않는 디바이스들에서는 모든 화면전환 효과가 fade 화면전환으로 바뀌어서 display 될 겁니다. 이 경우에도 부드럽게 화면이 움직이는 효과는 지원이 됩니다. 안드로이드 3.0 같은 경우도 기술적으로는 3D transform 이 지원되지만 애니메이션 퍼포먼스가 별로인 경우도 있습니다. 그렇기 때문에 이 기능이 모든 디바이스에서 제대로 동작한다고 말할 수는 없지만 최대한 효과적으로 동작하도록 작업을 하고 있습니다.

3D transform이 적용되지 않는 경우 그에 대한 대비책으로 사용될 수 있는 화면 전환 효과를 설정할 수도 있습니다. 우리는 이것을 fade로 설정해 놓고 있습니다. 만약 아래처럼 세팅을 해 놓으면 화면전환효과가 특별히 없이 페이지 이동이 일어날 겁니다.

$.mobile.transitionFallbacks.slideout = "none"


Setting a max width for transitions

창의 width 가 특정 pixel width 보다 클 경우 transition을 none으로 세팅해서 디폴트로 화면전환 효과를 사용하지 않도록 할 수 있습니다. 이 기능은 큰 스크린의 경우 화면 전환 효과가 별로일 수 있을 때 유용하게 사용할 수 있습니다. 이 기능은 $.mobile.maxTransitionWidth 글로벌 옵션을 사용해서 세팅할 수 있습니다.

이 글로벌 옵션의 디폴트는 false로 돼 있습니다. 이 옵션의 value로는 아무 숫자나 false value 가 올 수 있습니다. 만약 이 value 가 false가 아니면 핸들러는 윈도우의 크기가 특정한 value 보다 클 경우 transition을 none 으로 취급합니다.

Creating custom transitions

jQuery Mobile은 custom transition도 추가할 수 있도록 지원합니다. 이 기능은 $.mobile.transitionHandlers dictionary 에 넣으시면 되는데요.

이걸 이용하면 여러분 앱에 여러분이 원하는 아주 다양한 화면전환 효과를 사용할 수가 있습니다.


반응형


반응형

Page titles

Titles in Ajax navigation

jQuery Mobile로 만든 페이지가 처음 로드될 때 그리고 나서 link를 클릭하거나 form 을 submit 할 때 Ajax는 대상이 되는 page의 내용을 pull 하게 됩니다.

DOM내에 두개의 페이지 모두를 가지는 것이 animated 된 화면 전환을 위해 꼭 필요합니다. 그런데 이러한 이면에는 page title이 항상 첫번째 화면의 title이 남아있게 된다는 문제가 있습니다. 이것을 해결하기 위해 jQuery Mobile은 Ajax를 통해 page title을 pull 해서 자동적으로 parse 합니다. 그리고 나서 title 속성을 바꾸는 겁니다.

Titles in multi-page templates

multi-page 문서에서도 이와 비슷한 방법으로 진행 됩니다. 단지 모든 페이지들은 common title을 share 하고 있는게 다른것이죠. 그래서 각각의 페이지마다

data-title 속성을 넣어서  각각의 페이지마다 title을 다르게 할 수 있도록 합니다. 그래서 HTML 문서의 title은 자동적으로 화면에 display 되는 page의 data-title 값으로 바뀌게 됩니다.

<div data-role="page" id="foo" data-title="Page Foo">

</div><!-- /page -->


Linking Pages


jQuery Mobile은 simple page linking convention을 위해 디자인 됐습니다. 그냥 일반적으로 하듯이 링크를 거시면 됩니다. 그러면 jQuery Mobile이 필요하면 Ajax를 이용해서 single-page 모델내의 페이지 request를 자동적으로 처리할 겁니다. 만약 Ajax가 가능하지 않으면 (same-domain url 이 아니거나 링크에서 특정 속성을 사용한다거나 해서) Ajax 대신에 일반 http request 가 사용됩니다.
이 모델의 goal은 특정 configuration 없이 그냥 일반적인 방법으로 개발자가 쉽게 웹 사이트를 만들도록 하는데 있습니다. 보기 좋은 화면과 native 와 유사한 방법으로 말이죠.

Default link behavior: Ajax

동적인 화면전환을 하려면 Ajax를 통해서 해당 페이지들이 모두 로디 되어야 합니다. 이것을 구현하려면 프레임워크는 그 링크의 href를 파스해서 Ajax request(Hijax)를 formulate 하고 loading spinner를 display  해야 합니다. 이러한 과정은 jQuery Mobile 에 의해 자동적으로 수행 됩니다.
Ajax request 가 성공적이면 새 페이지의 내용은 DOM에 추가 됩니다. 모든 모바일 위젯들은 자동 initialize 됩니다. 그리고 나서 새 페이지는 화면전환효과를 주면서 스크린에 표시 됩니다. 만약 Ajax request 가 실패하면 프레임워크는 작은 에러 메세지 overlay를 잠시 display 하고 없앱니다. 그래서 Ajax request 가 실패했다고 해서 navigation 흐름이 멈추지는 않습니다. 이 에러메세지 관련해서는 example of the error message 를 보세요.

Note :  Ajax navigation active로 multipage document로 링크를 걸지는 못합니다. 왜냐하면 프레임워크는 첫번째로 찾은 페이지만 로드하기 때문입니다. 그 페이지의 full set 을 로드 하지는 않습니다. 이럴 경우에는 Ajax를 사용하지 않고 link 를 해야 합니다. (다음 섹션을 보세요) 그래야 full page refresh가 되서 hash collision 을 방지할 수 있습니다. 이 Ajax를 사용해서 multi page document의 모든 페이지를 로드 할 수 있도록 하는 플러그인인 subpage plugin 이 있습니다. 관심 있으면 살펴 보세요.

Linking without Ajax

다른 도메인으로 링크하거나 rel="external", data-ajax="false" 를 하거나 target 속성을 사용하면 Ajax가 로드하지를 못합니다. 이렇게 하면 full page refresh 가 일어나며 동적인 화면전환이 일어나지 않습니다. rel="external" 과 data-ajax="false" 두 속성 모두 똑 같은 효과가 나타납니다. 다른점은 rel="external"은 다른 site나 다른 도메인으로 링크를 걸 때 사용되어지는 것이고  data-ajax="false"는 같은 도메인 내에서 간단하게 Ajax 로딩을 하지 않을 때 사용할 수 있습니다. 보안 문제 때문에 프레임워크는 항상 외부 도메인으로의 링크에서는 Ajax behavior 를 적용하지 않도록 돼 있습니다.
1.1 버전에서 data-ajax="false"를 parent container에 추가하면 그 하단의 수많은 링크들이 Ajax 네비게이션 시스템을 사용하지 않도록 하는 기능을 추가했습니다. 이 기능을 사용하면 각 링크마다 일일이 코딩해야 하는 번거로움을 줄일 수 있습니다.
Note: jQuery Mobile 어플리케이션을 빌드 시 Ajax Navigation system이 globally 사용할 수 없도록 하거나 각각의 링크에서 빈번하게 사용할 수 없도록 하여야 할 때 $.mobile.pushStateEnabled global configuration option을 사용하실 것을 권장합니다. 그러면 일부 브라우저에서 발생하는 inconsistent navigation behavior를 방지 하실 수 있습니다.

Linking within a multi-page document

한개의 HTML 문서에는 여러개의 page 콘테이너가 들어갈 수 있습니다. div를 여러개 쓰고 각 div마다 data-role을 page로 주면 됩니다. 이렇게 하면 HTML 한 문서에 작은 웹싸이트나 어플리케이션 하나를 다 담을 수도 있겠죠.jQuery Mobile은 처음 이 파일이 불려졌을 때 첫번째 page를 먼저 보여 줍니다.
이 멀티페이지 문서 안에 링크가 anchor(#foo)로 걸려 있다면 프레임워크는 page wrapper 안에 있는 ID(id-"foo")를 찾을 겁니다. 그 HTML문서 안에서 그것을 찾으면 그 새로운 페이지를 보여 줄 겁니다. jQuery Mobile은 멀티페이지 내의 화면 전환뿐만 아니라 외부 링크를 통해 자유롭게 내부,외부로 이동 할 수 있도록 합니다.

사용자가 보기엔 그것이 내부 페이지인지 외부 페이지인지 구분 되지 않고 똑 같이 보여 집니다. (외부 페이지 로딩시 Ajax spinner 가 표시 될때는 약간 다르겠지만요.)

어떤 경우에든 JQuery Mobile은 페이지의 URL hash를 업데이트 해 Back button이나 deep-linking, bookmarking 등이 지원 되도록 합니다.
만약 여러분이 multiple internal 페이지를 포함한 페이지로 Ajax를 통해서 링크를 클릭해서 그 화면을 로딩한다면 여러분은 rel="external"이나 data-ajax="false"를 link 에 넣어야 됩니다.이렇게 해야 프레임워크가 그 URL 내의 Ajax hash 를 없애고 full page를 reload 할 수 있습니다.이 부분은 아주 중요합니다. 왜냐하면 Ajax page들은 Ajax history를 track하기 위해 hash(#)를 사용합니다. 그리고 multiple internal 페이지들도 그 내부 페이지를 가리킬 때 그 hash를 사용하구요. 그래서 위 방법대로 하지 않으면 이 두 부분이 서로 충돌하게 됩니다.

예를 들어 multiple internal page를 향한 링크는 아래와 같이 되어야 합니다.

<a href="multipage.html" rel="external">Multi-page link</a>

"Back" button links

만약 여러분이 anchor에 data-rel="back" 속성을 넣으시면 유저가 그 anchor를 클릭했을 때 back button을 누른 것 처럼 동작 할 겁니다. 바로 전단계 화면으로 가게 됩니다. 이경우 anchor의 디폴트 href는 무시 됩니다.이 기능은 자바스크립트로 간단하게 back button을 생성해야 될 때 유용합니다.(예를 들어 dialog 박스를 닫는다던지...) 이 기능을 사용할 때 브라우저는 href 속성에 지정된 주소는 사용하지 않을 겁니다. 한가지 알아야 할 것은요. C-Grade 브라우저에서는 이 data-rel="back" 기능이 안 먹히기 때문에 그런 경우는 이 href 에 있는 링크로 가게 될 겁니다. 만약 여러분이 history 내의 going back이 아니라 단지 전환을 역순으로 (지금 화면을 부른 화면으로 돌아가기) 하실 때에는 data-direction="reverse" 속성을 사용하시면 됩니다.
Note: data-direction="reverse"는 현재 페이지로 오게 한 바로 그 페이지로 화면전환을 한다는 의미입니다. data-rel="back"은 바로 전 화면으로 이것은 브라우저의 back 버튼을 누른것과 동일한 효과가 나옵니다. 이 두개를 같이 사용하면 reverse는 일어나지 않고 그냥 일반적인 transition이 일어 납니다.

Redirects and linking to directories

디렉토리 인덱스로 링크를 걸 때 (href="typesofcats/index.html 가 아니라 href="typesofcats/" 로 링크를 걸 때) 반드시 trailing slash를 넣어주셔야 합니다. 왜냐하면 jQuery Mobile은 url의 마지막 / 다음에는 파일 이름이 올거라고 예상을 하고 있기 때문입니다. 그리고 나서는 실제 페이지가 참조 됐을 때 이 section을 없앱니다.

어쨌든 여러분은 data-url 속성이 이미 정해져 있는 page div를 return 하는 경우가 있을 겁니다. 이경우 jQuery Mobile은 URL 을 업데이트 하는데 이 속성의값을 사용할 겁니다. 그리고 예를 들어 form을 /login.html 로 포스팅하려고 하는데 이 일이 성공적으로 진행됏을 때 결과 페이지를 /account 에 있는 페이지를 사용하려고 하는 경우가 있을 수 있습니다. 이 경우 여러분은 jQuery Mobile history stack을 사용해서 컨트롤 할 수 있습니다. 아래에 예제가 있습니다.

다음에 나오는 링크는 docs-links-urltest/index.html 로 걸린 겁니다. Test Link . return page는 docs/pages/docs-links-urltest/ 가 될 겁니다. 이 작업은 페이지 소스의 data-url 속성을 통해서 수행 될 겁니다. 값은 전체 hash 로 replace 된다는 것을 항상 염두에 두세요.

jQuery Mobile의 navigation model 과 Ajax, hashes and history 에 좀 더 기술적인 부분은 별도로 살펴 보시기 바랍니다.

Link examples

HTML의 모든 표준 링크 타입은 위에서 살펴 본 대로 jQuery Mobile이 모두 지원합니다. 아래는 자주 사용되는 링크들에 대한 sampler 들 입니다.

<ul data-role="listview" data-inset="true" data-theme="d" data-divider-theme="d">     <li data-role="list-divider">Links that will be Ajax-loaded with page transitions</li>     <li><a href="../../index.html">Link in the same domain</a></li>     <li><a href="../pages/dialog.html" data-rel="dialog">Dialog link: data-rel="dialog" (not tracked in history)</a></li>     <li data-role="list-divider">Links that will refresh the page</li>     <li><a href="http://www.jquery.com">External domain</a></li>     <li><a href="../../index.html" rel="external">Link with rel="external"</a></li>     <li><a href="index.html" data-ajax="false">link with [data-ajax="false"]</a></li>     <li><a href="../../index.html" target="foo">Link with target="foo"</a></li>     <li data-role="list-divider">Email links</li>     <li><a href="mailto:jdoe@foo.com">Basic email: mailto:jdoe@foo.com</a></li>     <li><a href="mailto:jdoe@foo.com?cc=bill@bar.com&bcc=mark@abc.com&subject=Happy%20Birthday&body=Best%20wishes!">Mailto with a cc:, bcc:, subject and body pre-filled</a></li>     <li data-role="list-divider">Phone links</li>     <li><a href="tel:15555555555">Phone: tel:15555555555</a></li>     <li data-role="list-divider">Other</li>     <li><a href="#">A href="#" will return false</a></li> </ul>



jQuery Mobile Doc 페이지에 가면 위 화면처럼 나오고 모바일 디바이스에서 각 링크를 클릭하면 실제 작동되는것도 보실 수 있습니다.

보시려면 여기 를 누르셔서 시험해 보세요.


반응형