Skip to main content

Area4u + Drupal





우선 Drupal 제작진과 Drupal Korea 에게 감사를 표하며,

본 페이지는 Drupal 기반의 Area4u V6의 설치내역 및 응용, 확장 방법을 소개하여

Drupal를 알리고, 국내에서도 정착하여 보다 많은 정보를 공유하고자 합니다.

추가로 궁금한 사항이나 추가했으면 하는 부분은 커뮤니티를 통해 언제든 알려주세요~

외산이다보니 더욱 본인이 원하는 모듈, 테마등을 직접 설치해봐야 감이 올 가능성이 큽니다.

무료호스팅 등에서 충분이 익숙도를 올리시고 실제 적용하시기 바랍니다.

실제 모듈, 테마를 설치해서 테스트해보고 삭제했을 때 다른 부분과 꼬이는 경우도 종종 있을 수 있기 때문입니다.

Drupal, 사실 국내에서는 사용빈도가 전무하다고 볼 수 있습니다.

하지만, 미국에서는 백악관 웹페이지도 얼마전 드루팔 기반으로 리뉴얼 되어 큰 이슈가 되기도 했죠.

주요 정부기관 웹페이지들도 많이 사용하고 있다고 합니다.

제가 Drupal을 선택하게 된 이유는 왜 Drupal이 전 세계적으로 가장 유명한 CMS가 되었을까? 라는 궁금함이 가장 컸습니다.

사용하고 소스를 보면서 놀라움도 실망도 많더군요. 하지만, 어찌되었던 아직은 배울것도 많고 놀라고 있습니다.

같이 Drupal의 세계로 빠져보아요~~~

[ 사이트 ]
#01. 드루팔 : http://www.drupal.org
#02. 드루팔 코리아 : http://drupal.kldp.net
#03. 드루팔 Cron 대행 사이트 : http://www.drupalcron.org (데이터량이 많은 경우 Cron작업에 꽤 시간이 걸리다보니 아래 poormanscron 모듈이 처리도중 세션이 끊기면 MySQL에 행이 걸리는 경우 발생으로 변경 사용)

[ 추가 사용 모듈 ]
#01. autologout-6.x-2.5
- 드루팔은 기본 쿠키를 이용한 자동로그인임에 따라 특정 시간이 지나면 자동 로그아웃되도록 하기 위한 모듈
- 수정 부분
* ./modules/autologout/autologout.module
: autologout_block, autologout_logout 함수 내 한글변경
: 단순히 번역 수정 개념
: _autologout_by_role 함수, case 2 에 아래 부분 추가
$local_user->autologout = 0;
$r = db_query("SELECT setting FROM {autologout} WHERE uid = %d", $local_user->uid);
$rcount = db_result(db_query("SELECT count(setting) FROM {autologout} WHERE uid = %d", $local_user->uid));
if ($rcount > 0) {
$row = db_fetch_object($r);
$local_user->autologout = (int)$row->setting;
}

#02. inline-6.x-1.0
- 이미지 파일을 업로드하면 자동으로 게시물내용 상단에 img 태그로 노출되도록 하는 모듈
- 수정 부분
* ./modules/inline/inline.module
: _inline_auto_add 함수 TRUE/FALSE 리턴부분 전부 주석... 6군데
: 이미지 등록 후 [미리보기]에서 발생하는 에러 수정을 위함
: _inline_auto_add 함수 상단에
if($node->files) {
$old_arr = $node->files;

foreach($old_arr as $old) {
$new[] = $old;
}

$node->files = $new;

krsort($node->files);
}

추가
* ./modules/inline/inline.theme.inc
: inline.theme.inc 48라인, 'target' => '_blank', 추가
: inline으로 글 내용에 노출되는 이미지의 클릭 이슈를 변경
- 업로드 이미지 사이즈와 inline 모듈 설정 2군데 500*500으로 바꾸고 컨텐츠타입에 해당 모듈 활성화 모두 적용

#03. pm_lite-6.x-1.0-rc1
- Private Message 라는 쪽지 모듈이 유명한데, 너무 무거운 관계로 드루팔의 기본 노드 시스템을 응용한 가벼운 쪽지 모듈
- 수정 부분
* ./modules/pm_lite/pm_lite.module
: 아주 많이(?) 한글 번역
: pm_lite_table, pm_lite_header 함수에 닉네임 표출되도록 수정

#04. poormanscron-6.x-2.2
- 국내 호스팅에서는 기본적으로 Cron을 사용할 수 없어 AJAX를 이용하여 편법으로 Cron과 비슷한 효과를 얻을 수 있도록 하는 모듈

#05. user_import-6.x-2.4
- 회원 DB를 CSV를 이용하여 처리할 수 있는 모듈 (사실 단순 1회성일 수 있음)
- 회원 이전 하고서 created, timezone, language 수정

#06. Database tweak 6.x-1.0
- MySQL 의 환경설정을 드루팔에 맞게 조작할 수 있게 하는 모듈 (국내 호스팅 사정상 상당히 필요할 수 있음)

#07. captcha-6.x-2.4
- 사용자가 사람인지 아닌지 테스트하기 위한 간단한 방법 (회원가입에 적용)

#08. safer_login-6.x-1.0
- 로그인 비밀번호를 암호화하여 패킷캡쳐에도 노출되지 않도록하는 보안 로그인 모듈

[ 기본 제공 모듈 중 활성화 부분]
[ ] Aggregator 6.20 조직된 내용(RSS와 RDF, Atom 피드들)을 구독합니다.
- jQuery를 이용한 실시간 RSS Reading 사용, 이 모듈은 Cron을 이용해 주기적으로 DB에 쌓습니다.
[ ] Blog 6.20 간단히 블로그를 장착할 수 있게 합니다.
- 불필요
[ ] Blog API 6.20 사용자에게 XML-RPC 블로그 API들을 지원하는 응용프로그램을 사용해 포스팅하도록 허용합니다.
- 불필요
[ ] Book 6.20 사이트 페이지를 계층이나 개요으로 구성할 수 있도록 합니다.
- 애매한 개념으로 사용하지 않기로 함.
[v] Color 6.20 사용자가 특정 테마의 배색을 변경하도록 허용합니다.
[v] Comment 6.20 사용자가 공개된 컨텐트에 댓글을 달거나 토론할 수 있도록 합니다.
[ ] Contact 6.20 개인 및 사이트 전반의 연락처 양식을 사용하도록 합니다.
- 쪽지로 대체
[ ] Content translation 6.20 콘텐츠를 다른 언어로 번역할 수 있도록 합니다.
- 다국어까지 지원할 여력 없음.
[ ] Database logging 6.20 시스템 이벤트를 데이터베이스에 기록합니다.
- 국내 호스팅 사정상 MySQL의 max_allowed_packet(?)의 제한때문에 대용량 로깅은 에러나서 사용하지 않음.
[v] Forum 6.20 일반적인 주제에 대한 쓰레드 방식의 논의 사용하기
[v] Help 6.20 온라인 도움말 출력을 설정합니다.
[v] Locale 6.20 언어 처리 기능을 사용하여 사용자 인터페이스의 문자열을 영어 이외의 언어로 교체할 수 있습니다.
[v] Menu 6.20 관리자들이 사이트 네비게이션 메뉴를 조절할 수 있게 합니다.
[ ] OpenID 6.20 OpenID 를 사용해 사이트 로그인을 할 수 있게 합니다.
- OpenID까지 사용할 생각은 없음.
[v] Path 6.20 사용자가 URL의 이름을 변경할 수 있음
[v] PHP filter 6.20 내장된 PHP 코드나 스니펫이 실행 되도록 합니다.
[ ] Ping 6.20 사이트가 업데이트 될 때 다른 사이트에게 알립니다.
- 어떤 용도인지 명확치 않아서 미사용
[v] Poll 6.20 사이트에서 여러개의 선택가능한 질문의 형식을 통해 다양한 주제들에 대한 투표를 집계할 수 있도록 해줍니다.
[v] Profile 6.20 사용자가 조절 가능한 프로필들을 지원합니다.
[v] Search 6.20 전체 사이트에 걸친 키워드 검색을 가능하게 합니다.
[v] Statistics 6.20 사이트에 대한 접근 통계를 기록합니다.
[ ] Syslog 6.20 시스템 이벤트를 syslog에 기록합니다.
- 불필요
[v] Taxonomy 6.20 태그를 이용하여 내용을 분류합니다.
[v] Throttle 6.20 사이트의 혼잡을 제어하기 위한 자동 슬롯 트르메카니즘(auto-throttling mechanism)을 처리합니다.
[v] Tracker 6.20 사용자의 최근 글을 찾아 볼 수 있게 합니다.
[v] Trigger 6.20 특정의 시스템 이벤트 ('신규 콘텐츠의 작성시'와 같은)를 트리거로 액션을 일으킬 수 있도록 합니다.
[v] Update status 6.20 Drupal, 인스톨 끝난 모듈, 테마의 업데이트 상황을 확인합니다.
[v] Upload 6.20 사용자가 파일을 업로드하고 게시물에 첨부할 수 있도록 허용

