/** * おすすめ商品検索. * * @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; }
/** * Page のAction. * * @return void */ public function action() { parent::action(); $objProduct = new SC_Product_Ex(); $objDb = new SC_Helper_DB_Ex(); $this->tpl_buy_porduct = array_key_exists($this->tpl_product_id, $this->arrRedownloadProduct); $category_id = $objProduct->getCategoryIds($this->tpl_product_id); $this->arrProduct["category_id"] = array_shift($category_id); $this->arrProduct["category"] = $this->arrCategory[$this->arrProduct["category_id"]]; $this->arrProduct["category_name"] = $this->arrProduct["category"]["category_name"]; if ($objDb->sfColumnExists('dtb_category', 'category_code')) { $this->arrProduct["category_code"] = $this->arrProduct["category"]["category_code"]; $this->arrProduct["category_image1"] = $this->arrProduct["category"]["category_image1"] ?: 0; $this->arrProduct["category_image2"] = $this->arrProduct["category"]["category_image2"] ?: 0; $this->arrProduct["category_image3"] = $this->arrProduct["category"]["category_image3"] ?: 0; $this->arrProduct["category_image4"] = $this->arrProduct["category"]["category_image4"] ?: 0; $this->arrProduct["category_image5"] = $this->arrProduct["category"]["category_image5"] ?: 0; } $config = SC_AuonePayment_Ex::getConfig("free_field2"); $mode = $this->getMode(); $this->mode = $mode; switch ($this->getMode()) { case "download": case "check_buy_and_download": $this->doCheckBuyAndDownload($config); break; case "download_ok": case "check_buy_and_download_ok": $this->doCheckBuyAndDownloadOk($config); break; case "download_ng": case "check_buy_and_download_ng": unset($_SESSION["product_ktc_vid"]); SC_Utils_Ex::sfDispSiteError(FREE_ERROR_MSG, "", true, "このテーマには対応していません。"); break; } $bgcolor = $this->arrProduct["bgcolor"]; $fgcolor = $this->arrProduct["fgcolor"]; $lkcolor = $this->arrProduct["lkcolor"]; if (strlen($bgcolor) && strlen($fgcolor) && strlen($fgcolor)) { $this->tpl_onload .= "\$('section.cont01:eq(0) ').css({\n 'background-color':'#{$bgcolor}','color':'#{$fgcolor}'\n });"; $this->tpl_onload .= "\$('section.cont01:eq(0) a[href*=\"www.kisekae-touch.com\"]').css({\n 'color':'#{$lkcolor}'\n });"; } switch (basename($_SERVER["SCRIPT_NAME"], ".php")) { case "detail": $this->check_os(); break; case "detail_spass": if (!isset($this->arrProduct["product_code_spass"])) { SC_Utils::sfDispSiteError(PRODUCT_NOT_FOUND); } $objQuery = SC_Query_Ex::getSingletonInstance(); $objQuery->setWhere("spass_provide_start_date <= NOW()"); $objQuery->andWhere("spass_provide_end_date >= NOW()"); $objQuery->andWhere("product_id = ? "); $this->arrSpassProduct = $objProduct->findProductCount($objQuery, array($this->tpl_product_id)); break; } }
/** * * @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; }
function __construct($array, $mode = true) { parent::__construct($array); GC_Utils_Ex::gfPrintLog(print_r($this->arrSql, true), DEBUG_LOG_REALFILE); $this->arrWhereVal = array(); $objDb = new SC_Helper_DB_Ex(); $this->setEquals("0", "del_flg", "is_numeric"); if ($mode && ($_REQUEST["mode"] == "pre_edit" || $_REQUEST["mode"] == "preEdit")) { // FIXME 端末ID(編集対象 ) $this->setEquals($this->arrSql["edit_device_id"], "device_id", "is_numeric"); return; } // FIXME 端末ID $this->setEquals($this->arrSql["search_device_id"], "device_id", "is_numeric"); // FIXME 端末名 $this->setLike($this->arrSql["search_device_name"], "device_name"); // FIXME OS(発売) $this->setFromTo($this->arrSql["search_os_min_version_min"], $this->arrSql["search_os_min_version_max"], "os_min_version"); // FIXME OS(最新) $this->setFromTo($this->arrSql["search_os_max_version_min"], $this->arrSql["search_os_max_version_max"], "os_max_version"); // FIXME OS(発売|最新) $this->setFromTo($this->arrSql["search_os_version_min"], $this->arrSql["search_os_version_max"], array("os_min_version", "os_max_version")); // FIXME サイズ(幅) if (is_numeric($this->arrSql["search_display_width_min"]) || is_numeric($this->arrSql["search_display_width_max"])) { $this->setFromTo($this->arrSql["search_display_width_min"], $this->arrSql["search_display_width_max"], "display_width"); } // FIXME サイズ(高) if (is_numeric($this->arrSql["search_display_height_min"]) || is_numeric($this->arrSql["search_display_height_max"])) { $this->setFromTo($this->arrSql["search_display_height_min"], $this->arrSql["search_display_height_max"], "display_height"); } $base_table = $this->table; // FIXME カテゴリーID if (is_numeric($this->arrSql["search_category_id"])) { list($where, $arrRet) = $objDb->sfGetCatWhere($this->arrSql["search_category_id"]); $this->setWhere(" EXISTS (SELECT 1 FROM cp_dtb_device_categories A WHERE A.device_id = {$base_table}.device_id AND {$where})"); $this->arrWhereVal = array_merge($this->arrWhereVal, $arrRet); } elseif ($this->arrSql["search_category_id_unset"] == "1" || $this->arrSql["search_category_id_unset"][0] == "1") { $this->setWhere("NOT EXISTS (SELECT 1 FROM cp_dtb_device_categories A WHERE A.device_id = {$base_table}.device_id)"); } // FIXME 商品ID if (is_numeric($this->arrSql["search_product_id"])) { $id = $this->arrSql["search_product_id"]; $objProduct = new SC_Product_Ex(); if ($objProduct->isValidProductId($id)) { $arrCategory_id = $objProduct->getCategoryIds($id); foreach ($arrCategory_id as $category_id) { list($where, $arrRet) = $objDb->sfGetCatWhere($category_id); // TODO cp_dtb_device_products 連携 $this->setWhere(" EXISTS (SELECT 1 FROM cp_dtb_device_categories A WHERE A.device_id = {$base_table}.device_id AND {$where})"); $this->arrWhereVal = array_merge($this->arrWhereVal, $arrRet); } } } // FIXME キャリア if (is_numeric($this->arrSql["search_carrier"])) { $this->setEquals($this->arrSql["search_carrier"], 'carrier'); } // FIXME 状態 if (is_array($this->arrSql["search_status"])) { $this->setItemTerm($this->arrSql["search_status"], 'status'); } elseif (is_numeric($this->arrSql["search_status"])) { $this->setEquals($this->arrSql["search_status"], 'status'); } // FIXME UA $this->setEquals($this->arrSql["search_device_user_agent_word"], array('device_user_agent_word_1', 'device_user_agent_word_2', 'device_user_agent_word_3')); // END GC_Utils_Ex::gfPrintLog(print_r($this->arrWhereVal, true), DEBUG_LOG_REALFILE); }