![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
A 回答 (14件中1~10件)
- 最新から表示
- 回答順に表示
No.14
- 回答日時:
おはようございます。
jimmy1977様はPHPをどの程度やっているのでしょうか?print_r();は変数の中身を表示する関数です。pagerで生成された$pdataの次の行あたりでprint_rをかければよいかと思います。この回答への補足
こんばんわ。
$page = Pager::factory($params);
$pdata = $page->getPageData();
print_r($pdata['Body']['itemSearch:ItemSearch']['Items']['Item']);
$plink = $page->getLinks();
上記のように入れてみましたが、
Warning: Invalid argument supplied for foreach() in /usr/local/php5/pear/Pager/Common.php on line 1365
というエラーで変わりませんでした・・・
お返事ありがとうございます。はじめの質問のときにお話してましたが、PHPに関しては、ほとんど初心者で出来ていPHPのサンプルを自分のデザインに変える程度です。わからないことは、ソースを見ながら単語から検索して自分の出来ることをしています。今回はページ送りを自分でつけてみようと考えPHPの本を買ってみましたが、今回のサンプルが自分の能力では無理だと承知してますが、やってみようと思いました。ですから、専門的な言葉や、わかっているだろう基本の知識は残念ながら私にはありません。11spec0様にはご迷惑かと思いますが、このいただいた知識は今後役にたつと思っています。このことが終われば最初から勉強していきたいと思っています。
No.12
- 回答日時:
すいません。
こちらのミスです。$smarty->assign('tests',$pdata);
$smarty->assign('plink',$plink[0]['all']); の部分を
$smarty->assign('plink',$plink);
$smarty->assign('tests',$pdata['Body']['itemSearch:ItemSearch']['Items']['Item']); と書き換え
とありますが、
$smarty->assign('plink',$plink[0]['all']);
$smarty->assign('tests',$pdata['Body']['itemSearch:ItemSearch']
]['Items']['Item']);
の間違えです。$plinkを配列のままアサインしている為にエラーが出力されたのではないかと思います。
お返事ありがとうございます。
$smarty->assign('plink',$plink[0]['all']);
$smarty->assign('tests',$pdata['Body']['itemSearch:ItemSearch']['Items']['Item']);
に書き直しても、下記エラーが出てしまいます。
Warning: Invalid argument supplied for foreach() in /usr/local/php5/pear/Pager/Common.php on line 1365
tpl側もいろいろと試してみましたが結果は同じでした・・・
No.11
- 回答日時:
今思い出したのですが、前に書いていただいた配列
Array
(
[header:Header] => 1
[0] => Array
(
[Args] => Array
(
[Arg] => Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 1
[4] => 1
[5] => 1
[6] => 1
[7] => 1
[8] => 1
[9] => 1
[10] => 1
)
)
[Status] => Success
[StatusMsg] =>
)
[Body] => Array
(
[itemSearch:ItemSearch] => Array
(
[count] => 1210027
[page] => 1
[first] => 1
[last] => 30
[hits] => 30
[carrier] => 0
[pageCount] => 100
[Items] => Array
(
[Item] => Array ←←←下記で説明している部分はここ
(
[0] => Array
(
[itemName] => ビリーズブートキャンプ DVD版 ビリーバンド×1セット
[itemCode] => shopjapan:790183
[itemPrice] => 14700
[itemCaption] => セット内容/DVDx4枚(日本語字幕版)、ポケットメジャーx1個 、
ビリーバンドx1セット(2本) サイズ(約)/ビリーバンド 約1m
原産国/DVD/日本製 送料/945円(税込) お届期間/約1週間
※4枚で1セットの商品です。
[itemUrl] => http://www.rakuten.co.jp/shopjapan/651695/616400 …
[affiliateUrl] => http://hb.afl.rakuten.co.jp/hgc/07cc938c.6216a6e …
[imageFlag] => 1
[smallImageUrl] => http://image.rakuten.co.jp/wshop/data/ws-mall-im …
[mediumImageUrl] => http://image.rakuten.co.jp/wshop/data/ws-mall-im …
[availability] => 1
[taxFlag] => 0
[postageFlag] => 1
[creditCardFlag] => 0
[shopOfTheYearFlag] => 1
[affiliateRate] => 4.9
[startTime] =>
[endTime] =>
[reviewCount] => 4960
[reviewAverage] => 4.37
[shopName] => ショップジャパン 楽天市場店
[shopCode] => shopjapan
[shopUrl] => http://www.rakuten.co.jp/shopjapan/
[genreId] => 100985
)
[1] => ・・・続く
)
)
)
)
)
の中にある
[Item] => Array
(
[0] => Array
(
[itemName] => ビリーズブートキャンプ DVD版 ビリーバンド×1セット
[itemCode] => shopjapan:790183
[itemPrice] => 14700
[itemCaption] => セット内容/DVDx4枚(日本語字幕版)、ポケットメジャーx1個 、
ビリーバンドx1セット(2本) サイズ(約)/ビリーバンド 約1m
原産国/DVD/日本製 送料/945円(税込) お届期間/約1週間
※4枚で1セットの商品です。
[itemUrl] => http://www.rakuten.co.jp/shopjapan/651695/616400 …
[affiliateUrl] => http://hb.afl.rakuten.co.jp/hgc/07cc938c.6216a6e …
[imageFlag] => 1
[smallImageUrl] => http://image.rakuten.co.jp/wshop/data/ws-mall-im …
[mediumImageUrl] => http://image.rakuten.co.jp/wshop/data/ws-mall-im …
[availability] => 1
[taxFlag] => 0
[postageFlag] => 1
[creditCardFlag] => 0
[shopOfTheYearFlag] => 1
[affiliateRate] => 4.9
[startTime] =>
[endTime] =>
[reviewCount] => 4960
[reviewAverage] => 4.37
[shopName] => ショップジャパン 楽天市場店
[shopCode] => shopjapan
[shopUrl] => http://www.rakuten.co.jp/shopjapan/
[genreId] => 100985
)
[1] => ・・・続く
)
この部分のみうまく取り出してforeachのfromに対してアサインすれば、tpl側で
$test.itemName
$test.itemCode
$test.itemCaption
・・・
と言うように簡単に取り出せます。
と言う事はアサイン時に
php側
$smarty->assign('plink',$plink);
$smarty->assign('tests',$pdata['Body']['itemSearch:ItemSearch']['Items']['Item']);
でアサインしてあげれば、
TPL側では上記の配列で表示したい要素を
<div>{$plink}</div>
{foreach name=test item=test from=$tests}
アイテム名 : {$test.itemName}
コード : {$test.itemcCode}
<img src="{$test.mediumImageUrl}" />
・・・
{/foreach}
<div>{$plink}</div>
で取り出せるはずです。試してみてください。
この回答への補足
こんにちは。たびたびすみませんが、見て頂いたサンプルファイルのapp→rakuten→plugins→block.items.php
このblock.items.phpの方は関係ないのでしょうか。よろしくお願いいたします。
こんにちは。いつもありがとうございます。11spec0様がおっしゃられたように
$smarty->assign('tests',$pdata);
$smarty->assign('plink',$plink[0]['all']); の部分を
$smarty->assign('plink',$plink);
$smarty->assign('tests',$pdata['Body']['itemSearch:ItemSearch']['Items']['Item']); と書き換え
tpl側を
{show_bom}
<div align="center">{$plink}</div>
{if total_count > 0}
{items}
{foreach name=test item=test from=$tests}
<p style="text-align : center; overflow : hidden;">
{if $test.is_image}<a href="{$test.affiliate_link}" target="_blank"><img src="{$test.medium_image_url}" alt="{$test.title|mb_truncate:100:" ..."}" style="border : 1px solid #999999;" /></a><br />{/if}
<a href="{$test.affiliate_link}" target="_blank">{$test.title|mb_truncate:100:" ..."}</a><br />
{$test.price|number_format}円<br />
(<a href="{$test.shop_affiliate_link}" target="_blank">{$test.shop_name|mb_truncate:100:" ..."}</a>)
</p>
{/foreach}
{/items}
<div align="center">{$plink}</div>
{else}{* if total_count > 0 の条件を満たさない場合 *}
<p>検索条件に合う商品はありません。</p>
{/if}{* if total_count > 0 *}
としましたら、下記のように表示されました。
Warning: Invalid argument supplied for foreach() in /usr/local/php5/pear/Pager/Common.php on line 1365
Array
検索条件に合う商品はありません。
11spec0様が言うように
$test.itemName
$test.itemCode
$test.itemCaption
の意味はわかるのですが、tpl側にはこのitemNameの文字が出てこないのですが、tpl側を作り直した方がいいのでしょうか。
No.10
- 回答日時:
いえ、エラーを見て分かるようにpagerのcommon.phpのエラーです。
私が思うにきちんと値が取れていないのだと思います。前回説明したとおりにTPL側で値をとればエラーは出ないと思いますが。ただ、私が書いたロジックをそのままコピペして使っても駄目だと思います。私はアサインされた配列に対してこういう要素(キー)があるのではないかという想像で作っただけですので。{foreach name=test item=test from=$tests}
・・・
{/foreach}
・・・の値を取得部分はjimmy1977様が調べて$test.要素を書き換えて下さい。
ちょっとこれ以上の説明はデバッグしながらやらないとこちら側は分かりません。
お返事ありがとうございます。11spec0様がおっしゃるとおり、コピペしていては勉強にならないのでいろいろと調べながらがんばっています。きっと$test.要素が配列でもオブジェクトでもないところについているからだと思います。print_rで抽出した部分を確認しながらがんばって11spec0様に成功したと報告できるようにがんばります。
No.9
- 回答日時:
tpl側はこんなふうな解釈でよいのでしょうか。
{foreach name=test item=test from=$tests}
<p style="text-align : center; overflow : hidden;">
{if $is_image}<a href="{$affiliate_link}" target="_blank"><img src="{$medium_image_url}" alt="{$title|mb_truncate:100:" ..."}" style="border : 1px solid #999999;" /></a><br />{/if}
<a href="{$affiliate_link}" target="_blank">{$title|mb_truncate:100:" ..."}</a><br />
{$price|number_format}円<br />
(<a href="{$shop_affiliate_link}" target="_blank">{$shop_name|mb_truncate:100:" ..."}</a>)
</p>
{/foreach}
このやり方では値が取得できません。なぜかと言うとそれぞれ$title,$medium等々のように直接指定してしまうと個別に
smarty->assign('title',$変数);
というようにアサインしなければならないからです。PHPのforeachを思い浮かべていただければイメージしやすいかと思います。
{foreach name=test item=test from=$tests}
部分を分かりやすく説明すると
fromがPHPのforeachで例えると
foreach($tests as $test){
}
の$testsになります。そしてitemが$testになります。
つまり、{foreach name=test item=test from=$tests}
の$testsに対して回すデータをアサインします。
smarty->assign('tests',$pdata);
testsにアサインされたデータをtpl側で取り出すにはitemであるtestを使用し取り出します。
先ほどのtplファイルを例にすると
{foreach name=test item=test from=$tests}
<p style="text-align : center; overflow : hidden;">
{if $test.is_image}<a href="{$test.affiliate_link}" target="_blank"><img src="{$test.medium_image_url}" alt="{$test.title|mb_truncate:100:" ..."}" style="border : 1px solid #999999;" /></a><br />{/if}
<a href="{$test.affiliate_link}" target="_blank">{$test.title|mb_truncate:100:" ..."}</a><br />
{$test.price|number_format}円<br />
(<a href="{$test.shop_affiliate_link}" target="_blank">{$test.shop_name|mb_truncate:100:" ..."}</a>)
</p>
{/foreach}
になります。この$test.titleというのはPHPのforeachで説明すると、
$test['title']と同じ意味になります。
こんな感じでデータをテンプレートにセットしてあげれば今まで個別イにアサインしていた部分は不要になり、pagerによって作られた実データと、ページのリンクデータによってpagerを実装する事ができると言うわけです。この部分が出来ればsmartyでpagerが完成です。
毎回、ご丁寧なお返事ありがとうございます。まだまだ、PHPを理解することはできていませんが、ぼんやりとわかってきたような感じがします。11spec0様がご説明していただいたよう書き直しましたら、下記のようなエラーがでてしまいました。このいったエラーの場合は、レンタルサーバーの方のCommon.phpがエラーと返しているのでしょうか。それとも、やはり私側のどこかがおかしいのでしょうか。よろしくお願い致します。
Warning: Invalid argument supplied for foreach() in /usr/local/php5/pear/Pager/Common.php on line 723
No.8
- 回答日時:
なるほど。
結局のところ、先ほど教えていただいた配列の商品内容をアサインしたいわけですよね。ということは、pagerで生成された配列をただアサインしても分解してアサインしていないので、
当たり前ですが、表示上は
Arrayになります。また、いままで個別に突っ込んでアサインしていた
$smarty->assign('is_null_cell', 0);
$smarty->assign('title', $items[$ctr]['itemName']);
$smarty->assign('item_code', $items[$ctr]['itemCode']);
$smarty->assign('price', $items[$ctr]['itemPrice']);
$smarty->assign('description', $items[$ctr]['itemCaption']);
$smarty->assign('link', $items[$ctr]['itemUrl']);
$smarty->assign('affiliate_link', $items[$ctr]['affiliateUrl']);
$smarty->assign('is_image', $items[$ctr]['imageFlag']);
$smarty->assign('small_image_url', $items[$ctr]['smallImageUrl']);
$smarty->assign('medium_image_url', $items[$ctr]['mediumImageUrl']);
$smarty->assign('is_available', $items[$ctr]['availability']);
$smarty->assign('is_include_tax', $items[$ctr]['taxFlag']);
$smarty->assign('is_include_postage', !$items[$ctr]['postageFlag']);
$smarty->assign('is_credit_card', $items[$ctr]['creditCardFlag']);
$smarty->assign('is_shop_of_the_year', $items[$ctr]['shopOfTheYearFlag']);
$smarty->assign('affiliate_rate', $items[$ctr]['affiliateRate']);
・・・続く
の部分は不要になります。なぜかといいますと、pagerによって生成された商品データ(配列)が
既にありますので。この生成されたデータを分解アサインし、表示部分を作っていきます。
まず、
$page = Pager::factory($params);
$pdata = $page->getPageData();
$plink = $page->getLinks();
で生成された実データ$pdataをアサインします。
tpl側
{*<!--▼pager parts-->*}
<div align="center">{$plink}</div>
{*<!--▲pager parts-->*}
{*<!--▼body-->*}
{foreach name=test item=test from=$tests}
<p style="text-align : center; overflow : hidden;">
{if $is_image}<a href="{$test.affiliate_link}" target="_blank"><img src="{$test.medium_image_url}" alt="{$test.title|mb_truncate:100:" ..."}" style="border : 1px solid #999999;" /></a><br />{/if}
<a href="{$test.affiliate_link}" target="_blank">{$test.title|mb_truncate:100:" ..."}</a><br />
{$test.price|number_format}円<br />
(<a href="{$test.shop_affiliate_link}" target="_blank">{$test.shop_name|mb_truncate:100:" ..."}</a>)
</p>
{/foreach}
{*<!--▲body-->*}
{*<!--▼pager parts-->*}
<div align="center">{$plink}</div>
{*<!--▲pager parts-->*}
php側
#アサイン部分
$smarty->assign('tests',$pdata);
$smarty->assign('plink',$plink[0]['all']);
これだけでpagerは実装できます。コメントとして書いておいたbody部分の$test.要素名は調整
しつつ動きを見てください。
おはようございます。本当にいろいろとありがとうございます。11spec0様の言われた事を私の解釈があっているのか不安なので、ご指導お願い致します。
「いままで個別に突っ込んでアサインしていた部分は不要になります」ということは下記のものはいらなくなるといううことで良いでしょうか。
$params = array(
'perPage' => $max,
'itemData' => $data
);
上記部分が無くした状態で、PHP側は
$page = Pager::factory($params);
$pdata = $page->getPageData();
$plink = $page->getLinks();
$smarty->assign('tests',$pdata);
$smarty->assign('plink',$plink[0]['all']);
を転記するだけでよいのでしょうか。また転記する場所は決まりがあるのでしょうか。
tpl側はこんなふうな解釈でよいのでしょうか。
{show_bom}
{if $total_count > 0}
{items}
<div align="center">{$plink}</div>
{foreach name=test item=test from=$tests}
<p style="text-align : center; overflow : hidden;">
{if $is_image}<a href="{$affiliate_link}" target="_blank"><img src="{$medium_image_url}" alt="{$title|mb_truncate:100:" ..."}" style="border : 1px solid #999999;" /></a><br />{/if}
<a href="{$affiliate_link}" target="_blank">{$title|mb_truncate:100:" ..."}</a><br />
{$price|number_format}円<br />
(<a href="{$shop_affiliate_link}" target="_blank">{$shop_name|mb_truncate:100:" ..."}</a>)
</p>
{/foreach}
<div align="center">{$plink}</div>
{/items}
{else}{* if $total_count > 0 の条件を満たさない場合 *}
<p>検索条件に合う商品はありません。</p>
{/if}{* if $total_count > 0 *}
結果はといいますと、下記エラーがでてしまいました。
Warning: Invalid argument supplied for foreach() in /usr/local/php5/pear/Pager/Common.php on line 1365
馬鹿な自分が嫌になります。
No.7
- 回答日時:
$params = array(
'perPage' => $max,
'itemData' => $data
);
こちらで使用している
$dataを単純に
print_r($data);
するとどういう配列データが入っておりますか?
こちらがわかればアサインしやすいのでよろしくお願いします。
今日は時間があるので、できれば早めにご連絡いただけると助かります。
この回答への補足
こんにちは。ご指摘頂いたように下記のようにしましたら
$params = array(
'perPage' => $max,
'itemData' => print_r($data)
);
$page = Pager::factory($params);
$pdata = $page->getPageData();
$plink = $page->getLinks();
$smarty->assign('pagelink',$plink['all']);
$smarty->assign('pagedata',$pdata);
このような商品情報が商品配列の上に表示されました。
Array ( [header:Header] => Array ( [Args] => Array ( [Arg] => Array ( [0] => true [1] => true [2] => true [3] => true [4] => true [5] => true [6] => true [7] => true [8] => true [9] => true [10] => true ) ) [Status] => Success [StatusMsg] => ) [Body] => Array ( [itemSearch:ItemSearch] => Array ( [count] => 1210027 [page] => 1 [first] => 1 [last] => 30 [hits] => 30 [carrier] => 0 [pageCount] => 100 [Items] => Array ( [Item] => Array ( [0] => Array ( [itemName] => ビリーズブートキャンプ DVD版(ビリーバンド×1セット) [itemCode] => shopjapan:790183 [itemPrice] => 14700 [itemCaption] => セット内容/DVDx4枚(日本語字幕版)、ポケットメジャーx1個 、ビリーバンドx1セット(2本) サイズ(約)/ビリーバンド 約1m 原産国/DVD/日本製 送料/945円(税込) お届期間/約1週間 ※4枚で1セットの商品です。[itemUrl] => http://www.rakuten.co.jp/shopjapan/651695/616400 … [affiliateUrl] => http://hb.afl.rakuten.co.jp/hgc/07cc938c.6216a6e … [imageFlag] => 1 [smallImageUrl] => http://image.rakuten.co.jp/wshop/data/ws-mall-im … [mediumImageUrl] => http://image.rakuten.co.jp/wshop/data/ws-mall-im … [availability] => 1 [taxFlag] => 0 [postageFlag] => 1 [creditCardFlag] => 0 [shopOfTheYearFlag] => 1 [affiliateRate] => 4.9 [startTime] => [endTime] => [reviewCount] => 4960 [reviewAverage] => 4.37 [shopName] => ショップジャパン 楽天市場店 [shopCode] => shopjapan [shopUrl] => http://www.rakuten.co.jp/shopjapan/ [genreId] => 100985 ) [1] => Array ( [itemName] => 3000人の評価見て!JJモデル宮内美妃さんも愛用[itemCode] => snk:10000083 [itemPrice] => 13440 [itemCaption] => ★CM等で大人気のJJモデル白雪も絶賛♪ 100%ピュアセラミックプレートによるイオン&遠赤外線&摩擦減少効果・ [itemUrl] => http://item.rakuten.co.jp/snk/as2565rj/ [affiliateUrl] => http://hb.afl.rakuten.co.jp/hgc/07cc938c.6216a6e … [imageFlag] => 1 [smallImageUrl] => http://thumbnail.image.rakuten.co.jp/@0_gold/snk … [mediumImageUrl] => http://thumbnail.image.rakuten.co.jp/@0_gold/snk … [availability] => 1 [taxFlag] => 0 [postageFlag] => 0 [creditCardFlag] => 1 [shopOfTheYearFlag] => 0 [affiliateRate] => 1.0 [startTime] => [endTime] => [reviewCount] => 1822 [reviewAverage] => 4.73 [shopName] => 理容室・美容室専売品のSNK Beauty [shopCode] => snk [shopUrl] => http://www.rakuten.co.jp/snk/ [genreId] => 101878 ) [2] =>
続く・・・・
最後
[endTime] => [reviewCount] => 462 [reviewAverage] => 4.42 [shopName] => 赤や(インテリア家具通販) [shopCode] => k-akaya [shopUrl] => http://www.rakuten.co.jp/k-akaya/ [genreId] => 406392 ) ) ) ) ) )
Warning: Invalid argument supplied for foreach() in /usr/local/php5/pear/Pager/Common.php on line 723
商品配列の下には、
Arrayと表示されています。よろしくお願い致します。
おはようございます。早速のお返事ありがとうございます。本当に申し訳ないのですが、私はお盆休みなく仕事となので、今は試すことができません・・・5時過ぎに家に帰ってすぐに試してお返事しますので、勝手で申し訳ないのですがお待ちいただけますでしょうか。もし会社内でできればやってみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- JavaScript java keyを配列で表記したい 10 2022/12/01 17:53
- PHP jpgraphで表示されない 2 2022/10/22 09:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
foreachのなかで次のキーを参照...
-
配列の何番目かを出力したい
-
PHPのカッコ[ ]の使い方について
-
配列をループでたくさん宣言し...
-
file_existsでファイル名の部分...
-
PHP 多次元配列変数のデータ受...
-
$_SESSIONに二次元配列を使える...
-
sortableで並べ替えてDBに保...
-
String だと「 ByRef引数の型が...
-
配列のソートについて
-
CSVデータのn番目だけの値を取...
-
ネストが深い時のforeachはどう...
-
postgresql関数をつかったレコ...
-
Array Array と表示される
-
multiple属性のPOSTを配列で受...
-
CakePHPのfindの取得件数は?
-
セッション変数
-
PHP 配列の添字に変数は使えない?
-
プルダウンメニューにDBの内容...
-
FortranのOPEN文
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列をループでたくさん宣言し...
-
$_SESSIONに二次元配列を使える...
-
file_existsでファイル名の部分...
-
String だと「 ByRef引数の型が...
-
foreachのなかで次のキーを参照...
-
配列を回すとき、最後の要素だ...
-
PHPのカッコ[ ]の使い方について
-
PHPのPOSTでの半角スペース
-
セッション配列の取得の仕方
-
PHPにてクラスを配列にすること...
-
配列一致(要素順番は違うが内容...
-
PHP 多次元配列変数のデータ受...
-
漢字のソートについて
-
unset使用時の利点
-
OCI で、SELECT結果行数を取得...
-
postgresql関数をつかったレコ...
-
配列をmysqlに保存
-
あいまい検索
-
チェックボックス複数選択 mys...
-
総当り表
おすすめ情報