バージョン選択

フォーラム

メニュー

オンライン状況

52 人のユーザが現在オンラインです。 (32 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 51
numsptm もっと...

サイト内検索

質問 > フロント機能 > トップページ用ブロックの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に新規作成した項目による条件分岐の設定をしたいです。

$arrGetConditions['prefecture_number'] = $this->getConditions($limit, $period);

ではなく、

$arrGetConditions =  $this->getConditions($limit, $period);

で受けるべきではないですか?
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で表現すれば、

$arrGetConditions = $this-> getConditions ($limit, $period);

$arrPrefecutre = array();
foreach ($arrGetConditions as $condition) {
    $arrPrefecutre[] = $condition['prefecutre_number'];
}

if(in_array(1, $arrPrefecutre)){
X
}else if(in_array(2, $arrPrefecutre)){
Y
}

な感じです。
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に新規作成した項目による条件分岐の設定をしたいです。
とりあえず、
それぞれの変数に希望した内容が設定されているか否かを、
確認しながら進めた方が、早いのではないでしょうか。

追記:
現状、コードがどのようになっているのか。
イマイチわかりません。

if (count($arrProducts) > 0) {

    $arrProductId = array();
    $where = 'product_id IN (';
    foreach ($arrProducts as $key => $val) {
        $arrProductId[] = $val['product_id'];
    }

このコードの $where は、どこで使いたいのか?
aozora
投稿日時: 2014/11/18 13:22
対応状況: −−−
常連
登録日: 2013/3/21
居住地:
投稿: 40
Re: トップページ用ブロックのphpファイルでdtb_categoryに新規作成した項目による条件分岐の設定をしたいです。
sumida 様

質問が横道にそれて申し訳ございませんでした。最初に投稿いたしました質問は解決いたしましたので本件を解決済みにさせて頂きます。

皆様大変ありがとうございます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,282名です
総投稿数は109,688件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.