7.x 버전대

드루팔 모듈 개발시에 겪을 수 있는 DB 쿼리 관련 에러 대응책

드루팔 모듈 개발시에 겪을 수 있는 DB 쿼리 관련 에러 대응책

드루팔 모듈을 개발할 때, Drupal DB 이외의 또다른 DB로의 접근이
필요하게 되면 조심해야 할 것이 있다. 바로 Connection 관리 문제다.

드루팔 모듈을 만들다가 현재 드루팔 DB 이외의 또다른 DB로의
컨넥션을 Class 혹은 mysql 관련 표준 함수로 접근하게 되면,
쿼리 관련 에러가 나타나거나 권한이 없다는 메시지가 계속 나온다.

대표적인 쿼리 에러로는 watchdog에 드루팔 움직임을 기록하는 것이
가장 먼저 나타나는 현상이다.

원인은 드루팔 컨넥션이 일시적으로 다른 DB 컨넥션 때문에 교란당한 것이다. 자세히 보기 »

드루팔에 매우 긴 본문(BODY)을 입력하면 보이지 않는다?!

드루팔에 매우 긴 본문(BODY)을 입력하면 보이지 않는다?

오늘 다소 황당한 일을 겪었다.

드루팔에 매우 긴 본문(BODY)을 입력했더니 본문이 표시되지 않았다.
그 본문을 조금씩 잘라나가니 어느 순간에 잘 보이기 시작했다.
입력하고자 했던 컨텐츠 본문의 길이는 대략 47만자(한글/일본어/숫자/영문 포함) 정도였는데,
본문을 아주 많이 줄이니까 그제서야 보였다. 문제다.

그래서 찾아보니 http://drupal.org/node/133188 에 같은 증상 및 해답이 있었다.
문제 제기한 사람도 영문 기준으로 3만자 이하로 되면 잘 보이기 시작한다는 것이다. 자세히 보기 »

어느날 갑자기 드루팔로 로그인이 안될 경우...

제목 : 어느날 갑자기 드루팔로 로그인이 안될 경우...

최근에 겪은 일이다.

운용 중인 한 드루팔 사이트에 로그인이 전혀 안되는 것이 아닌가?
정확하게 아이디 / 암호를 넣었다만 처음의 비로그인 상태로 돼 버린다.

특히 관리자로 로그인을 할 수 없으니 WatchDog 등의 에러 메시지 보는 것도 쉽지 않다.

이럴 경우에는, 원인 분석을 위해
- 드루팔 DB의 watchdog 를 직접 살펴보거나
- 또는 서버의 phperror.log를 살펴보는 것이 좋다.

역시나 로그인 관련해서 에러 메시지가 나오고 있었다.
Table \drupal_db\sessions is marked as crashed and should be repaired
query: sess_write
 자세히 보기 »

메뉴 Menu 의 표시를 유저 User 권한별로 나누고 싶은 경우

제목 : 메뉴 Menu 의 표시를 유저 User 권한별로 나누고 싶은 경우

드루팔은 기본적으로 "사용자 권한" 설정 관리화면에서
세팅한 대로 관련 메뉴를 보여주기도 안보여주기도 한다.

그런데 이 방식이 애매하게 적용되지 않는다던가,
상황에 따라서는 아주 복잡한 조건에 의해 메뉴가 보일 수도 있다.
예를 들어 특정 Role 에 의해서만 해당 메뉴를 보이게 한다던가 말이다.

이런 경우에는 Menu per Role 모듈을 권한다.
http://drupal.org/project/menu_per_role

사용상 주의) 이 모듈을 설치/활성화 후에
각 메뉴의 편집화면에 가면,
Restrict access permission 항목의  자세히 보기 »

손쉬운 WebForm 제작 모듈 - 프로그래밍 하지 않고도 간단한 Form과 집계화면을 제작한다

손쉬운 WebForm 제작 모듈 - 프로그래밍 하지 않고도 간단한 Form과 집계화면을 제작한다.

WebForm 모듈 - http://drupal.org/project/webform

아주 좋다. 커스터마이징과 Validation은 좀 더 기능이 늘어나야 하겠지만
간단한 접수 폼에는 이것만큼 쓰기 좋은 모듈이 없을 것만 같다.

이해를 돕기 위한 동영상도 있다.
http://vimeo.com/33666701


음식 주문하는 웹 폼 만들기 예제이다.
http://geoffhankerson.com/c/files/video/webform.mov

드루팔 DB를 백업할 때 고려할 점 - 용량

드루팔 DB를 백업할 때 고려할 점 - 용량이 크다.

드루팔 DB를 MySQL 덤프를 이용해서 백업해 보면,
예상보다 그 용량이 큼에 놀란다. 물론 항상 그런 것은 아니며
특정 기능을 활성화한 경우에 용량이 많이 늘어난다.

정보의 중요성에 볼 때 백업하지 않아도 될 만한 것도 있는데,
그러면서도 용량이 큰 테이블 몇 개를 메모해 둔다.

- accesslog : 드루팔 사이트로의 사용자 접근 기록을 담당한다.
일부 주요 기능으로는 해당 컨텐츠를 몇 번 봤는지를 이 테이블이 기록한다.

- watchdog : 드루팔 사이트의 각종 로그(실행 결과/에러)를 모두 기록한다.

- cache_*** : 드루팔 사이트의 가속 기능을 담당하는 테이블이다.
자주 반복되는 출력 정보를 정제해서 캐슁해 둔다.

혹 링크 체크 모듈이나 트위터 관련 모듈을 사용하는 경우,

- linkchecker_***

- tweet***

이름의 테이블이 굉장히 커 질 수 있으니 주의하기 바란다.

PHP 환경설정의 메모리 부족으로 인한, 드루팔의 에러 및 대처요령

