「はやぶさ上映プロジェクト in 岡山」
プラネタリウムだからこそ味わえる
頭上360度いっぱいに広がる迫力と感動のストーリー
★チラシ(PDF)のダウンロード(約7.8MB)
「はやぶさ上映プロジェクト in 岡山」
期間2010年8月1日(日)~10月31日(日)予定
場所岡山県立児童会館
観覧料大人500円/高校生200円/小・中学生100円/
未就学児・障害者手帳をお持ちの方/無料

ZenCart レビュー投稿者を年代+性別で更新するように修正

ZenCart導入テスト中に変更したいと思った点。

デフォルトでは商品レビューが顧客の氏名になってしまう。
これでは個人情報の問題もある為 記入してくれる人が減る可能性が高いと思う。

調べてみるとレビューを更新している対象ファイルはこの部分らしい

対象のファイルは、
/zencartフォルダ/includes/modules/pages/product_reviews_write/header_php.php

コードを観ると顧客マスタ【customers】から姓名「customers_firstname」「customers_lastname」を取得し、
レビューテーブル【reviews】の「customers_name」に更新している模様。

そこでレビュー更新時に顧客マスタの生年月日と性別を取得し、レビュー投稿者名を
年代と性別で更新するように修正してみた。

年代は、生年月日とシステム日付から計算。

下記のような修正でレビュー投稿者名が「30代 男性」のように更新されるようになった。
これで気になった部分が解決。

※サンプルコードの環境:Zen Cart 1.3.0.2-l10n-jp-5
PHP:5.1.6 MySQL 5.0.27

/zencartフォルダ/includes/modules/pages/product_reviews_write/header_php.php
変更部分を抜粋

  1. //----------2009.09.11 @Links edit start
  2. //抽出に性別と年代を追加
  3. //$customer_query = "SELECT customers_firstname, customers_lastname, customers_email_address
  4. $customer_query = "SELECT customers_firstname, customers_lastname, customers_email_address , customers_gender , (truncate((YEAR(NOW()) - YEAR(customers_dob)) / 10,0) * 10) as age
  5. FROM " . TABLE_CUSTOMERS . "
  6. WHERE customers_id = :customersID";
  7. //----------2009.09.11 @Links edit end
  8.  
  9. $customer_query = $db->bindVars($customer_query, ':customersID', $_SESSION['customer_id'], 'integer');
  10. $customer = $db->Execute($customer_query);
  11.  
  12. if (isset($_GET['action']) && ($_GET['action'] == 'process')) {
  13. $rating = zen_db_prepare_input($_POST['rating']);
  14. $review_text = zen_db_prepare_input($_POST['review_text']);
  15.  
  16. $error = false;
  17. if (strlen($review_text) < REVIEW_TEXT_MIN_LENGTH) {
  18. $error = true;
  19.  
  20. $messageStack->add('review_text', JS_REVIEW_TEXT);
  21. }
  22.  
  23. if (($rating < 1) || ($rating > 5)) {
  24. $error = true;
  25.  
  26. $messageStack->add('review_text', JS_REVIEW_RATING);
  27. }
  28.  
  29. if ($error == false) {
  30. if (REVIEWS_APPROVAL == '1') {
  31. $review_status = '0';
  32. } else {
  33. $review_status = '1';
  34. }
  35.  
  36. $sql = "INSERT INTO " . TABLE_REVIEWS . " (products_id, customers_id, customers_name, reviews_rating, date_added, status)
  37. VALUES (:productsID, :cutomersID, :customersName, :rating, now(), " . $review_status . ")";
  38.  
  39. $sql = $db->bindVars($sql, ':productsID', $_GET['products_id'], 'integer');
  40. $sql = $db->bindVars($sql, ':cutomersID', $_SESSION['customer_id'], 'integer');
  41.  
  42. //----------2009.09.11 @Links edit start
  43. $sex = '男性';
  44. //DBから性別を取得
  45. $sex_value = $customer->fields['customers_gender'];
  46. //DBから年代を取得
  47. $age = $customer->fields['age'];
  48.  
  49. //性別が女性の場合
  50. if ($sex_value == 'f') {
  51. $sex = '女性';
  52. }
  53.  
  54. //$sql = $db->bindVars($sql, ':customersName', $customer->fields['customers_firstname'] . ' ' . $customer->fields['customers_lastname'], 'string');
  55. //年代 + 性別を顧客名とする
  56. $sql = $db->bindVars($sql, ':customersName', $age . '代' . ' ' . $sex, 'string');
  57.  
  58. //----------2009.09.11 @Links edit end
  59.  
  60. $sql = $db->bindVars($sql, ':rating', $rating, 'string');
  61.  
  62. $db->Execute($sql);




コメント&トラックバック

素晴らしいプログラムですので、勝手ですがzen cartの下記掲示板からリンクさせていただきました。
http://zen-cart.jp/bbs/viewtopic.php?f=5&t=2053&p=23741#p23741

2009,9,25 金曜日22:37:00 Posted by i4


コメントとBBSでの紹介ありがとうございます。

レビュー機能の実名掲載は、不便に感じていたところなので同じ思いの方への参考になれば幸いです。

2009,9,27 日曜日12:58:51 Posted by @Links







※いたずら防止の画像に表示されている内容を入力して下さい