質問 > 管理機能 > 商品管理/商品マスターで検索をした際に表示される$tpl_pagerについて |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
kenz |
投稿日時: 2017/3/19 3:54
対応状況: −−−
|
常連 登録日: 2010/6/8 居住地: 投稿: 46 |
商品管理/商品マスターで検索をした際に表示される$tpl_pagerについて お世話になっております。
管理者画面の商品管理/商品マスターの“この条件で検索をクリック”した際に表示されるページ数($tpl_pager)がありますが、この検索に関与するsc_product.phpのクエリーを変更した検索機能を新たに追加しました。 商品の“検索結果の取得”は正しいものが表示されますが、問題は“ページ送りの取得”の箇所で、たとえば検索で表示される商品の数が少なく、2ページにまで至らない場合にも、2,3,4ページと表示されます。(おそらく検索にかかわるデフォルトのphpファイルの記述を使用しているためだと思われます。) この様にsc_product.phpでのクエリーの絞りを変更した場合に$tpl_pagerの結果が正しく表示されるためにはどのファイルのどの箇所を変更すれば宜しいかお教え願いませんでしょうか。(以下はページ送りの取得をしている記述です。) LC_Page_Admin_Products.php // 検索実行 default: // 行数の取得 $this->tpl_linemax = $this->getNumberOfLines($where, $arrWhereVal); // ページ送りの処理 $page_max = SC_Utils_Ex::sfGetSearchPageMax($objFormParam->getValue('search_page_max')); // ページ送りの取得 $objNavi = new SC_PageNavi_Ex($this->arrHidden['search_pageno'], $this->tpl_linemax, $page_max, 'fnNaviSearchPage', NAVI_PMAX); $this->arrPagenavi = $objNavi->arrPagenavi; // 検索結果の取得 $this->arrProducts = $this->findProducts($where, $arrWhereVal, $page_max, $objNavi->start_row, $order, $objProduct); // 各商品ごとのカテゴリIDを取得 if (count($this->arrProducts) > 0) { foreach ($this->arrProducts as $key => $val) { $this->arrProducts[$key]['categories'] = $objDb->sfGetCategoryId($val['product_id'], 0, true); $objDb->g_category_on = false; } } EC-CUBE 2.X系 (データベース) MySQL5.0.77 (WEBサーバ) apache2 (OS) Windows XP (PHP) 5.0.22 |
tao_s |
投稿日時: 2017/3/19 6:52
対応状況: −−−
|
仙人 登録日: 2008/8/20 居住地: 東京 投稿: 799 |
Re: 商品管理/商品マスターで検索をした際に表示される$tpl_pagerについて どういうカスタマイズをしたのか具体的なところがわからないので何とも言えませんが、getNumberOfLines()あたりじゃないでしょうか?
|
kenz |
投稿日時: 2017/3/19 19:37
対応状況: −−−
|
常連 登録日: 2010/6/8 居住地: 投稿: 46 |
Re: 商品管理/商品マスターで検索をした際に表示される$tpl_pagerについて tao_s様
ご教示頂きまして感謝いたします。 x件が該当しました。という表示はデフォルトの状態で抽出した数字を表示します。 以下の“検索結果の取得”が正常に機能してる(カスタマイズした$objProductも正常に反映されている)にもかかわらず、 その下の“検索結果の行数を取得する”が機能していないのはどこに問題があるからなのでしょうか。 いろいろと試しておりますが、どうしてもわかりません。 // 検索結果の取得 $this->arrProducts = $this->findProducts($where, $arrWhereVal, $page_max, $objNavi->start_row, $order, $objProduct); // 検索結果の行数を取得する. function getNumberOfLines($where, $arrValues) { $objQuery =& SC_Query_Ex::getSingletonInstance(); return $objQuery->count('dtb_products', $where, $arrValues); } |
468 |
投稿日時: 2017/3/20 11:46
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 商品管理/商品マスターで検索をした際に表示される$tpl_pagerについて 検索結果の行数を取得しているgetNumberOfLinesメソッド内の
ですが、単純にdtb_productsテーブルのみを対象に抽出された件数を返しています。 カスタマイズされた$objProductの内容は件数を取得するSQLには伝わっていないので、 getNumberOfLinesメソッド内の処理をカスタマイズする必要があると思います。 findProductsメソッドのほうは引数に$objProductが渡されており、 メソッド内で以下の記述により$objProductが利用されています。
|
kenz |
投稿日時: 2017/3/21 0:36
対応状況: −−−
|
常連 登録日: 2010/6/8 居住地: 投稿: 46 |
Re: 商品管理/商品マスターで検索をした際に表示される$tpl_pagerについて 468様、tao_s様、
もう少しのところまで来ている感があります。 以下の設定にいたしましたが、同様に$objProductを利用しているfunction findProducts(検索結果の取得)ではエラーがでないにも関わらず、以下の設定では function getNumberOfLines($where, $arrValues, &$objProduct) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $objProduct = new SC_Product2_Ex(); $from = $objProduct->alldtl($where_products_class = ''); return $objQuery->count('dtb_products', $from, $where, $arrValues); } 次の様なエラーがでます。 MDB2 Error: syntax error _doQuery: [Error message: Could not execute statement] [Native code: 1064] [Native message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS alldtl' at line 1] Sc_product2.phpのfunction alldtl($where_products_class = '') のwhere句の下にあるAS alldtl付近に構文上の問題がるというエラーがでます。同じクエリーを使用しているfindProductsでは問題ないので、getNumberOfLinesに関する記述のどこかに問題があるのかと考えておりますが、糸口が見つかりません。何かヒントなどありませんでしょうか。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |