2007年05月03日

Zen Cart メモ

カテゴリーページ

index.php?main_page=index&cPath=1

使用しているテンプレート

  1. templates/tpl_index_product_list.php
  2. templates/tpl_modules_product_listing.php
  3. common/tpl_tabular_display.php
  4. $txt_graylist_box_contents --> modules/product_listing.php
自動更新バナー

2007年02月21日

注文の確認メール(メモ)

注文の確認メールを送信しているのは、
include/classes/order.php の function send_order_email
なのですが、所謂よくあるショッピングカートのような本文のテンプレートはなく、モジュールから本文内容を組み立てているみたい。

他のショッピングカートになれていると、 本文のテンプレートに<%shop_name%>とかタグを入れたところが書き換わるだけで、 直感的にメールの編集ができるのですが、Zen Cartの場合は、多彩な決済方法や、モジュールに対応するため、 やや複雑な仕様になっています。

特に、今回はポイントを使用して購入した場合の合計金額(支払う金額)を変更しなければいけないので、かなり大変です。 includeやら、requireなどから、たどってorder_totalを作っているところまでさかのぼり、 そこにポイントの使用に関する部分を差し込みます。

※現段階で、まだ完全な状態じゃないので、詳細は後日!

自動更新バナー

2007年02月15日

Zen Cart ポイントシステム

Zen Cart にありそうで無い、あったら便利なポイントシステムの導入。

とりあえず、購入金額に一定のポイントを貯める仕様で、やってみます。

  1. データベースに「ポイントカード」テーブルを追加( zen_points_cards )
    ポイントカードテーブルに6つのフィールドを設定
    1.id レコードの通し番号( auto_incrementをつけてindexする)
    2.会員番号 customers_id
    3.ポイントチェック 該当注文の精算が完了しているかどうかのフラグ用
    4.獲得ポイント 該当注文で獲得するポイント
    5.注文ID orders_id
    6.注文日時 ポイント獲得日時(注文時刻と、精算完了時刻で更新する)
  2. カート画面で、獲得できるポイント数を表示する
    「今回のお買い物で獲得できるポイント:●●Pt」
  3. 注文完了画面に「確定ポイント」と「未確定ポイント(今回のポイントを含む)」表示
  4. マイページにポイント獲得履歴「ポイント通帳」
  5. カート内にポイント使用できる入力フォームの設置
  6. 管理画面で、入金の確認と同時に未確定の獲得ポイントを有効にする
    ポイントチェックにフラグを立てる
  7. 管理画面で、ポイントレートの変更ができるようにする

いじくるポイントは、カートの決済部分に関わる部分なので、細心の注意を払いつつ作業します。

