バージョン選択

フォーラム

メニュー

オンライン状況

56 人のユーザが現在オンラインです。 (46 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 55
bheqy7744 もっと...

サイト内検索

質問 > フロント機能 > 2.13系メール便の対応について

フロント機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
harusame
投稿日時: 2014/12/16 15:53
対応状況: −−−
半人前
登録日: 2014/7/30
居住地: 奈良
投稿: 27
Re: 2.13系メール便の対応について
以前、投稿を解決済みとさせていただきましたが、
スマートフォンページにて正常に表示しない項目があり、
再度、お力を貸していただきたく思い、投稿をいたしました。



以前、下記コードを追加し、
●/data/Smarty/templates/default/products/detail.tpl
                <!--▼商品ステータス-->
                <!--{assign var=ps value=$productStatus[$tpl_product_id]}-->
                <!--{if count($ps) > 0}-->
                    <ul class="status_icon clearfix">
                        <!--{foreach from=$ps item=status}-->
                        <li>
                            <!--{if $arrProduct.mail_deliver_enabled == $smarty.const.MAIL_DELIVER_ENABLED}-->
                            <img src="<!--{$TPL_URLPATH}-->/img/icon/icon_yamato_mailbin.gif" alt="メール便アイコン" />
                            <!--{/if}-->
                            <img src="<!--{$TPL_URLPATH}--><!--{$arrSTATUS_IMAGE[$status]}-->" width="80" height="17" alt="<!--{$arrSTATUS[$status]}-->" id="icon<!--{$status}-->" />
                        </li>
                        <!--{/foreach}-->
                    </ul>
                <!--{/if}-->
                <!--▲商品ステータス-->

メール便フラグの付いている商品には、
商品ステータスにメール便アイコンが表示するようにしました。



その後、
商品一覧ページのステータスにも
メール便アイコンを表示しようと思い、
同じコードを下記にも追加いたしました。
●/data/Smarty/templates/default/products/list.tpl



その時は、
メール便対応商品には、アイコンが表示された為、
問題がないかのように思いました。



しかし、
「もっとみる(+15件)」ボタンを押すと、不具合発生です。



一番下の商品の情報が反映されているのか、

・一番下の商品にメール便アイコンがある場合
 ┗その後、全ての商品にアイコンが付いてしまう。

・一番下の商品にメール便アイコンが無い場合
 ┗その後、全ての商品にアイコンが付かない。

と、なってしまいます。


記事等を検索し、
(もっとみる)ボタンの改善に努めましたが、
結局、解決できませんでした…。


どなたか、お力を貸してはいただけないでしょうか。

何卒、よろしくお願いいたします。
harusame
投稿日時: 2014/8/10 14:04
対応状況: 解決済
半人前
登録日: 2014/7/30
居住地: 奈良
投稿: 27
Re: 2.13系メール便の対応について
変更させていただきました。

管理画面につきましても、
問題無く表示いたしております。

また、
カート、購入画面などなどにつきましても、
動作に問題はないようです。


はじめは、ほとんど諦めておりましたので、
ご丁寧に教えて頂き、本当に感謝いたします。
本当にありがとうございました。

それでは、解決済みとさせていただきます。

yuh様に出会うことができ、本当によかったです!
yuh
投稿日時: 2014/8/10 13:44
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 2.13系メール便の対応について

#メール便対応商品
	public function getList($product_type_id, $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;
		}
		return $objQuery->select('*', 'dtb_deliv', $where ,$arrval );
	}

上記のソースは色々混じってます。


    #メール便対応商品
    public function getList($product_type_id = null, $has_deleted = false,$mailflag = false)
    {
        $mail_deliv_id = 20;
        $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 ( $mailflag === false ) {
                if($where != ""){
                    $where .= ' AND';
                }
                $where .= ' deliv_id <> ?';
                $arrVal[] = $mail_deliv_id;//メール便のdeliv_id
            }
        }
        $table = 'dtb_deliv';
        $objQuery->setOrder('rank DESC');
        $arrRet = $objQuery->select($col, $table, $where, $arrVal);
        return $arrRet;
    }


getlistの引数がデフォルトだとproduct_type_id, $has_deleted でその部分に追加で$mail_delivery_available
を追加しているはずですが、$has_deletedが消えています。
管理画面から読み出す部分に関してはproduct_type_idを渡さずに
$objDeliv->getList();
と使用しているので、
$product_type_idがnullでproduct_type_id = NULL AND del_flg = 0とクエリが走り結果が0件となると思います。

自分で変更しているやつに関しては管理画面からのproduct_type_idがnullの場合にはメール便のチェックはスルーするようにしているので、下のソースを使用してみてください。
その際にpublic function getListからコピーしてお試しください。
harusame
投稿日時: 2014/8/10 13:32
対応状況: −−−
半人前
登録日: 2014/7/30
居住地: 奈良
投稿: 27
Re: 2.13系メール便の対応について
本番サイトへの移行が完了し、正常に動作致しました。
本当にありがとうございます。

ただ、
引用:
管理画面につきましては、改善されておりました…すみません。
キャッシュなのか、なんなのか、こちらも原因がわかりませんが、
通常通り、表示されておりました。
十分確認をせず、記載してしまい申し訳ございません。

と言いましたが、
やはり、管理画面の配送方法一覧が消えておりました。

先ほど、表示されていたのは、
コードを削除した状態で保存していた為でした。
やはり、
SC_Helper_Delivery_Ex.php内の、
	#メール便対応商品
	public function getList($product_type_id, $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;
		}
		return $objQuery->select('*', 'dtb_deliv', $where ,$arrval );
	}

上記により、配送方法一覧が、表示&消去されてしまいました。




※※※追記致します※※※

SC_Helper_Delivery_Ex.php内のコードは削除し、
SC_Helper_Delivery.php内のコード、
 	#メール便対応商品
    public function getList($product_type_id = null, $has_deleted = false,$mailflag = false)
    {
        $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 ( $mailflag === false ) {
                if($where != ""){
                    $where .= ' AND';
                }
                $where .= ' deliv_id <> ?';
                $arrVal[] = 20;//メール便のdeliv_id
            }
        }
        $table = 'dtb_deliv';
        $objQuery->setOrder('rank DESC');
        $arrRet = $objQuery->select($col, $table, $where, $arrVal);
        return $arrRet;
    }

のみにすると、改善されました…。

確証はありませんが、
こちらのコードだけでも、正常に動作しておりますので、
今のところ、問題はないかと思われます。
お騒がせいたしました。
harusame
投稿日時: 2014/8/10 12:28
対応状況: −−−
半人前
登録日: 2014/7/30
居住地: 奈良
投稿: 27
Re: 2.13系メール便の対応について
ありがとうございます。

お教えいただいたコードへSC_Helper_Delivery.phpを変更致しました。


管理画面につきましては、改善されておりました…すみません。
キャッシュなのか、なんなのか、こちらも原因がわかりませんが、
通常通り、表示されておりました。
十分確認をせず、記載してしまい申し訳ございません。


今から、本番サイトへ移行作業をしてみます。
yuh
投稿日時: 2014/8/10 12:17
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 2.13系メール便の対応について
SC_Helper_Delivery.phpはミスで下記のコードが正常に動作します。

    #メール便対応商品
    public function getList($product_type_id = null, $has_deleted = false,$mailflag = false)
    {
        $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 ( $mailflag === false ) {
                if($where != ""){
                    $where .= ' AND';
                }
                $where .= ' deliv_id <> ?';
                $arrVal[] = 5;//メール便のdeliv_id
            }
        }
        $table = 'dtb_deliv';
        $objQuery->setOrder('rank DESC');
        $arrRet = $objQuery->select($col, $table, $where, $arrVal);
        return $arrRet;
    }


管理画面確認してなかったです^^;
すいません。
harusame
投稿日時: 2014/8/10 11:50
対応状況: −−−
半人前
登録日: 2014/7/30
居住地: 奈良
投稿: 27
Re: 2.13系メール便の対応について
何度も申し訳ございません。

ショップ内は問題がないように思われるのですが、


管理画面>基本情報管理>配送方法設定
上記の一覧から、全ての登録情報が消え去りました…。


SC_Helper_Delivery_Ex.php内の
	#メール便対応商品
	public function getList($product_type_id, $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;
		}
		return $objQuery->select('*', 'dtb_deliv', $where ,$arrval );
	}

上記部分を削除すると、一覧も復活致します。
同時に、サイト内のメール便対応が解除されます…。


ちなみにですが、
SC_Helper_Delivery.php内は下記のように、初期状態のままです。
    /**
     * 配送方法一覧の取得.
     *
     * @param  integer $product_type_id 商品種別ID
     * @param  boolean $has_deleted     削除された支払方法も含む場合 true; 初期値 false
     * @return array
     */
    public function getList($product_type_id = null, $has_deleted = false)
    {
        $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 $arrRet;
    }



一覧から消えた状態でもDBでいじれますし、
どうにもならない場合、現状でいこうかと思います…。
harusame
投稿日時: 2014/8/10 11:34
対応状況: −−−
半人前
登録日: 2014/7/30
居住地: 奈良
投稿: 27
Re: 2.13系メール便の対応について
解決いたしました。

何がどうなったのかわからないのですが、
SC_Helper_Delivery_Ex.phpを参考サイト通り
<?php
/*
 * This file is part of EC-CUBE
 *
 * Copyright(c) 2000-2013 LOCKON CO.,LTD. All Rights Reserved.
 *
 * http://www.lockon.co.jp/
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

require_once CLASS_REALDIR . 'helper/SC_Helper_Delivery.php';

/**
 * 配送方法を管理するヘルパークラス(拡張).
 *
 * LC_Helper_Delivery をカスタマイズする場合はこのクラスを編集する.
 *
 * @package Helper
 * @author pineray
 * @version $Id:$
 */
class SC_Helper_Delivery_Ex extends SC_Helper_Delivery
{
    //put your code here

		#メール便対応商品
		public function getList($product_type_id,$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;
		}
		return $objQuery->select('*', 'dtb_deliv', $where ,$arrval );
	}
}

上記のような記述とし、

SC_Helper_Purchase_Ex.phpを
<?php
/*
 * This file is part of EC-CUBE
 *
 * Copyright(c) 2000-2013 LOCKON CO.,LTD. All Rights Reserved.
 *
 * http://www.lockon.co.jp/
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

require_once CLASS_REALDIR . 'helper/SC_Helper_Purchase.php';

/**
 * 商品購入関連のヘルパークラス(拡張).
 *
 * LC_Helper_Purchase をカスタマイズする場合はこのクラスを編集する.
 *
 * @package Helper
 * @author Kentaro Ohkouchi
 * @version $Id: SC_Helper_Purchase_Ex.php 22856 2013-06-08 07:35:27Z Seasoft $
 */
class SC_Helper_Purchase_Ex extends 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;
	}
}

上記のようにしましたところ、
正常に動作いたしておりました。


全くどの部分での不具合だったのか、
どの部分で改善したのかがわからないのが納得いかないのですが、
結果、
メール便のみカートにある場合、メール便を表示、
宅急便も混ざっている場合、メール便非表示、
という状態とすることができました。


yuh様には、長期間に渡り、
本当に、本当に、細かいところまで親切にお教えいただき、
大変勉強になり、メール便対応サイトにもすることができ、
感謝してもしきれないほどです。
本当に、本当に、ありがとうございました。


本番サイトへ移行し、
問題が無ければ、解決済みとさせていただきます。
harusame
投稿日時: 2014/8/10 11:06
対応状況: −−−
半人前
登録日: 2014/7/30
居住地: 奈良
投稿: 27
Re: 2.13系メール便の対応について
確かに正常に動作しておりますね…。
わざわざテストサイトにまで構築頂き、本当に、本当に、ありがとうございます。
お応えできるよう、必死で修正を行っていたのですが、
やはり、何かしらの不具合が発生してしまいます…。

まずSC_Helper_Delivery.phpの
    #メール便対応商品
    public function getList($product_type_id = null, $has_deleted = false, $mailflag = false )
    {
        $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 ( $mailflag === false ) {
            if($where != ""){
                $where .= ' AND';
            }
            $where .= ' deliv_id <> ?';
            $arrVal[] = 20;//メール便のdeliv_id
        }
        $table = 'dtb_deliv';
        $objQuery->setOrder('rank DESC');
        $arrRet = $objQuery->select($col, $table, $where, $arrVal);
        return $arrRet;
    }

上記に書き換えると、
管理画面>基本情報管理>配送方法設定
から、メール便が消え去ります。

そして、ショップ購入ページからも、
配送方法選択に、メール便が一切出てこなくなり、宅急便のみとなります。
(カート内商品がどのパターンでも)

上記は、DB内dtb_delivへ、mailflagのカラムを増やすことでよろしかったでしょうか。
違っていたらすみません。
下記のように増やしました。
 ・mailflag
  ┗smallint(6)|いいえ|0
そして、メール便のみ、mailflagを「0→1」へ変更しました。

根本的に間違っているかもしれませんが…。

どちらにしても、
カラム追加前、後、mailflag変更前、後、などなど、
全てにおいて、同じ現象(メール便が消え去る)となっております。

------

SC_Helper_Purchase_Ex.phpの書き換えにつきましては、
特に変化無しでした。

------

LC_Page_Shopping_Payment.phpにつきましては、
↓現在
        // 配送業者を取得
        $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);

から、
		$flag = $objPurchase->checkMailDeliverAvailable($cart_key, &$objCartSess) ;
		$this->arrDeliv = $objDelivery->getList($cart_key,false,$flag);
//↑ここを追加
//        $this->arrDeliv = $objDelivery->getList($cart_key);

上記に書き換えると、購入手続き画面にてエラー発生。

		$flag = $objPurchase->checkMailDeliverAvailable($cart_key, &$objCartSess) ;
		$this->arrDeliv = $objDelivery->getList($cart_key,false,$flag);
        $this->is_single_deliv = $this->isSingleDeliv($this->arrDeliv);

こちらでも同じくエラー発生。

と、いうようになっております。


何かプラグイン等が競合してしまっているのでしょうか…。
ちなみにプラグインは、
「全ページ対応パンくずリスト表示プラグイン 0.3」
「カートブロック明細表示プラグイン 1.0.0」
「クロネコヤマト|送り状発行ソフトB2対応CSVダウンロード 4.1」
上記が有効状態となっております。


いろいろとお教え頂いているにも関わらず、
現状に苛立ちと、申し訳ない気持ちでいっぱいです…。
今しばらくお力をお貸し頂ければ幸いです。


現在も、いろいろと修正を続けておりますので、
何か変化があれば投稿を致します。
yuh
投稿日時: 2014/8/9 19:12
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 2.13系メール便の対応について
ちょっと気になってたんで、こちらのテストサイトでためしに作ってみましたが、正常に動作しますね・・・。
一応参考にしつつぱっと作ったんで、若干の差分があると思うんで内容を載せておきます。


SC_Helper_Delivery_Ex.php

    #メール便対応商品
    #メール便対応商品
    public function getList($product_type_id = null, $has_deleted = false, $mailflag = false )
    {
        $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 ( $mailflag === false ) {
            if($where != ""){
                $where .= ' AND';
            }
            $where .= ' deliv_id <> ?';
            $arrVal[] = 5;//メール便のdeliv_id
        }
        $table = 'dtb_deliv';
        $objQuery->setOrder('rank DESC');
        $arrRet = $objQuery->select($col, $table, $where, $arrVal);
        return $arrRet;
    }


SC_Helper_Purchase_Ex.php

#メール便対応商品
    public function checkMailDeliverAvailable($productTypeId, &$objCartSession) 
    {
        $objQuery       = SC_Query_Ex::getSingletonInstance();
        $available = false;
        // カート内の情報を取得
        $items = $objCartSession->getCartList($productTypeId);
        $idary = array();
        foreach ( $items as $key => $value ) {
            if ( $value['productsClass']['product_id'] AND preg_match('/^[0-9]+$/',$value['productsClass']['product_id']) ) {
                $idary[] = $value['productsClass']['product_id'];
            }
        }
        if ( count($idary) > 0 ) {
            $query = '
            SELECT 
                IF(MAX(mail_deliver_enabled) = MIN(mail_deliver_enabled),MAX(mail_deliver_enabled),MIN(mail_deliver_enabled))
            FROM
                dtb_products
            WHERE
                product_id IN('.implode(",", array_fill(0, count($idary), "?")).')
            ';
            $check = $objQuery->getOne($query,$idary);
            if ( $check == 1 ) {
                return true;
            } else {
                return false;
            }
        }
        return false;
    }


LC_Page_Shopping_Payment.php

		$flag = $objPurchase->checkMailDeliverAvailable($cart_key, &$objCartSess) ;
		$this->arrDeliv = $objDelivery->getList($cart_key,false,$flag);
//↑ここを追加
//        $this->arrDeliv = $objDelivery->getList($cart_key);


テストでUPしていて、
http://skip.ec-lab.net/products/list.php?category_id=7
一部カート部分テスト中ですが、配送方法を取得する部分の処理自体は同じなので参考までに。
(1) 2 3 4 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,057名です
総投稿数は110,021件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.