バージョン選択
フォーラム
メニュー
オンライン状況
|
|
57 人のユーザが現在オンラインです。 (47 人のユーザが フォーラム を参照しています。) |
|
|
フロント機能
投稿者 |
スレッド |
harusame |
投稿日時: 2014/8/5 15:09
対応状況: −−−
|
半人前 登録日: 2014/7/30 居住地: 奈良 投稿: 27 |
Re: 2.13系メール便の対応について 投稿が遅くなり申し訳ございません。 テストサイトもある為可能ですので、ソース変更を致しました。 その後、カートページを確認致しました。 下記の通り表示致しました。 ●メール便のみカートへ入れた場合 203 mail_deliver false ●メール便、宅急便を同時に入れた場合 203 mail_deliver false 0 === 1 202 mail_deliver false ●メール便、宅急便、送料無料指定金額を越える商品(数量10)を入れた場合 203 mail_deliver false 0 === 1 202 mail_deliver false 0 === 1 5 mail_deliver false ●上記にさらにメール便商品をいれた場合 203 mail_deliver false 0 === 1 202 mail_deliver false 0 === 1 5 mail_deliver false 1 === 1 201 mail_deliver false 上記のように表示されました。 配送方法指定のページまで進んでも、 同じ表示となっておりました。 やはり間違っているようです。 引用: どの部分が原因でうまく動かないかを確認するのがいいと思います。 おそらくfunction checkMailDeliverAvailableの部分とは思いますが、順番にどの部分はうまく動いていて、どの部分がうまく動いてないのかを判断するのが必要ですので、順に処理をチェックしていってください 上記の表示をどう判断すべきか、 処理チェックの方法などがわからない為、助言頂ければ幸いです。 毎度毎度、質問ばかりで申し訳ございません。 そして、 ご丁寧に回答を頂き本当に助かっております。
|
|
|
yuh |
投稿日時: 2014/8/5 15:33
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 2.13系メール便の対応について ●メール便のみカートへ入れた場合 203 mail_deliver false とあるので、商品ID:203がちゃんとメール便の設定が行われているかチェックしてみてください。 あと、前回adjustSessionProductsClassをカスタマイズした後にカートの中は一度空にしましたか? 考えられる可能性は ・商品ID:203がメール便の設定が行われていない ・adjustSessionProductsClassを変更する前から商品ID:203がカートに入っていて、その情報を持ったままテストを行っている ・$product['mail_deliver_enabled'] === MAIL_DELIVER_ENABLEDでMAIL_DELIVER_ENABLEDと$product['mail_deliver_enabled']が同じ型ではない 事があると思います。 。
if ($product['mail_deliver_enabled'] === MAIL_DELIVER_ENABLED) {
この部分を
if ($product['mail_deliver_enabled'] == MAIL_DELIVER_ENABLED) {
このように変更してください
|
|
|
harusame |
投稿日時: 2014/8/5 16:00
対応状況: −−−
|
半人前 登録日: 2014/7/30 居住地: 奈良 投稿: 27 |
Re: 2.13系メール便の対応について 早速の投稿ありがとうございます。 引用: ・商品ID:203がメール便の設定が行われていない 上記、問題なく設定しておりました。 引用: ・adjustSessionProductsClassを変更する前から商品ID:203がカートに入っていて、その情報を持ったままテストを行っている 確かにカートに入れたまま作業を行っておりました。 一度空にして再度入れ直し確認致しましたが、 「false」表示のままでした。 引用: ・$product['mail_deliver_enabled'] === MAIL_DELIVER_ENABLEDでMAIL_DELIVER_ENABLEDと$product['mail_deliver_enabled']が同じ型ではない その通りでした。 変更後、メール便商品をカートに入れ、確認を致しましたところ、 203 mail_deliver true の表示になっておりました。 その後、 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;
}
上記へ直し、問題なく動作いたしております。 本当に、感謝の言葉が見つからないぐらいに感激致しております。 これで先にやっと進めます。 ●EC-CUBE 配送方法のメール便表示を商品によって変える http://tech.bandersnatch.jp/367上記へ移行し、 /data/class/pages/shopping/LC_Page_Shopping_Payment.phpのfunction action()内へ、 // 配送業者を取得
$mail_delivery_available = $objPurchase->checkMailDeliverAvailable($cart_key, $objCartSess);
$this->arrDeliv = $objDelivery->getList($cart_key, $mail_delivery_available);
$this->is_single_deliv = $this->isSingleDeliv($this->arrDeliv);
正解なのかどうかわかりませんが、上記のように追加致しました。 ここでまた、つまづいてしまいました…。 参考サイト上では、 「SC_Helper_Purchase内getDelivを以下のように引数追加して処理を増やします。」 と記載があるのですが、 「getDeliv」が見当たりません。 getDelivDateはあるのですが、そちらを変更するのは違う気がするのですが、 どのように行うべきなのでしょうか。 何卒、よろしくお願い致します…。
|
|
|
yuh |
投稿日時: 2014/8/5 16:10
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 2.13系メール便の対応について SC_Helper_DeliveryのgetListだと思います。 そこのそのページに書いてるように調整すればできると思います。
|
|
|
harusame |
投稿日時: 2014/8/5 17:07
対応状況: −−−
|
半人前 登録日: 2014/7/30 居住地: 奈良 投稿: 27 |
Re: 2.13系メール便の対応について getListも検索したのですが発見できず、 SC_Helper_Deliveryということがわかりませんでした。 本当に、本当に、ありがとうございます。 システムエラーの嵐でしたが、 最終的に下記のように変更しました。 /**
* 配送方法一覧の取得.
*
* @param integer $product_type_id 商品種別ID
* @param boolean $has_deleted 削除された支払方法も含む場合 true; 初期値 false
* @return array
*/
public function getList($product_type_id = null, $has_deleted = false, $mail_delivery_available = true)
{
$mail_deliv_id = 20;
$objQuery = & SC_Query_Ex::getSingletonInstance();
$objQuery->setOrder('rank DESC');
$where='product_type_id = ? AND del_flg = 0';
$arrval=array($product_type_id);
if(!$mail_delivery_available){
$where .= ' AND deliv_id ! = ?';
$arrval[] = $mail_deliv_id;
}
$objQuery =& SC_Query_Ex::getSingletonInstance();
$col = '*';
$where = '';
$arrVal = array();
if (!$has_deleted) {
$where .= 'del_flg = 0';
}
if (!is_null($product_type_id)) {
if (!$has_deleted) {
$where .= ' AND ';
}
$where .= 'product_type_id = ?';
$arrVal[] = $product_type_id;
}
$table = 'dtb_deliv';
$objQuery->setOrder('rank DESC');
$arrRet = $objQuery->select($col, $table, $where, $arrVal);
return $objQuery->select('*', 'dtb_deliv', $where ,$arrval );
}
$objQuery = & SC_Query_Ex::getSingletonInstance(); $objQuery->setOrder('rank DESC'); などは重複しているのですが、削除すべきなのでしょうか。 検索等を行ったのですが、解決できず、上記のようになってしまいました。 その後、 EC-CUBE メール便では着日指定できないようにしておく http://tech.bandersnatch.jp/387上記カスタマイズにて、 /data/Smarty/templates/default/shopping/payment.tplを <!--{if $cartKey != $smarty.const.PRODUCT_TYPE_DOWNLOAD}-->
<div class="pay_area02">
<h3>お届け時間の指定</h3>
<div class="pay_area02_display">
<p class="select-msg">ご希望の方は、お届け時間を選択してください。</p>
<p class="non-select-msg">まずはじめに、配送方法を選択ください。</p>
<!--{foreach item=shippingItem name=shippingItem from=$arrShipping}-->
<!--{assign var=index value=$shippingItem.shipping_id}-->
<div class="delivdate top">
<!--{if $is_multiple}-->
<span class="st">▼<!--{$shippingItem.shipping_name01}--><!--{$shippingItem.shipping_name02}-->
<!--{$arrPref[$shippingItem.shipping_pref]}--><!--{$shippingItem.shipping_addr01}--><!--{$shippingItem.shipping_addr02}--></span><br/>
<!--{/if}-->
<!--★お届け日★-->
<!--{assign var=key value="deliv_date`$index`"}-->
<span class="attention"><!--{$arrErr[$key]}--></span>
お届け日:
<!--{if !$arrDelivDate}-->
ご指定頂けません。
<!--{else}-->
<select name="<!--{$key}-->" id="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->">
<option value="" selected="">指定なし</option>
<!--{assign var=shipping_date_value value=$arrForm[$key].value|default:$shippingItem.shipping_date}-->
<!--{html_options options=$arrDelivDate selected=$shipping_date_value}-->
</select>
<!--{/if}-->
<!--★お届け時間★-->
<!--{assign var=key value="deliv_time_id`$index`"}-->
<span class="attention"><!--{$arrErr[$key]}--></span>
お届け時間:
<select name="<!--{$key}-->" id="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->">
<option value="" selected="">指定なし</option>
<!--{assign var=shipping_time_value value=$arrForm[$key].value|default:$shippingItem.time_id}-->
<!--{html_options options=$arrDelivTime selected=$shipping_time_value}-->
</select>
</div>
<!--{/foreach}-->
</div>
<div class="pay_area02_display_mail">
※メール便は指定できません。
</div>
</div>
<!--{/if}-->
上記のようにし、さらにjavascriptを、 <script type="text/javascript">//<![CDATA[
$(function() {
if ($('input[name=deliv_id]:checked').val()
|| $('#deliv_id').val()) {
showForm(true);
changeForm(deliv_id);
} else {
showForm(false);
}
$('input[id^=deliv_]').click(function() {
showForm(true);
var data = {};
data.mode = 'select_deliv';
data.deliv_id = $(this).val();
data['<!--{$smarty.const.TRANSACTION_ID_NAME}-->'] = '<!--{$transactionid}-->';
$.ajax({
type : 'POST',
url : location.pathname,
data: data,
cache : false,
dataType : 'json',
error : remoteException,
success : function(data, dataType) {
if (data.error) {
remoteException();
} else {
// 支払い方法の行を生成
var payment_tbody = $('#payment tbody');
payment_tbody.empty();
for (var i in data.arrPayment) {
// ラジオボタン
<!--{* IE7未満対応のため name と id をベタ書きする *}-->
var radio = $('<input type="radio" name="payment_id" id="pay_' + i + '" />')
.val(data.arrPayment[i].payment_id);
// ラベル
var label = $('<label />')
.attr('for', 'pay_' + i)
.text(data.arrPayment[i].payment_method);
// 行
var tr = $('<tr />')
.append($('<td />')
.addClass('alignC')
.append(radio))
.append($('<td />').append(label));
// 支払方法の画像が登録されている場合は表示
if (data.img_show) {
var payment_image = data.arrPayment[i].payment_image;
$('th#payment_method').attr('colspan', 3);
if (payment_image) {
var img = $('<img />').attr('src', '<!--{$smarty.const.IMAGE_SAVE_URLPATH}-->' + payment_image);
tr.append($('<td />').append(img));
} else {
tr.append($('<td />'));
}
} else {
$('th#payment_method').attr('colspan', 2);
}
tr.appendTo(payment_tbody);
}
// お届け時間を生成
var deliv_time_id_select = $('select[id^=deliv_time_id]');
deliv_time_id_select.empty();
deliv_time_id_select.append($('<option />').text('指定なし').val(''));
for (var i in data.arrDelivTime) {
var option = $('<option />')
.val(i)
.text(data.arrDelivTime[i])
.appendTo(deliv_time_id_select);
}
}
changeForm(deliv_id);
}
});
});
/**
* 通信エラー表示.
*/
function remoteException(XMLHttpRequest, textStatus, errorThrown) {
alert('通信中にエラーが発生しました。カート画面に移動します。');
location.href = '<!--{$smarty.const.CART_URL}-->';
}
/**
* 配送方法の選択状態により表示を切り替える
*/
function showForm(show) {
if (show) {
$('#payment, div.delivdate, .select-msg').show();
$('.non-select-msg').hide();
} else {
$('#payment, div.delivdate, .select-msg').hide();
$('.non-select-msg').show();
}
}
function changeForm(deliv_id) {
var deliv_time_id_select = $('select[id^=deliv_time_id]');
var deliv_date_select = $('select[id^=deliv_date]');
if (deliv_id=='20') {
if(deliv_time_id_select){
deliv_time_id_select.attr("disabled", "disabled");
}
if(deliv_date_select){
deliv_date_select.attr("disabled", "disabled");
}
$('div.pay_area02_display_mail').show();
$('div.pay_area02_display').hide();
} else {
$('div.pay_area02_display').show();
$('div.pay_area02_display_mail').hide();
if(deliv_time_id_select){
deliv_time_id_select.removeAttr("disabled");
}
if(deliv_date_select){
deliv_date_select.removeAttr("disabled");
}
}
}
});
//]]></script>
上記のように変更致しました。 ですが、 宅急便商品でもメール便が表示されたままで、 配送方法を選択すると、 「通信中にエラーが発生しました。カートへ移動します。」 のメッセージとともにカートへ戻されてしまいます。 ただただ間違っていることしかわからない状態で、 WEB等で調べに調べているのですが、なかなか解決に至りません。 何卒、ご教示頂ければ幸いです。
|
|
|
yuh |
投稿日時: 2014/8/5 17:36
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 2.13系メール便の対応について 「通信中にエラーが発生しました。カートへ移動します。」 なんですが、前のテストコード echoとかの部分って消しました? そのテストコード残ってると、そのエラーでる場合があります。 あと、たぶん
public function getList($product_type_id = null, $has_deleted = false, $mail_delivery_available = true)
{
$objQuery =& SC_Query_Ex::getSingletonInstance();
$col = '*';
$where = '';
$arrVal = array();
if (!$has_deleted) {
$where .= 'del_flg = 0';
}
if (!is_null($product_type_id)) {
if (!$has_deleted) {
$where .= ' AND ';
}
$where .= 'product_type_id = ?';
$arrVal[] = $product_type_id;
}
if(!$mail_delivery_available){
$mail_deliv_id = 20;
$where .= ' AND deliv_id ! = ?';
$arrval[] = $mail_deliv_id;
}
$table = 'dtb_deliv';
$objQuery->setOrder('rank DESC');
$arrRet = $objQuery->select($col, $table, $where, $arrVal);
return $arrRet;
}
こんな感じでいいと思います。 確認はしてないので調整してくださいね。
|
|
|
harusame |
投稿日時: 2014/8/5 19:01
対応状況: −−−
|
半人前 登録日: 2014/7/30 居住地: 奈良 投稿: 27 |
Re: 2.13系メール便の対応について 引用: 「通信中にエラーが発生しました。カートへ移動します。」 なんですが、前のテストコード echoとかの部分って消しました? そのテストコード残ってると、そのエラーでる場合があります。 テストコードが残っていた為、削除致しました。 その結果、エラーはなくなりました。ありがとうございます。 ですが、 どの商品をカートに入れた場合でも、 配送方法・お届け時間指定等が、全て表示されたままとなってしまいます。 javascriptに間違いがあるのでしょうか。 下記を記載しております。 <script type="text/javascript">//<![CDATA[
$(function() {
if ($('input[name=deliv_id]:checked').val()
|| $('#deliv_id').val()) {
showForm(true);
changeForm(deliv_id);
} else {
showForm(false);
}
$('input[id^=deliv_]').click(function() {
showForm(true);
var data = {};
data.mode = 'select_deliv';
data.deliv_id = $(this).val();
data['<!--{$smarty.const.TRANSACTION_ID_NAME}-->'] = '<!--{$transactionid}-->';
$.ajax({
type : 'POST',
url : location.pathname,
data: data,
cache : false,
dataType : 'json',
error : remoteException,
success : function(data, dataType) {
if (data.error) {
remoteException();
} else {
// 支払い方法の行を生成
var payment_tbody = $('#payment tbody');
payment_tbody.empty();
for (var i in data.arrPayment) {
// ラジオボタン
<!--{* IE7未満対応のため name と id をベタ書きする *}-->
var radio = $('<input type="radio" name="payment_id" id="pay_' + i + '" />')
.val(data.arrPayment[i].payment_id);
// ラベル
var label = $('<label />')
.attr('for', 'pay_' + i)
.text(data.arrPayment[i].payment_method);
// 行
var tr = $('<tr />')
.append($('<td />')
.addClass('alignC')
.append(radio))
.append($('<td />').append(label));
// 支払方法の画像が登録されている場合は表示
if (data.img_show) {
var payment_image = data.arrPayment[i].payment_image;
$('th#payment_method').attr('colspan', 3);
if (payment_image) {
var img = $('<img />').attr('src', '<!--{$smarty.const.IMAGE_SAVE_URLPATH}-->' + payment_image);
tr.append($('<td />').append(img));
} else {
tr.append($('<td />'));
}
} else {
$('th#payment_method').attr('colspan', 2);
}
tr.appendTo(payment_tbody);
}
// お届け時間を生成
var deliv_time_id_select = $('select[id^=deliv_time_id]');
deliv_time_id_select.empty();
deliv_time_id_select.append($('<option />').text('指定なし').val(''));
for (var i in data.arrDelivTime) {
var option = $('<option />')
.val(i)
.text(data.arrDelivTime[i])
.appendTo(deliv_time_id_select);
}
}
changeForm(deliv_id);
}
});
});
/**
* 通信エラー表示.
*/
function remoteException(XMLHttpRequest, textStatus, errorThrown) {
alert('通信中にエラーが発生しました。カート画面に移動します。');
location.href = '<!--{$smarty.const.CART_URL}-->';
}
/**
* 配送方法の選択状態により表示を切り替える
*/
function showForm(show) {
if (show) {
$('#payment, div.delivdate, .select-msg').show();
$('.non-select-msg').hide();
} else {
$('#payment, div.delivdate, .select-msg').hide();
$('.non-select-msg').show();
}
}
function changeForm(deliv_id) {
var deliv_time_id_select = $('select[id^=deliv_time_id]');
var deliv_date_select = $('select[id^=deliv_date]');
if (deliv_id=='20') {
if(deliv_time_id_select){
deliv_time_id_select.attr("disabled", "disabled");
}
if(deliv_date_select){
deliv_date_select.attr("disabled", "disabled");
}
$('div.pay_area02_display_mail').show();
$('div.pay_area02_display').hide();
} else {
$('div.pay_area02_display').show();
$('div.pay_area02_display_mail').hide();
if(deliv_time_id_select){
deliv_time_id_select.removeAttr("disabled");
}
if(deliv_date_select){
deliv_date_select.removeAttr("disabled");
}
}
}
});
//]]></script>
それぞれDBでは、 ●宅急便 deliv_id : 1 product_type_id : 1 ●メール便 deliv_id : 20 product_type_id : 1 上記のように設定されております。 いろいろ変更してみましたが、 何がどう間違っているのかわからない状態です…。 (明日より3日間出張の為、投稿ができるかわかりません…。)
|
|
|
yuh |
投稿日時: 2014/8/5 21:36
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 2.13系メール便の対応について 今見直したら
$this->arrDeliv = $objDelivery->getList($cart_key, $mail_delivery_available);
この部分が間違いで
$this->arrDeliv = $objDelivery->getList($cart_key,false, $mail_delivery_available);
正しくはこのように記述と思います。 JSに関しては・・・ちょっと苦手なんですみません^^;
|
|
|
harusame |
投稿日時: 2014/8/5 23:47
対応状況: −−−
|
半人前 登録日: 2014/7/30 居住地: 奈良 投稿: 27 |
Re: 2.13系メール便の対応について こちらこそ、頼りっぱなしな状態で申し訳ございません。 本当に大変助かっております。 /data/class/pages/shopping/LC_Page_Shopping_Payment.php 上記の記述でよろしかったでしょうか。 /**
* Page のアクション.
*
* @return void
*/
public function action()
{
//決済処理中ステータスのロールバック
$objPurchase = new SC_Helper_Purchase_Ex();
$objPurchase->cancelPendingOrder(PENDING_ORDER_CANCEL_FLAG);
$objSiteSess = new SC_SiteSession_Ex();
$objCartSess = new SC_CartSession_Ex();
$objCustomer = new SC_Customer_Ex();
$objFormParam = new SC_FormParam_Ex();
$objDelivery = new SC_Helper_Delivery_Ex();
$this->is_multiple = $objPurchase->isMultiple();
// カートの情報を取得
$this->arrShipping = $objPurchase->getShippingTemp($this->is_multiple);
$this->tpl_uniqid = $objSiteSess->getUniqId();
$cart_key = $objCartSess->getKey();
$this->cartKey = $cart_key;
$objPurchase->verifyChangeCart($this->tpl_uniqid, $objCartSess);
// 配送業者を取得
$mail_delivery_available = $objPurchase->checkMailDeliverAvailable($cart_key, $objCartSess);
$this->arrDeliv = $objDelivery->getList($cart_key,false, $mail_delivery_available);
$this->is_single_deliv = $this->isSingleDeliv($this->arrDeliv);
上記のように変更してみましたが、エラーが発生致しました。 いろいろ試みましたが、改善できませんでした…。 ちなみに、エラーの状況ですが、 カートまでは問題なく、購入手続きへボタンを押し、その後の次へボタンを押すと発生します。 また、カート内商品ですが、 ・メール便のみ → エラー無し ・メール便&宅急便 → エラー ・宅急便のみ →エラー というような状態です。 どの部分が問題なのか、またまた解決できない状態です…。
|
|
|
yuh |
投稿日時: 2014/8/5 23:58
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 2.13系メール便の対応について
public function getList($product_type_id = null, $has_deleted = false, $mail_delivery_available = true)
{
$objQuery =& SC_Query_Ex::getSingletonInstance();
$col = '*';
$where = '';
$arrVal = array();
if (!$has_deleted) {
$where .= 'del_flg = 0';
}
if (!is_null($product_type_id)) {
if (!$has_deleted) {
$where .= ' AND ';
}
$where .= 'product_type_id = ?';
$arrVal[] = $product_type_id;
}
if(!$mail_delivery_available){
$mail_deliv_id = 20;
if ($where != "") {
$where .= ' AND ';
}
$where .= ' deliv_id ! = ?';
$arrval[] = $mail_deliv_id;
}
$table = 'dtb_deliv';
$objQuery->setOrder('rank DESC');
$arrRet = $objQuery->select($col, $table, $where, $arrVal);
return $arrRet;
}
一部修正ですね。
|
|
|
|
統計情報
総メンバー数は89,041名です
総投稿数は110,020件です
|