主にいじるファイルは、

  • define_queries.php
    よく使うクエリーを呼び出すのに便利(・・・ていう解釈でいいのかな?)
    ポイントカードテーブルのSELECT文を登録しておきます。

    例)define_queries.php の最終行に追加↓↓
    define('SQL_POINT_CARD', "SELECT *
                              FROM " . TABLE_POINTS_CARDS . " pc
                              WHERE pc.customers_id = '%s'
                              ORDER BY pc.id asc ");
  • includes/modules/checkout_process.php
    注文完了のところで、ポイントカードテーブルにポイントを追加します。
    本当は、includes/modules/(custom_template)/checkout_process.php
    にファイルをコピーしてオーバーライドします。
  • カート内でのポイントの表示は、それぞれテンプレートファイルを加工します。
    define_queries.php で作ったクエリーを利用すれば、簡単だと思います。

今日は、この辺まで。。。
なお、ポイントシステムに関しては、有料で提供されている業者様もいらっしゃるので、作業に不安な方は、 業者様に依頼するのが安心かもしれません。

 

自動更新バナー

2007年02月14日

商品の並び替え 2a とか 3d とか。。。

フォーラムの引用ですみません。

たとえば商品一覧で、

1. 商品画像
2. 商品名
3. 値段

が表示されているとします。

それで、「商品名」で昇順で表示させる場合、 「商品名」は2番目の項目なので、「商品リストのデフォルトソート順」に「2a」と入力します。 (値をなにも入力しないと「2a」状態です。)
「2a」の「a」は「ascending」の「a」という意味だと思います。降順にしたい場合は、 「2d」です。この「d」は 「desending」のdだと思います。

こういう仕組みになってます。わかりにくいですね ^^;

wrote from: 志田様
http://zen-cart.jp/bbs/viewtopic.php?p=7605#7605

商品一覧に表示する項目があって、それの順番に1,2,3, と番号が割り当てられて、a,d,がそれぞれ昇順(a)、降順(d)となるわけ。

ややこしい気がするけど、確かにこの方法なら、 柔軟なカスタマイズにも対応できるというわけですね。

自動更新バナー

2007年02月09日

ZEN CART 静的なURLにする その2

ZenCart URL書き換えパッチ日本語版
http://gato.intaa.net/ZenCart/url_rewrite_patch_jp.html

ZenCartの動的なURLを静的なURLに変更してみてその修正点。

基本的にトップページへの戻りは、動的のままなので、各所をトップのURLに戻るように変更する必要がある。

あと、問い合わせフォームのテキストエリアの出力形式が変わっているので、テンプレートファイルをそれに合わせるか、 html_output.php を変更(該当部分をv1.3のものに戻す)する必要がある。

がとらぼさんのパッチ

////
// Output a form textarea field
  function zen_draw_textarea_field($name, $wrap, $width, $height, $text = '', $parameters = '', $reinsert_value = true) {
    $field = '<textarea name="' . zen_output_string($name) . '" wrap="' . zen_output_string($wrap) . '" cols="' . zen_output_string($width) . '" rows="' . zen_output_string($height) . '"';

    if (zen_not_null($parameters)) $field .= ' ' . $parameters;

    $field .= '>';

    if ( (isset($GLOBALS[$name])) && ($reinsert_value == true) ) {
      $field .= stripslashes($GLOBALS[$name]);
    } elseif (zen_not_null($text)) {
      $field .= $text;
    }

    $field .= '</textarea>';

    return $field;
  }

デフォルトのソース

/*
 *  Output a form textarea field
 */
  function zen_draw_textarea_field($name, $width, $height, $text = '', $parameters = '', $reinsert_value = true) {
    $field = '<textarea name="' . zen_output_string($name) . '" cols="' . zen_output_string($width) . '" rows="' . zen_output_string($height) . '"';

    if (zen_not_null($parameters)) $field .= ' ' . $parameters;

    $field .= '>';

    if ( (isset($GLOBALS[$name])) && ($reinsert_value == true) ) {
      $field .= stripslashes($GLOBALS[$name]);
    } elseif (zen_not_null($text)) {
      $field .= $text;
    }

    $field .= '</textarea>';

    return $field;
  }

微妙だけど、がとらぼさんの方(v1.2)は、 引数の2番目に $wrap とかいうのがあります。引数の最後だったら問題ないのですが、2番目なのでv1.3の場合は、必須の変更点ですね。

変更しないと、 テキストエリアの中にパラメータがソースのまま表示されます。w

 

自動更新バナー

2007年02月08日

ZEN CART 静的なURLにする

ZenCart URL書き換えパッチ日本語版
http://gato.intaa.net/ZenCart/url_rewrite_patch_jp.html

とりあえず、上記のパッチは、v1.2対応なので、そのままでは、v1.3で動かないかも(もしくはエラーでまくる可能性アリ)

上記のページに対応方法というか、仕組みが記載されているので、同じ様に対応する部分をv1.3に置き換えて、修正してみましょう。
v1.2では、うまくいってたんで、多分同じ感じで大丈夫だろう、きっと。うん。

気をつけるところ

  • rewriteルール
  • rewriteから元URLへの戻しルール
  • URL生成しているphpの出力
  • カスタマイズしちゃってるページでの反映
  • 最後に押せるリンクは全部押してみろ!w
自動更新バナー

2007年02月06日

Zen Cart ポイントシステム (参考)

osCommerceの拡張機能に関して
http://www.bitscope.co.jp/search/html/tep-j-general/msg01022.html

私の場合はこんな感じで作りました。

・管理画面でベースとなるポイントのパーセンテージを決定
・ポイントは決済方法にごとにパーセンテージを変えられる
・特定の期間、特定の商品ごとにパーセンテージを変えられる
・顧客別でポイントの履歴を確認できる
・購入履歴でポイントを差し引いた金額を表示

・ショップ画面でログオン後、ポイントの残高が確認できる
・ポイントの履歴を銀行の通帳のように確認できる
・商品ページでこの商品を買うとどれくらいポイントが付くのか確認できる
・お支払い方法の画面で持っているポイントをどれだけ使うか決定できる
・確認画面でポイントを差し引いた合計金額が確認できる
・購入確認メールでポイントを差し引いた金額が確認できる
・購入時に取得ポイントをデータベースに登録
・購入履歴でポイントを差し引いた金額を表示

> # そんなモジュールを作ったとしても、osCommerce本体に関わる部分が多くて、
> # 簡単に組み込むというわけにはいかないみたいです。

自動更新バナー

Zen Cart にポイントシステム導入

今時のショッピングサイトといえば、お買い物ごとに貯まるポイントがあって当たり前。

そんなわけで(どんな?
Zen Cart にポイントシステムを導入してみようと思います。

導入するポイントシステムのポイントw

  • ポイントの計算方法
    ・買い物金額合計の%をポイント付加
    ・買い物金額●●円ごとにポイント付加
    ・商品ごとにポイント設定
  • 清算完了後にポイント確定
  • ポイントの使用方法
    ・使用ポイント入力方式(ソフマップ)
    ・ポイント一括使用方式
    ・一定額使用方式(ドコモポイント)
  • ポイントの有効期限
    ・発効日から●年間有効
    ・最終利用日から●年間有効
  • あと何か。。。
    ・例えば、マイレージと相互交換
    ・貯まっているポイントに応じて割引率アップ
    ・貯まっているポイントに応じてポイント付加率アップ

こんな感じでポイントシステムを構築予定 でわでわ

自動更新バナー

2007年02月05日

商品ページのTITLE 「商品名:<サイト名>」にしてみる

管理ページ → 商品の管理 → (メタタグの定義)一番右端のボタン

タイトル、Meta(Keywords)、Meta(Description)の入力欄を適当に埋める。
※ここの入力欄が未記入の場合、設定が更新されない仕様のようです。

あと、TITLEに必要なのは、商品名と、サイト名なので、上のラジオボタンの設定を

商品名: Yes
タイトル: No
モデル: No
価格: No
定義済みタグライン: Yes

と、それぞれチェックして更新。これでOK。

自動更新バナー

2007年01月13日

ゲスト購入フロー

(お詫び)前回の商品一覧の件

全商品の一覧は、
index.php?main_page=products_all
でアクセスできました。

普通にありました。無いみたいなこと書いてしまって申し訳ありません。

ゲスト購入フロー

で、今回の本題。

Zen Cart でのゲスト購入って、何度かフォーラムなどでも話題になっているのですが、 これといった具体的な情報があまり無いような。

参考

http://www.zen-cart.jp/bbs/viewtopic.php?p=8205
Zen Cart.JP コミュニティ掲示板「登録せずに買い物を進めるには」

アカウント作成の画面で会員登録するかしないかを選択
 ↓
会員登録しない場合は、ゲスト用の一時的なcustomers_idを発行する
 ↓
そのcustomers_idで一時的にログインした状態にする
 ↓
顧客情報は、データベースに保存せずセッションで持ちまわる
 ↓
カートの中身もデータベースに保存せずセッションで持ちまわる
 ↓
注文完了時に注文データのみをデータベースに保存する

通常の登録フローを通しつつ、途中で会員DBに登録しないやり方。

その下にもう一つ。。。

仕様---------------------------------
ログインページの登録フォームを削除して、ボタンを3つ設ける(会員ログイン、新規登録、臨時購入)。
新規登録からの流れは、現状のままの流れを保っています。

臨時購入の方は、その通常の新規登録からで使用するファイル類を丸ごとコピーして、別ファイルとし、 完全に独立させて購入終了まで導くようにしました。


必要な手順---------------------------
1、現状で使用している新規登録から購入終了までに使用しているファイル類をコピーして別名にしておく(これらのファイルをカスタマイズする)

2、臨時購入する際の登録フォームからパスワード欄を削除。

3、パスワードは、 includes/modules/pages/create_account_g/header_php.phpのコピーしたファイルの方の中でランダムな数字を割り当て、 同時にE-MailアドレスはE-Mailのデータベースに保存させず、前述のランダムな数字などを使うようにする。 必要なら本来のE-Mailアドレスはファーストネームの部分のテーブルに保存しておく。
$_SESSIONの一つに独自の項目を一つ作る例えば$_SESSION['guest_buy'] = 1;(重要!) 登録完了のメールを送信する部分をコメントアウト!

4、臨時購入の際のファイル類ののリダイレクト先を調整する。

5、購入完了時に、請求明細が送られないようにし、ログアウトするようにする。

6、3で作った独自の$_SESSION項目を使って、アカウント情報やレビューへの制限。その他必要に応じ。 ボタンを非表示にするなど対策をする。

通常の購入フローを丸ごとコピーしちゃって、不要な部分(登録完了メール、パスワードの登録)を削除してしまう方法。

どちらにしても大幅なカスタマイズなので、気合入れてかからないといけないです。

具体的なカスタマイズ方法・・・

 

ゲスト購入フローの続きを読む

自動更新バナー

2007年01月11日

商品一覧、ゲスト購入、ポイントモジュール

Zen Cart のカスタマイズ。

なんとか、デザインと基本フローの調整が完了。

細かいところでツッコミどころが、まだありますが、その辺は、おいおいつぶして行きたい。

で、残った案件が表題の3点。

商品一覧・・・

もともと、大規模なショッピングサイトに対応できる Zen Cart が、カテゴリー、サブカテゴリーで、商品を分類しているのに、 なぜか無かった全商品の一覧モジュール。

これって、カテゴリー一覧と同じようにして、カテゴリー番号のSQLを外しちゃえば、いいのかな?そう思うと、簡単そうだな。

ゲスト購入・・・

購入後のアフターサポートが受けられたり、買い物の履歴が残せたり、次の買い物で、面倒な住所入力が省けたりと、便利な会員登録システム。

ですが、買い物にいちいち登録したくない、次買うかどうか分からないし、個人情報をいろんなサイトに登録するのに抵抗があるとか。

人それぞれですが、やっぱりゲスト購入は、あった方がいい。個人情報の登録がいやだとか、そんな理由で購入機会を損しているのは、 もったいないですね。

ポイントモジュール・・・

今時のショッピングカートには、定番のポイントシステムですが、Zen Cart には、付いていません。

その代わり(?)ギフト券とか、あります。

買い物の度に、ポイントが貯まるって、リピート獲得に必要なファクタだなあと思うので、導入したい。

でもこれってフリーのモジュールが見つからないし、一から作って管理するのもどうかと思うわけで、すでに運用実績のある開発屋さんから、 買ったほうがいいのかな?

自動更新バナー

2007年01月05日

sideboxメニュー インフォメーションの追加

sideboxインフォメーションのメニューを追加したり、削除したり。

デフォルトのインフォメーションには、

  • 配送と返品について
  • プライバシーポリシー
  • ご利用規約
  • お問い合わせ
  • サイトマップ
  • ギフト券よくある質問
  • 割引クーポン
  • ニュースレター登録解除

などのメニューがあるんですが、最後の方のギフト券とか、ニュースレターの解除とか、とりあえず最初のうちは、 いらないようなメニューがあるので、この辺は、サクっと消してしまいたい。

§変更する箇所

includes/modules/sideboxes/information.php

↑上のinformation.phpを編集すればいいんですが、ここはキチンとオーバーライドして編集しましょう。

sideboxメニュー インフォメーションの追加の続きを読む

自動更新バナー

2007年01月04日

後でやっておくだろうメモ

http://gato.intaa.net/

ZenCart URL書き換えパッチ日本語版

多分、やる。きっとやるだろうURLの書き換え。

メモ↓XOOPSテンプレート
http://hello.oceannet.jp/
OCEAN-NET

自動更新バナー

2007年01月03日

オーバーライド

相変わらず、わかりづらいので、もう一度おさらい。

Languagesのオーバーライド

includes/languages/japanese.php をオーバーライドする場合は、
includes/languages/custom ディレクトリを作って、customディレクトリ内にjapanese.phpをコピー。
includes/languages/custom/japanese.php

includes/languages/japanese.php
 ↓オーバーライド↓
includes/languages/custom/japanese.php

Languages/japanese内のphpのオーバーライド

includes/languages/japanese/customディレクトリを作って、
customディレクトリ内にオーバーライドするphpをコピー。

includes/languages/japanese/index.php
 ↓オーバーライド↓
includes/languages/japanese/custom/index.php

Languages/japanese/html_includesのオーバーライド

この辺からややこしい。
includes/languages/japanese/html_includes/customディレクトリを作って、
customディレクトリ内にオーバーライドするphpをコピー。

オーバーライドまとめ

オーバーライドしたいphpファイルと同じ階層にcustomディレクトリを作って、 そのcustomディレクトリ内にオーバーライドしたいファイルを入れる。簡単なことなのですが、 元ファイルよりも一つ下の階層に新規ファイルを作るって所がややこしくさせている気がする。

<directory>/hogehoge.php
 ↓オーバーライド↓
<directory>/custom/hogehoge.php ←customディレクトリを作ってその中にファイルをコピー。

※注意※

customディレクトリという名前は、何をつけてもかまわないような説明のページが見受けられるが、本当は、 テンプレート名と合わせておかないと動作しない。
ようするにテンプレート名をまず決めておいて、それと同じ名前のオーバーライドをすれば、Zen-Cartは 「テンプレートと同じ名前のフォルダがあるか確認し、あればその中のファイルでオーバーライドする」って感じみたい。

今日のメモ↓yahooとGoogle用の商品登録用データを吐き出すモジュール

オーバーライドの続きを読む

自動更新バナー

2007年01月02日

[解決]文字化け

前回の文字化けの続き

MySQLの文字化けについて、まずZen-Cart内で、「mysql_select_db」を使っているところを検索 (秀丸のGREPを使用)。

query_factory.php というファイルが検索結果に出てきた。
要するに、Zen-Cart内のクエリは、このファイルがまかなっている様子。

さて、本題の文字化け対策、XREAサーバーでは、下記のように「SET NAME ?」を接続毎に実行してあげれば、 文字化けの対策ができると。

http://sb.xrea.com/showpost.php?p=74847&postcount=2
「MySQLの文字コード自動変換」

標準でMySQLに接続した場合、クライアント(SSHやPHPなどのスクリプト側) とサーバーとの間はUJIS(EUC-JP)になります。
これを変更するには、「SET NAMES utf8;」を接続毎に実行していただく必要があります。もし、実行されていない場合は、 行ってみてください。

また、PHP、MySQL、PostgreSQLの標準文字コードをUTF8、MySQL自動変換機能をONにする仕様変更を、 s221以降のPHP5系のサーバーで行う予定です。

該当ファイルの下記部分に1行追加。

/includes/classes/db/mysql/query_factory.php

if ($zf_pconnect != 'false') {
      $this->link = @mysql_connect($zf_host, $zf_user, $zf_password, true);
} else {
    // pconnect disabled ... leaving it as "connect" here instead of "pconnect"
      $this->link = @mysql_connect($zf_host, $zf_user, $zf_password, true);
}
mysql_query("SET NAMES ujis");   // <----- この行を追加!

ファイルを書き換えたら、アップロードして、インストールを一発まわしてみる。

インストール後、管理画面を見ると、文字化け解消!
ただし、DB内のデータは、文字化けたまま格納されているので、それらは、おいおい書き換えていきましょう。

自動更新バナー

2007年01月01日

まずは、文字化け。。

いきなり文字化けです。

管理画面の「一般設定」が化けまくり(汗

一般設定って、DBに登録されているらしいので、MySQLを疑う。
多分文字コードの関係。

案の定文字コードがEUCではなくなっている。
エンコードのあたりをいじらないといけないかな?

 

自動更新バナー

ZEN CARTセットアップのメモ

ZEN CARTをセットアップしてみる。

コミュニティのドキュメントが、なかなか進まないので、設定とかカスタマイズに不安が残りますが、なんとか悪戦苦闘してみましょうか。

今回使用するのは、以下のとおり

  • XREAサーバー(s238)
  • Zen Cart 1.3.0.2
  • Apache
  • PHP Ver.5.1.6 (Zend 2.1.0)
  • MySQL 5.1.11-beta

 

自動更新バナー