PHP 환경설정의 메모리 부족으로 인한, 드루팔의 에러 및 대처요령을 기록해 둔다.

* 유용한 참고 - http://drupal.org/node/76156

[현상]
드루팔 모듈이 많아지면 어느 순간 이런 에러가 나타날 수 있다.

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 1584850 bytes)

[원인]
PHP.ini의 기본 설정 중, 메모리 최대 사용량이 드루팔에서 요구하는 용량보다 작기 때문이다.

[대처]
위 유용한 참고 출처에서 대처한 3가지 중 한가지를 사용해서 해결한다.

추천하는 방법은

1. (댓글에도 적혀 있는) PHP 소스 레벨에서 수정하는 방법이다.
sites/default 혹은 사이트명/setting.php 의 중간에... 아래 구문을 넣어볼 것.

ini_set('memory_limit', '50M');

2. 또는 .htaccess 파일에 아래와 같은 항목을 추가하는 것이다.

php_value memory_limit 50M

# PHP의 가용 메모리량을 50MB로 늘린다.
# 단, 이것은 해당 서버의 아파치에서 .htaccess 설정이 개별적으로 설정 가능한 경우에 한한다.

* 중요 ) 1번 방법을 더 추천하는 이유는, 2번 방법의 경우 드루팔 버전업을 하다 보면
코어 파일들을 덮어쓸 때 .htaccess조차 원복되는 현상이 생겨 메모리 제한이 또 생기기 때문이다.

drupal 모듈 작성시 유용한 각종 변수, 함수들

drupal에 특화된 모듈을 PHP 작성할 때,
아래와 같은 변수, 함수들을 알면 매우 유용하다.

1. 현재 로그인한 유저 정보를 확인할 때

    global $user;
    drupal_set_message( "<pre>".print_r( $user, true )."</pre>" );

* 참고로 현재 로그인한 유저의 롤은 $user->roles로 확인 가능하다.

2. 모듈의 상대 패스(드루팔 설치폴더 이하)를 알고 싶을 때

$module_path = drupal_get_path('module', '작성한 모듈명');

* 참고로 드루팔 모듈은 3군데 이상(modules, sites/사이트명/modules,
sites/all/modules, sites/default/modules )에 배치 가능하다.
그러다 보니 패스확인을 위해 위와 같은 drupal_get_path 함수가 필요하다.

* 그러므로 한 모듈 아래에 images 폴더가 있는 경우에는,

      <img src='".$base_root."/".$module_path."/images/draggable-sample.png' align='absmiddle'/>

와 같이 하면 된다.

* 현재 돌고 있는 드루팔의 최상단 웹주소를 알려면, 다음과 같이 하라. 자세히 보기 »

드루팔 모듈을 개발하고 싶은 사람은 반드시 섭렵해야 할 Drupal Form API Tutorial

드루팔 모듈을 개발하고 싶은 사람은 반드시 섭렵해야 할 Drupal Form API Tutorial 이다.

1단계에서 10단계까지 소스 예제로 구성돼 있는데,
9단계와 10단계 이외에는 전부 쉽다. 추천한다!

http://drupal.org/node/262422

아울러 각 단계별 소스에 관한 설명을 나열해 보면,

Form API Tutor #1 - 나만의 모듈을 만들어서 화면에 제목 나오게 하기

Form API Tutor #2 - adding a "Submit" button

Form API Tutor #3 - add Fieldsets

Form API Tutor #4 - Collapsible fieldsets

Form API Tutor #5 - 폼의 각종 Attribute 등을 설정하기

Form API Tutor #6 - Validation

Form API Tutor #7 - add the submit function and message

Form API Tutor #8 - Reset : a new button to reset the form and some validation

Form API Tutor #9 - button조작에 의한 fieldset의 동적 확장 (난이도 높은 듯)

Form API Tutor #10 - 위저드 형태로 폼을 변형한 예제 ( next --> next --> ... )

* 아쉬운 것은, DB로의 입력 예제도 있으면 했는데, 없었다.

* Form API에 관한 보다 상세한 주소는 아래와 같다. 자세히 보기 »

컨텐츠 종류에 따라 글의 작성자, 등록일시를 화면에서 보이지 않고 싶은 경우.

컨텐츠 종류에 따라 글의 등록정보(일본어판에서는 投稿情報)를 화면에서 보이지 않고 싶은 경우.

글의 등록정보(작성자, 등록일시)라는 것은 대부분의 드루팔 컨텐츠에서 기본적으로 보인다. 아래에 예가 있다.

| 작성자 이름 Posted at 12:48 on 토, 05/24/2008 |

이러한 등록정보를 컨텐츠의 종류에 따라서 출력하지 않아야 하는 경우가 있다.
예를 들어 어떤 붙박이 페이지를 디자인해서 HTML을 붙여 넣었는데, 디자이너가 의도한 것 이상의 화면요소인 등록정보가 표시되면 곤란하다. 하지만 드루팔의 대부분의 컨텐츠들은 기본적으로 이를 표시한다.
그래서 이를 안보이게 하려면 테마의 page.tpl.php를 수정해 보지만 도대체 이 "등록정보"라는 항목이 안보인다.
어디에 있는 것일까? 나중에 알고 봤더니 $content에 포함돼 있었다.
$content는 드루팔에서 자동작성하는 "컨텐츠 본문" 덩어리를 의미한다. 글의 등록정보만 안보이게 하고 싶은데 곤란해 졌다.

하지만 드루팔은 이미 해결책을 갖고 있었다...

이 문제를 해소하려면, 관리자 > 테마 > 설정으로 가면 해결할 수 있다.
정확한 주소는 admin/build/themes/settings 이다. 자세히 보기 »

내용묶음