質問 > フロント機能 > 2.13系メール便の対応について |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
harusame |
投稿日時: 2014/7/30 17:05
対応状況: −−−
|
半人前 登録日: 2014/7/30 居住地: 奈良 投稿: 27 |
2.13系メール便の対応について 初投稿の為、至らない点につきましてはお許し下さい。
下記サイトを参考にさせて頂き、 http://tech.bandersnatch.jp/181 ヤマト運輸の「宅急便」と「メール便」を同時に選択できるようにしたいと考えております。 複数購入の場合に、 メール便可能な商品と、宅急便のみ選択可能な商品、 双方がカートに入っている場合は、メール便を選択できないようにする。 などなどのサイトを参考にカスタマイズを行っておりました。 サイト内で紹介されている方法は、 1:商品マスターにメール便対応フラグを追加する 2:商品画面で表示をメール便対応フラグに応じて変化 3:カートの中身に応じてカート画面の表示を変更 4:カートの中身に応じて配送方法の選択でメール便を表示しない 5:配送方法の選択でメール便が選ばれた場合に着日指定をさせないようにする のような順序で説明されております。 1と2は多少変更しつつカスタマイズできたのですが、 3以降につきまして、ver.2.13での変更点が多く、 対応することができませんでした。 試行錯誤致しておりましたが、初心者の為、完全に行き詰ってしまい、最終手段として投稿をさせて頂きました。 何か有効な解決方法があればお教え頂けないでしょうか。 やはり勉強しかないでしょうか。 場違いな投稿の場合、申し訳ございません。 ------------------------------------------------------------------------------------------ [EC-CUBE ver.] :2.13.1 [レンタルサーバ] WebARENA SuiteX [OS] Linux dc51.etius.jp 2.6.18-308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012 x86_64 Apache [PHP] 5.3.3 [データベース] MySQL 5.1.36-community-log ------------------------------------------------------------------------------------------ |
bucchi |
投稿日時: 2014/8/3 14:21
対応状況: −−−
|
一人前 登録日: 2014/4/28 居住地: 関東 投稿: 72 |
Re: 2.13系メール便の対応について 具体的にどの部分で行き詰ってしまっているのかを
書いたほうが周りも返答しやすいかと思われます。 >> 3:カートの中身に応じてカート画面の表示を変更 で行き詰まっているとありますが、 画面の改修がうまくいっていないということでしょうか。 |
harusame |
投稿日時: 2014/8/3 18:11
対応状況: −−−
|
半人前 登録日: 2014/7/30 居住地: 奈良 投稿: 27 |
Re: 2.13系メール便の対応について ご指摘ありがとうございます。
知識不足の為、 具体的にどこまで記載できるかわかりませんが、記述してみます。 基本的に、 バージョンが違うとやはり、コードに大きく変更を加えないといけないのでしょうか。 勉強不足が悔やまれます…。 3:カートの中身に応じてカート画面の表示を変更 上記カスタマイズにおいて、 /data/class/helper/Sc_Helper_Purchase.php へ以下の関数を追加とあるのですが、 ▼Sc_Helper_Purchaseへ追加 function checkMailDeliverAvailable($productTypeId, &$objCartSession) { $available = false; // カート内の情報を取得 $items = $objCartSession->getCartList($productTypeId); if (count(array_keys($items))) { $available = true; foreach (array_keys($items) as $key) { $item = & $items[$key]; $product = & $item['productsClass']; if ($product['mail_deliver_enabled'] === MAIL_DELIVER_ENABLED) { continue; } else { $available = false; } } } return $available; } ▲ここまで コードの追加場所はどこでも問題ないのでしょうか。 Sc_Helper_Purchase内の一番最後に下記を追加したのですが、 追加に誤りがあるのでしょうか。 ▼下記を追加 public function checkMailDeliverAvailable($productTypeId, &$objCartSession) { $available = false; // カート内の情報を取得 $items = $objCartSession->getCartList($productTypeId); if (count(array_keys($items))) { $available = true; foreach (array_keys($items) as $key) { $item = & $items[$key]; $product = & $item['productsClass']; if ($product['mail_deliver_enabled'] === MAIL_DELIVER_ENABLED) { continue; } else { $available = false; } } } return $available; } ▲ここまで 商品情報の「mail_deliver_enabled」のフラグが全部立っているか確認するコードのようなのですが、 コードを追加したのですが、 フラグを確認してくれていないように思われます。 その後のカスタマイズを進めていっても、 フラグに反応していないようで、 下記カスタマイズ 4:カートの中身に応じて配送方法の選択でメール便を表示しない を行っても、 カート内商品がどんな状態であっても、 「宅急便」「メール便」両方が表示されてしまいます。 ver.2.13用にどこか修正しないといけないのでしょうか。 ver.2.12で運用した方がよかったのかと後悔しております…。 今さらバージョン変更ができない為、解決策を毎日探っております。 そもそもこのコードが原因かどうかも現在わかっていない状態の為、 原因究明ができましたら、追記もさせて頂こうかと思っております。 |
yuh |
投稿日時: 2014/8/3 20:59
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 2.13系メール便の対応について MAIL_DELIVER_ENABLEDはちゃんと設定されてますか?
getCartListから帰ってくるデータにmail_deliver_enabledは入ってますか? もしかしたら
この部分で$product['mail_deliver_enabled']にデータが入ってなくてMAIL_DELIVER_ENABLEDが設定されてないのが原因でtrueになってすべてチェックが通ってるんじゃないですか? |
harusame |
投稿日時: 2014/8/4 11:42
対応状況: −−−
|
半人前 登録日: 2014/7/30 居住地: 奈良 投稿: 27 |
Re: 2.13系メール便の対応について ありがとうございます。確認を致しました。
データベース上の設定確認でよろしかったのでしょうか。 getCartListから帰ってくるデータにmail_deliver_enabledが入っているのか、 どちらを確認すべきかわからなかった為、 長文となってしまいますが、順に記載させていただこうと思います。 申し訳ございません。 設定につきましては、 ●dtb_products内に、 ┣名前:mail_deliver_enabled ┣データ型:SMALLINT ┣長さ/値:6 ┣デフォルト値:ユーザー定義 0 ┗その他項目:記入なし 上記のようにカラムを増やしております。 ●/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php内に、 public function lfInitFormParam(&$objFormParam, $arrPost) { $objFormParam->addParam('商品ID', 'product_id', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('商品名', 'name', STEXT_LEN, 'KVa', array('EXIST_CHECK', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('商品カテゴリ', 'category_id', INT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('公開・非公開', 'status', INT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('商品ステータス', 'product_status', INT_LEN, 'n', array('EXIST_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('メール便対応', 'mail_deliver_enabled', INT_LEN, 'an', array('SPTAB_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK')); --------以下省略-------- 上記のように「商品ステータス」の下に追加しました。 そして、 ●/data/mtb_constants_init.php内に、 /** 1:メール便対応 0:メール便非対応 */ define('MAIL_DELIVER_DISABLED', 0); 上記を追加 ●/html/install/sql/insert_data.sql内に、 INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('MAIL_DELIVER_ENABLED', '1', 1603, 'メール便対応'); INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('MAIL_DELIVER_DISABLED', '0', 1603, 'メール便非対応'); 上記クエリを追加 ●mtb_constantsに上記クエリを実行し追加 ●mtb_constantsキャッシュを削除 ●/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php内に、 public function lfSetViewParam_InputPage(&$objUpFile, &$objDownFile, &$arrForm) { // カテゴリマスターデータ取得 $objDb = new SC_Helper_DB_Ex(); list($this->arrCatVal, $this->arrCatOut) = $objDb->sfGetLevelCatList(false); if (isset($arrForm['category_id']) && !is_array($arrForm['category_id'])) { $arrForm['category_id'] = SC_Utils_Ex::jsonDecode($arrForm['category_id']); } $this->tpl_json_category_id = !empty($arrForm['category_id']) ? SC_Utils_Ex::jsonEncode($arrForm['category_id']) : SC_Utils_Ex::jsonEncode(array()); if ($arrForm['status'] == '') { $arrForm['status'] = DEFAULT_PRODUCT_DISP; } if($arrForm['mail_deliver_enabled'] == '') { $arrForm['mail_deliver_enabled'] = MAIL_DELIVER_DISABLED; } if ($arrForm['product_type_id'] == '') { $arrForm['product_type_id'] = DEFAULT_PRODUCT_DOWN; } --------以下省略-------- 上記のように「status」の下に追加しました。 ●/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php内に、 public function lfRegistProduct(&$objUpFile, &$objDownFile, $arrList) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $objDb = new SC_Helper_DB_Ex(); // 配列の添字を定義 $checkArray = array('name', 'status', 'main_list_comment', 'main_comment', 'deliv_fee', 'comment1', 'comment2', 'comment3', 'comment4', 'comment5', 'comment6', 'sale_limit', 'deliv_date_id', 'maker_id', 'note'); $arrList = SC_Utils_Ex::arrayDefineIndexes($arrList, $checkArray); // INSERTする値を作成する。 $sqlval['name'] = $arrList['name']; $sqlval['status'] = $arrList['status']; $sqlval['mail_deliver_enabled'] = $arrList['mail_deliver_enabled']; $sqlval['main_list_comment'] = $arrList['main_list_comment']; $sqlval['main_comment'] = $arrList['main_comment']; $sqlval['comment1'] = $arrList['comment1']; $sqlval['comment2'] = $arrList['comment2']; $sqlval['comment3'] = $arrList['comment3']; $sqlval['comment4'] = $arrList['comment4']; $sqlval['comment5'] = $arrList['comment5']; $sqlval['comment6'] = $arrList['comment6']; $sqlval['deliv_date_id'] = $arrList['deliv_date_id']; $sqlval['maker_id'] = $arrList['maker_id']; $sqlval['note'] = $arrList['note']; $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; $sqlval['creator_id'] = $_SESSION['member_id']; $arrRet = $objUpFile->getDBFileList(); $sqlval = array_merge($sqlval, $arrRet); --------以下省略-------- 上記のように「status」の下に追加しました。 以上のような設定を行っています。 ※こちらに記入しながら確認していましたところ、下記に疑問を感じ修正を行いました。 ・/data/mtb_constants_init.php内の、 /** 1:メール便対応 0:メール便非対応 */ define('MAIL_DELIVER_DISABLED', 0); 上記から下記に訂正 /** 1:メール便対応 0:メール便非対応 */ define('MAIL_DELIVER_ENABLED', 1); define('MAIL_DELIVER_DISABLED', 0); 以上となっております。 誤りがございましたら、ご指摘いただければ幸いです。 |
yuh |
投稿日時: 2014/8/4 13:50
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 2.13系メール便の対応について DBのdtb_productsのデータにはmail_deliver_enabledにはデータがは入っていますか?
あと、SESSIONの中にmail_deliver_enabledのデータは入ってますか? |
harusame |
投稿日時: 2014/8/4 17:25
対応状況: −−−
|
半人前 登録日: 2014/7/30 居住地: 奈良 投稿: 27 |
Re: 2.13系メール便の対応について 引用:
DBのdtb_productsのデータにはmail_deliver_enabledにはデータがは入っていますか? 下記の通り入っておりました。 mail_deliver_enabled | smallint(6) | いいえ | 0 引用: SESSIONの中にmail_deliver_enabledのデータは入ってますか? SESSIONとは、SC_CartSession.phpでよかったでしょうか。 ご指摘の通り、 上記にはmail_deliver_enabledは入っておりませんでした。 参考にしているサイト http://tech.bandersnatch.jp/338 上記サイトにもSC_CartSession.phpは出てきておりますが、 どういったコードをどこに記載すべきか理解ができておりません。 できれば助言を頂ければ幸いです。 |
yuh |
投稿日時: 2014/8/4 17:35
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 2.13系メール便の対応について
このコードの $items = $objCartSession->getCartList($productTypeId); の$itemsの中身ですね。 このデータの中のmail_deliver_enabledをチェックしているので、そのデータがないのが原因と思いますので、 SC_CartSession_Ex.phpに
上記のコードを追加するのが抜けていると思います。 たぶん取得はしていたのに、その部分で不必要と判断されて消された事が原因と予想されるので、一度試してみてください。 |
harusame |
投稿日時: 2014/8/4 18:56
対応状況: −−−
|
半人前 登録日: 2014/7/30 居住地: 奈良 投稿: 27 |
Re: 2.13系メール便の対応について 本当にありがとうございます!
SC_CartSession内に
を追加致しました。 その後、 順序通り修正しております。 ●/data/Smarty/templates/admin/products/product.tpl内に
上記チェックボックスを追加しました。 ●/data/Smarty/templates/admin/products/confirm.tpl内に
上記確認項目も追加しました。 CSVダウンロード設定用テーブル(dtb_csv)にカラム増やし、 設定は完了したかと思われます。 その後、 EC-CUBE メール便対応フラグを利用して表示をカスタマイズ(初級編:商品詳細画面) http://tech.bandersnatch.jp/318 上記へ進めていき、 ●/data/Smarty/templates/default/products/detail.tpl内に、 参考サイト通り下記を追加したのですが、どの商品を確認しても「送料無料」と表示されてしまいます…。
しかたなく、下記としました。
メール便商品のみ、商品ステータス部分にメール便アイコンが表示されるようになりました。 商品一覧ページにも同じカスタマイズをし、 メール便商品は一覧、詳細ともにステータス部分にアイコン表示されるようになりました。 そのまま EC-CUBE メール便対応フラグを利用して表示をカスタマイズ(中級編:カート画面) http://tech.bandersnatch.jp/318 上記へ進めていき、 ●/data/class/pages/cart/LC_Page_Cart.php内に、
上記「送料無料チェック」部分に追加し、 ●/data/Smarty/templates/default/cart/index.tpl内に、
と記載してみたのですが、 メール便商品をカートへ入れてもメール便の表示が出ません。 どの商品パターンでカートへ入れても、同じでした。 常に2-2が表示され、無料金額を超えると2-3が表示されます。 それ以外の表示は見られませんでした。 はじめから見直しておりましたが、再び行き詰まりまってしまいました。 毎度毎度、簡潔に記載ができずかなりの長文となってしまい 本当に申し訳ございません。 |
yuh |
投稿日時: 2014/8/4 21:35
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 2.13系メール便の対応について 現在作成しているのがテストサイトでデバックでコードを表示させてもいいのであれば、まずは
このソースを
このように途中のデータを出力させて どの部分が原因でうまく動かないかを確認するのがいいと思います。 おそらくfunction checkMailDeliverAvailableの部分とは思いますが、順番にどの部分はうまく動いていて、どの部分がうまく動いてないのかを判断するのが必要ですので、順に処理をチェックしていってください |
(1) 2 3 4 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |