2006年3月30日木曜日

osCommerceのMo Pics Modificationモジュールでエラーが出る

osCommerceにMo Pics Modificationtというモジュールを入れたらdefault.phpが真っ白になってしまう。という現象に遭遇した。
とりあえずapacheのログを見てみても参考になりそうな情報はない。
仕方ないので、ソースを一行一行調べていくうちに「catalog/includes/functions/html_output.php」に問題があることが判明。さらに「tep_parse_input_field_data」という関数が原因だとわかった。
で、「tep_parse_input_field_data」でググってみると下記のブログに出会った。
http://www.kanalize.com/modules/wordpress/index.php?p=15
なるほど、関数が競合してるのか。
さっそく関数をコメントアウトしてみると、おお、無事動いた。
めでたしめでたし。

2006年3月29日水曜日

ウェブ進化論 本当の大変化はこれから始まる

会社の同僚に勧められて読みました。司馬遼太郎以外の本、特にIT系の本を読むのはすごく久しぶりなのでなかなか新鮮な感じです。
いきなりですけど本書の結論としては
「これから先、ネットによって社会はまだまだ変わってゆく。パラダイムシフトが必要だ!」
というところへいきつく。
で、その結論にたどりつくまでの過程がおもしろくて勉強になります。まずオープンソースプロジェクトとかGoogleやAmazonに代表されるサービスを通して現在のネット社会を分析。そしてそこから未来のネット社会の姿を予想し、その未来に対処するための心構えを示唆してくれます。
あと、作中に頻出する『あちら側』『こちら側』という表現はおもしろいし、使えそう。IT業界用語として定着しそうな気がしました。
この本を読んだおかげで、今後のウェブがもたらす変化した社会について、漠然とですが心構えが身についたような感じです。その心構えは今すぐに効果として現れることはないと思うけど、今後何年・十何年かけてジワジワとボディブローみたいに効いてくるような予感がします。
新書なので読みやすく、ボリュームもちょうど良い。とりあえず読んでおいて損は無い一冊だと思います。

2006年3月24日金曜日

携帯端末のUserAgent

携帯端末用ブラウザにはさまざまな種類があり、それについての情報がウェブ上に沢山ありますが、中でもこのサイトが一番分かりやすかったです。
http://www.mt312.com/php/env.mobile.html
以下、各キャリアのホームページのユーザーエージェント情報。
ドコモのユーザーエージェント
http://www.nttdocomo.co.jp/p_s/imode/xhtml/s1.html#1_2
AUのユーザーエージェント
http://www.au.kddi.com/ezfactory/tec/spec/4_4.html
vodafoneのユーザーエージェント
http://developers.vodafone.jp/dp/tech_svc/info/useragent.php

2006年3月18日土曜日

ファイルアップロード先のパスをデフォルトで指定

MTのファイルアップロードには「アップロード先: (オプション)」というのがある。これを指定すれば「/image/hoge」みたいにアップする先を自分で決められる。
便利なようだけど、毎回入力する手間があるのと、さらに間違えて「/images/hoge」とか指定してしまい、画像格納ディレクトリが複数できてしまって美しくない、というようなことが起こりがちです。
そんなわけで、デフォルトで値を指定するようにしてみました。
/mt/tmpl/cms/upload.tmplの29行目のところを以下のように修正。
修正前
<input name="extra_path_site" />
修正後
<input name="extra_path_site" value="images/archive" />

ENABLE_ARCHIVE_PATHSを有効にしてる場合は21行目も同様の修正が必要だと思います。
すごく単純なことだけど、手間が省けてミスも防げるのでなかなか便利です。

2006年3月17日金曜日

osCommerce→zencartの移行メモ

osCommerceで稼動中のショッピングサイトを、zencartに移行するという仕事をやったので、そのときの注意事項をメモしておきます。

ちなみにoscのバージョンは不明(たぶん2.2)、zenのバージョンはzen-cart-v1.2.0-l10n-jp-6です。

---
◆DB
・oscからデータを抜き出す(dump)ときは、必ず「データのみ」にする。(oscとzenでテーブルのカラム数がだいぶ違うため)
・【address_bookテーブル】oscはプライマリキーが「address_book_id」と「customer_id」に張られている。それに対してzenは「address_book_id」のみ。なので修正が必要。
・【categories_descriptionテーブル】langidが異なっていたので、一括変換。『update `categories_description` set language_id = 2 WHERE language_id = 4;』
・【products_description】langidが異なっていたので、一括変換。『update `products_description` set language_id = 2 WHERE language_id = 4;』

◆画像
・oscのimagesをそのまんまzenのimagesに全コピー