[ 사용 테마 ]
* pixture_reloaded-6.x-3.2
* 참고 사이트 : http://www.themegarden.org/drupal6/?q=node (드루팔 테마를 실제와 비슷하게 볼 수 있는 사이트)
* 수정부분 (테마에 따라 다름)
: ./themes/사용테마/style.css
: 폰트 부분 "돋움", "Dotum", "굴림", "Verdana", "sans-serif", "Tahoma"
: 아래 추가
/* ADD */
#user-login-form .item-list {
text-align: left;
}

#user-login-form #edit-name, #edit-pass {
width: 130px;
}
: ./themes/사용테마/comment.tpl.php 28라인 style = "min-height:100px;" 으로 min-height 추가 (IE6에서 높이 작은 코멘트 겹침현상 해결)
: ./themes/사용테마/node.tpl.php 상단 아래 추가 (코멘트 작성 시 미리보기시 하단 여백 추가)
<?php
if(strpos($_SERVER['REQUEST_URI'], 'comment/reply') == TRUE) {
echo '<br />';
}
?>
: ./themes/사용테마/page.tpl.php RSS-Feed 아이콘 위치 변경

[ 코어 수정 부분 ]
#01. ./includes/common.inc
- 첨부파일의 타켓을 새창으로 변경
- 아래와 같이 수정
if(strpos($path, file_directory_path()) == TRUE) {
$target = ' target="_blank" ';
} else {
$target = '';
}

return 부분에 $target 추가

#02. ./includes/file.inc
- 한글 파일명 업로드 문제 해결

/**
* Korean File Patch
* replace basename() -> kr_basename()
*/
function kr_basename($path) {
$pattern = (strncasecmp(PHP_OS, 'WIN', 3) ? '/([^\/]+)[\/]*$/' : '/([^\/\\\\]+)[\/\\\\]*$/');
if (preg_match($pattern, $path, $matches))
return $matches[1];
return '';
}

위 함수 추가 후,
basename 함수를 쓰는 부분을 모두 kr_basename 으로 변경
$basename 변수 부분도 있으므로 주의해서 함수부분만 수정

#03. ./module/filter/filter.module
- 글 내용 중 자동 링크 생성 부분을 새창으로 변경
- 수정부분 : _filter_url_parse_full_links, _filter_url_parse_partial_links 함수내에 target="_blank" 삽입

#04. .htaccess
- 한글 검색 오류 처리
<IfModule mod_url.c>
ServerEncoding UTF-8
</IfModule>
위 부분 최하단 추가
- 특정 경로 제외 (미리내 호스팅의 경우 /traffic 이 트래픽인데 접속 문제가 있어서...)
RewriteCond %{REQUEST_URI} !=/traffic 적절히 추가
- php_value max_execution_time 0 추가

#05. ./module/forum/forum.module
- "새로운 포럼 주제 올리기" 링크에 CSS로 눈에 뜨이도록 수정
- template_preprocess_forums 함수 내에서

$forum_types[$type] = array('title' => t('Post new @node_type', array('@node_type' => node_get_types('name', $type))), 'href' => 'node/add/'. str_replace('_', '-', $type) .'/'. $variables['tid']);

위 부분을 아래로 수정

// 글등록버튼 CSS추가
$forum_types[$type] = array('title' => t('Post new @node_type', array('@node_type' => node_get_types('name', $type))), 'href' => 'node/add/'. str_replace('_', '-', $type) .'/'. $variables['tid'], 'html'=>TRUE);

$forum_types[$type]['title'] = '<span class="form-submit" style="font-weight: bold;">'.$forum_types[$type]['title'].'</span><div style="height:10px;"></div>';

- 포럼 정렬 순서를 코멘트 작성시각이 아닌, 기본 글 등록 시각 기준으로 수정
: _forum_get_topic_order 함수에서 'l.last_comment_timestamp' 를 'n.created' 으로 변경

#06. 최근포스트, 포럼의 글 갯수 부분 정렬 left로 변경
- ./modules/tracker/tracker.css, ./modules/forum/forum.css

#06. 닉네임 사용
- 사용자 관리 > 프로필, 적절히 닉네임 추가
- ./indlues/theme.inc, theme_username 함수 수정 (아래 정도?)

function theme_username($object) {

//닉네임 아이디 뒤에 (닉네임) 추가
$userProfile = user_load(array(uid => $object->uid));
if ($userProfile->profile_nickname) {
$userProfile->profile_nickname = '('.$userProfile->profile_nickname.')';
} else {
$userProfile->profile_nickname = '';
}

if ($object->uid && $object->name) {
// Shorten the name when it is too long or it will break many tables.
if (drupal_strlen($object->name) > 20) {
$name = drupal_substr($object->name, 0, 15) .'...';
}
else {
$name = $object->name;
}

if (user_access('access user profiles')) {
//$output = l($name, 'user/'. $object->uid, array('attributes' => array('title' => t('View user profile.'))));
$output = l($name.$userProfile->profile_nickname, 'user/'. $object->uid, array('attributes' => array('title' => t('View user profile.'))));
}
else {
//$output = check_plain($name);
$output = check_plain($name.$userProfile->profile_nickname);
}
}
else if ($object->name) {
// Sometimes modules display content composed by people who are
// not registered members of the site (e.g. mailing list or news
// aggregator modules). This clause enables modules to display
// the true author of the content.
if (!empty($object->homepage)) {
//$output = l($object->name, $object->homepage, array('attributes' => array('rel' => 'nofollow')));
$output = l($object->name.$userProfile->profile_nickname, $object->homepage, array('attributes' => array('rel' => 'nofollow')));
}
else {
//$output = check_plain($object->name);
$output = check_plain($object->name.$userProfile->profile_nickname);
}

$output .= ' ('. t('not verified') .')';
}
else {
$output = check_plain(variable_get('anonymous', t('Anonymous')));
}

return $output;
}

#07. 최근 댓글 페이징 버그 수정
- ./modules/comment/comment.module

theme_comment_block 함수 아래로 수정, _comment_get_display_setting_block, comment_redirect_redirect_comment 2개 함수 추가

function theme_comment_block() {

$mode = _comment_get_display_setting_block('mode');
$order = _comment_get_display_setting_block('sort');
$comments_per_page = _comment_get_display_setting_block('comments_per_page');

$items = array();
foreach (comment_get_recent() as $comment) {
$items[] = l($comment->subject, 'node/'. $comment->nid, array('query' => comment_redirect_redirect_comment($comment->cid, $mode, $order, $comments_per_page), 'fragment' => 'comment-'. $comment->cid)) .''. t('@time ago', array('@time' => format_interval(time() - $comment->timestamp)));
}
if ($items) {
return theme('item_list', $items);
}
}

function _comment_get_display_setting_block($setting) {
global $user;

$node->type = 'forum';

if (isset($_GET[$setting])) {
$value = $_GET[$setting];
}
else {
// get the setting's site default
switch ($setting) {
case 'mode':
$default = variable_get('comment_default_mode_'. $node->type, COMMENT_MODE_THREADED_EXPANDED);
break;
case 'sort':
$default = variable_get('comment_default_order_'. $node->type, COMMENT_ORDER_NEWEST_FIRST);
break;
case 'comments_per_page':
$default = variable_get('comment_default_per_page_'. $node->type, 50);
}
if (variable_get('comment_controls_'. $node->type, COMMENT_CONTROLS_HIDDEN) == COMMENT_CONTROLS_HIDDEN) {
// if comment controls are disabled use site default
$value = $default;
}
else {
// otherwise use the user's setting if set
if (isset($user->$setting) && $user->$setting) {
$value = $user->$setting;
}
else if (isset($_SESSION['comment_'. $setting]) && $_SESSION['comment_'. $setting]) {
$value = $_SESSION['comment_'. $setting];
}
else {
$value = $default;
}
}
}
return $value;
}

function comment_redirect_redirect_comment($cid, $mode, $order, $comments_per_page) {
global $user;

$comment = _comment_load($cid);

if (empty($comment)) {
drupal_not_found();
}

$sqland = '';
$query_args = array();

if (!user_access('administer comments')) {
$sqland .= ' AND c.status = %d';
$query_args[] = COMMENT_PUBLISHED;
}

if ($order == COMMENT_ORDER_NEWEST_FIRST) {
if ($mode == COMMENT_MODE_FLAT_COLLAPSED || $mode == COMMENT_MODE_FLAT_EXPANDED) {
$sqland .= ' AND c.timestamp > %d' ;
$query_args[] = $comment->timestamp;
}
else {
$sqland .= ' AND c.thread > "%s"' ;
$query_args[] = $comment->thread;
}
}
else if ($order == COMMENT_ORDER_OLDEST_FIRST) {
if ($mode == COMMENT_MODE_FLAT_COLLAPSED || $mode == COMMENT_MODE_FLAT_EXPANDED) {
$sqland .= ' AND c.timestamp < %d' ;
$query_args[] = $comment->timestamp;
}
else {
$sqland .= ' AND SUBSTRING(c.thread, 1, (LENGTH(c.thread) - 1)) < SUBSTRING("%s", 1, (LENGTH("%s") - 1))';
$query_args[] = $comment->thread;
$query_args[] = $comment->thread;
}
}

if ($mode == COMMENT_MODE_FLAT_COLLAPSED || $mode == COMMENT_MODE_FLAT_EXPANDED) {
$commentresult = db_query('SELECT count(*) as cnt FROM {comments} c WHERE c.nid=' . $comment->nid . $sqland, $query_args);
}
else {
$commentresult = db_query('SELECT count(*) as cnt FROM {comments} c WHERE c.nid=' . $comment->nid . $sqland, $query_args);
}
$commentcnt = db_fetch_object($commentresult);
$page = floor($commentcnt->cnt / $comments_per_page);
$query = ($page > 0)?('page=' . $page) : '';

return $query;
}

[ 한글 번역 파일 수정 ]
7086 라인

"href=\"@admin-node-book\">책 관리 페이지에서 전체 책의 "

-> "<a href=\"@admin-node-book\">책 관리 페이지에서 전체 책의 "

7326 라인

"href=\"@contact\">연락처 페이지는 방문자가 댓글이나 "

-> "<a href=\"@contact\">연락처 페이지는 방문자가 댓글이나 "

10171 라인

"href=\"@accesslog\">액세스 로그의 설정 페이지에서 "

-> "<a href=\"@accesslog\">액세스 로그의 설정 페이지에서 "

4259 라인

"관리자 아이디을 입력하십시오. 공백 문자는 사용할 "

-> "아이디를 입력하십시오. 공백 문자는 사용할 "

4437 라인

"적확한 이름을 입력하십시오"

-> "정확한 이름을 입력하십시오"

2219, 2220 라인 교체

msgstr[0] "1개의 댓글"
msgstr[1] "@count개의 댓글"

[ 설치 히스토리 ]
#01. 6.20 설치
- 2011년 초에 7이 나왔지만 6를 선택할 수 밖에 없었던 이유는 7은 다중 DB를 사용할 수 있어야하는데, 사실 국내 호스팅 환경에서는 불가능합니다. 서버호스팅이 아닌 이상... 단순히 이 이유 하나입니다.
#02. FTP UPLOAD (***.tar.gz)
#03. 압축 해제
#04. ./sites/default/default.settings.php 를 ./sites/default/settings.php 로 복사
#04. ./sites/default 폴더와 ./sites/default/settings.php 파일의 권한을 0707로 변경
#05. 사이트 접속
#06. 설치 진행 (사실 별거 없습니다)
#07. ./sites/default 폴더와 ./sites/default/settings.php 파일의 권한을 다시 바꾸라는 말이 나오면 2개를 0755로 변경하고 계속 진행
#08. 설치 완료 및 접속 확인
#09. 한글화 진행
#10. http://localize.drupal.org/translate/languages/ko 에서 버젼에 맞는 po 파일 다운로드
#11. 사이트 Admin 로그인
#12. Home › Administer › Site building > Modules, Locale 모듈 활성화
#13. Home › Administer › Site building > Translate interface, Import 메뉴에서 받을 파일 넣고 Import into: Korean 선택하고 Import
#14. Home › Administer › Site configuration > Languages, 한국어 Default로 설정

