下記ページを参考に商品検索で商品コードを検索できるようにとチャレンジしてみました。
http://php.programmingpapa.com/eccube/eccube%e3%81%a7%e5%95%86%e5%93%81%e6%a4%9c%e7%b4%a2%e3%82%92%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba/ところが、
data/class/SC_Product.php
/**
* SC_Queryインスタンスに設定された検索条件をもとに対象商品数を取得する.
*
* 検索条件は, SC_Query::setWhere() 関数で設定しておく必要があります.
*
* @param SC_Query $objQuery SC_Query インスタンス
* @param array $arrVal 検索パラメーターの配列
* @return array 対象商品ID数
*/
public function findProductCount(&$objQuery, $arrVal = array())
{
$table = 'dtb_products AS alldtl LEFT JOIN dtb_products_class as pcdtl ON alldtl.product_id = pcdtl.product_id';
data/class/pages/products/LC_Page_Products_List.php
// 商品名をwhere文に
$name = $arrSearchData['name'];
$name = str_replace(',', '', $name);
// 全角スペースを半角スペースに変換
$name = str_replace(' ', ' ', $name);
// スペースでキーワードを分割
$names = preg_split('/ +/', $name);
// 分割したキーワードを一つずつwhere文に追加
foreach ($names as $val) {
if (strlen($val) > 0) {
$searchCondition['where'] .= ' AND ( alldtl.name ILIKE ? OR alldtl.comment3 ILIKE ?) ';
$searchCondition['arrval'][] = "%$val%";
$searchCondition['arrval'][] = "%$val%";
}
}
表示は、システムエラーとなりエラーログには下記のよううな内容が記録されていました。
[/products/list.php] Fatal error(E_PARSE): syntax error, unexpected 'public' (T_PUBLIC) on [//data/class/SC_Product.php(887)] from 180.49.152.162
customer_id =
[/products/list.php] Fatal error(E_PARSE): syntax error, unexpected 'public' (T_PUBLIC) on [//data/class/SC_Product.php(887)] from 180.49.152.162
customer_id =
SC_Product.phpの887行目
public function lfGetProductId( $product_code )
{
//インスタンス生成
$col = "dtb_products_class.product_id"; //カラム
$from = "dtb_products_class INNER JOIN dtb_products ON dtb_products_class.product_id = dtb_products.product_id";
$where = "dtb_products_class.product_code = ? AND dtb_products_class.del_flg = 0 ";
$arrWhereVal = array($product_code);
$res = $objQuery->get($col, $from, $where,$arrWhereVal);
echo $res;
}
[/products/list.php] Warning(E_WARNING): Missing argument 2 for LC_Page_Products_List::doDefault(), called in /c/data/class_extends/page_extends/products/LC_Page_Products_List_Ex.php on line 61 and defined on [//data/class/pages/products/LC_Page_Products_List.php(515)]
LC_Page_Products_List.phpの515行目
public function doDefault(&$objProduct, &$objFormParam)
{
//商品一覧の表示処理
$strnavi = $this->objNavi->strnavi;
// 表示文字列
$this->tpl_strnavi = empty($strnavi) ? ' ' : $strnavi;
// 規格1クラス名
$this->tpl_class_name1 = $objProduct->className1;
// 規格2クラス名
$this->tpl_class_name2 = $objProduct->className2;
// 規格1
$this->arrClassCat1 = $objProduct->classCats1;
// 規格1が設定されている
$this->tpl_classcat_find1 = $objProduct->classCat1_find;
// 規格2が設定されている
$this->tpl_classcat_find2 = $objProduct->classCat2_find;
$this->tpl_stock_find = $objProduct->stock_find;
$this->tpl_product_class_id = $objProduct->product_class_id;
$this->tpl_product_type = $objProduct->product_type;
// 商品ステータスを取得
$this->productStatus = $this->arrProducts['productStatus'];
unset($this->arrProducts['productStatus']);
$this->tpl_javascript .= 'eccube.productsClassCategories = ' . SC_Utils_Ex::jsonEncode($objProduct->classCategories) . ';';
if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_PC) {
//onloadスクリプトを設定. 在庫ありの商品のみ出力する
foreach ($this->arrProducts as $arrProduct) {
if ($arrProduct['stock_unlimited_max'] || $arrProduct['stock_max'] > 0) {
$js_fnOnLoad .= "fnSetClassCategories(document.product_form{$arrProduct['product_id']});";
}
}
}
この場合、どの部分が間違っているのかお分りになる方はいらっしゃいますでしょうか
記入漏れを追記↓
EC-CUBEバージョン:2.13.2
PHP情報:5.3.28
DB情報:MySQL 5.6.13-log