◆その他
・カテゴリ画像をカテゴリページに表示させるために、tpl_index_product_list.phpをカスタマイズした。カテゴリ画像自体はtpl_products_next_previous.phpで出してる。
・クーポンは使わないので、注文合計モジュールからクーポンモジュールをアンインストール
・ソート順を変更するには「追加設定・ツール→ショップ管理用ツール→全商品」の価格ソートを更新。これをやらないとうまくソートできない。

◆httpsの設定は、「includes/configure.php」のENABLE_SSL_*をtrueに。管理画面は別に「admin/includes/configure.php」を設定する。

◆国名非表示&都道府県プルダウンモジュールを導入
http://www.zen-cart.jp/pukiwiki/pukiwiki.php?%A5%B3%A5%F3%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3
---

ほかにもいろいろカスタマイズしたけど、メモし忘れてしまった。。

なお、oscのことはあまり詳しくないので、oscに比べてzenがどうとか、そういう比較はほとんどわかりません。ただ、印象としてはzenのほうがテーブル数も多いし(oscが49個、zenは93個)、ファイル数も多く、includeとrequireも多いのでカスタマイズはやりにくい感じがします。

あと、zencart.jpの掲示板がおおいに役立ちました。

http://www.zen-cart.jp/bbs/

カスタマイズや設定方法について多くの質問と回答が寄せられており、かなり助けられました。
逆に言うと、この掲示板以外にはほとんど有用な情報は見つけられませんでした。。
以上。

2006年3月15日水曜日

携帯の空メール機能を実装

仕事でやったので、次の機会のためにメモしときます。
やること

 1.ユーザーがregist@hoge.comへ空メールを送る
 2.サーバーでメールを受ける
 3.内容をコマンドラインphpに渡す
 4.phpでメール内容を解析し、ユーザーに会員登録用フォームのURLを挿入したメールを返信

aliasesの設定
vi等で/etc/aliasesを開き、おしりのところに以下を追加。
regist: "| /path/to/script/empty_mail_regist.php"
追加や編集をしたらnewaliasesを実行して設定を反映する。(忘れてしまいがちなので注意)

phpスクリプトを用意
/path/to/script/empty_mail_regist.phpを書く。PEARのMail_Mimeクラスを使ってヘッダを解析してます。

#!/usr/local/bin/php -q
<?php
//PEARのライブラリ読み込み
require_once('/path/to/pear/Mail/mimeDecode.php');
//メールソースを標準入力から読み込み
$source = file_get_contents("php://stdin");
if(!$source)
{
  echo "fail!\n";
  exit();
}
//メール解析
$params['include_bodies'] = true;
$params['decode_bodies']  = true;
$params['decode_headers'] = true;
$decoder = new Mail_mimeDecode($source);
$structure = $decoder->decode($params);
$from = mb_convert_encoding(mb_decode_mimeheader($structure->headers['from']), mb_internal_encoding(), "auto");
if( preg_match( '/<([^>]+)>$/', $from, $regs )){ $from=$regs[1]; }
$from = strtolower($from);
//会員登録用URL
$body = "https://hoge.com/user_regist.php?mail=" . rawurlencode($from);
//メール返信
mb_internal_encoding("utf-8");
mb_language("japanese");
mb_send_mail($from, "empty_mail", $body, "From: admin@hoge.com");
?>


以上。

仕組みがわかれば案外簡単です。(やってることが超シンプルってこともありますが)

上記の場合はヘッダからFromを取得してるだけですが、添付ファイルとかサブジェクトなどを取得する場合は日本語関連の問題などが出てきそうな気がします。
参考URL
http://labo0000.jp/maildo/maildo.html

2006年3月14日火曜日

携帯端末用HTMLフォームでの入力補助

携帯端末用のHTMLフォームにて、テキストフィールドで情報を入力する際、下記のような属性を与えれば入力モードの指定ができます。
ひらがな入力:istyle="1" mode="hiragana"
半角カナ入力:istyle="2" mode="katakana"
英字入力:istyle="3" mode="alphabet"
数字入力:istyle="4" mode="numeric"

istyleはiモードとEZwebで、modeはvodafoneで効果がある。下記のように、両方セットで入れとけばどっちにも対応できます。
<input type="text" name="hoge" istyle="1" mode="hiragana"> 

2006年3月12日日曜日

postgresでSQLのログを取得する

「postgres8.0で、SQLのログを取る」という作業をやった。

/var/log/postgres

初期状態ではここにエラーログ等が記録されるようになってるが、今回はここにDML(insert.update.delete)のログも残すようにした。

設定は簡単。postgresql.confにある「log_statement」のところを「log_statement = 'mod'」にするだけ。

