バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 【2.11.0】ページングについて教えてください。

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 2011/8/7 15:53
対応状況: −−−
Re: 【2.11.0】ページングについて教えてください。
http://www.kudzilla.com/~hic/eccube-dev/image/pager.jpg

貼り付けて、過不足を調整した結果が、上記画面ですが、
取り敢えず「表示させるだけ」、、、としては、合ってますか?

追記:
調整したのは、スクリーンショット画像ではなく、ちゃんと php,tpl,css です。。。
kobakura
投稿日時: 2011/8/7 16:57
対応状況: −−−
一人前
登録日: 2011/6/10
居住地:
投稿: 106
Re: 【2.11.0】ページングについて教えてください。
なにぶん初心者ですので、自分の答え方でお伝えいたします。
ご容赦ください。
引用:
LC_Page_Admin_Products_Review.phpでは、以下の名称で値を利用しているようです。

・1ページあたりの表示件数 = search_page_max
 ↑検索条件の検索結果表示件数を画面から取得(初期値は10)

・現在のページ数 = search_pageno
 ↑隠しフィールドで画面から取得(初期値は"")
  検索結果の一覧のページ番号をクリックした後、初めて値がセットされます。

・全ページ数 = $linemax
 ↑検索条件にヒットしたdtb_reviewのデータ件数

ここでしょうか?
/**
* レビュー検索結果の取得
*
* @param array $arrForm フォームデータ
* @param string $where WHERE文
* @param array $arrval WHERE文の判定値
* @return array レビュー一覧
*/
function lfGetReview($arrForm, $where, $arrval) {
$objQuery =& SC_Query_Ex::getSingletonInstance();

// ページ送りの処理
$page_max = SC_Utils_Ex::sfGetSearchPageMax($arrForm['search_page_max']);

if (!isset($arrval)) $arrval = array();

$from = "dtb_review AS A LEFT JOIN dtb_products AS B ON A.product_id = B.product_id ";
$linemax = $objQuery->count($from, $where, $arrval);
$this->tpl_linemax = $linemax;

$this->tpl_pageno = isset($arrForm['search_pageno']) ? $arrForm['search_pageno'] : "";

// ページ送りの取得
$objNavi = new SC_PageNavi_Ex($this->tpl_pageno, $linemax, $page_max,
'fnNaviSearchPage', NAVI_PMAX);
$this->arrPagenavi = $objNavi->arrPagenavi;
$startno = $objNavi->start_row;

// 取得範囲の指定(開始行番号、行数のセット)
$objQuery->setLimitOffset($page_max, $startno);

// 表示順序
$order = "A.create_date DESC";
$objQuery->setOrder($order);
//検索結果の取得
//レビュー情報のカラムの取得
$col = "review_id, A.product_id, reviewer_name, sex, recommend_level, ";
$col .= "reviewer_url, title, comment, A.status, A.create_date, A.update_date, name";
$from = "dtb_review AS A LEFT JOIN dtb_products AS B ON A.product_id = B.product_id ";
$arrReview = $objQuery->select($col, $from, $where, $arrval);

return $arrReview;
}

この部分は新規ページindex.phpに貼りつけました。

引用:
それぞれの値は、phpとsmartyでやりとりされていますが、
テンプレート側で<input>タグの記入漏れなどはないでしょうか?

/admin/products/review.tplの
<!--★★検索結果一覧★★-->
<form name="form1" id="form1" method="post" action="?">
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
<input type="hidden" name="mode" value="search" />
<input type="hidden" name="review_id" value="" />
<input type="hidden" name="search_pageno" value="<!--{$tpl_pageno|h}-->" />
<!--{foreach key=key item=item from=$arrHidden}-->
<!--{if $key ne "search_pageno"}-->
<input type="hidden" name="<!--{$key}-->" value="<!--{$item|h}-->" />
<!--{/if}-->
<!--{/foreach}-->
<h2>検索結果一覧</h2>
<div class="btn">
<span class="attention"><!--検索結果数--><!--{$tpl_linemax|h}-->件</span>&nbsp;が該当しました。
<!--{if $smarty.const.ADMIN_MODE == '1'}-->
<a class="btn-normal" href="java script:;" onclick="fnModeSubmit('delete_all','',''); return false;"><span>検索結果をすべて削除</span></a>
<!--{/if}-->
<a class="btn-normal" href="java script:;" onclick="fnModeSubmit('csv','',''); return false;"><span>CSV ダウンロード</span></a>
</div>
<!--{if $arrReview > 0 & $tpl_linemax > 0}-->

<!--{include file=$tpl_pager}-->

<!--検索結果表示テーブル-->
<table id="products-review-result" class="list">
<tr>
<th>投稿日</th>
<th>投稿者名</th>
<th>商品名</th>
<th>おすすめレベル</th>
<th>表示・非表示</th>
<th class="edit">編集</th>
<th class="delete">削除</th>
</tr>

<!--{section name=cnt loop=$arrReview}-->
<tr>
<td><!--{$arrReview[cnt].create_date|h|sfDispDBDate}--></td>
<td><!--{$arrReview[cnt].reviewer_name|h}--></td>
<td><!--{$arrReview[cnt].name|h}--></td>
<!--{assign var=key value="`$arrReview[cnt].recommend_level`"}-->
<td><!--{$arrRECOMMEND[$key]}--></td>
<td class="menu"><!--{if $arrReview[cnt].status eq 1}-->表示<!--{elseif $arrReview[cnt].status eq 2}-->非表示<!--{/if}--></td>
<td class="menu"><a href="java script:;" onclick="fnChangeAction('./review_edit.php'); fnModeSubmit('','review_id','<!--{$arrReview[cnt].review_id}-->'); return false;">編集</a></td>
<td class="menu"><a href="java script:;" onclick="fnModeSubmit('delete','review_id','<!--{$arrReview[cnt].review_id}-->'); return false;">削除</a></td>
</tr>
<!--{/section}-->
</table>
<!--検索結果表示テーブル-->
<!--{/if}-->
</form>
をはりつけました。
がしかし、新規ページのソースをみると
<!--{foreach key=key item=item from=$arrHidden}-->
<!--{if $key ne "search_pageno"}-->
<input type="hidden" name="<!--{$key}-->" value="<!--{$item|h}-->" />
<!--{/if}-->
<!--{/foreach}-->
の部分の表示がありません。

引用:
lfInitParamメソッドにあるパラメータの記述も移植されていますか?


↓これですか?
/**
* パラメータ情報の初期化を行う.
*
* @param SC_FormParam $objFormParam SC_FormParam インスタンス
* @return void
*/
function lfInitParam(&$objFormParam) {
$objFormParam->addParam("投稿者名", "search_reviewer_name", STEXT_LEN, 'KVas', array("MAX_LENGTH_CHECK"),"",false);
$objFormParam->addParam("投稿者URL", "search_reviewer_url", STEXT_LEN, 'KVas', array("MAX_LENGTH_CHECK"),"",false);
$objFormParam->addParam("商品名", "search_name", STEXT_LEN, 'KVas', array("MAX_LENGTH_CHECK"),"",false);
$objFormParam->addParam("商品コード", "search_product_code", STEXT_LEN, 'KVas', array("MAX_LENGTH_CHECK"),"",false);
$objFormParam->addParam("性別", "search_sex", INT_LEN, 'n', array("MAX_LENGTH_CHECK"),"",false);
$objFormParam->addParam("おすすめレベル", "search_recommend_level", INT_LEN, 'n', array("MAX_LENGTH_CHECK"),"",false);
$objFormParam->addParam("投稿年", "search_startyear", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK"),"",false);
$objFormParam->addParam("投稿月", "search_startmonth", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK"),"",false);
$objFormParam->addParam("投稿日", "search_startday", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK"),"",false);
$objFormParam->addParam("投稿年", "search_endyear", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK"),"",false);
$objFormParam->addParam("投稿月", "search_endmonth", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK"),"",false);
$objFormParam->addParam("投稿日", "search_endday", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK"),"",false);
$objFormParam->addParam("最大表示件数", "search_page_max", INT_LEN, 'n', array("MAX_LENGTH_CHECK"),"",false);
$objFormParam->addParam("ページ番号件数", "search_pageno", INT_LEN, 'n', array("MAX_LENGTH_CHECK"),"",false);
$objFormParam->addParam("レビューID", "review_id", INT_LEN, 'n', array("MAX_LENGTH_CHECK"),"",false);
}
は貼りつけました。

引用:
initメソッドにある以下の記述は移植されていますか?$masterData = new SC_DB_MasterData_Ex();
$this->arrPageMax = $masterData->getMasterData("mtb_page_max");

移植しました。

引用:
表示されないというのは、レビューが表示されないという事でしょうか?

レビューは表示されています。
しかし、今の表示はfukap様よりご提案いただいた
http://ec-cube.nakweb.com/blog/447.html
を使い、表示させています。

↑が影響しているのでしょうか?
<!--{include file=$tpl_pager}-->は全く出てきません。
ですのでpager.tplをそのままコピペして張り付ければ
現在100件あるお客様の声を10分割(1〜10)のページングは出るのですが、クリックしてもまったく反応はありません。

引用:
元々無い機能を作り出すのは、大変ですよね。

おっしゃる通りですが、皆様のありがたいアドバイスので必ず作りたいです。よろしくお願いいたします。
kobakura
投稿日時: 2011/8/7 17:00
対応状況: −−−
一人前
登録日: 2011/6/10
居住地:
投稿: 106
Re: 【2.11.0】ページングについて教えてください。
引用:

Ringoさんは書きました:
http://www.kudzilla.com/~hic/eccube-dev/image/pager.jpg

貼り付けて、過不足を調整した結果が、上記画面ですが、
取り敢えず「表示させるだけ」、、、としては、合ってますか?


はい合っています。
これを新規ページでやりたいのです!
kobakura
投稿日時: 2011/8/7 18:01
対応状況: −−−
一人前
登録日: 2011/6/10
居住地:
投稿: 106
Re: 【2.11.0】ページングについて教えてください。
Ringo様

試しに管理画面/admin/products/review.tplとphpを完全コピペして表示させてみました。
http://www.kudzilla.com/~hic/eccube-dev/image/pager.jpg
のようになりました。

しかし、pagerが出ません。
なぜなのでしょう?
468
投稿日時: 2011/8/7 18:37
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 【2.11.0】ページングについて教えてください。
pagerが出ないとおっしゃられるのは、
2ページ以降が表示できないという事でしょうか?

ページ番号をクリックしても何も起こらないという事であれば、
Javascriptの移植が終わっていないのではないかと思います。

以下の記述を、テンプレート内に追記してみていただけますか?

<script>
// ページナビで使用する
function fnNaviSearchPage(pageno, mode) {
document.form1['search_pageno'].value = pageno;
document.form1['mode'].value = mode;
document.form1.submit();
}
</script>

管理画面のレビュー管理では、
/html/user_data/packages/admin/js/admin.js内の関数を
onclickイベントで読んでいるようでしたので・・・。

ただ、商品詳細ページなどでは、formタグが既に存在していると思いますので、
id属性とname属性を変更して1ページ内での重複を取り除いておいたほうが良いかと思います。

2ページ目への移動のつもりが、商品がかごに入ったりと別のボタンをクリックした時の動きが発生する可能性があります。

formタグのid属性やname属性を変更した場合は、
上記、javascript内のdocument.form1←ココは変更後の値に修正してください。

以上、よろしくお願い致します。
ゲスト
投稿日時: 2011/8/7 19:08
対応状況: −−−
Re: 【2.11.0】ページングについて教えてください。
↓のURL内の「test_code」内の「2. フロントページへのページャの組込み」に
スクリーンショットのための修正箇所を「pager.rtf」として置きました。

468様の内容と合わせることで、かなりの線まで行けるのではないでしょうか。。。

pagerはcssへの追加(admin側からのコピー)で出るはずです。
kobakura
投稿日時: 2011/8/7 20:09
対応状況: −−−
一人前
登録日: 2011/6/10
居住地:
投稿: 106
Re: 【2.11.0】ページングについて教えてください。
468様
Ringo様

本当にありがとうございます。

<script>
// ページナビで使用する
function fnNaviSearchPage(pageno, mode) {
document.form1['search_pageno'].value = pageno;
document.form1['mode'].value = mode;
document.form1.submit();
}
</script>

を追加しページングできました!

あとは現在、admin/products/reviewのphpをそのまま
コピペしている状況なので、新規ページ(例:URL/voice.php)
にアクセスすると検索ページが出てきて、検索ボタンを押して
はじめてお客様の声が紹介されます。
これを最新お客様の声を1ページ目に表示させるには
どこを削除、訂正したらよろしいでしょうか?

よろしくお願いいたします。
ゲスト
投稿日時: 2011/8/7 20:24
対応状況: −−−
Re: 【2.11.0】ページングについて教えてください。
1.強制的にmodeで"search"が渡って来たことにするか
2.swich case文群を削除してcase "search"の処理を実行させるか
のいづれでも、表示すると思います。

「1.」は修正が少ない。
「2.」は余計な記述が無くなる。

といった感じかと。。。
kobakura
投稿日時: 2011/8/7 21:37
対応状況: −−−
一人前
登録日: 2011/6/10
居住地:
投稿: 106
Re: 【2.11.0】ページングについて教えてください。
引用:

2.swich case文群を削除してcase "search"の処理を実行させるか


は、下記のような部分を消していけばいいのですか?

function action() {



1)ここ→ switch ($this->getMode()) {
case 'delete':
$this->lfDeleteReview($this->arrForm['review_id']);
2)ここを残す?→ case 'search':

すみません。
あと一歩くらいなのですが・・・。
ゲスト
投稿日時: 2011/8/7 22:24
対応状況: −−−
Re: 【2.11.0】ページングについて教えてください。
phpでのswitch構文のコメント化

    function action() {
        // パラメーター管理クラス
        $objFormParam = new SC_FormParam_Ex();
        $this->lfInitParam($objFormParam);
        $objFormParam->setParam($_POST);
        $objFormParam->convParam();
        // URLを小文字に変換
        $objFormParam->toLower('search_reviewer_url');

        $this->arrForm = $objFormParam->getHashArray();
        $this->arrHidden = $this->lfSetHidden($this->arrForm);

        // switch構文をコメント化
        //switch ($this->getMode()) {
        //case 'delete':
        //    $this->lfDeleteReview($this->arrForm['review_id']);
        //case 'search':
        //case 'csv':
            // エラーチェック
            $this->arrErr = $this->lfCheckError($objFormParam);
            if (!$this->arrErr){
                // 検索条件を取得
                list($where, $arrval) = $this->lfGetWhere($this->arrForm);
            }
            //CSVダウンロード
            if ($this->getMode() == 'csv') {
                $this->lfDoOutputCsv($where, $arrval);
                exit;
            }

            // 検索条件を取得
            $this->arrReview = $this->lfGetReview($this->arrForm, $where, $arrval);
        //    break;
        //default:
        //    break;
        //}
    }


テンプレート内での「search待ちif文」のコメント化

<!--{* コメント化  if $smarty.post.mode == 'search' *}-->

<!--★★検索結果一覧★★-->
<form name="form1" id="form1" method="post" action="?">

(省略)

        <!--検索結果表示テーブル-->
    <!--{/if}-->
</form>
<!--{* コメント化 /if *}-->
<!--★★検索結果一覧★★-->


取り急ぎ、、、動作確認してみました。
« 1 (2) 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は89,352名です
総投稿数は110,082件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1652
8
red
1570
9
mcontact
1304
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.