このようなsmartyのphpの場合はどのようにページングをしたらいいのかわかりません。どなたかお知恵をお貸し下さい。
$cache_id = 'rakuten:' . serialize($_GET);
if (!$smarty->is_cached($tmpl_name, $cache_id)) {
$query = "楽天の情報を取得";
if ($affiliate_id) {
$query .= "&affiliateId=${affiliate_id}";
}
$query .= "&keyword=" . urlencode($_GET['keyword']);
$max = intval($_GET['max']);
if ($max > 0 && $max <= 30) {
$query .= "&hits=${max}";
}
if (isset($_GET['sort'])) {
$query .= "&sort=" . urlencode($_GET['sort']);
}
if (intval($_GET['genreId'])) {
$query .= "&genreId=" . intval($_GET['genreId']);
}
if ($_GET['field'] == 'use') {
$query .= "&field=0";
}
if (intval($_GET['imageFlag']) == 1) {
$query .= "&imageFlag=1";
}
if (intval($_GET['minPrice']) > 0) {
$query .= "&minPrice=" . intval($_GET['minPrice']);
}
if (intval($_GET['maxPrice']) > 0) {
$query .= "&maxPrice=" . intval($_GET['maxPrice']);
}
if ($_GET['orFlag'] == 'use') {
$query .= "&orFlag=1";
}
$client =& new HTTP_Client();
$client->get($query);
$resp =& $client->currentResponse();
if ($resp['code'] != 200) {
$smarty->assign('tid', intval($_GET["tid"]));
$smarty->assign('is_error', 1);
$smarty->assign('is_connection_error', 1);
$smarty->assign('errmsg', '接続に失敗しました。');
$smarty->caching = 0;
$smarty->display('error.tpl');
exit();
}
//print_r($resp['body']);
//exit();
$xml = new XML_Unserializer();
$xml->setOption('complexType', 'array');
$xml->setOption('forceEnum', array('Item'));
$result = $xml->unserialize($resp['body'], FALSE);
$data = $xml->getUnserializedData();
$status = $data['header:Header']['Status'];
if ($status == 'ClientError' ||
$status == 'ServerError' ||
$status == 'Maintenance') {
$smarty->assign('tid', intval($_GET["tid"]));
$smarty->assign('is_error', 1);
$smarty->assign('is_api_error', 1);
$smarty->assign('api_errmsg', $data['header:Header']['StatusMsg']);
$smarty->caching = 0;
$smarty->display('error.tpl');
exit();
}
// print("query = $query<br />\n");
// print_r($data);
// exit();
$smarty->assign('total_count', $data['Body']['itemSearch:ItemSearch']['count']);
$smarty->assign('items', $data['Body']['itemSearch:ItemSearch']['Items']['Item']);
}
// テンプレートの表示
$smarty->display($tmpl_name, $cache_id);
No.1ベストアンサー
- 回答日時:
PEARのPAGERにて実装することが可能ですが、そちらの方法では考えておりますか?fuctoryにて生成されたデータをassignするだけでOKです。
ほかにもやり方があるので、載せておきますね。参考URL:http://www.kazumanishihata.com/technology/smarty …
この回答への補足
お返事ありがとうございます。ご参考URLは以前私も見たことがあったのですが、お恥ずかしいことで私はPHP等初心者でどこにどのような形で使えばいいのか理解できません。お手数でなければどのように書き加えたらいいのか教えてほしいのですが・・・宜しくお願い致します。
補足日時:2008/07/24 07:53お返事ありがとうございます。ご参考URLは以前私も見たことがあったのですが、お恥ずかしいことで私はPHP等初心者でどこにどのような形で使えばいいのか理解できません。お手数でなければどのように書き加えたらいいのか教えてほしいのですが・・・宜しくお願い致します。
No.4
- 回答日時:
こんばんは。
エラーの内容は何でしょうか?出るエラーを毎回載せていただけるととても助かります。pager.phpがあるファイルパスはあっていますでしょうか?requireで絶対パスを指定して実行しても出ますでしょうか?いつもありがとうございます。エラーコードは下記のとおりです。
Warning: main(pager/pager.php) [function.main]: failed to open stream: No such file or directory in /home/zoso-zepjimmy/public_html/server/app/rakuten/rakuten.php on line 10
Fatal error: main() [function.require]: Failed opening required 'pager/pager.php' (include_path='../../pear:../../smarty:.:/usr/local/lib/php') in /home/zoso-zepjimmy/public_html/server/app/rakuten/rakuten.php on line 10
ファイルパスがあっていないみたいです・・・PHP側に入れてみたみたのはこんな感じのものですが大丈夫でしょうか?
$params=array(
'perPage'=>2,
'itemData'=>itemData
);
$page = Pager::factory($params);
$pdata = $page->getPageData();
$plink = $page->getLinks();
$smarty->assign('pagelink',$plink);
$smarty->assign('pagedata',$pdata);
No.3
- 回答日時:
なるほど。
検索結果の表示をしているわけですね。プログラムの追記はphp側とtpl側になります。まず、Pager-2.4.5をダウンロードし、実行できるように
require_once('pager.php');
で読み込みます。
一連の流れは
/* phpfile側 */
require_once('pager.php');
#pagerのパラメータ
$params=array(
'perPage'=>1ページに検索結果を表示させたい数(例)2件ずつであれば2、10件ずつであれば10など...,
'itemData'=>こちらは検索結果(配列のデータ)を指定します。
);
#上記で作ったパラメータを使いペイジャーパーツを生成
$page = Pager::factory($params);
#ページのデータ
$pdata = $page->getPageData();
#ページのリンク
$plink = $page->getLinks();
これだけでペイジャーパーツが生成されます。あとは同じPHPのファイル内でTPLに対してアサインするだけです。
$smarty->assign('pagelink',$plink);
$smarty->assign('pagedata',$pdata);
/* tplfile側 */
{$pagelink}
{$pagedata}
お分かりになりますでしょうか?少し気になったのですが、検索結果をアサインする場合、php側でforeachか何かで回しながらアサインしているんでしょうか?
いつもお返事ありがとうございます。非常に感謝しています。
「検索結果をアサインする場合、php側でforeachか何かで回しながらアサインしているんでしょうか?」
本当に申し訳ないのですが、質問の意味がわかりません・・・すみません。
転記されたものを使ってみましたがうまくいきませんでした・・・。はじめに転記したPHPの初めの部分は下記になります。
require_once('pager.php');を入れたのですが、この部分にエラーがでるみたいです・・・
できない生徒でもうしわけありません。
<?php
include('../incl_path.php');
include('../common/check_tmpl.php');
include('../common/sanitize_url.php');
include('../common/date_is_new.php');
set_include_path("${incl_path}pear" . PATH_SEPARATOR . "${incl_path}smarty" . PATH_SEPARATOR . get_include_path());
require_once('Smarty.class.php');
require_once('HTTP/Client.php');
require_once('XML/Unserializer.php');
require_once('pager.php');//転記した部分ですがエラーがでるみたいです。
// smartyの初期化
$smarty = new Smarty();
$smarty->template_dir = "../../templates/rakuten";
$smarty->config_dir = "../../config/rakuten";
$smarty->plugins_dir = array("./plugins", "../common/plugins");
$smarty->compile_dir = "../../templates_c/rakuten";
$smarty->cache_dir = "../../cache/rakuten";
$smarty->caching = 2;
$smarty->cache_lifetime = 43200;
$tmpl_name = check_template($smarty);
$smarty->config_load("tmpl.cfg", "id");
$developer_id = $smarty->get_config_vars('developer_id');
$affiliate_id = $smarty->get_config_vars('affiliate_id');
$smarty->assign('developer_id', $developer_id);
$smarty->assign('affiliate_id', $affiliate_id);
No.2
- 回答日時:
遅くなりましてすいません。
その後ペイジャーは解決しましたでしょうか?最終的に表示したいデータ(配列)はどれにあたりますでしょうか?この回答への補足
tpl側
{show_bom}
{if $total_count}
{items}
<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>
{/items}
{else}{* if $total_count > 0 の条件を満たさない場合 *}
<p>検索条件に合う商品はありません。</p>
{/if}{* if $total_count > 0 *}
お返事ありがとうございます。恥ずかしいですが、まだ解決していません。いろいろ本などを購入し勉強しているのですが、なかなか理解できません。ペイジャーなんですが、Pager-2.4.5をダウンロードしてサーバーに落として利用すればいいのでしょうか。その辺もよくわかりません。このパーツはサーバー側でプログラムを動作させ、webページにjavascriptを追加してテンプレートに沿って表示させています。ページ送りをするためには、java、tpl、phpのどのプログラムを変更すればいいのかもわかりません。ご指導お願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP php エラー 2 2022/10/23 16:43
- その他(プログラミング・Web制作) カラーミーのSmarty構文について 1 2022/10/09 13:55
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- 英語 【英語】 新しい職場の人と仲良くできるか心配です。 ①I'm worried I won't get 4 2022/06/26 21:19
- MySQL php テーブルを作れない 2 2022/11/17 18:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
While文を使って配列の中身を全...
-
CSVデータの行数カウントをした...
-
多次元配列の一次元目の最大値...
-
ログファイルが一定行数を超え...
-
ヒアドキュメントの中のfor文
-
smartyのforeachの使い方
-
foreachのなかで次のキーを参照...
-
スカラーのベクトル微分
-
forとかで連番の変数を一気に格...
-
PHP 多次元配列変数のデータ受...
-
CSVデータのn番目だけの値を取...
-
$_SESSIONに二次元配列を使える...
-
3つの連想配列を交互に代入し...
-
多次元配列をソートする綺麗な...
-
プルダウンメニューにDBの内容...
-
unset使用時の利点
-
配列の書き方
-
String だと「 ByRef引数の型が...
-
multiple属性のPOSTを配列で受...
-
添え字が全て文字列のPHPの多次...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの構造体の値を読み...
-
CSVファイルの最終行のデー...
-
stdClass Objectを連想配列のよ...
-
複数行のデータのPOST処理に関して
-
ヒアドキュメントの中のfor文
-
Resource id #3 と表示されま...
-
エラーメッセージ(無効な間接...
-
自動で番号を振りたい
-
PHPでCSVの一部の行を編集したい
-
C言語でCSVファイルの行数を読...
-
バイナリファイルの内容を、そ...
-
CSVデータの行数カウントをした...
-
ログファイルの古い日付の行を...
-
While文を使って配列の中身を全...
-
csvの内容を行単位で削除したい
-
多次元配列の一次元目の最大値...
-
pythonのファイルの並びでの読...
-
配列同士の足し算のループ処理
-
【PHP】csvファイルへの書き出...
-
配列をファイルに書き込む方法
おすすめ情報