2010/02/02

oscommerce - EUCからUTF-8に移行

oscommerceはデフォルトでEUC推奨なので全てEUCだ。
データベースにMySql4を使っているので、MySql5に移さないと使えない。
作業的にはこんな順序かな?

oscommerceのファイルバックアップ

データベースのバックアップ

スクリプトの修正Mysql4=>MySql5
../catalog/default.php
../catalog/advanced_search_result.php


言語ファイルのCHARSETをUTF化と全ての書類のUTF化
(書類の文字コードもUTF-8のLF改行で統一)
../catalog/includes/languages/japanese.php

サーバー設定をlocalhostからMySql5のサーバーに変更(UTF-8)

バックアップしたsqlファイルを開きデータを確認。日本語等が文字化けしてsyntaxエラーを引き起こすのですが、出たら出たでエラーレポートを見てエラーの周辺の行をチェックして修正または削除。¥r¥nの削除または『¥』を『\』(バックスラッシュ)に置き換え

DBをドロップしてMySQL5へ切り替え(照合順序はutf_general_ci)
DBにUTFのsqlファイルをインポート15MBまでならphpMyadminでGO

修正したファイルをアップロード

カテゴリーが文字化けする場合はキャッシュが効いているので、管理画面より
[各種ツール]=>[キャッシュコントロール]=>カテゴリーボックスのキャッシュブロックを削除

フッターの文字化けは大概日付。
../catalog/includes/languages/japanese.phpの以下の箇所
define('DATE_FORMAT_LONG', '%Y年%m月%d日(%a)'); // this is used for strftime()
これを
define('DATE_FORMAT_LONG', '%Y年 %m月 %d日'); // this is used for strftime()
こう(半角開けただけ)

OscommerceにTwitterボタン

まずtwitterで呟くからには文字コードがutf-8でなければならない。

oscommerceの文字コードはEUC-JP
UTF-8に移行する方法は後にして、、


投稿するにはこうする
http://twitter.com/home?status=RT:@ユーザー 書き込みたい事

なので書き込みたい事に商品タイトルを入れてみる

echo "<a href=\"" . "http://twitter.com/home?status=RT:@ユーザー " . $product_info['products_name'] . "\" target=_blank>\n";?>

リンクが欲しいのでそのページのURLを取得する

そしてページのURLを組み込んでボタンを作ってみる
たとえばtwitter.gifなんてしてみて、、
../catalog/includes/language/japanese/images/button/
にアップロードして次のファイルを編集
../catalog/includes/language/japanese.phpに
define('IMAGE_BUTTON_TWEET', '呟く');
と一行挿入してアップロード
で、以下のコードをproduct_info.phpに貼付けて完成
<!-- Twiter Button BEGIN -->
<?php
$url = $_SERVER['REQUEST_URI'];
echo "<a href=\"" . "http://twitter.com/home?status=RT:@ユーザー " . $product_info['products_name'] . " http://dubfactory.com" . $url . "/" target=_blank>\n";?><?php echo tep_image_button('button_twitter.gif', IMAGE_BUTTON_TWEET); ?></a>
<!-- Twitter Button END -->

現在のページ(カレントURL)をphpで取得する

ヘッダやフッタなど、ほぼ全ページに渡って同じ内容だと思うのだが、これを更新するときはどのようにしているだろうか。私は Dreamweaver 嫌いなので、テンプレート機能は使わない。テンプレートを更新すると、テンプレートを使っているページ全てをアップロードしなければならないので、面倒だし危険性(先祖返り)の可能性もある。

もうお気づきだろうが、私は ssi を使用している。これならば ssi だけをアップロードすれば良いし、php を ssi にすればレイアウトは同じでページ毎にやや違うといった、メニューやパンくずリストにも使える。

まず、php で現在ページを取得する。

$url = $_SERVER['REQUEST_URI'];

これで ssi として php を読み込んでいる側の html の url を取得できる。そしてこの取得した url を使って条件分岐を行う。
その前に、/index.html と / を分岐させなくてもいいように、置換しておく。

$url = str_replace("index.html", "", $url);

もしこの ssi がタイトルやメタ情報など、ページごとに違う用途に使うのであれば、$url に対する switch で分岐を行い、メニューのようにディレクトリごとに違う用途であれば、$url にディレクトリ名を strpos で探し、分岐を行う。

これでメタ情報だろうがメニューだろうがパンくずだろうが ssi にすることができ、更新が楽になる。