そして「pg_ctl reload」で設定を読み込ませればDMLが記録されるようになります。

以上。

http://ml.postgresql.jp/pipermail/pgsql-jp/2003-November/015217.html
http://www.sraoss.co.jp/PostgreSQL/8.0/changes.html
http://www.postgresql.jp/document/pg721doc/reference/app-pg-ctl.html

2006年3月10日金曜日

Smartyのアウトプットフィルタを使ってみる

ウェブサイト(UTF-8)の登録フォームを携帯端末(SJIS)にも対応させるのをやろうと思い、Smartyのアウトプットフィルタを使ってみた。

こんな感じ
$smarty->register_outputfilter("filterSjis");
function filterSjis($buff, &$smarty)
{
return mb_convert_encoding($buff,"SJIS","UTF-8");
}


プリフィルタとポストフィルタはテンプレートに記述されている文字列を変換するだけで、DBなどから動的に出力する文字列には効かない。アウトプットフィルタの場合はブラウザへ出力する直前のデータをフィルタしてくれる。

これで無事解決。。。。と思ったのだけれど、このままでは出力されるヘッダがUTF-8のままのため、文字化けが発生してしまう。さて、どうしたもんか、、、と思いつつGoogleで調べてみたら「ini_set("default_charset", "Shift_JIS");」を入れれば解決できることがわかった。

これが最終形
$smarty->register_outputfilter("filterSjis");
ini_set("default_charset", "Shift_JIS");
function filterSjis($buff, &$smarty)
{
return mb_convert_encoding($buff,"SJIS","UTF-8");
}

MTのトラックバック通知メールのトラックバックを編集URLが改行されてしまう

MTで、トラックバックが入ったら自動でメール通知してくれる機能がある。で、このメールに記載されるトラックバック編集用URLが途中で改行されてしまって困っていた。
こんな感じ↓
「エントリ名 (ブログ: ブログ名、エントリーID: ****)」への未承
認のトラックバックを受け付けました。トラックバックを公開するためには承認を
してください。
トラックバックを承認: <http://mt.kawama.jp/mt.cgi?__mode=view&id=***&_t
ype=ping&blog_id=***>

いろいろ試してみたら、/mt/tmpl/email/new-ping.tmpl を編集すれば簡単に直せることが分かった。
7行目を以下のように変更。見ての通り改行を入れるだけです。ついでに余分な<>も取り除きました。
変更前
<MT_TRANS phrase="Approve this TrackBack:"> <<TMPL_VAR NAME=EDIT_URL>>

変更後
<MT_TRANS phrase="Approve this TrackBack:">
<TMPL_VAR NAME=EDIT_URL>

これでトラックバックの管理がかなりやりやすくなりました。

postgresqlでクエリ実行ログを取る

postgresqlのバージョン7.4以前の場合は、コンパイルオプションでログを取るように明示的に指定しなくてはいけないらしい。
7.4以降はデフォルトでログを取るようになっているが、デフォルトではクエリログは取得しないので、postgresql.confにて設定が必要。
↓ここに詳しい内容が載ってます
http://ml.postgresql.jp/pipermail/pgsql-jp/2003-November/015217.html

2006年3月9日木曜日

mysqlとphpの連携で文字化け。skip-character-set-client-handshakeで解消

だいぶ使い慣れてきたMySQL5.0。

が、しかし!油断していたら文字化けが発生!

新しいサーバーにmysqlとphp、apacheを設置し、いつものようにアプリ開発しようと思ったが、mysqlからselectしてphpでデータ出力する際、日本語が「????」という感じで、はてなマークの羅列になってしまう。

こんな現象初めてだ。。。
しばらく悩んだけど、google先生が解決してくれた。「skip-character-set-client-handshake」というおまじないで文字化け問題解消。my.cnfの[mysqld]の項に以下のような感じで一行追加。

[mysqld]
skip-character-set-client-handshake


mysqldをリスタートしたら日本語が表示できるようになりました。よかったよかった。

ちなみに「skip-character-set-client-handshake」は、『サーバーの文字コード設定をクライアントでもそのまま使う』という意味だとか。

http://puchiko.lowtech.ne.jp/?itemid=349&catid=27

2006年3月8日水曜日

JavaScriptでフォームで参照された画像をリアルタイムに表示する

参考になるサイトを発見したので、忘れないようにブックマーク。
firefoxは仕様上の問題でダメみたいだけど、なかなか使えそう。
http://codeweb.seesaa.net/article/6891945.html

2006年3月3日金曜日

MySQLのcase構文

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_15.htm
これまでcase構文の存在を知らなかったので、目からウロコだった。
case、すんごい使えそう。これからバリバリ活用していきます!