質問 > フロント機能 > トップページ用ブロックのphpファイルでdtb_categoryに新規作成した項目による条件分岐の設定をしたいです。 |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
aozora |
投稿日時: 2014/10/31 18:20
対応状況: −−−
|
常連 登録日: 2013/3/21 居住地: 投稿: 40 |
トップページ用ブロックのphpファイルでdtb_categoryに新規作成した項目による条件分岐の設定をしたいです。 お世話になっております。どうかご教授頂けませんでしょうか。
トップページ用のブロック(新着商品を新規作成)のphpファイルでクエリーによって抽出された各商品の属性(dtb_categoryに新規作成した都道府県番号(prefecutre_number))によって、その商品が条件分岐される記述を設定したいと考えています。 例えば新着商品のある商品の都道府県番号が1ならX、2ならYというような設定にしたく以下の記述に致しました。(条件分岐の内容自体は話が複雑なりますので割愛させて頂きます。) 以下のgetConditionsは各商品の都道府県番号を抽出するためのfunction(都道府県番号を抽出するためだけにgetNewProductsをコピーして作成)で、getNewProductsは新規登録された商品を抽出するためのfunction(新着商品ブロック自体は元々機能しています)です。 function action() { $this->arrGetConditions = $this-> getConditions($limit, $period); $this->arrGetNewProducts = $this-> getNewProducts($limit, $period); } function getConditions($limit, $period){ $objQuery =& SC_Query_Ex::getSingletonInstance(); $col = ‘product_id’,'prefecture_number’,’category_id,・・・’; $from = ‘dtb_products as p LEFT JOIN dtb_category_class LEFT JOIN dtb_category, ・・・’ $where = ‘p.create_date >= ?,・・・’; return $objQuery->select($col, $from, $where, $arrval); } function getNewProducts($limit, $period) { $arrGetConditions = $this-> getConditions ($limit, $period); if(in_array(1, $arrGetConditions['prefecutre_number'])){ X }else if(in_array(2, $arrGetConditions['prefecutre_number'])){ Y } } 以上getNewProductsの “if(in_array(1,$arrGetConditions['prefecutre_number']))” という記述に対して以下の様なエラーメッセージがログにはきだされます。 function.in-array</a>]: Wrong datatype for second argument on〜 最初のfunction(getConditions)から抽出した条件を引っ張ってくる配列の$arrGetConditionsに問題がある(Wrong datatype)という内容だと思われますが、設定自体をどう変更したら宜しいかご教授頂けませんでしょうか。(以上の設定で条件式を使わずただ単にXと配置する(デフォルト設定)と機能します。) |
sumida |
投稿日時: 2014/10/31 22:35
対応状況: −−−
|
仙人 登録日: 2013/2/10 居住地: 広島県呉市ときどき瀬戸内海 投稿: 641 |
Re: トップページ用ブロックのphpファイルでdtb_categoryに新規作成した項目による条件分岐の設定をしたいです。 とりあえず、$arrvalに値が設定されていないような。
|
seiyawada |
投稿日時: 2014/10/31 23:03
対応状況: −−−
|
常連 登録日: 2014/4/28 居住地: 投稿: 42 |
Re: トップページ用ブロックのphpファイルでdtb_categoryに新規作成した項目による条件分岐の設定をしたいです。 $arrGetConditions = $this-> getConditions ($limit, $period); var_dump($arrGetConditions); 上記のように、$arrGetConditionsを確認してみてください。 $objQuery->select は、条件に一致する行を全て取得しますので、 $objQuery->getcol を使用し、1商品の情報のみ取得する または、 $arrGetConditions をループ処理でまわし、X,Yを実行する といった処理が必要かと思います |
aozora |
投稿日時: 2014/11/2 0:37
対応状況: −−−
|
常連 登録日: 2013/3/21 居住地: 投稿: 40 |
Re: トップページ用ブロックのphpファイルでdtb_categoryに新規作成した項目による条件分岐の設定をしたいです。 sumida様、seiyawada様、
ご教授頂きまして感謝致します。ご教授を基に、また過去の投稿(条件分岐の式自体は正しい)を参考に以下の記述を試したところ、Wrong datatype〜のエラーは出なくなりましたが、記述の組み合わせが認識されていない様でございまして、X;が読まれません。(Xがないというエラーがログファイルにでます。条件式なしでX;だけ配置しますと機能します。) 何かアドバイス等を頂けませんでしょうか。 function getNewProducts($limit, $period) { $arrGetConditions['prefecture_number'] = $this->getConditions($limit, $period); $check = array(1); $flag = false; foreach($check as $val){ if(in_array($val,$arrGetConditions['prefecture_number'])){ $flag = true; } } if($flag === true){ X; } $check = array(2); ・・・ } ****************************************** var_dumpを以下の様に試したところ、 $arrGetConditions['prefecture_number'] = $this->getConditions($limit, $period); var_dump($arrGetConditions['prefecture_number']); 以下の様に["prefecture_number"]=> string(1) "1"は抽出されているようでございます。 var_dumpの結果 array(6) { [0]=> array(151) { ["product_id"]=> string(3) "131" ["prefecture_number"]=> string(1) "1" ["category_id"]=> string(2) "42" ・ ・・ また"2""3""4""5"とvar_dumpに抽出された新着商品全てのprefecture_numberに上記の$check = array(X);で条件設定して試しました。 Getcolではdumpした際にnullとなり何も抽出しないようです。元々selectで新着商品を抽出しておりました。 $arrvalは書き忘れただけでして設定しておりました。 |
sumida |
投稿日時: 2014/11/2 13:09
対応状況: −−−
|
仙人 登録日: 2013/2/10 居住地: 広島県呉市ときどき瀬戸内海 投稿: 641 |
Re: トップページ用ブロックのphpファイルでdtb_categoryに新規作成した項目による条件分岐の設定をしたいです。
ではなく、
で受けるべきではないですか? |
aozora |
投稿日時: 2014/11/2 17:51
対応状況: −−−
|
常連 登録日: 2013/3/21 居住地: 投稿: 40 |
Re: トップページ用ブロックのphpファイルでdtb_categoryに新規作成した項目による条件分岐の設定をしたいです。 Sumida様、
ご教授頂きまして感謝致します。 $arrGetConditions = $this->getConditions($limit, $period); ですと、Wrong datatype〜のエラーがでますが、 $arrGetConditions['prefecture_number'] = $this->getConditions($limit, $period); ではWrong datatype〜のエラーがでません。 また$arrGetConditions['prefecture_number'] = $this->getConditions($limit, $period); var_dump($arrGetConditions['prefecture_number']); でvar_dump出していますので上述の設定に致しました。 |
sumida |
投稿日時: 2014/11/2 19:06
対応状況: −−−
|
仙人 登録日: 2013/2/10 居住地: 広島県呉市ときどき瀬戸内海 投稿: 641 |
Re: トップページ用ブロックのphpファイルでdtb_categoryに新規作成した項目による条件分岐の設定をしたいです。 エラーメッセージからすると、
in_array関数の第2引数のデータ型が違うのではないでしょうか。 第2引数は、配列変数ですが、 $arrGetConditions['prefecture_number']は、連想配列になっているため、エラーになっているような。 追記: PHPで表現すれば、
な感じです。 |
aozora |
投稿日時: 2014/11/7 4:01
対応状況: −−−
|
常連 登録日: 2013/3/21 居住地: 投稿: 40 |
Re: トップページ用ブロックのphpファイルでdtb_categoryに新規作成した項目による条件分岐の設定をしたいです。 sumida様、
ご教授頂きまして感謝致します。あれこれと試しておりました。以下複雑で申し訳ございません。 前投稿で記載したX;とはsc_product.phpを起動するための $arrProductList = $objProduct->getListByProductIds;です。 それを条件分岐で以下の(一部おすすめ商品の記述を引用)様な設定に致しましたが、ブロック内の商品一つ一つに異なった$objProduct->getListByProductIds_(x)が反映されず、例えば以下の例ですと、もし$arrPrefecutreにprefecture_numberの1があるのであれば、getListByProductIds_1がブロック内の商品全てに適応されます。(ループ内における条件式の配置場所に問題があるのでしょうか?) それを商品ひとつひとつのprefecture_number毎に、異なったgetListByProductIds_(x)を適応させたい場合、以下の設定のどこに問題があるかご教授頂けませんでしょうか。 function getNewProducts($limit, $period) { ・・・ $arrProducts = $objQuery->select($col, $from, $where); if (count($arrProducts) > 0) { $arrProductId = array(); $where = 'product_id IN ('; foreach ($arrProducts as $key => $val) { $arrProductId[] = $val['product_id']; } (ご教授頂きました記述) $arrGetConditions = $this-> getConditions ($limit, $period); $arrPrefecutre = array(); foreach ($arrGetConditions as $condition) { $arrPrefecutre[] = $condition['prefecutre_number']; } $objProduct = new SC_Product_Ex(); if(in_array(1, $arrPrefecutre)){ $arrProductList = $objProduct->getListByProductIds_1($objQuery, $arrProductId); }else if(in_array(2, $arrPrefecutre)){ $arrProductList = $objProduct->getListByProductIds_2($objQuery, $arrProductId); } ・・・ $arrProductStatus = $objProduct->getProductStatus($arrProductId); foreach ($arrProductStatus as $key => $value) { $arrProductList[$key]['productStatus'] = $value; } foreach ($arrProducts as $key => $value) { $arrRow =& $arrProducts[$key]; if (isset($arrProductList[$arrRow['product_id']])) { $arrRow = array_merge($arrRow, $arrProductList[$arrRow['product_id']]); } else { unset($arrProducts[$key]); } } return $arrProducts; } } |
sumida |
投稿日時: 2014/11/7 12:02
対応状況: −−−
|
仙人 登録日: 2013/2/10 居住地: 広島県呉市ときどき瀬戸内海 投稿: 641 |
Re: トップページ用ブロックのphpファイルでdtb_categoryに新規作成した項目による条件分岐の設定をしたいです。 とりあえず、
それぞれの変数に希望した内容が設定されているか否かを、 確認しながら進めた方が、早いのではないでしょうか。 追記: 現状、コードがどのようになっているのか。 イマイチわかりません。
このコードの $where は、どこで使いたいのか? |
aozora |
投稿日時: 2014/11/18 13:22
対応状況: −−−
|
常連 登録日: 2013/3/21 居住地: 投稿: 40 |
Re: トップページ用ブロックのphpファイルでdtb_categoryに新規作成した項目による条件分岐の設定をしたいです。 sumida 様
質問が横道にそれて申し訳ございませんでした。最初に投稿いたしました質問は解決いたしましたので本件を解決済みにさせて頂きます。 皆様大変ありがとうございます。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |