Drupal이란?
Drupal(드루팔)은 오픈소스 content management platform으로 개인 블로그부터 대형 커뮤니티 시스템까지 다양한 형태의 웹사이트를 개발할 수 있도록 편리하고 다양한 기능을 제공한다.
Drupal 커뮤니티(http://drupal.org/) 를 통해전세계 수 천명의 개발자가 참여하고 있으며, GPL에 의거하여 배포된다. 현재 6.2 버전까지 공개되었고, 7.0 버전의 개발이진행중이다. 개발환경은 APM(Apache, PHP, MySQL)으로 모든 소스코드는 PHP로 작성되어 있다. 그러나 별도의코딩이 없이 설정만으로도 웹사이트 개발이 가능하다.
Drupal의 장점 중 하나는 기본기능 외에 사용자들이 만든 수 많은 모듈들인데, 전세계 개발자들이 개발한 모듈을 설치하는 것만으로도 기본적인 기능 정도는 손쉽게 적용할 수 있다.
Drupal을 사용한 웹사이트로는 www.springframework.org, http://www.spreadfirefox.com/, http://www.openonweb.com/ 등이 있다.
Drupal 설치하기
APM설치
Apache, PHP, MySQL을 설치한다. 윈도우에 설치한다면 APM_SETUP(http://www.apmsetup.com/)을 이용하면 손쉽게 설치할 수 있다.
DB설정
MySQL5\bin으로 이동한 후 아래의 명령을 실행한다.
mysql -u root
mysql>create database databasename;
mysql>use mysql
mysql>insert into user (host,user,password) values ('localhost','myid',password('mypassword'));
mysql>insert into db values ('localhost','databasename','myid','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y');
(혹 은 GRANT SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON databasename.* TO'myid'@'localhost' IDENTIFIED BY 'mypassword';)
mysql>flush privileges;
mysql>\q
Drupal 설치
Drupal.org에서 원하는 버전을 다운로드 하고, (http://drupal.org/getting-started/6/install/download)
다운받은 파일의 압축을 풀고, htdoc아래에 복사한다.
설치 스크립트 구동
브라우저의 주소창에 http://localhost/drupal을 입력하면 설치화면으로 접속된다. 화면에 나타나는 지시를 따라 단계를 진행하면 설치가 완료된다.
참고:
http://drupal.org/getting-started
http://www.palpal.org/drupal/ko/node/79
http://www.palpal.org/drupal/ko/installation
사이트 구성하기
admin 계정으로 접속하여 Administer메뉴를 누른다.Site building 메뉴에서 테마, 화면구성, 모듈, 메뉴관리를 할 수 있고, Site configuration 메뉴에서 웹사이트의 기능 설정을 할 수 있다.
Site building에는 Blocks, Menus, Module, Themes 메뉴가 있다.
Blocks: Header, Footer, Leftside, Rightside, Contents의 사용 유무 및 각 부분에 들어갈 블록을 설정한다.
Menus: Drupal의 시스템 메뉴 외에 웹사이트에 사용될 메뉴를 생성하고 관리할 수 있다. Primary links, Secondary links 기능을 제공한다.
Modules: 설치된 모듈의 사용 여부를 설정한다. 기본 모듈 외에 새로 설치된 모듈도 이 메뉴에서 관리한다.
Themes: 이 화면에서 테마를 선택한다. Drupal 6.2의 경우 6개의 기본 테마를 제공하는데, 자신의 사이트에 맞는 테마도 만들 수도 있다.
Site configuration 메뉴에서 파일 시스템 및 사이트 정보 같은 기본 정보를 설정,관리할 수 있다.
테마 제작
Drupal6.2의 경우 6개의 기본 테마를 제공한다. 기존 테마를 수정해서 사용할 수도 있지만 새로 만들 수도 있다.(기존 테마를 복사해서 수정하면 더 쉽게 할 수 있다.)
- themes 디렉토리 아래에 새로 생성할 테마 이름의 디렉토리를 만든다.
테마이름.info 파일을 생성하고 다음의 내용을 입력한다. 다른 테마의 info 파일을 참조하도록 한다.
아래는 pushbutton 테마의 pushbutton.info 파일의 내용이다.
; $Id: pushbutton.info,v 1.4 2007/06/08 05:50:58 dries Exp $
name = Pushbutton
description = Tabled, multi-column theme in blue and orange tones.
version = VERSION
core = 6.x
engine = phptemplate; Information added by drupal.org packaging script on 2008-04-09
version = "6.2"
project = "drupal"
datestamp = "1207776008"info 파일을 작성했으면, themes 메뉴에서 테마를 선택할 수 있다. Drupal은 디렉토리와 info 파일만으로도 테마 정보를 자동으로 읽어온다.
- 템플릿 파일을 작성한다. 템플릿 파일로 웹사이트의 레이아웃을 수정할 수 있다. 테마마다 아래와 같은 파일들이 있다.
page.tpl.php
- 웹사이트의 전체화면 구성을 할 수 있다. 따로 생성하지 않는 한 모든 화면이 이 템플릿의 디자인대로 출력된다. 모든 페이지는
Drupal의템플릿 엔진이 따로 출력하는데, 특정 URL에서 보이는 화면을 다르게 구성하고 싶다면 다음 문서를 참조한다.(http://drupal.org/node/104316)
block.tpl.php - Header, Footer, Leftside, Rightside, Contents마다 한개 이상의 블록을 구성할 수 있다. 블록에 공통적으로 사용되는 디자인과 기능을 설정한다.
comment.tpl.php - 콘텐츠마다 붙어 나오는 코멘트에 공통적으로 사용되는 디자인과 기능을 설정한다.
node.tpl.php - Drupal에서 생성되는 모든 콘텐츠는 node라는 개념으로 저장된다. node에 공통적으로 사용되는 디자인과 기능을 설정한다.
box.tpl.php - 페이지(검색결과, 코멘트 입력 폼)에 공통적으로 사용되는 디자인과 기능을 설정한다.
template.php- 공통으로 쓰이는 함수를 모아놓은 파일. 이 파일에 정의된 함수를 다른 템플릿 파일에서 호출할 수 있다.
모듈 설치
Drupal 공식 사이트에서 모듈을 다운받을 수 있다.(http://drupal.org/project/Modules) 주의할 점은 자신이 사용하는 Drupal의 버전에 맞는 모듈을 선택해야 한다는 것이다. Drupal은 현재 6.2버전까지업그레이드가 되어 왔지만 사용자들이 만든 모듈이 모두 컨버전 되어 온 것은 아니다. 모듈이 어느 버전을 지원하는 지는 모듈을다운받을 때 확인할 수 있다.
다운받은 모듈을 modules 디렉토리에 복사한다. 관리자 화면의 Modules 메뉴에 현재 설치되어 있는 모듈의 목록이나오는데, 사용여부에 체크를 하고 저장하기만 하면 설치가 완료된다. 설치를 마치면 Site configuration 메뉴의하위에 설치한 모듈의 이름으로 메뉴가 생긴다. 이 메뉴에서 세부설정을 한다.
웹사이트 디자인
템플릿 파일로 레이아웃을 설정했으면, 세부적인 디자인은 CSS 파일을 통해서 할 수 있다. Drupal 테마의 기본 CSS는 테마 디렉토리 안의 style.css 파일에 정의된다.
Drupal 테마마다 HTML 태그의 CLASS가 정의되어 있고, 필요하면 새로운 CLASS나 ID를 정의해서 디자인을적용할 수 있다. 경우에 따라 기본 모듈 디렉토리 내에도 CSS 파일이 있다. 필요하면 이것을 참고해서 CSS를 재정의 할 수있다.
Firefox의 애드온인 Firebug를 이용하면 디자인 수정 및 적용이 쉬워진다.
모듈의 기본 HTML 출력 수정
Drupal
코어나 모듈은 HTML 출력이 고정되어 있다. 이렇게 자동으로 생성된 화면에서 HTML 수준의 수정이 필요할경우 테마 별로
출력형태를 재정의(overriding themable output) 할 수 있다. 다만 스타일시트 수준에서수정이 가능한 경우라면
이 방법은 피하는 것이 좋다.
모듈을 살펴보면 themable이라고 표현되는 부분이 있는데, 이것은 테마 별로 출력 형태를 재정의 할 수 있다는 것을 뜻한다.
테마별 출력형태를 재정의 할 때는 다음의 3가지를 유념해야 한다.
소스 찾기 (Finding the source)
재정의 할 수 있는 소스를 찾는다. 수많은 파일 중에 해당하는 소스를 찾기가 쉽지 않다. DEVEL 모듈(http://drupal.org/project/devel)을 사용하면 쉽게 소스를 찾을 수 있다.
- 재정의 체계 (System of overrides)
Drupal 코어와 모듈은 themeing hook을 제공한다. 다시 말하면 테마 안에서 기능을 재정의 할 수 있으므로 직접 모듈을 수정하지 않아도 된다. 함수 vs. 템플릿 (Functions vs. templates)
hook을 구현할 수 있는 방법은 함수를 이용한 방법과 템플릿을 이용한 방법 이렇게 두가지가 있다. 두가지 모두 장단점이 있으므로 상황에 따라 선택하면 된다.
함수를 이용한 방법이 속도면에서는 다섯배정도 빠르다. 그러나 디자이너가 작업하기 어렵고 익숙하지 않다는 단점이 있다.- 함수를 이용한 방법theme_menu_local_tasks 함수의 경우를 예로 들면, 접두어 theme을 자신의 테마 이름으로 수정하고 template.php 파일 안에서 함수를 재정의 하면 된다.
- 템플릿을 이용한 방법모듈에 있는 .tpl.php 파일을 자신의 테마 디렉토리에 복사해 넣고 재정의 하면 된다.
The theme registry: Drupal은 hook되어 재정의 된 캐시(Cache) 데이터를 유지하고 있다. 이것이 theme registry인데, 추가, 삭제된 함수나 템플릿을 갱신하려면 캐시를 지워야 한다.
참고:
나만의 모듈 만들기
자 신만의 모듈을 만들어 다른 모듈들처럼 사용할 수 있다. Drupal의 모듈은 몇가지 코드가 추가된 PHP 파일의모음이다. 모듈의 코드는 Drupal 엔진의 기능을 사용할 수 있고, 모듈에서 엔진의 코드를 실행하는 것을 hook이라고한다. 이 hook을 이용해서 몇가지 코딩 규칙만 적용하면 자신만의 모듈을 작성할 수 있다.
이해를 돕기 위해 New Forum List라는 간단한 모듈을 만들어 보자. New Forum List는 최근 일주일 사이에 포럼에 올라온 새 글을 보여주는 기능을 한다.
New Forum List 모듈 만들기
모듈 만들기
sites/all /modules 디렉토리를 생성하고, new_forum_list.module 파일을 만든다. 모듈파일이름은 대문자를 사용하지 않는다. Drupal은 sites/all/modules 디렉토리와 modules 디렉토리의 모듈을사용한다. 처음부터 modules/모듈이름 디렉토리에 파일을 만들어도 된다.
시스템에 모듈 알리기
new_forum_list.info 파일을 만든다. 이 파일이 있어야 시스템이 모듈을 인식한다.; $Id$
name = New Forum List
description = A block module that show New post in the Forum.
core = 6.x위와 같이 작성한다. name, description, core를 설정했다. 필요에 따라 dependencies, package도 설정할 수 있다.
모듈 사용 권한 설정
admin 메뉴의 권한설정 화면에서 설정할 수 있도록 new_forum_list.module 파일에 다음과 같이 코드를 작성한다.- <?php
function new_forum_list_perm() {
return array('access new_forum_list content', 'administer new_forum_list');
}
?>
- <?php
모듈 타입 설정
모 듈에는 node 모듈과 block 모듈의 두가지 타입이 있다. node 모듈은 blog 모듈, forum 모듈처럼 전체 화면에보여지는 모듈이고, block 모듈은 block 레이아웃의 left나 right에 보여지는 모듈이다. 이 예제에서는 block타입으로 작성한다. block 타입임을 선언하기 위해 new_forum_list.module 파일에 다음과 같은 이름의 함수를작성한다.- function new_forum_list_block($op='list', $delta=0) {
if ($op == "list") { //블록 리스트에 보여질 때
$block[0]["info"] = t("New Forum List");
return $block;
}
}
- function new_forum_list_block($op='list', $delta=0) {
block contents 만들기
$op의 값이 'view'일 경우는 실제 모듈이 화면에 출력되는 시점을 의미한다. 함수의 리턴 값에 필요한 내용을 입력한다.
block 함수를 다음과 같이 수정한다.- function new_forum_list_block($op='list', $delta=0) {
if ($op == "list") { //블록 리스트에 보여질 때
$block[0]["info"] = t("New Forum List");
return $block;
} else if ($op == 'view') { //블록 내용 출력
$block_content = '';
$today = getdate();
$start_time = mktime(0, 0, 0, $today['mon'], ($today['mday'] - 7), $today['year']);
//DB로부터 최근 일주일 사이의 포럼 포스트 정보를 가져 옴
$result = db_query("SELECT nid, title, created FROM {node} WHERE created >= '%s' AND type='forum'", $start_time);
while ($links = db_fetch_object($result)) {
$block_content .= '- ' . l($links->title, 'node/'.$links->nid) . '<br /><hr/>';
}
$block['subject'] = '포럼 새 글';
if ($block_content == '') {
$block['content'] = '새로운 글이 없습니다.';
}else{
$block['content'] = $block_content;
}
return $block;
} - }
db_query 함수를 이용해 DB에서 원하는 데이터를 가져 온다. DB접속과 설정은 신경쓰지 않아도 된다.
- function new_forum_list_block($op='list', $delta=0) {
이렇게 모듈을 작성했으면 admin/modules 메뉴에서 확인할 수 있다. 사용여부에 체크를 하고, admin/block 메뉴에 들어가보면 새로 작성한 모듈을 선택할 수 있다.
참고: