バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

 > 管理機能 > 【2_11-dev】への「会社名」他の項目追加処置に於いて。。。

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 2011/5/19 12:33
対応状況: −−−
【2_11-dev】への「会社名」他の項目追加処置に於いて。。。
フロント画面に関しては追加処置を完了し、
現在、管理画面への追加処置を行なっているのですが、「顧客マスタ」で、躓いています。


『version-2_11-dev/data/class_extends/』
 SC_Customer_Ex.php
  require_once CLASS_REALDIR . 'SC_CustomerList.php';
  class SC_CustomerList_Ex extends SC_CustomerList {
  }



  require_once CLASS_REALDIR . 'SC_CustomerList.php';
  class SC_CustomerList_Ex extends SC_CustomerList {
     function SC_CustomerList($array, $mode = '') {
        parent::SC_SelectSql($array);

        $masterData = new SC_DB_MasterData_Ex();

        $objDb = new SC_Helper_DB_Ex();
        $dbFactory = SC_DB_DBFactory_Ex::getInstance();

        if($mode == "") {
            // 会員本登録会員で削除していない会員
            $this->setWhere("status = 2 AND del_flg = 0 ");
            // 登録日を示すカラム
            $regdate_col = 'dtb_customer.update_date';
        }

        if($mode == 'customer') {
            $this->setWhere( " del_flg = 0 ");
            // 登録日を示すカラム
            $regdate_col = 'dtb_customer.update_date';
        }

        // 顧客ID
        if (!isset($this->arrSql['search_customer_id'])) $this->arrSql['search_customer_id'] = "";
        if ( strlen($this->arrSql['search_customer_id']) > 0 ) {
            $this->setWhere( "customer_id =  ?" );
            $this->arrVal[] = $this->arrSql['search_customer_id'];
        }

        // 名前
        if (!isset($this->arrSql['search_name'])) $this->arrSql['search_name'] = "";
        if ( strlen($this->arrSql['search_name']) > 0 ) {
            $this->setWhere("(" . $dbFactory->concatColumn(array("name01", "name02")) . " LIKE ?)" );
            $searchName = $this->addSearchStr($this->arrSql['search_name']);
            $this->arrVal[] = mb_ereg_replace("[  ]+","",$searchName);
        }

        // 名前(カナ)
        if (!isset($this->arrSql['search_kana'])) $this->arrSql['search_kana'] = "";
        if ( strlen($this->arrSql['search_kana']) > 0 ) {
            $this->setWhere("(" . $dbFactory->concatColumn(array("kana01", "kana02")) . " LIKE ?)" );
            $searchKana = $this->addSearchStr($this->arrSql['search_kana']);
            $this->arrVal[] = mb_ereg_replace("[  ]+","",$searchKana);
        }
        
        // & hideki-s '11.05.18
        // 会社名
        if (!isset($this->arrSql['search_company_name'])) $this->arrSql['search_company_name'] = "";
        if ( strlen($this->arrSql['search_company_name']) > 0 ) {
            $this->setWhere( "company_name LIKE ?" );
            $searchCompanyName = $this->addSearchStr($this->arrSql['search_company_name']);
            $this->arrVal[] = mb_ereg_replace("[  ]+","",$searchCompanyName);
        }
        
        // 部署名
        if (!isset($this->arrSql['search_section_name'])) $this->arrSql['search_section_name'] = "";
        if ( strlen($this->arrSql['search_section_name']) > 0 ) {
            $this->setWhere( "section_name LIKE ?" );
            $searchSectionName = $this->addSearchStr($this->arrSql['search_section_name']);
            $this->arrVal[] = mb_ereg_replace("[  ]+","",$searchSectionName);
        }
        
        // (代表)機番
        if (!isset($this->arrSql['search_example_kiban'])) $this->arrSql['search_example_kiban'] = "";
        if ( strlen($this->arrSql['search_example_kiban']) > 0 ) {
            $this->setWhere( "example_kiban LIKE ?" );
            $searchExampleKiban = $this->addSearchStr($this->arrSql['search_example_kiban']);
            $this->arrVal[] = mb_ereg_replace("[  ]+","",$searchExampleKiban);
        }
        // hideki-s & '11.05.18
        
        // 都道府県
        if (!isset($this->arrSql['search_pref'])) $this->arrSql['search_pref'] = "";
        if ( strlen($this->arrSql['search_pref']) > 0 ) {
            $this->setWhere( "pref = ?" );
            $this->arrVal[] = $this->arrSql['search_pref'];
        }
      .....
   }

として「function SC_CustomerList($array, $mode = '') 」をオーバライドしたいのですが、無視される様です。

引用:

http://www.ec-cube.net/product/info.php
に「冗長なプログラムコードの整理」
重複した処理の統合、不要な処理の削除などのリファクタリングを行ったことで、カスタマイズ性が向上しています。
今回のリファクタリングは、限られた時間の中で行ったため、開発チームとしては完全なものとは考えておらず、
今後も継続して行っていく予定です。

とあるので、なんとか実現出来ないかと試案しているのですが、現在の小生の力量では、打開策が見出せずにいます。
何方か、お知恵を拝借出来る方は見えませんでしょうか?

小生が追った道筋を以下に記します。長いです。。。


1.『version-2_11-dev/html/admin/customer/』
 index.php

// {{{ requires
require_once '../require.php';
require_once CLASS_EX_REALDIR . 'page_extends/admin/customer/LC_Page_Admin_Customer_Ex.php';

// }}}
// {{{ generate page

$objPage = new LC_Page_Admin_Customer_Ex();
register_shutdown_function(array($objPage, 'destroy'));
$objPage->init();
$objPage->process();



2.『version-2_11-dev/data/class_extends/page_extends/admin/customer/』
 LC_Page_Admin_Customer_Ex.php

class LC_Page_Admin_Customer_Ex extends LC_Page_Admin_Customer {

    /**
     * Page のプロセス.
     *
     * @return void
     */
    function process() {
        parent::process();
    }



3.『version-2_11-dev/data/class/pages/admin/customer/』
 LC_Page_Admin_Customer.php

    function action() {

        // モードによる処理切り替え
        switch ($this->getMode()) {

        case 'search':
            list($this->tpl_linemax, $this->arrData, $this->objNavi) = $this->lfDoSearch($objFormParam->getHashArray());
            $this->arrPagenavi = $this->objNavi->arrPagenavi;
            break;

  「$this->lfDoSearch($objFormParam->getHashArray())」

   ↓

    /**
     * 顧客一覧を検索する処理
     *
     * @param array $arrParam 検索パラメーター連想配列
     * @return array( integer 全体件数, mixed 顧客データ一覧配列, mixed SC_PageNaviオブジェクト)
     */
    function lfDoSearch($arrParam) {
        return SC_Helper_Customer_Ex::sfGetSearchData($arrParam);
    }

  「SC_Helper_Customer_Ex::sfGetSearchData($arrParam)」

   ↓

4.『version-2_11-dev/data/class_extends/helper_extends/』
  SC_Helper_Customer_Ex.php
 (追加処置を行なっています。)
class SC_Helper_Customer_Ex extends SC_Helper_Customer {
    /**
     * 会員共通
     *
     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
     * @access public
     * @return void
     */
    function sfCustomerCommonParam (&$objFormParam) {

        $objFormParam->addParam("お名前(フリガナ・名)", 'kana02', STEXT_LEN, 'CKV', array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK", "KANA_CHECK"));

        // & hideki-s '11.05.11
        $objFormParam->addParam("会社名", 'company_name', MTEXT_LEN, 'aKV', array("EXIST_CHECK", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
        $objFormParam->addParam("部署名", 'section_name', MTEXT_LEN, 'aKV', array("EXIST_CHECK", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
        $objFormParam->addParam("(代表)機番", 'example_kiban', MTEXT_LEN, 'aKV', array("EXIST_CHECK", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
        // hideki-s & '11.05.11
        
        $objFormParam->addParam("郵便番号1", "zip01", ZIP01_LEN, 'n', array("EXIST_CHECK", "SPTAB_CHECK" ,"NUM_CHECK", "NUM_COUNT_CHECK"));

    }
    
    /**
     * 顧客検索パラメーター(管理画面用)
     *
     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
     * @access public
     * @return void
     */
    function sfSetSearchParam(&$objFormParam) {

        $objFormParam->addParam('都道府県', 'search_pref', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));

        // & hideki-s '11.05.17
        $objFormParam->addParam("会社名", 'search_company_name', MTEXT_LEN, 'KVa', array("SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
        $objFormParam->addParam("部署名", 'search_section_name', MTEXT_LEN, 'KVa', array("SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
        $objFormParam->addParam("(代表)機番", 'search_example_kiban', MTEXT_LEN, 'KVa', array("SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
        // hideki-s & '11.05.17
        
        $objFormParam->addParam('誕生日(開始年)', 'search_b_start_year', 4, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));

    }
}



5.『version-2_11-dev/data/class/helper/』
 SC_Helper_Customer.php

    /**
     * 顧客一覧検索をする処理(ページング処理付き、管理画面用共通処理)
     *
     * @param array $arrParam 検索パラメーター連想配列
     * @return array( integer 全体件数, mixed 顧客データ一覧配列, mixed SC_PageNaviオブジェクト)
     */
    function sfGetSearchData($arrParam) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        $objSelect = new SC_CustomerList_Ex($arrParam, 'customer');
        $page_max = SC_Utils_Ex::sfGetSearchPageMax($arrParam['search_page_max']);
        $disp_pageno = $arrParam['search_pageno'];
        if($disp_pageno == 0) {
            $disp_pageno = 1;
        }
        $offset = intval($page_max) * (intval($disp_pageno) - 1);
        $objSelect->setLimitOffset($page_max, $offset);

        $arrData = $objQuery->getAll($objSelect->getList(), $objSelect->arrVal);

        // 該当全体件数の取得
        $linemax = $objQuery->getOne($objSelect->getListCount(), $objSelect->arrVal);

        // ページ送りの取得
        $objNavi = new SC_PageNavi_Ex($arrParam['search_pageno'],
                                    $linemax,
                                    $page_max,
                                    'fnNaviSearchOnlyPage',
                                    NAVI_PMAX);
        return array($linemax, $arrData, $objNavi);
    }

  「$objSelect = new SC_CustomerList_Ex($arrParam, 'customer')
   $objSelect->arrVal」

6.『version-2_11-dev/data/class_extends/』
 SC_Customer_Ex.php

require_once CLASS_REALDIR . 'SC_CustomerList.php';

class SC_CustomerList_Ex extends SC_CustomerList {
}

↑にて「function SC_CustomerList($array, $mode = '') 」をオーバライドしたいのですが、無視されてしまうので、
↓の様に、今は、クラスを直修正しています。

7.『version-2_11-dev/data/class/』
 SC_CustomerList.php

class SC_CustomerList extends SC_SelectSql_Ex {

    var $arrColumnCSV;

    function SC_CustomerList($array, $mode = '') {
        parent::SC_SelectSql($array);

        $masterData = new SC_DB_MasterData_Ex();

        $objDb = new SC_Helper_DB_Ex();
        $dbFactory = SC_DB_DBFactory_Ex::getInstance();

        if($mode == "") {
            // 会員本登録会員で削除していない会員
            $this->setWhere("status = 2 AND del_flg = 0 ");
            // 登録日を示すカラム
            $regdate_col = 'dtb_customer.update_date';
        }

        if($mode == 'customer') {
            $this->setWhere( " del_flg = 0 ");
            // 登録日を示すカラム
            $regdate_col = 'dtb_customer.update_date';
        }

        // 顧客ID
        if (!isset($this->arrSql['search_customer_id'])) $this->arrSql['search_customer_id'] = "";
        if ( strlen($this->arrSql['search_customer_id']) > 0 ) {
            $this->setWhere( "customer_id =  ?" );
            $this->arrVal[] = $this->arrSql['search_customer_id'];
        }

        // 名前
        if (!isset($this->arrSql['search_name'])) $this->arrSql['search_name'] = "";
        if ( strlen($this->arrSql['search_name']) > 0 ) {
            $this->setWhere("(" . $dbFactory->concatColumn(array("name01", "name02")) . " LIKE ?)" );
            $searchName = $this->addSearchStr($this->arrSql['search_name']);
            $this->arrVal[] = mb_ereg_replace("[  ]+","",$searchName);
        }

        // 名前(カナ)
        if (!isset($this->arrSql['search_kana'])) $this->arrSql['search_kana'] = "";
        if ( strlen($this->arrSql['search_kana']) > 0 ) {
            $this->setWhere("(" . $dbFactory->concatColumn(array("kana01", "kana02")) . " LIKE ?)" );
            $searchKana = $this->addSearchStr($this->arrSql['search_kana']);
            $this->arrVal[] = mb_ereg_replace("[  ]+","",$searchKana);
        }
        
        // & hideki-s '11.05.18
        // 会社名
        if (!isset($this->arrSql['search_company_name'])) $this->arrSql['search_company_name'] = "";
        if ( strlen($this->arrSql['search_company_name']) > 0 ) {
            $this->setWhere( "company_name LIKE ?" );
            $searchCompanyName = $this->addSearchStr($this->arrSql['search_company_name']);
            $this->arrVal[] = mb_ereg_replace("[  ]+","",$searchCompanyName);
        }
        
        // 部署名
        if (!isset($this->arrSql['search_section_name'])) $this->arrSql['search_section_name'] = "";
        if ( strlen($this->arrSql['search_section_name']) > 0 ) {
            $this->setWhere( "section_name LIKE ?" );
            $searchSectionName = $this->addSearchStr($this->arrSql['search_section_name']);
            $this->arrVal[] = mb_ereg_replace("[  ]+","",$searchSectionName);
        }
        
        // (代表)機番
        if (!isset($this->arrSql['search_example_kiban'])) $this->arrSql['search_example_kiban'] = "";
        if ( strlen($this->arrSql['search_example_kiban']) > 0 ) {
            $this->setWhere( "example_kiban LIKE ?" );
            $searchExampleKiban = $this->addSearchStr($this->arrSql['search_example_kiban']);
            $this->arrVal[] = mb_ereg_replace("[  ]+","",$searchExampleKiban);
        }
        // hideki-s & '11.05.18
        
        // 都道府県
        if (!isset($this->arrSql['search_pref'])) $this->arrSql['search_pref'] = "";
        if ( strlen($this->arrSql['search_pref']) > 0 ) {
            $this->setWhere( "pref = ?" );
            $this->arrVal[] = $this->arrSql['search_pref'];
        }
    .....
patapata
投稿日時: 2011/5/19 16:34
対応状況: −−−
仙人
登録日: 2010/7/7
居住地: 神奈川県
投稿: 502
Re: 【2_11-dev】への「会社名」他の項目追加処置に於いて。。。
要点をまとめて、読みやすいように書きましょう。

SC_CustomerList.phpの
function SC_CustomerList($array, $mode = '')
をExクラスでオーバライドしたいのにうまくできません。
と読み解きました。
(途中のコードは面倒なので読んでません。外してたらごめんなさい)

PHPあんま詳しくないですがコンストラクタだからじゃないですかね。

ためしに、
SC_CustomerList.phpに
Initializeとかって関数作って、コンストラクタでやってる処理
全部移動させて・・・
Exクラスでそれをオーバライドしてみれば?


-----------------
SC_CustomerList.php

  class SC_CustomerList extends SC_SelectSql_Ex {
       function SC_CustomerList($array, $mode = '') {
           $this->initialize($array, $mode);
       }
       function initialize($array, $mode = ''){
           //コンストラクタにあった処理
       }
  }

SC_CustomerList_Ex.php

  class SC_CustomerList_Ex extends SC_CustomerList {
       function initialize($array, $mode = ''){
           //適当に代える
       }
  }

ゲスト
投稿日時: 2011/5/19 17:38
対応状況: −−−
Re: 【2_11-dev】への「会社名」他の項目追加処置に於いて。。。
引用:
patapataさんは書きました:
要点をまとめて、読みやすいように書きましょう。
は、一応、(これでも、、、)冒頭にまとめたつもりでしたが、、、
引用:
SC_CustomerList.phpの
function SC_CustomerList($array, $mode = '')
をExクラスでオーバライドしたいのにうまくできません。
と読み解きました。
はい、合ってます。
引用:
PHPあんま詳しくないですがコンストラクタだからじゃないですかね。

ためしに、
SC_CustomerList.phpに
Initializeとかって関数作って、コンストラクタでやってる処理
全部移動させて・・・
Exクラスでそれをオーバライドしてみれば?
ありがとうございます。試してみます。
が、巧くいったとして「リファクタリングガイドライン」に添っているのかどうか、、、
その辺も含めて、引き続き「お知恵」募集中です。。。
Masashige
投稿日時: 2011/5/19 18:07
対応状況: −−−
長老
登録日: 2009/4/1
居住地:
投稿: 200
Re: 【2_11-dev】への「会社名」他の項目追加処置に於いて。。。
確か、

SC_Customer_Ex.phpには

function SC_Customer_Ex()

で作らなきゃいけなかった気が。
ゲスト
投稿日時: 2011/5/19 19:33
対応状況: −−−
Re: 【2_11-dev】への「会社名」他の項目追加処置に於いて。。。
引用:

Masashigeさんは書きました:
確か、

SC_Customer_Ex.phpには

function SC_Customer_Ex()

で作らなきゃいけなかった気が。

ありがとうございます、、、この意味については、調べてみます。。。

で、問題は「SC_CustomerList_Ex.php」でして。。。

1.SC_Customer_Ex.phpは

require_once CLASS_REALDIR . 'SC_Customer.php';
class SC_Customer_Ex extends SC_Customer {
}

で、SC_Customer.phpが
class SC_Customer {
...
となっており、こちらは、巧くオーバライド出来てます。

2.SC_CustomerList_Ex.phpも

require_once CLASS_REALDIR . 'SC_Customer.php';
class SC_Customer_Ex extends SC_Customer {
}

なのですが、SC_CustomerList.phpが
class SC_CustomerList extends SC_SelectSql_Ex {
...

で、はるか遠くから「$this->arrVal」を呼んでいまして、
ここのところが「???」なのです。。。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,875名です
総投稿数は110,000件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1295
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.