[ 환경 설정 부분 ]
#01. 이 부분은 입맛에 맞추어 사용하실 부분이지만 제가 설정한 몇가지만 안내해봅니다.
#02. 관리 > 사용자 관리 > 사용자 설정, "[v] 방문자 계정 생성시 이메일을 이용해 검증합니다." 해제
- 기타 메일 보내는거 모두 해제
#03. 홈 › 관리 › 사용자 관리 > 사용자 설정, 아바타 기능 활성화
- 홈 › 관리 › 사이트 구성 › 테마
- "글에 사용자 이미지 보여주기", "주석에 사용자 사용자 보여주기" 활성화
#04. 홈 › 관리 › 사이트 설정 › 입력 형식 > 입력 형식 추가, "순수 Text 타입 추가"
- HTML 필터, 줄바꿈 변환기 체크만 키고 설정에서 "모든 태그 인식 회피" 선택
#05. 홈 > 관리 > 보고서 > 접근내역설정, 조회수 사용 활성화
- 위에 접근내역 어찌구 활성화
#06. 홈 > 관리 > 사용자 관리 > 프로필에 개인만 볼 수 있는 항목으로 적절히 추가
#07. 홈 > 관리 > 콘텐츠 관리 > 콘텐츠 타입 > 모두
- 워크 플로우 : 첫페이지보기 표시 해제
- 댓글 설정
a) 기본출력 순서 : 예전것 우선
b) 댓글제어판 : 댓글 위에 출력
c) 댓글 미리보기 : 선태사항
d) 댓글 제출 폼의 위치: 포스트나 댓글 아래에 보여준다
#08. 홈 > 관리 > 사이트설정 > 파일올리기
- zip 7z alz rar torrent 추가
#09. Filtered HTML 허용 태그에 추가
- <img> <embed> <font> <b>

하루한마디

31668



번호 한마디 작성자 작성시각 선택P 랜덤P 적용P
31668 오늘은 몇 포인트를 받을까? zonel(푸른바다위의 허스키) 2012-02-23 05:07:03 50 46 46
31667 오늘은 몇 포인트를 받을까? josim(조심이) 2012-02-23 00:13:07 27 29 29
31666 오늘은 몇 포인트를 받을까? josim(조심이) 2012-02-21 22:40:26 27 30 30
31665 ~~~~~~~~~~~~3 cggss(천영주) 2012-02-21 21:49:04 3 27 27
31664 이번 감기 아주 제대로구만요... 죽어버리겠음.. kangmin2z(KangMin) 2012-02-21 09:52:25 - 38 38
31663 으아아아아아아아아아아~~~~~~~악 atom9714(아토믹스) 2012-02-21 08:21:37 49 19 19
31662 오늘은 몇 포인트를 받을까? zonel(푸른바다위의 허스키) 2012-02-21 05:14:45 50 41 41
31661 오늘은 몇 포인트를 받을까? josim(조심이) 2012-02-20 22:57:40 28 25 25
31660 쇼군2에빠지다.. dddksw(훈™) 2012-02-20 18:22:47 46 31 31
31659 오늘은 몇 포인트를 받을까? josim(조심이) 2012-02-19 23:06:58 27 23 23
31658 오대산 등산후 경포해변에서 일출감상후 복귀! dddksw(훈™) 2012-02-19 16:07:59 50 44 44
31657 오늘은 몇 포인트를 받을까? josim(조심이) 2012-02-19 12:19:35 20 25 25
31656 새벽 출근했습니다. 일요일에....쩝.. kangmin2z(KangMin) 2012-02-18 21:50:42 - 6 6
31655 오늘은 몇 포인트를 받을까? josim(조심이) 2012-02-18 04:39:40 43 31 31
31654 늦은 저녁 먹기전에 찍기한방 tannim(Bbtan) 2012-02-17 12:40:23 35 27 27
31653 휴.. 너무 바쁩니다.. 미치겄네... kangmin2z(KangMin) 2012-02-17 07:09:46 - 22 22
31652 오늘은 몇 포인트를 받을까? zonel(푸른바다위의 허스키) 2012-02-17 04:58:40 50 2 2
31651 오늘은 몇 포인트를 받을까? josim(조심이) 2012-02-16 23:08:22 22 44 44
31650 오늘은 몇 포인트를 받을까? josim(조심이) 2012-02-15 23:18:58 24 44 44
31649 오늘은 몇 포인트를 받을까? josim(조심이) 2012-02-14 23:12:29 26 19 19
1 [2][3][4][5][6][7][8][9][10]..[1584] [다음]
■ 핫키 : 1 or H → 홈 | 2 or R → 리뷰 | 3 or F → 자유게시판 | 4 or T → 최근 포스트
■ 스크랩 : Shift+s를 누르시면 개인 스크랩을 보거나 추가할 수 있습니다. 단축키로 열리지 않으시면 [클릭].
매주 월요일 오전 중에 1시간을 택해 임시 페이지와 함께 DB BackUp이 이루어집니다.
호스팅 만료일 2012-04-22까지 58일 남았습니다.
도메인 만료일 2012-06-11까지 108일 남았습니다.
업로드 : (7.10MB/500MB)