[Svn-src-all:1311] [version-2_5-dev 20200] #973 [管理画面]商品管理 検索部分のソースを修正。case 'csv'の処理がバグっていたのでそのままにし、CSV出力一旦保留としている。
ume
admin @ mail.ec-cube.net
2011年 2月 19日 (土) 17:35:57 JST
Subversion committed to /home/svn/open 20200
http://svn.ec-cube.net/open_trac/changeset/20200
┌────────────────────────────┐
│更新者 : ume │
│更新日時: 2011-02-19 17:35:57 +0900 (土, 19 2月 2011)│
└────────────────────────────┘
Log:
--------------------------------------------------------
#973 [管理画面]商品管理 検索部分のソースを修正。case 'csv'の処理がバグっていたのでそのままにし、CSV出力一旦保留としている。
Changed: [U:修正,A:追加,D:削除]
--------------------------------------------------------
U branches/version-2_5-dev/data/Smarty/templates/admin/products/index.tpl
U branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products.php
変更: branches/version-2_5-dev/data/Smarty/templates/admin/products/index.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/admin/products/index.tpl 2011-02-19 08:07:29 UTC (rev 20199)
+++ branches/version-2_5-dev/data/Smarty/templates/admin/products/index.tpl 2011-02-19 08:35:57 UTC (rev 20200)
@@ -70,28 +70,47 @@
<tr>
<th>商品ID</th>
<td colspan="3">
- <!--{if $arrErr.search_product_id}-->
- <span class="attention"><!--{$arrErr.search_product_id}--></span>
+ <!--{assign var=key value="search_product_id"}-->
+ <!--{if $arrErr[$key]}-->
+ <span class="attention"><!--{$arrErr[$key]}--></span>
<!--{/if}-->
- <input type="text" name="search_product_id" value="<!--{$arrForm.search_product_id|h}-->" size="30" class="box30" style="<!--{$arrErr.search_product_id|sfGetErrorColor}-->"/>
+ <input type="text" name="<!--{$key}-->" value="<!--{$arrForm[$key].value|h}-->" maxlength="<!--{$arrForm[$key].length}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" size="30" class="box30"/>
</td>
</tr>
<tr>
<th>商品コード</th>
- <td><input type="text" name="search_product_code" value="<!--{$arrForm.search_product_code|h}-->" size="30" class="box30" /></td>
+ <td>
+ <!--{assign var=key value="search_product_code"}-->
+ <!--{if $arrErr[$key]}-->
+ <span class="attention"><!--{$arrErr[$key]}--></span>
+ <!--{/if}-->
+ <input type="text" name="<!--{$key}-->" value="<!--{$arrForm[$key].value|h}-->" maxlength="<!--{$arrForm[$key].length}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" size="30" class="box30" />
+ </td>
<th>商品名</th>
- <td><input type="text" name="search_name" value="<!--{$arrForm.search_name|h}-->" size="30" class="box30" /></td>
+ <td>
+ <!--{assign var=key value="search_name"}-->
+ <!--{if $arrErr[$key]}-->
+ <span class="attention"><!--{$arrErr[$key]}--></span>
+ <!--{/if}-->
+ <input type="text" name="<!--{$key}-->" value="<!--{$arrForm[$key].value|h}-->" maxlength="<!--{$arrForm[$key].length}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" size="30" class="box30" />
+ </td>
</tr>
<tr>
<th>カテゴリ</th>
<td>
- <select name="search_category_id" style="<!--{if $arrErr.search_category_id != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->">
+ <!--{assign var=key value="search_category_id"}-->
+ <span class="attention"><!--{$arrErr[$key]}--></span>
+ <select name="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->">
<option value="">選択してください</option>
- <!--{html_options options=$arrCatList selected=$arrForm.search_category_id}-->
+ <!--{html_options options=$arrCatList selected=$arrForm[$key]}-->
</select>
</td>
<th>種別</th>
- <td><!--{html_checkboxes name="search_status" options=$arrDISP selected=$arrForm.search_status}--></td>
+ <td>
+ <!--{assign var=key value="search_status"}-->
+ <span class="attention"><!--{$arrErr[$key]|h}--></span>
+ <!--{html_checkboxes name="$key" options=$arrDISP selected=$arrForm[$key].value}-->
+ </td>
</tr>
<tr>
<th>登録・更新日</th>
@@ -102,34 +121,36 @@
<!--{/if}-->
<select name="search_startyear" style="<!--{$arrErr.search_startyear|sfGetErrorColor}-->">
<option value="">----</option>
- <!--{html_options options=$arrStartYear selected=$arrForm.search_startyear}-->
+ <!--{html_options options=$arrStartYear selected=$arrForm.search_startyear.value}-->
</select>年
<select name="search_startmonth" style="<!--{$arrErr.search_startyear|sfGetErrorColor}-->">
<option value="">--</option>
- <!--{html_options options=$arrStartMonth selected=$arrForm.search_startmonth}-->
+ <!--{html_options options=$arrStartMonth selected=$arrForm.search_startmonth.value}-->
</select>月
<select name="search_startday" style="<!--{$arrErr.search_startyear|sfGetErrorColor}-->">
<option value="">--</option>
- <!--{html_options options=$arrStartDay selected=$arrForm.search_startday}-->
+ <!--{html_options options=$arrStartDay selected=$arrForm.search_startday.value}-->
</select>日〜
<select name="search_endyear" style="<!--{$arrErr.search_endyear|sfGetErrorColor}-->">
<option value="">----</option>
- <!--{html_options options=$arrEndYear selected=$arrForm.search_endyear}-->
+ <!--{html_options options=$arrEndYear selected=$arrForm.search_endyear.value}-->
</select>年
<select name="search_endmonth" style="<!--{$arrErr.search_endyear|sfGetErrorColor}-->">
<option value="">--</option>
- <!--{html_options options=$arrEndMonth selected=$arrForm.search_endmonth}-->
+ <!--{html_options options=$arrEndMonth selected=$arrForm.search_endmonth.value}-->
</select>月
<select name="search_endday" style="<!--{$arrErr.search_endyear|sfGetErrorColor}-->">
<option value="">--</option>
- <!--{html_options options=$arrEndDay selected=$arrForm.search_endday}-->
+ <!--{html_options options=$arrEndDay selected=$arrForm.search_endday.value}-->
</select>日
</td>
</tr>
<tr>
<th>ステータス</th>
<td colspan="3">
- <!--{html_checkboxes name="search_product_flag" options=$arrSTATUS selected=$arrForm.search_product_flag}-->
+ <!--{assign var=key value="search_product_flag"}-->
+ <span class="attention"><!--{$arrErr[$key]|h}--></span>
+ <!--{html_checkboxes name="$key" options=$arrSTATUS selected=$arrForm[$key].value}-->
</td>
</tr>
</table>
変更: branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products.php 2011-02-19 08:07:29 UTC (rev 20199)
+++ branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products.php 2011-02-19 08:35:57 UTC (rev 20200)
@@ -75,6 +75,8 @@
function action() {
$objDb = new SC_Helper_DB_Ex();
$objDate = new SC_Date();
+ $objFormParam = new SC_FormParam();
+ $objProduct = new SC_Product();
// 登録・更新検索開始年
$objDate->setStartYear(RELEASE_YEAR);
@@ -93,222 +95,93 @@
$objSess = new SC_Session();
SC_Utils_Ex::sfIsSuccess($objSess);
- // POST値の引き継ぎ
- $this->arrForm = $_POST;
+ // パラメータ情報の初期化
+ $this->lfInitParam($objFormParam);
+ $objFormParam->setParam($_POST);
+ $this->arrHidden = $objFormParam->getSearchArray();
+ $this->arrForm = $objFormParam->getFormParamList();
- // 検索ワードの引き継ぎ
- foreach ($_POST as $key => $val) {
- if (ereg("^search_", $key) || ereg("^campaign_", $key)) {
- switch($key) {
- case 'search_product_flag':
- case 'search_status':
- $this->arrHidden[$key] = SC_Utils_Ex::sfMergeParamCheckBoxes($val);
- if(!is_array($val)) {
- $this->arrForm[$key] = split("-", $val);
- }
- break;
- default:
- $this->arrHidden[$key] = $val;
- break;
- }
- }
- }
-
// ページ送り用
$this->arrHidden['search_pageno'] = isset($_POST['search_pageno']) ? $_POST['search_pageno'] : "";
switch ($this->getMode()) {
case 'delete':
- // 商品削除
- $objQuery = new SC_Query();
- $objQuery->delete("dtb_products",
- "product_id = ?", array($_POST['product_id']));
-
- // 子テーブル(商品規格)の削除
- $objQuery->delete("dtb_products_class", "product_id = ?", array($_POST['product_id']));
-
- // お気に入り商品削除
- $objQuery->delete("dtb_customer_favorite_products", "product_id = ?", array($_POST['product_id']));
-
+ // 商品、子テーブル(商品規格)、お気に入り商品の削除
+ $this->doDelete("product_id = ?", array($objFormParam->getValue('product_id')));
// 件数カウントバッチ実行
$objDb->sfCountCategory($objQuery);
$objDb->sfCountMaker($objQuery);
- case 'search':
+ // 削除後に検索結果を表示するため breakしない
+
+ // 検索パラメータ生成後に処理実行するため breakしない
case 'csv':
case 'delete_all':
- case 'camp_search':
- // 入力文字の強制変換
- $this->lfConvertParam();
- // エラーチェック
- $this->arrErr = $this->lfCheckError();
- $where = "del_flg = 0";
- $view_where = "del_flg = 0";
+ case 'search':
+ $objFormParam->convParam();
+ $objFormParam->trimParam();
+ $this->arrErr = $this->lfCheckError($objFormParam);
+ $arrParam = $objFormParam->getHashArray();
- // 入力エラーなし
if (count($this->arrErr) == 0) {
-
- $arrval = array();
- foreach ($this->arrForm as $key => $val) {
-
+ $where = "del_flg = 0";
+ $view_where = "del_flg = 0";
+ foreach ($arrParam as $key => $val) {
if($val == "") {
continue;
}
-
- switch ($key) {
- case 'search_product_id': // 商品ID
- $where .= " AND product_id = ?";
- $view_where .= " AND product_id = ?";
- $arrval[] = $val;
- break;
- case 'search_name': // 商品名
- $where .= " AND name ILIKE ?";
- $view_where .= " AND name ILIKE ?";
- $arrval[] = "%$val%";
- break;
- case 'search_category_id': // カテゴリー
- list($tmp_where, $tmp_arrval) = $objDb->sfGetCatWhere($val);
- if($tmp_where != "") {
- $where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")";
- $view_where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")";
- $arrval = array_merge((array)$arrval, (array)$tmp_arrval);
- }
- break;
- case 'search_product_code': // 商品コード
- $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? GROUP BY product_id)";
- $view_where .= " AND EXISTS (SELECT product_id FROM dtb_products_class as cls WHERE cls.product_code ILIKE ? AND dtb_products.product_id = cls.product_id GROUP BY cls.product_id )";
- $arrval[] = "%$val%";
- break;
- case 'search_startyear': // 登録更新日(FROM)
- $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_startyear'], $_POST['search_startmonth'], $_POST['search_startday']);
- $date = date('Y/m/d', strtotime($date));
- $where.= " AND update_date >= date(?)";
- $view_where.= " AND update_date >= date(?)";
- $arrval[] = $date;
- break;
- case 'search_endyear': // 登録更新日(TO)
- $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_endyear'], $_POST['search_endmonth'], $_POST['search_endday']);
- $date = date('Y/m/d', strtotime($date) + 86400);
- $where.= " AND update_date < date(?)";
- $view_where.= " AND update_date < date(?)";
- $arrval[] = $date;
- break;
- case 'search_product_flag': //種別
- if(count($val) > 0) {
- $where .= " AND product_id IN (SELECT product_id FROM dtb_product_status WHERE product_status_id IN (";
- $view_where .= " AND product_id IN (SELECT product_id FROM dtb_product_status WHERE product_status_id IN (";
- foreach($val as $param) {
- $where .= "?,";
- $view_where .= "?,";
- $arrval[] = $param;
- }
- $where = preg_replace("/,$/", "))", $where);
- $view_where = preg_replace("/,$/", "))", $where);
- }
- break;
- case 'search_status': // ステータス
- $tmp_where = "";
- foreach ($val as $element){
- if ($element != ""){
- if ($tmp_where == ""){
- $tmp_where.="AND (status = ? ";
- }else{
- $tmp_where.="OR status = ? ";
- }
- $arrval[]=$element;
- }
- }
- if ($tmp_where != ""){
- $tmp_where.=")";
- $where.= " $tmp_where";
- $view_where.= " $tmp_where";
- }
- break;
- default:
- break;
- }
+ $this->buildQuery($key, $where, $view_where, $arrval, $objFormParam, $objDb);
}
- $order = "update_date DESC, product_id DESC";
- $objQuery = new SC_Query();
- $objProduct = new SC_Product();
- //TODO: 要リファクタリング(MODE switch 入れ子)
- switch ($this->getMode()) {
- case 'csv':
- require_once(CLASS_EX_REALDIR . "helper_extends/SC_Helper_CSV_Ex.php");
+ $order = "update_date DESC";
- $objCSV = new SC_Helper_CSV_Ex();
+ /* -----------------------------------------------
+ * 処理を実行
+ * ----------------------------------------------- */
+ switch($this->getMode()) {
+ // CSVを送信する。
+ case 'csv':
+ require_once(CLASS_EX_REALDIR . "helper_extends/SC_Helper_CSV_Ex.php");
- // CSVを送信する。正常終了の場合、終了。
- $objCSV->sfDownloadProductsCsv($where, $arrval, $order, true);
- // FIXME: sendResponseに渡した方が良いのか?
+ $objCSV = new SC_Helper_CSV_Ex();
+
+ // CSVを送信する。正常終了の場合、終了。
+ $objCSV->sfDownloadProductsCsv($where, $arrval, $order, true);
+ // FIXME: sendResponseに渡した方が良いのか?
// $data = $objCSV->sfDownloadProductsCsv($where, $arrval, $order);
// $this->sendResponseCSV($fime_name, $data);
- exit;
- break;
- case 'delete_all':
- // 検索結果をすべて削除
- $where = "product_id IN (SELECT product_id FROM "
- . $objProduct->alldtlSQL() . " WHERE $where)";
- $sqlval['del_flg'] = 1;
- $objQuery->update("dtb_products", $sqlval, $where, $arrval);
- $objQuery->delete("dtb_customer_favorite_products", $where, $arrval);
+ exit;
+ // 全件削除(ADMIN_MODE)
+ case 'delete_all':
+ $this->doDelete($where, $arrval);
+ break;
- // 件数カウントバッチ実行
- $objDb->sfCountCategory($objQuery);
+ // 検索実行
+ default:
+ // 行数の取得
+ $this->tpl_linemax = $this->getNumberOfLines($where, $arrval);
+ // ページ送りの処理
+ $page_max = $this->getPageMax($objFormParam);
+ // ページ送りの取得
+ $objNavi = new SC_PageNavi($this->arrHidden['search_pageno'],
+ $this->tpl_linemax, $page_max,
+ "fnNaviSearchPage", NAVI_PMAX);
+ $this->arrPagenavi = $objNavi->arrPagenavi;
- break;
- default:
- // 読み込む列とテーブルの指定
- $col = "product_id, name, main_list_image, status, product_code_min, product_code_max, price02_min, price02_max, stock_min, stock_max, stock_unlimited_min, stock_unlimited_max, update_date";
- $from = $objProduct->alldtlSQL();
-
- // 行数の取得
- $linemax = $objQuery->count("dtb_products", $view_where, $arrval);
- $this->tpl_linemax = $linemax; // 何件が該当しました。表示用
-
- // ページ送りの処理
- if(is_numeric($_POST['search_page_max'])) {
- $page_max = $_POST['search_page_max'];
- } else {
- $page_max = SEARCH_PMAX;
+ // 検索結果の取得
+ $this->arrProducts = $this->findProducts($where, $arrval,
+ $page_max, $objNavi->start_row, $order, $objProduct);
+
+ // 各商品ごとのカテゴリIDを取得
+ if (count($this->arrProducts) > 0) {
+ foreach ($this->arrProducts as $key => $val) {
+ $this->arrProducts[$key]["categories"] = $objDb->sfGetCategoryId($val["product_id"], 0, true);
+ $objDb->g_category_on = false;
}
-
- // ページ送りの取得
- $objNavi = new SC_PageNavi($this->arrHidden['search_pageno'], $linemax, $page_max, "fnNaviSearchPage", NAVI_PMAX);
- $startno = $objNavi->start_row;
- $this->arrPagenavi = $objNavi->arrPagenavi;
-
- //キャンペーン商品検索時は、全結果の商品IDを変数に格納する
- if(isset($_POST['search_mode']) && $_POST['search_mode'] == 'campaign') {
- $arrRet = $objQuery->select($col, $from, $where, $arrval);
- if(count($arrRet) > 0) {
- $arrRet = sfSwapArray($arrRet);
- $pid = implode("-", $arrRet['product_id']);
- $this->arrHidden['campaign_product_id'] = $pid;
- }
- }
-
- // 取得範囲の指定(開始行番号、行数のセット)
- $objQuery->setLimitOffset($page_max, $startno);
- // 表示順序
- $objQuery->setOrder($order);
-
- // 検索結果の取得
- $this->arrProducts = $objQuery->select($col, $from, $where, $arrval);
-
- // 各商品ごとのカテゴリIDを取得
- if (count($this->arrProducts) > 0) {
- foreach ($this->arrProducts as $key => $val) {
- $this->arrProducts[$key]["categories"] = $objDb->sfGetCategoryId($val["product_id"], 0, true);
- $objDb->g_category_on = false;
- }
- }
+ }
}
}
break;
- default:
- break;
}
// カテゴリの読込
@@ -325,57 +198,45 @@
parent::destroy();
}
- // 取得文字列の変換
- function lfConvertParam() {
- global $objPage;
- /*
- * 文字列の変換
- * K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換
- * C : 「全角ひら仮名」を「全角かた仮名」に変換
- * V : 濁点付きの文字を一文字に変換。"K","H"と共に使用します
- * n : 「全角」数字を「半角(ハンカク)」に変換
- */
- $arrConvList['search_name'] = "KVa";
- $arrConvList['search_product_code'] = "KVa";
+ /**
+ * パラメータ情報の初期化を行う.
+ *
+ * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+ * @return void
+ */
+ function lfInitParam(&$objFormParam) {
+ // 検索条件
+ $objFormParam->addParam("商品ID", "search_product_id", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK"));
+ $objFormParam->addParam("商品コード", "search_product_code", STEXT_LEN, "KVna", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+ $objFormParam->addParam("商品名", "search_name", STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+ $objFormParam->addParam("カテゴリ", "search_category_id", STEXT_LEN, "n", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+ $objFormParam->addParam("種別", "search_status", INT_LEN, "n", array("MAX_LENGTH_CHECK"));
+ // 登録・更新日
+ $objFormParam->addParam("開始年", "search_startyear", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+ $objFormParam->addParam("開始月", "search_startmonth", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+ $objFormParam->addParam("開始日", "search_startday", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+ $objFormParam->addParam("終了年", "search_endyear", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+ $objFormParam->addParam("終了月", "search_endmonth", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+ $objFormParam->addParam("終了日", "search_endday", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
- // 文字変換
- foreach ($arrConvList as $key => $val) {
- // POSTされてきた値のみ変換する。
- if(isset($objPage->arrForm[$key])) {
- $objPage->arrForm[$key] = mb_convert_kana($objPage->arrForm[$key] ,$val);
- }
- }
+ $objFormParam->addParam("ステータス", "search_product_flag", INT_LEN, "n", array("MAX_LENGTH_CHECK"));
}
- // エラーチェック
- // 入力エラーチェック
- function lfCheckError() {
- $objErr = new SC_CheckError();
- $objErr->doFunc(array("商品ID", "search_product_id"), array("NUM_CHECK"));
- $objErr->doFunc(array("開始日", "search_startyear", "search_startmonth", "search_startday"), array("CHECK_DATE"));
- $objErr->doFunc(array("終了日", "search_endyear", "search_endmonth", "search_endday"), array("CHECK_DATE"));
+ /**
+ * 入力内容のチェックを行う.
+ *
+ * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+ * @return void
+ */
+ function lfCheckError(&$objFormParam) {
+ $objErr = new SC_CheckError($objFormParam->getHashArray());
+ $objErr->arrErr = $objFormParam->checkError();
+
$objErr->doFunc(array("開始日", "終了日", "search_startyear", "search_startmonth", "search_startday", "search_endyear", "search_endmonth", "search_endday"), array("CHECK_SET_TERM"));
+
return $objErr->arrErr;
}
- // チェックボックス用WHERE文作成
- function lfGetCBWhere($key, $max) {
- $str = "";
- $find = false;
- for ($cnt = 1; $cnt <= $max; $cnt++) {
- if ($_POST[$key . $cnt] == "1") {
- $str.= "1";
- $find = true;
- } else {
- $str.= "_";
- }
- }
- if (!$find) {
- $str = "";
- }
- return $str;
- }
-
// カテゴリIDをキー、カテゴリ名を値にする配列を返す。
function lfGetIDName($arrCatKey, $arrCatVal) {
$max = count($arrCatKey);
@@ -386,5 +247,173 @@
}
return $arrRet;
}
+
+ /**
+ * 商品を削除する.
+ *
+ * @param string $where 削除対象の WHERE 句
+ * @param array $arrParam 削除対象の値
+ * @return void
+ */
+ function doDelete($where, $arrParam = array()) {
+ $objQuery =& SC_Query::getSingletonInstance();
+ $objQuery->update("dtb_products", array('del_flg' => 1), $where, $arrParam);
+ $objQuery->update("dtb_products_class", array('del_flg' => 1), $where, $arrParam);
+ $objQuery->update("dtb_customer_favorite_products", array('del_flg' => 1), $where, $arrParam);
+ }
+
+ /**
+ * クエリを構築する.
+ *
+ * 検索条件のキーに応じた WHERE 句と, クエリパラメータを構築する.
+ * クエリパラメータは, SC_FormParam の入力値から取得する.
+ *
+ * 構築内容は, 引数の $where, $view_where 及び $arrValues にそれぞれ追加される.
+ *
+ * @param string $key 検索条件のキー
+ * @param string $where 構築する WHERE 句
+ * @param string $view_where 構築する WHERE 句
+ * @param array $arrValues 構築するクエリパラメータ
+ * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+ * @param SC_FormParam $objDb SC_Helper_DB_Ex インスタンス
+ * @return void
+ */
+ function buildQuery($key, &$where, &$view_where, &$arrValues, &$objFormParam, &$objDb) {
+ $dbFactory = SC_DB_DBFactory::getInstance();
+ switch ($key) {
+ // 商品ID
+ case 'search_product_id':
+ $where .= " AND product_id = ?";
+ $view_where .= " AND product_id = ?";
+ $arrValues[] = sprintf('%d', $objFormParam->getValue($key));
+ break;
+ // 商品コード
+ case 'search_product_code':
+ $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? GROUP BY product_id)";
+ $view_where .= " AND EXISTS (SELECT product_id FROM dtb_products_class as cls WHERE cls.product_code ILIKE ? AND dtb_products.product_id = cls.product_id GROUP BY cls.product_id )";
+ $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key));
+ break;
+ // 商品名
+ case 'search_name':
+ $where .= " AND name LIKE ?";
+ $view_where .= " AND name LIKE ?";
+ $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key));
+ break;
+ // カテゴリ
+ case 'search_category_id':
+ list($tmp_where, $tmp_Values) = $objDb->sfGetCatWhere($objFormParam->getValue($key));
+ if($tmp_where != "") {
+ $where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")";
+ $view_where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")";
+ $arrValues = array_merge((array)$arrValues, (array)$tmp_Values);
+ }
+ break;
+ // 種別
+ case 'search_status':
+ $tmp_where = "";
+ foreach($objFormParam->getValue($key) as $element) {
+ if($element != "") {
+ if(SC_Utils_Ex::isBlank($tmp_where)) {
+ $tmp_where .= " AND (status = ?";
+ } else {
+ $tmp_where .= " OR status = ?";
+ }
+ $arrValues[] = $element;
+ }
+ }
+
+ if(!SC_Utils_Ex::isBlank($tmp_where)) {
+ $tmp_where .= ")";
+ $where .= " $tmp_where ";
+ $view_where .= " $tmp_where";
+ }
+ break;
+ // 登録・更新日(開始)
+ case 'search_startyear':
+ $date = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_startyear'),
+ $objFormParam->getValue('search_startmonth'),
+ $objFormParam->getValue('search_startday'));
+ $where.= " AND update_date >= ?";
+ $view_where.= " AND update_date >= ?";
+ $arrValues[] = $date;
+ break;
+ // 登録・更新日(終了)
+ case 'search_endyear':
+ $date = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_endyear'),
+ $objFormParam->getValue('search_endmonth'),
+ $objFormParam->getValue('search_endday'), true);
+ $where.= " AND update_date <= ?";
+ $view_where.= " AND update_date <= ?";
+ $arrValues[] = $date;
+ break;
+ //ステータス
+ case 'search_product_flag':
+ if(count($objFormParam->getValue($key)) > 0) {
+ $where .= " AND product_id IN (SELECT product_id FROM dtb_product_status WHERE product_status_id IN (";
+ foreach($objFormParam->getValue($key) as $param) {
+ $where .= "?,";
+ $view_where .= "?,";
+ $arrValues[] = $param;
+ }
+ $where = preg_replace("/,$/", "))", $where);
+ $view_where = preg_replace("/,$/", "))", $where);
+ }
+ break;
+ }
+ }
+
+ /**
+ * 検索結果の行数を取得する.
+ *
+ * @param string $where 検索条件の WHERE 句
+ * @param array $arrValues 検索条件のパラメータ
+ * @return integer 検索結果の行数
+ */
+ function getNumberOfLines($where, $arrValues) {
+ $objQuery =& SC_Query::getSingletonInstance();
+ return $objQuery->count('dtb_products', $where, $arrValues);
+ }
+
+ /**
+ * 最大表示件数を取得する.
+ *
+ * フォームの入力値から最大表示件数を取得する.
+ * 取得できなかった場合は, 定数 SEARCH_PMAX の値を返す.
+ *
+ * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+ * @return integer 最大表示件数
+ */
+ function getPageMax(&$objFormParam) {
+ $page_max = $objFormParam->getValue('search_page_max');
+ if(is_numeric($page_max)) {
+ return $page_max;
+ } else {
+ return SEARCH_PMAX;
+ }
+ }
+
+ /**
+ * 商品を検索する.
+ *
+ * @param string $where 検索条件の WHERE 句
+ * @param array $arrValues 検索条件のパラメータ
+ * @param integer $limit 表示件数
+ * @param integer $offset 開始件数
+ * @param string $order 検索結果の並び順
+ * @param SC_Product $objProduct SC_Product インスタンス
+ * @return array 商品の検索結果
+ */
+ function findProducts($where, $arrValues, $limit, $offset, $order, &$objProduct) {
+ $objQuery =& SC_Query::getSingletonInstance();
+
+ // 読み込む列とテーブルの指定
+ $col = "product_id, name, main_list_image, status, product_code_min, product_code_max, price02_min, price02_max, stock_min, stock_max, stock_unlimited_min, stock_unlimited_max, update_date";
+ $from = $objProduct->alldtlSQL();
+
+ $objQuery->setLimitOffset($limit, $offset);
+ $objQuery->setOrder($order);
+
+ return $objQuery->select($col, $from, $where, $arrValues);
+ }
}
-?>
+?>
\ No newline at end of file
Svn-src-all メーリングリストの案内