本文整理汇总了PHP中SC_Product_Ex类的典型用法代码示例。如果您正苦于以下问题:PHP SC_Product_Ex类的具体用法?PHP SC_Product_Ex怎么用?PHP SC_Product_Ex使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SC_Product_Ex类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: doAction
public function doAction($arrParam)
{
$arrRequest = $this->doInitParam($arrParam);
if (!$this->isParamError()) {
$objProduct = new SC_Product_Ex();
switch ($arrRequest['IdType']) {
case 'product_code':
$search_column = 'product_code';
break;
case 'product_class_id':
$arrProduct = $objProduct->getDetailAndProductsClass($arrRequest['ItemId']);
break;
case 'product_id':
default:
$arrProduct = $objProduct->getDetail($arrRequest['ItemId']);
break;
}
$objProduct->setProductsClassByProductIds(array($arrProduct['product_id']));
if ($arrProduct['del_flg'] == '0' && $arrProduct['status'] == '1') {
unset($arrProduct['note']);
$this->setResponse('product_id', $arrProduct['product_id']);
$this->setResponse('DetailPageURL', HTTP_URL . 'products/detail.php?product_id=' . $arrProduct['product_id']);
$this->setResponse('Title', $arrProduct['name']);
$this->setResponse('ItemAttributes', $arrProduct);
return true;
} else {
$this->addError('ItemLookup.Error', t('c_* The requested information was not found._01'));
}
}
return false;
}
示例2: doAction
public function doAction($arrParam)
{
$arrRequest = $this->doInitParam($arrParam);
if (!$this->isParamError()) {
$masterData = new SC_DB_MasterData_Ex();
$arrSTATUS = $masterData->getMasterData('mtb_status');
$arrSTATUS_IMAGE = $masterData->getMasterData('mtb_status_image');
$objProduct = new SC_Product_Ex();
$arrSearchData = array('category_id' => $arrRequest['BrowseNode'], 'maker_name' => $arrRequest['Manufacturer'], 'name' => $arrRequest['Keywords'], 'orderby' => $arrRequest['Sort']);
$arrSearchCondition = $this->getSearchCondition($arrSearchData);
$disp_number = 10;
$objQuery =& SC_Query_Ex::getSingletonInstance();
$objQuery->setWhere($arrSearchCondition['where_for_count']);
$objProduct = new SC_Product_Ex();
$linemax = $objProduct->findProductCount($objQuery, $arrSearchCondition['arrval']);
$objNavi = new SC_PageNavi_Ex($arrRequest['ItemPage'], $tpl_linemax, $disp_number);
$arrProducts = $this->getProductsList($arrSearchCondition, $disp_number, $objNavi->start_row, $linemax, $objProduct);
if (!SC_Utils_Ex::isBlank($arrProducts)) {
$arrProducts = $this->setStatusDataTo($arrProducts, $arrSTATUS, $arrSTATUS_IMAGE);
$arrProducts = $objProduct->setPriceTaxTo($arrProducts);
foreach ($arrProducts as $key => $val) {
$arrProducts[$key]['main_list_image'] = SC_Utils_Ex::sfNoImageMainList($val['main_list_image']);
}
$arrData = array();
foreach ($arrProducts as $key => $val) {
$arrData[] = array('product_id' => $val['product_id'], 'DetailPageURL' => HTTP_URL . 'products/detail.php?product_id=' . $val['product_id'], 'ItemAttributes' => $val);
}
$this->setResponse('Item', $arrData);
return true;
} else {
$this->addError('ItemSearch.Error', '※ 要求された情報は見つかりませんでした。');
}
}
return false;
}
示例3: lfGetRanking
/**
* おすすめ商品検索.
*
* @return array $arrBestProducts 検索結果配列
*/
public function lfGetRanking()
{
$objRecommend = new SC_Helper_BestProducts_Ex();
// おすすめ商品取得
$arrRecommends = $objRecommend->getList(RECOMMEND_NUM);
$response = array();
if (count($arrRecommends) > 0) {
// 商品一覧を取得
$objQuery =& SC_Query_Ex::getSingletonInstance();
$objProduct = new SC_Product_Ex();
// where条件生成&セット
$arrProductId = array();
foreach ($arrRecommends as $key => $val) {
$arrProductId[] = $val['product_id'];
}
$arrProducts = $objProduct->getListByProductIds($objQuery, $arrProductId);
// 税込金額を設定する
SC_Product_Ex::setIncTaxToProducts($arrProducts);
// おすすめ商品情報にマージ
foreach ($arrRecommends as $key => $value) {
if (isset($arrProducts[$value['product_id']])) {
$product = $arrProducts[$value['product_id']];
if ($product['status'] == 1 && (!NOSTOCK_HIDDEN || ($product['stock_max'] >= 1 || $product['stock_unlimited_max'] == 1))) {
$response[] = array_merge($value, $arrProducts[$value['product_id']]);
}
} else {
// 削除済み商品は除外
unset($arrRecommends[$key]);
}
}
}
return $response;
}
开发者ID:ryoogata,项目名称:eccube-SQLAzureSupport-plugin,代码行数:38,代码来源:LC_Page_FrontParts_Bloc_Recommend.php
示例4: lfGetRanking
/**
* おすすめ商品検索.
*
* @return array $arrBestProducts 検索結果配列
*/
public function lfGetRanking()
{
$arrRecommends = parent::lfGetRanking();
$detect = new Mobile_Detect();
$cur_category_id = 0;
if ($detect->is("AndroidOS")) {
$cur_category_id = 1;
} elseif ($detect->is("iOS")) {
$cur_category_id = 2;
} else {
return array();
}
$response = array();
if (count($arrRecommends) > 0) {
$objProduct = new SC_Product_Ex();
foreach ($arrRecommends as $value) {
$product_id = $value['product_id'];
$category_id = $objProduct->getCategoryIds($product_id);
if (in_array($cur_category_id, $category_id)) {
// nop
$response[] = $value;
}
}
}
return $response;
}
示例5: action
/**
* Page のアクション.
*
* @return void
*/
function action()
{
$layout = new SC_Helper_PageLayout_Ex();
$layout->sfGetPageLayout($this, false, $_SERVER['SCRIPT_NAME'], $this->objDisplay->detectDevice());
$this->arrBreadcrumb[0][0] = array();
switch ($this->arrPageLayout['url']) {
case 'products/list.php':
$category_id = $_GET['category_id'];
if ($category_id) {
$this->arrBreadcrumb[0] = self::getBreadcrumbByCategoryId(intval($category_id));
} else {
if ($_GET['mode'] == 'search') {
$this->current_name = '検索結果';
} else {
$this->current_name = '全商品';
}
}
break;
case 'products/detail.php':
$product_id = $_GET['product_id'];
$this->arrBreadcrumb = SC_Helper_DB_Ex::sfGetMultiCatTree($product_id);
$objProduct = new SC_Product_Ex();
$arrProduct = $objProduct->getDetail($product_id);
$this->current_name = $arrProduct['name'];
break;
case 'index.php':
$this->current_name = '';
break;
default:
$this->current_name = $this->arrPageLayout['page_name'];
break;
}
$this->arrData = self::loadData();
}
示例6: lfGetRanking
/**
* おすすめ商品検索.
*
* @return array $arrBestProducts 検索結果配列
*/
function lfGetRanking()
{
$objQuery =& SC_Query_Ex::getSingletonInstance();
$objProduct = new SC_Product_Ex();
// おすすめ商品取得
$col = 'T1.best_id, T1.category_id, T1.rank, T1.product_id, T1.title, T1.comment, T1.create_date, T1.update_date';
$table = 'dtb_best_products as T1 INNER JOIN dtb_products as T2 ON T1.product_id = T2.product_id';
$where = 'T1.del_flg = 0 and T2.status = 1';
$objQuery->setOrder('T1.rank');
$objQuery->setLimit(RECOMMEND_NUM);
$arrBestProducts = $objQuery->select($col, $table, $where);
$objQuery =& SC_Query_Ex::getSingletonInstance();
if (count($arrBestProducts) > 0) {
// 商品一覧を取得
// where条件生成&セット
$arrProductId = array();
$where = 'product_id IN (';
foreach ($arrBestProducts as $key => $val) {
$arrProductId[] = $val['product_id'];
}
// 取得
$arrProductList = $objProduct->getListByProductIds($objQuery, $arrProductId);
// おすすめ商品情報にマージ
foreach ($arrBestProducts as $key => $value) {
$arrRow =& $arrBestProducts[$key];
if (isset($arrProductList[$arrRow['product_id']])) {
$arrRow = array_merge($arrRow, $arrProductList[$arrRow['product_id']]);
} else {
// 削除済み商品は除外
unset($arrBestProducts[$key]);
}
}
}
return $arrBestProducts;
}
示例7: sfDownloadCsv
/**
* CSVファイルを送信する
*
* @param integer $csv_id CSVフォーマットID
* @param string $where WHERE条件文
* @param array $arrVal プリペアドステートメントの実行時に使用される配列。配列の要素数は、クエリ内のプレースホルダの数と同じでなければなりません。
* @param string $order ORDER文
* @param boolean $is_download true:ダウンロード用出力までさせる false:CSVの内容を返す(旧方式、メモリを食います。)
* @return boolean|string $is_download = true時 成功失敗フラグ(boolean) 、$is_downalod = false時 string
*/
public function sfDownloadCsv($csv_id, $where = '', $arrVal = array(), $order = '', $is_download = false)
{
$objQuery =& SC_Query_Ex::getSingletonInstance();
// CSV出力タイトル行の作成
$arrOutput = SC_Utils_Ex::sfSwapArray($this->sfGetCsvOutput($csv_id, 'status = ' . CSV_COLUMN_STATUS_FLG_ENABLE));
if (count($arrOutput) <= 0) {
return false;
}
// 失敗終了
$arrOutputCols = $arrOutput['col'];
$cols = SC_Utils_Ex::sfGetCommaList($arrOutputCols, true);
// 商品の場合
if ($csv_id == 1) {
// この WHERE 句を足さないと無効な規格も出力される。現行仕様と合わせる為追加。
$inner_where = 'dtb_products_class.del_flg = 0';
$from = SC_Product_Ex::prdclsSQL($inner_where);
// 会員の場合
} elseif ($csv_id == 2) {
$from = 'dtb_customer';
// 注文の場合
} elseif ($csv_id == 3) {
$from = 'dtb_order';
// レビューの場合
} elseif ($csv_id == 4) {
$from = 'dtb_review AS A INNER JOIN dtb_products AS B on A.product_id = B.product_id';
// カテゴリの場合
} elseif ($csv_id == 5) {
$from = 'dtb_category';
}
$objQuery->setOrder($order);
$sql = $objQuery->getSql($cols, $from, $where);
return $this->sfDownloadCsvFromSql($sql, $arrVal, $this->arrSubnavi[$csv_id], $arrOutput['disp_name'], $is_download);
}
示例8: sfDownloadCsv
/**
* CSVファイルを送信する
*
* @param integer $csv_id CSVフォーマットID
* @param string $where WHERE条件文
* @param array $arrVal プリペアドステートメントの実行時に使用される配列。配列の要素数は、クエリ内のプレースホルダの数と同じでなければなりません。
* @param string $order ORDER文
* @param boolean $is_download true:ダウンロード用出力までさせる false:CSVの内容を返す(旧方式、メモリを食います。)
* @return mixed $is_download = true時 成功失敗フラグ(boolean) 、$is_downalod = false時 string
*/
function sfDownloadCsv($csv_id, $where = '', $arrVal = array(), $order = '', $is_download = false)
{
// 実行時間を制限しない
@set_time_limit(0);
// CSV出力タイトル行の作成
$arrOutput = SC_Utils_Ex::sfSwapArray($this->sfGetCsvOutput($csv_id, 'status = ' . CSV_COLUMN_STATUS_FLG_ENABLE));
if (count($arrOutput) <= 0) {
return false;
}
// 失敗終了
$arrOutputCols = $arrOutput['col'];
$objQuery =& SC_Query_Ex::getSingletonInstance();
$objQuery->setOrder($order);
$cols = SC_Utils_Ex::sfGetCommaList($arrOutputCols, true);
// TODO: 固有処理 なんかエレガントな処理にしたい
if ($csv_id == '1') {
//商品の場合
$objProduct = new SC_Product_Ex();
// このWhereを足さないと無効な規格も出力される。現行仕様と合わせる為追加。
$inner_where = 'dtb_products_class.del_flg = 0';
$sql = $objQuery->getSql($cols, $objProduct->prdclsSQL($inner_where), $where);
} else {
if ($csv_id == '2') {
// 会員の場合
$sql = 'SELECT ' . $cols . ' FROM dtb_customer ' . $where;
} else {
if ($csv_id == '3') {
// 注文の場合
$sql = 'SELECT ' . $cols . ' FROM dtb_order ' . $where;
} else {
if ($csv_id == '4') {
// レビューの場合
$sql = 'SELECT ' . $cols . ' FROM dtb_review AS A INNER JOIN dtb_products AS B on A.product_id = B.product_id ' . $where;
} else {
if ($csv_id == '5') {
// カテゴリの場合
$sql = 'SELECT ' . $cols . ' FROM dtb_category ' . $where;
}
}
}
}
}
// 固有処理ここまで
return $this->sfDownloadCsvFromSql($sql, $arrVal, $this->arrSubnavi[$csv_id], $arrOutput['disp_name'], $is_download);
}
示例9: lfGetFavoriteProduct
/**
* お気に入りを取得する
*
* @param mixed $customer_id
* @param mixed $objPage
* @access private
* @return array お気に入り商品一覧
*/
public function lfGetFavoriteProduct($customer_id, &$objPage)
{
if (DB_TYPE != 'sqlsrv') {
return parent::lfGetFavoriteProduct($customer_id, $objPage);
}
$objQuery = SC_Query_Ex::getSingletonInstance();
$objProduct = new SC_Product_Ex();
$objQuery->setOrder('f.create_date DESC');
$where = 'f.customer_id = ? and p.status = 1';
if (NOSTOCK_HIDDEN) {
$where .= ' AND EXISTS(SELECT * FROM dtb_products_class WHERE product_id = f.product_id AND del_flg = 0 AND (stock >= 1 OR stock_unlimited = 1))';
}
$arrProductId = $objQuery->getCol('f.product_id', 'dtb_customer_favorite_products f inner join dtb_products p on f.product_id = p.product_id ', $where, array($customer_id));
$objQuery =& SC_Query_Ex::getSingletonInstance();
$objQuery->setWhere($this->lfMakeWhere('alldtl.', $arrProductId));
$linemax = $objProduct->findProductCount($objQuery);
$objPage->tpl_linemax = $linemax;
// 何件が該当しました。表示用
// ページ送りの取得
$objNavi = new SC_PageNavi_Ex($objPage->tpl_pageno, $linemax, SEARCH_PMAX, 'eccube.movePage', NAVI_PMAX);
$this->tpl_strnavi = $objNavi->strnavi;
// 表示文字列
$startno = $objNavi->start_row;
$objQuery =& SC_Query_Ex::getSingletonInstance();
//$objQuery->setLimitOffset(SEARCH_PMAX, $startno);
// 取得範囲の指定(開始行番号、行数のセット)
$arrProductId = array_slice($arrProductId, $startno, SEARCH_PMAX);
$where = $this->lfMakeWhere('', $arrProductId);
$where .= ' AND del_flg = 0';
$objQuery->setWhere($where, $arrProductId);
$arrProducts = $objProduct->lists($objQuery);
//取得している並び順で並び替え
$arrProducts2 = array();
foreach ($arrProducts as $item) {
$arrProducts2[$item['product_id']] = $item;
}
$arrProductsList = array();
foreach ($arrProductId as $product_id) {
$arrProductsList[] = $arrProducts2[$product_id];
}
// 税込金額を設定する
SC_Product_Ex::setIncTaxToProducts($arrProductsList);
return $arrProductsList;
}
示例10: lfGetRanking
/**
* おすすめ商品検索.
*
* @return array $arrBestProducts 検索結果配列
*/
function lfGetRanking()
{
$objQuery =& SC_Query_Ex::getSingletonInstance();
$objProduct = new SC_Product_Ex();
// おすすめ商品取得
$col = 'best_id, best_id, category_id, rank, product_id, title, comment, create_date, update_date';
$table = 'dtb_best_products';
$where = 'del_flg = 0';
$objQuery->setOrder('rank');
$objQuery->setLimit(RECOMMEND_NUM);
$arrBestProducts = $objQuery->select($col, $table, $where);
$objQuery =& SC_Query_Ex::getSingletonInstance();
if (count($arrBestProducts) > 0) {
// 商品一覧を取得
// where条件生成&セット
$arrProductId = array();
$where = 'product_id IN (';
foreach ($arrBestProducts as $key => $val) {
$arrProductId[] = $val['product_id'];
}
// 取得
$arrTmp = $objProduct->getListByProductIds($objQuery, $arrProductId);
foreach ($arrTmp as $key => $arrRow) {
$arrProductList[$arrRow['product_id']] = $arrRow;
}
// おすすめ商品情報にマージ
foreach (array_keys($arrBestProducts) as $key) {
$arrRow =& $arrBestProducts[$key];
if (isset($arrProductList[$arrRow['product_id']])) {
$arrRow = array_merge($arrRow, $arrProductList[$arrRow['product_id']]);
} else {
// 削除済み商品は除外
unset($arrBestProducts[$key]);
}
}
}
return $arrBestProducts;
}
示例11: checkProducts
/**
* カート内の商品の妥当性をチェックする.
*
* エラーが発生した場合は, 商品をカート内から削除又は数量を調整し,
* エラーメッセージを返す.
*
* 1. 商品種別に関連づけられた配送業者の存在チェック
* 2. 削除/非表示商品のチェック
* 3. 販売制限数のチェック
* 4. 在庫数チェック
*
* @param string $productTypeId 商品種別ID
* @return string エラーが発生した場合はエラーメッセージ
*/
public function checkProducts($productTypeId)
{
$objProduct = new SC_Product_Ex();
$objDelivery = new SC_Helper_Delivery_Ex();
$arrDeliv = $objDelivery->getList($productTypeId);
$tpl_message = '';
// カート内の情報を取得
$arrItems = $this->getCartList($productTypeId);
foreach ($arrItems as &$arrItem) {
$product =& $arrItem['productsClass'];
/*
* 表示/非表示商品のチェック
*/
if (SC_Utils_Ex::isBlank($product) || $product['status'] != 1) {
$this->delProduct($arrItem['cart_no'], $productTypeId);
$tpl_message .= "※ 現時点で販売していない商品が含まれておりました。該当商品をカートから削除しました。\n";
} else {
/*
* 配送業者のチェック
*/
if (SC_Utils_Ex::isBlank($arrDeliv)) {
$tpl_message .= '※「' . $product['name'] . '」はまだ配送の準備ができておりません。';
$tpl_message .= '恐れ入りますがお問い合わせページよりお問い合わせください。' . "\n";
$this->delProduct($arrItem['cart_no'], $productTypeId);
}
/*
* 販売制限数, 在庫数のチェック
*/
$limit = $objProduct->getBuyLimit($product);
if (!is_null($limit) && $arrItem['quantity'] > $limit) {
if ($limit > 0) {
$this->setProductValue($arrItem['id'], 'quantity', $limit, $productTypeId);
$total_inctax = $limit * SC_Helper_TaxRule_Ex::sfCalcIncTax($arrItem['price'], $product['product_id'], $arrItem['id'][0]);
$this->setProductValue($arrItem['id'], 'total_inctax', $total_inctax, $productTypeId);
$tpl_message .= '※「' . $product['name'] . '」は販売制限(または在庫が不足)しております。';
$tpl_message .= "一度に数量{$limit}を超える購入はできません。\n";
} else {
$this->delProduct($arrItem['cart_no'], $productTypeId);
$tpl_message .= '※「' . $product['name'] . "」は売り切れました。\n";
continue;
}
}
}
}
return $tpl_message;
}
示例12: doRegisterProduct
/**
* 受注商品の追加/更新を行う.
*
* 小画面で選択した受注商品をフォームに反映させる.
*
* @param SC_FormParam $objFormParam SC_FormParam インスタンス
* @return void
*/
function doRegisterProduct(&$objFormParam)
{
$product_class_id = $objFormParam->getValue('add_product_class_id');
if (SC_Utils_Ex::isBlank($product_class_id)) {
$product_class_id = $objFormParam->getValue('edit_product_class_id');
$changed_no = $objFormParam->getValue('no');
}
// FXIME バリデーションを通さず $objFormParam の値で DB 問い合わせしている。(管理機能ため、さほど問題は無いと思うものの…)
// 商品規格IDが指定されていない場合、例外エラーを発生
if (strlen($product_class_id) === 0) {
trigger_error('商品規格指定なし', E_USER_ERROR);
}
// 選択済みの商品であれば数量を1増やす
$exists = false;
$arrExistsProductClassIds = $objFormParam->getValue('product_class_id');
foreach ($arrExistsProductClassIds as $key => $value) {
$exists_product_class_id = $arrExistsProductClassIds[$key];
if ($exists_product_class_id == $product_class_id) {
$exists = true;
$exists_no = $key;
$arrExistsQuantity = $objFormParam->getValue('quantity');
$arrExistsQuantity[$key]++;
$objFormParam->setValue('quantity', $arrExistsQuantity);
}
}
// 新しく商品を追加した場合はフォームに登録
// 商品を変更した場合は、該当行を変更
if (!$exists) {
$objProduct = new SC_Product_Ex();
$arrProduct = $objProduct->getDetailAndProductsClass($product_class_id);
// 一致する商品規格がない場合、例外エラーを発生
if (empty($arrProduct)) {
trigger_error('商品規格一致なし', E_USER_ERROR);
}
$arrProduct['quantity'] = 1;
$arrProduct['price'] = $arrProduct['price02'];
$arrProduct['product_name'] = $arrProduct['name'];
$arrUpdateKeys = array('product_id', 'product_class_id', 'product_type_id', 'point_rate', 'product_code', 'product_name', 'classcategory_name1', 'classcategory_name2', 'quantity', 'price');
foreach ($arrUpdateKeys as $key) {
$arrValues = $objFormParam->getValue($key);
// FIXME getValueで文字列が返る場合があるので配列であるかをチェック
if (!is_array($arrValues)) {
$arrValues = array();
}
if (isset($changed_no)) {
$arrValues[$changed_no] = $arrProduct[$key];
} else {
$added_no = 0;
if (is_array($arrExistsProductClassIds)) {
$added_no = count($arrExistsProductClassIds);
}
$arrValues[$added_no] = $arrProduct[$key];
}
$objFormParam->setValue($key, $arrValues);
}
} elseif (isset($changed_no) && $exists_no != $changed_no) {
// 変更したが、選択済みの商品だった場合は、変更対象行を削除。
$this->doDeleteProduct($changed_no, $objFormParam);
}
}
示例13: lfGetProductsList
/**
*
* @param SC_Product_Ex $objProduct
*/
public function lfGetProductsList($searchCondition, $disp_number, $startno, &$objProduct)
{
$objQuery =& SC_Query_Ex::getSingletonInstance();
$objDb = new SC_Helper_DB_Ex();
$arrOrderVal = array();
// 表示順序
switch ($this->orderby) {
// ダウンロード順
case 'download':
$status = ORDER_PRE_END;
$objProduct->setProductsOrder('count(*)', "(SELECT B.* FROM dtb_order A INNER JOIN dtb_order_detail B USING(order_id) WHERE A.del_flg = 0 AND A.status = {$status})", 'ASC');
break;
// 販売価格が安い順
// 販売価格が安い順
case 'price':
$objProduct->setProductsOrder('price02', 'dtb_products_class', 'ASC');
break;
// 新着順
// 新着順
case 'date':
if ($objDb->sfColumnExists('dtb_products', 'auto_display_start_date')) {
$objProduct->setProductsOrder('auto_display_start_date', 'dtb_products', 'DESC');
} else {
$objProduct->setProductsOrder('create_date', 'dtb_products', 'DESC');
}
break;
default:
// FIXME 指定した カラムが損z内下場合はそのカラムをキーとする。
if ($objDb->sfColumnExists('dtb_products', 'auto_display_start_date') && strlen($this->orderby) == 0) {
$objProduct->setProductsOrder('auto_display_start_date', 'dtb_products', 'DESC');
} elseif ($objDb->sfColumnExists('dtb_products', $this->orderby)) {
$objProduct->setProductsOrder($this->orderby, 'dtb_products', 'DESC');
break;
}
case "rank":
if (strlen($searchCondition['where_category']) >= 1) {
$dtb_product_categories = '(SELECT * FROM dtb_product_categories WHERE ' . $searchCondition['where_category'] . ')';
$arrOrderVal = $searchCondition['arrvalCategory'];
} else {
$dtb_product_categories = 'dtb_product_categories';
}
$col = 'MAX(T3.rank * 2147483648 + T2.rank)';
$from = "{$dtb_product_categories} T2 JOIN dtb_category T3 ON T2.category_id = T3.category_id";
$where = 'T2.product_id = alldtl.product_id';
$sub_sql = $objQuery->getSql($col, $from, $where);
$objQuery->setOrder("({$sub_sql}) DESC ,product_id DESC");
break;
}
// 取得範囲の指定(開始行番号、行数のセット)
$objQuery->setLimitOffset($disp_number, $startno);
$objQuery->setWhere($searchCondition['where']);
// 表示すべきIDとそのIDの並び順を一気に取得
$arrProductId = $objProduct->findProductIdsOrder($objQuery, array_merge($searchCondition['arrval'], $arrOrderVal));
$objQuery =& SC_Query_Ex::getSingletonInstance();
$arrProducts = $objProduct->getListByProductIds($objQuery, $arrProductId);
// 規格を設定
$objProduct->setProductsClassByProductIds($arrProductId);
$arrProducts['productStatus'] = $objProduct->getProductStatus($arrProductId);
foreach ($arrProducts as $product_id => &$arrProduct) {
if ($product_id == 'productStatus') {
continue;
}
$category_id = $objProduct->getCategoryIds($product_id);
$arrProduct["category_id"] = array_shift($category_id);
$arrProduct["category"] = $this->arrCategory[$arrProduct["category_id"]];
$arrProduct["category_name"] = $arrProduct["category"]["category_name"];
if ($objDb->sfColumnExists('dtb_category', 'category_code')) {
$arrProduct["category_code"] = $arrProduct["category"]["category_code"];
$arrProduct["category_image1"] = $arrProduct["category"]["category_image1"] ?: 0;
$arrProduct["category_image2"] = $arrProduct["category"]["category_image2"] ?: 0;
$arrProduct["category_image3"] = $arrProduct["category"]["category_image3"] ?: 0;
$arrProduct["category_image4"] = $arrProduct["category"]["category_image4"] ?: 0;
$arrProduct["category_image5"] = $arrProduct["category"]["category_image5"] ?: 0;
}
}
return $arrProducts;
}
示例14: doMobileSelectItem
/**
*
* @return void
*/
function doMobileSelectItem()
{
$objProduct = new SC_Product_Ex();
$this->arrErr = $this->lfCheckError($this->mode, $this->objFormParam, $this->tpl_classcat_find1, $this->tpl_classcat_find2);
// この段階では、商品規格ID・数量の入力チェックエラーを出させない。
// FIXME: エラーチェックの定義で mode で定義を分岐する方が良いように感じる
unset($this->arrErr['product_class_id']);
unset($this->arrErr['quantity']);
// 規格2が設定されていて、エラーを検出した場合
if ($this->tpl_classcat_find2 and !empty($this->arrErr)) {
// templateの変更
$this->tpl_mainpage = 'products/select_find2.tpl';
return;
}
$product_id = $this->objFormParam->getValue('product_id');
$value1 = $this->objFormParam->getValue('classcategory_id1');
if (strlen($value1) === 0) {
$value1 = '__unselected';
}
// 規格2が設定されている場合.
if (SC_Utils_Ex::isBlank($this->objFormParam->getValue('classcategory_id2')) == false) {
$value2 = '#' . $this->objFormParam->getValue('classcategory_id2');
} else {
$value2 = '#0';
}
$objProduct->setProductsClassByProductIds(array($product_id));
$this->tpl_product_class_id = $objProduct->classCategories[$product_id][$value1][$value2]['product_class_id'];
// 数量の入力を行う
$this->tpl_mainpage = 'products/select_item.tpl';
}
示例15: sfCountCategory
/**
* カテゴリ数の登録を行う.
*
*
* @param SC_Query $objQuery SC_Query インスタンス
* @param boolean $is_force_all_count 全カテゴリの集計を強制する場合 true
* @return void
*/
public function sfCountCategory($objQuery = NULL, $is_force_all_count = false)
{
$objProduct = new SC_Product_Ex();
if ($objQuery == NULL) {
$objQuery =& SC_Query_Ex::getSingletonInstance();
}
$is_out_trans = false;
if (!$objQuery->inTransaction()) {
$objQuery->begin();
$is_out_trans = true;
}
//共通のfrom/where文の構築
$sql_where = SC_Product_Ex::getProductDispConditions('alldtl');
// 在庫無し商品の非表示
if (NOSTOCK_HIDDEN) {
$where_products_class = '(stock >= 1 OR stock_unlimited = 1)';
$from = $objProduct->alldtlSQL($where_products_class);
} else {
$from = 'dtb_products as alldtl';
}
//dtb_category_countの構成
// 各カテゴリに所属する商品の数を集計。集計対象には子カテゴリを含まない。
//まずテーブル内容の元を取得
if (!$is_force_all_count) {
$arrCategoryCountOld = $objQuery->select('category_id,product_count', 'dtb_category_count');
} else {
$arrCategoryCountOld = array();
}
//各カテゴリ内の商品数を数えて取得
$sql = <<<__EOS__
SELECT T1.category_id, count(T2.category_id) as product_count
FROM dtb_category AS T1
LEFT JOIN dtb_product_categories AS T2
ON T1.category_id = T2.category_id
LEFT JOIN {$from}
ON T2.product_id = alldtl.product_id
WHERE {$sql_where}
GROUP BY T1.category_id, T2.category_id
__EOS__;
$arrCategoryCountNew = $objQuery->getAll($sql);
// 各カテゴリに所属する商品の数を集計。集計対象には子カテゴリを「含む」。
//差分を取得して、更新対象カテゴリだけを確認する。
//各カテゴリ毎のデータ値において以前との差を見る
//古いデータの構造入れ替え
$arrOld = array();
foreach ($arrCategoryCountOld as $item) {
$arrOld[$item['category_id']] = $item['product_count'];
}
//新しいデータの構造入れ替え
$arrNew = array();
foreach ($arrCategoryCountNew as $item) {
$arrNew[$item['category_id']] = $item['product_count'];
}
unset($arrCategoryCountOld);
unset($arrCategoryCountNew);
$arrDiffCategory_id = array();
//新しいカテゴリ一覧から見て商品数が異なるデータが無いか確認
foreach ($arrNew as $cid => $count) {
if ($arrOld[$cid] != $count) {
$arrDiffCategory_id[] = $cid;
}
}
//削除カテゴリを想定して、古いカテゴリ一覧から見て商品数が異なるデータが無いか確認。
foreach ($arrOld as $cid => $count) {
if ($arrNew[$cid] != $count && $count > 0) {
$arrDiffCategory_id[] = $cid;
}
}
//対象IDが無ければ終了
if (count($arrDiffCategory_id) == 0) {
if ($is_out_trans) {
$objQuery->commit();
}
return;
}
//差分対象カテゴリIDの重複を除去
$arrDiffCategory_id = array_unique($arrDiffCategory_id);
//dtb_category_countの更新 差分のあったカテゴリだけ更新する。
foreach ($arrDiffCategory_id as $cid) {
$sqlval = array();
$sqlval['create_date'] = 'CURRENT_TIMESTAMP';
$sqlval['product_count'] = (string) $arrNew[$cid];
if ($sqlval['product_count'] == '') {
$sqlval['product_count'] = (string) '0';
}
if (isset($arrOld[$cid])) {
$objQuery->update('dtb_category_count', $sqlval, 'category_id = ?', array($cid));
} else {
if ($is_force_all_count) {
$ret = $objQuery->update('dtb_category_count', $sqlval, 'category_id = ?', array($cid));
if ($ret > 0) {
continue;
//.........这里部分代码省略.........