** Drupalとは? [#hf1b4659]

PHP4/5,MySQL/PostgreSQLで動くContent Managent System。

-本家 http://drupal.org/
-日本語サイト http://drupal.jp/
-[[Neobless:http://neobless.co.jp/ja/]] のDrupalガイド

** インストール [#wb1750ca]

本家から最新のDrupalをいただいてきて適当なところで展開しリネーム。
ここでは ~okumura/public_html/blog とする。

その中に files ディレクトリを作り,Apacheプロセスから読み書きできるようにする。

MySQLの動いているマシンで次のようにする。

 mysql -u root -p
 create database drupal;
 grant select, insert, update, delete, create, drop, index, \
   alter, create temporary tables, lock tables \
   on drupal.* to drupal@'oku.edu.mie-u.ac.jp' identified by 'hogehoge';
 flush privileges;
 quit;

次に,Drupal 5なら,sites/default/settings.phpをApacheに対してwritableにして,ブラウザでURLにアクセスすると,インストール設定画面が現れるので,適当に入力する。
データベースが別ホストにある場合は,Advanced optionsを開いてホスト名を入力する。
これで登録してうまくいったら,さきほどのsettings.phpのwrite permissionは落としておく。
あとはメニューに従ってユーザ登録やコンテンツ作成をしていくだけ。

Drupal 4なら,以下のようにする。
まず,Drupalを動かすマシン(oku.edu.mie-u.ac.jp)の Drupal ディレクトリで次のようにする。

 mysql -h データベースマシン -u drupal -p drupal <database/database.4.1mysql

sites/default/settings.php を編集:

 $db_url = 'mysql://drupal:hogehoge@データベースマシン/drupal';
 $base_url = 'http://oku.edu.mie-u.ac.jp/~okumura/blog';
 ini_set('session.cookie_path', '/~okumura/blog/');

このファイルはApacheだけに読めるようにしておけばよい。

これで http://oku.edu.mie-u.ac.jp/~okumura/blog/ が見えるはず。
最初に登録したユーザが管理者になるので,すぐに登録!

Drupal 4でも5でも,crontab に次のような項目を追加するのを忘れないこと。

 0 * * * * wget -q -O /dev/null http://oku.edu.mie-u.ac.jp/~okumura/blog/cron.php

最初の0は毎時0分に処理するということ。
0でなく0〜59のランダムな値のほうがいい。
5分ごとにするなら最初の 0 は */5 とする。

Clean URL を enable するには Apache を --enable-rewrite で configure しておく。
さらに,サイトのトップではなく /~okumura/blog/ に置く場合は /~okumura/blog/.htaccess
に RewriteBase /~okumura/blog と書く。

あと,当該ディレクトリの中にfilesというディレクトリを作り,Apacheに対して書き込み権限を与えておく。
最近のDrupalならその中に勝手に適当な.htaccessを作ってくれるはず。

** メッセージを日本語にするには [#f42f8853]

メニュー administer の modules で locale をオンにする。
Save configuration すると,administer メニューに localization という項目ができる。
これを選び,importing リンクをたどり,Language file に日本語サイトからダウンロードした ja.po
を選び,Imort into を Japanese にして,Import する。
localization に ja が追加されるので,こちらを Default にして Save configuration する。
なお,この作業で,php.ini の upload_tmp_dir が open_basedir に含まれないとエラーになる。

** モジュール [#x2f677d5]

http://drupal.org/project/Modules にいろいろなモジュールがある。
とりあえず TrackBack はブログに必要(どういうわけか4.7にしてから文字化けするので外してある)。
コメント投稿があればメールで伝える commentmail モジュールは便利。

// ** 無題のコメントがリンクできない [#v9bdf8b3]

// あと,長いコメントタイトルが文字の途中で切れるという問題もある。

// これらは comment.module の function comment_validate_form の先頭部分を次のように直せばどうだろう。

//  if (trim($edit['subject']) == '') {
//    $edit['subject'] = truncate_utf8(decode_entities(strip_tags(check_output($edit['comment'], $edit['format'], TRUE))), 30);
//  } else {
//    $edit['subject'] = truncate_utf8($edit['subject'], 60);
//  }
//  if ($edit['subject'] == '') $edit['subject'] = '無題';  // 念のため

//includes/common.inc の truncate_utf8() の定義も何か心配。中身の後半(if ((ord... 以降)は

//  while ((ord($string[$len]) & 0xC0) == 0x80 && $len > 0) { $len--; };
//  return substr($string, 0, $len);

//だけでいいような気もするし,そもそも $wordsafe=FALSE でしか使わないだろうから

// return mb_strcut($string, 0, $len, "UTF-8")

//だけでいいかもしれない。

** SSLでアクセスする [#db4f0547]

sites/default/settings.php を次のようにする:

 if (isset($_SERVER['HTTPS'])) {
   $base_url = 'https://oku.edu.mie-u.ac.jp/~okumura/blog';
 } else {
   $base_url = 'http://oku.edu.mie-u.ac.jp/~okumura/blog';
 }

** 予定表 [#f6a3eafd]

Eventモジュールを入れる。

Upcoming events ブロックを目立つところにつけておけば便利。
標準では upcoming events の表示は開始時間後2時間で消えてしまう。
これでは長いイベントで現在進行中のものが表示されないので,
modules/event/event.module の function event_block_upcoming の最初の query
の e.event_start >= %d を e.event_end >= %d に変え,$time を time() に変えた。

現在はGoogleカレンダーを使っているのでEventモジュールは不要になった。

** コメントスパム対策 [#v0ed3e09]

とりあえずコメントはモデレーション要とした。
少量であれば目視で消せるが,大量に書き込まれた場合は,とりあえず

 select * from comments where status=1 and comment regexp '<a href';

で確認して

 delete from comments where status=1 and comment regexp '<a href';

で消している。

//** コメント入力フォームが狭くなる [#c775a38e]

//Drupal 4.6.4 で起きる現象。
//includes/common.inc の function form_textarea で check_plain($cols)
//となっているところを $cols だけにする。
//Drupal 4.6.4 の変更の意図を生かすには,この関数の入り口のところで

//  $cols = $cols ? ' cols="'. check_plain($cols) .'"' : '';

//とすればいいのだろう。

//** PHP 5.0.5対策 [#l52863c3]

//以下はもうDrupal 4.6.4で直っている。PHP 5.1.1でも大丈夫。

//PHP 5.0.5の仕様変更のため,ところどころでエラーが出る。
//http://drupal.org/node/36003 参照。
//一般論としては 5.0.4 に戻すのが早いだろうが,ちょっとがんばってみた。
//とりあえずテーマの設定画面が真っ白になるエラーが modules/system.module
//で出るので,該当個所をハック。
//649行目を

// $tmp = variable_get('file_directory_path', 'files');
// file_check_directory($tmp, FILE_CREATE_DIRECTORY, 'file_directory_path');

//に,25行目を

// $tmp = explode('.', arg(3), 2);
// $theme = array_pop($tmp);

//にする。あるいは

// $theme = array_pop($tmp = explode('.', arg(3), 2));

//のようにするほうが修正が簡単かもしれない。

** 検索窓を作るとHTML Validationエラーになる [#e2fd9cda]

edit-submitというidが複数回使われるため。

現在使っているgooglesearchモジュールでは $form['submit'] = array( ... ) の中に '#id' => 'google_submit' のような適当なidをセットすればよい。

-----
- Drupal 4.7.0 正式版がリリースされました。[[Drupal Japan>http://www.drupal.jp/]] -- sawada &new{2006-05-06 (土) 12:24:32};
- 脆弱性が発見され 4.7.1 に。ついでに2chのスレ発見:http://pc8.2ch.net/test/read.cgi/php/1136103326/ -- 奥村 &new{2006-05-27 (土) 08:34:58};

#comment