最新のパッチはVer.1.1.2です
パッチ単体ではなくパッチを当てたファイルを提供しています。
以下の記述とパッチは日本語版の zencart ver.1.2.0-l10n-jp-3に対応しています。
構成
zencartをドキュメントルートに配置することを前提としています。
zencartをドキュメントルートではなくサブディレクトリ下に配置する場合は適切に変更する必要があります。
テンプレート関連のファイルを変更する場合はdefault_template内のファイルを直接変更するのではなく、あなたが利用するテンプレートディレクトリ内にコピーしてからそれを編集すると今後のバージョンアップ時にも簡単に対応できて良いでしょう。
(オーバーライドして下さいという意味です)
html_output.php
zencartではhtml_output.phpが主なURLの生成を行っているファイルになります。
このファイルで$linkがURLの変数です。この変数を変更することで新しいURLに置換することになります。見ればわかるように私のパッチはかなりベタです。パッチVer.0.9*未満は変更する場合や追加する場合にURLの置換順序に注意して下さい。順序を誤ると不要に置換してしまう可能性があります。
パッチVer.1.1でコードを一新しました。Ver.0.9までは$linkを変更する方式でしたが、Ver.1.1からは$pageと$parametersを変換して$linkを作成する方式になりました。
このようにVer.1.1からはURL変換処理のアプローチが変更になり、より確実にURL変換を行うことが可能となりました。
ZENCART_ROOT/includes/functions/html_output.php
- html_output.php for zencart 1.2.0 patch ver.1.1.2 (2005年10月12日)をダウンロードする。
- パッチのバージョン1.0は欠番です。
- html_output.php for zencart 1.2.0 patch ver.0.9.5 (2005年10月8日)をダウンロードする。
- html_output.php for zencart 1.2.0 patch ver.0.8 (2005年5月26日)をダウンロードする。
ダウンロード後にhtml_output.phpにリネームし、ZENCART/includes/functions/に置いて下さい。
日本語版用のパッチは上記のものしか提供していません。最新のパッチを追いかけたいなら英語版用を見て移植して下さい。(簡単です)
パッチバージョン0.9以降ではカテゴリ名と商品名を数字ではなく商品名に書き換えることが可能になりました。
例
http://example.com/categories/Hardware.html (カテゴリの例)
http://example.com/products/Microsoft_IntelliMouse_Explorer.html (商品の例)
なお、多段変換をしていますので私のパッチの古いバージョンからVer.0.9以降に変更した場合でも検索エンジン等からのリンクは無駄になりません。従来の数字のURLでも問題なくアクセスできます。
例
http://example.com/products/26.html
http://example.com/products/Microsoft_IntelliMouse_Explorer.html
上の行が古いパッチのURLで下がパッチVer.0.9のURLだとすると訪問者はどちらのURLでもアクセスできる。
url_data.php
パッチVer.0.9以降から新たに必要となったファイルです。
パッチVer.0.9ではurl_replace.datという名前でしたがVer.1.1からurl_data.phpに名称が変更になりました。(拡張子がdatだとファイルが覗かれてしまうので)
ファイルの内容はVer.0.9用もVer.1.1用も同じです。このファイルに商品IDとURL用の商品名/カテゴリ名の対応を記入することによって商品名とカテゴリ名がURLになります。
1 2 3 4 5 6 7 8 9 10 11 | <?php
$urlrpl = array(
"cid1" => "Hardware", // cidはカテゴリID
"cid1_4" => "Graphics_Cards",
"cid1_8" => "Keyboards",
"cid1_9" => "Mice",
"pid1" => "Matrox_G200_MMS", // pidは商品ID
"pid25" => "Microsoft_Internet_Keyboard_PS2",
"pid26" => "Microsoft_IntelliMouse_Explorer"
);
?>
|
このファイルはzencartのルートディレクトリに置いて下さい。
URL用のカテゴリ名と商品名は英数字と_のみで構成して下さい。日本語はダメです。(zencartに登録する商品名/カテゴリ名は日本語で問題ありません)
このファイルには全ての商品とカテゴリを登録しなければならないわけではありません。
必要だと思った商品/カテゴリだけを登録して下さい。このファイルに登録されなかった商品/カテゴリURLは従来通りの数字のURLになります。
- url_replace.dat for zencart 1.2.0 patch ver.0.9(2005年10月8日)をダウンロードする。
パッチVer.1.1以降の新しいものを利用する場合はダウンロード後にurl_data.phpに名前を変えて下さい。
.htaccess
mod_rewrite側の設定です。
上のhtml_output.phpで生成したURLをapache内部で元のURLに戻すルールを記述します。
.htaccessはドキュメントルートに配置します。
下のリストはパッチVer.0.9以降で追加されたカテゴリ名と商品名のURLを変換するリライトルールです。みれば解るように一品づつ変換ルールを記載する必要があります。なお、ここに記載されないカテゴリーと商品は従来通りの変換となります。
1 2 3 4 5 6 7 8 9 | RewriteEngine on
RewriteBase /
RewriteRule ^categories/Hardware.html /index.php?main_page=index&cPath=1 [L]
RewriteRule ^categories/Graphics_Cards.html /index.php?main_page=index&cPath=1_4 [L]
RewriteRule ^categories/Keyboards.html /index.php?main_page=index&cPath=1_8 [L]
RewriteRule ^categories/Mice.html /index.php?main_page=index&cPath=1_9 [L]
RewriteRule ^products/Matrox_G200_MMS.html /index.php?main_page=product_info&products_id=1 [L]
RewriteRule ^products/Microsoft_Internet_Keyboard_PS2.html /index.php?main_page=product_info&products_id=25 [L]
RewriteRule ^products/Microsoft_IntelliMouse_Explorer.html /index.php?main_page=product_info&products_id=26 [L]
|
- .htaccess for patch ver.1.1.*をダウンロードする。
- .htaccess for patch ver.0.9をダウンロードする。
- .htaccess for patch ver.0.8をダウンロードする。
ダウンロード後に.htaccessにリネームして下さい。
なお、zencartをサブディレクトリに置いている場合は以下のようになります。
例: http://DOMAIN.org/shop/ の場合
RewriteRule ^shopping_cart.html /shop/index.php?main_page=shopping_cart [L]
全ての変換ルールについて上の例の様に変更します。
configure.php
ここまでできたら今追加したUSER_FRIENDLY_URLS_REWRITEモードをオンにするためにZENCART_ROOT/includes/configure.phpに一行追加します。どこでもいいですがこんな感じ。(追加するのはピンクの行)
1 2 3 | define('USE_PCONNECT', 'false'); // use persistent connections?
define('STORE_SESSIONS', 'db'); // leave empty '' for default handler or set to 'db'
define('USER_FRIENDLY_URLS_REWRITE', 'true');
|
リライトモードでうまく動作しないようならtrueをfalseに書き換えるか行頭に//を追加すれば元のモードに戻せます。
ドロップダウンフォームの変更
zencartでURLの書き換えを行うとドロップダウンフォームで問題が発生します。
ドロップダウンフォームはサイドボックスと商品リストの表示部分に出現します。
これを修正するために幾つかのファイルを編集する必要があります。
listing_display_order.php
Target file: ZENCART_ROOT/includes/modules/listing_display_order.php
1 | echo zen_draw_form('sorter', zen_href_link(<span class="pink">basename(ereg_replace('([a-z_]{1,}).php','index.php', $PHP_SELF)), '', $request_type, falsespan>), 'get');
|
- listing_display_order.php をダウンロードする。
このファイルの変更は全てのバージョンのURL書き換えパッチで必要です。
パッチバージョン0.8以前では以下のファイルもlisting_display_order.phpと同様の変更が必要です。
ZENCART_ROOT/includes/templates/YOUR_TEMPLATE/sideboxes/tpl_currencies.php
ZENCART_ROOT/includes/templates/YOUR_TEMPLATE/templates/tpl_index_product_list.php
ZENCART_ROOT/includes/templates/YOUR_TEMPLATE/sideboxes/tpl_manufacturers_select.php (メーカー選択は私のパッチでは未完成です)
これらのファイルはZENCART_ROOT/includes/templates/template_defaultディレクトリからあなたのテンプレートデイレクトリにオーバーライドして編集して下さい。(オリジナルのファイルを編集するのはお薦めできません。)