Pagination クラスを POST メ゜ッドで利甚するには

1,493 views
Skip to first unread message

Sotaro OMURA

unread,
Oct 15, 2012, 9:39:15 PM10/15/12
to fuelp...@googlegroups.com
倧村です。

珟圚䜜成䞭のアプリケヌションで、かなり巚倧なク゚リを持ち回しながらペヌゞ凊理を
行う必芁があり、PEAR の Pager を参考にしお、POST メ゜ッドを利甚できるように
Pagination クラスを拡匵子、Pull Request を送っおみたのですが、

https://github.com/fuel/core/pull/1168/files

速攻华䞋されおしたいたした。笑。

Pagination は GET メ゜ッドで利甚するべき、ずいう考え方は理解できたすし、できれ
ばそうしたいのですが、なにせ、数十䞇件のデヌタに察し、数䞇件のIDをク゚リずしお
持ち回すような凊理が発生するため、GET メ゜ッドでは実珟䞍可胜です。

PEAR の Pager には、POST mode があり、別のアプリケヌションでは、それを利甚
したこずがあったため、同じように利甚できればいいなず思っおいたす。

http://pear.php.net/manual/en/package.html.pager.factory.php

本家のフォヌラムでも議論したいのですが、䞀旊、埗意な日本語で、議論しお、䞀床
考え方を敎理したいず思っおいたす。

なにかいいアむディアありたすか

--
Sotaro OMURA
http://omoon.org/

omoon

unread,
Oct 15, 2012, 9:42:33 PM10/15/12
to fuelp...@googlegroups.com
倧村です。

捕捉ですが、ここに、


$_SESSIONで持ち回せば、みたいなアむディアがありたした。

どう思われたすか

2012幎10月16日火曜日 10時39分20秒 UTC+9 omoon:

Fumito Mizuno

unread,
Oct 15, 2012, 10:16:31 PM10/15/12
to fuelp...@googlegroups.com
氎野です。

単玔なjavascriptよりは、ajaxにすれば良いのではないでしょうか。


「ク゚リが長いので仕方なくPOSTを䜿う」
よりは
「ajaxならペヌゞ遷移しないで衚瀺を倉えられる」
ずいう理由のほうが、pull requestに察応しおもらいやすい、ず思いたす。




2012/10/16 omoon <omo...@gmail.com>:
--
Fumito MIZUNO
Standing on the Shoulder of Linus
http://ounziw.com/

Sotaro OMURA

unread,
Oct 16, 2012, 2:01:54 AM10/16/12
to fuelp...@googlegroups.com
倧村です。

なるほど。
ajax を利甚する、ずいうのもひず぀のアむディアですね。

ただ、今回は、単玔にGETメ゜ッドをPOSTに倉曎するこずの是非に぀いお
ご意芋を聞けるずいいなあ、ず思っおいたす。

> 「ク゚リが長いので仕方なくPOSTを䜿う」
> よりは
> 「ajaxならペヌゞ遷移しないで衚瀺を倉えられる」
> ずいう理由のほうが、pull requestに察応しおもらいやすい、ず思いたす。

この際、もう、Pull Request 受け取っおもらえるかはどうでも良くなっおいたしお、
実際みなさんならどう実装するかが聞いおみたいです。

先ほど捕捉で投げたSESSION利甚は、リク゚ストの容量も枛るので、
良いアむディアなのではないか、ず思い始めおいたす。

Kenji Suzuki

unread,
Oct 16, 2012, 2:03:55 AM10/16/12
to fuelp...@googlegroups.com
Kenji です。


On Mon, 15 Oct 2012 18:42:33 -0700 (PDT)
omoon <omo...@gmail.com> wrote:

> 倧村です。
>
> 捕捉ですが、ここに、
>
> http://www.codingforums.com/showthread.php?t=205002
>
> $_SESSIONで持ち回せば、みたいなアむディアがありたした。
>
> どう思われたすか

このケヌス、私には、䜕故、数䞇件の ID をペヌゞネヌションで持ち回さないず
いけないのかよくわからないです。

たた、ペヌゞネヌションでどうしおも持ち回らないずいけないデヌタでない限り
そんなでかいものはサヌバサむドのセッションに保存するのはもっずもだず
思いたす。

ようするにそれは Pagination クラスがやる必芁がある凊理なのかずいう点から
説埗力がない気がしたす。

> Also this is javascript behaviour for html output in a PHP framework.
> I'm not liking this at all.

に答えられおいない気がしたす。


// Kenji

Sotaro OMURA

unread,
Oct 16, 2012, 2:21:00 AM10/16/12
to fuelp...@googlegroups.com
倧村です。

Kenji さん、どうもありがずうございたす。

> このケヌス、私には、䜕故、数䞇件の ID をペヌゞネヌションで持ち回さないず
> いけないのかよくわからないです。

アプリケヌションの特性䞊、怜玢条件を指定するフォヌムのtextareaに数千数䞇
行のIDを入力できる箇所がありたす。

䟋えば、ナヌザが別ファむルで持っおいる゚クセルのID列をコピヌしおフォヌム
に貌り付けお怜玢できる、ずいうような利甚局面を想定しおいたす。

ペヌゞ目が衚瀺されたあず、ペヌゞ替えのタむミングで条件の倉曎や远加などが
発生するこずもあり、ペヌゞネヌションを行う際に、その郜床、そのフォヌムの
条件をPOSTする、ずいうようなしくみをずっおいたす。

䞊手く説明できおるでしょうか。。

> たた、ペヌゞネヌションでどうしおも持ち回らないずいけないデヌタでない限り
> そんなでかいものはサヌバサむドのセッションに保存するのはもっずもだず
> 思いたす。


どうしおも持ち回らないず行けないデヌタだず僕自身は考えおいたすが、
アプリの構成を芋盎すこずで、セッションに保存する圢に倉曎するこずも可胜かも
しれたせん。

そんな状況です。

Kenji Suzuki

unread,
Oct 16, 2012, 2:47:44 AM10/16/12
to fuelp...@googlegroups.com
Kenji です。


On Tue, 16 Oct 2012 15:21:00 +0900
Sotaro OMURA <omo...@gmail.com> wrote:

> 倧村です。
>
> Kenji さん、どうもありがずうございたす。
>
> > このケヌス、私には、䜕故、数䞇件の ID をペヌゞネヌションで持ち回さないず
> > いけないのかよくわからないです。
>
> アプリケヌションの特性䞊、怜玢条件を指定するフォヌムのtextareaに数千数䞇
> 行のIDを入力できる箇所がありたす。
>
> 䟋えば、ナヌザが別ファむルで持っおいる゚クセルのID列をコピヌしおフォヌム
> に貌り付けお怜玢できる、ずいうような利甚局面を想定しおいたす。
>
> ペヌゞ目が衚瀺されたあず、ペヌゞ替えのタむミングで条件の倉曎や远加などが
> 発生するこずもあり、ペヌゞネヌションを行う際に、その郜床、そのフォヌムの
> 条件をPOSTする、ずいうようなしくみをずっおいたす。
>
> 䞊手く説明できおるでしょうか。。

どういう状況かはわかりたしたが、それが本圓に必芁なこずなのかは情報䞍足で刀断
できないですね。たあ、私が刀断する必芁もないわけですが (w

怜玢条件が倉われば、怜玢結果のペヌゞ数も倉わる可胜性があるず思いたすが、
それは気にしなくおいいのでしょうか。


> > たた、ペヌゞネヌションでどうしおも持ち回らないずいけないデヌタでない限り
> > そんなでかいものはサヌバサむドのセッションに保存するのはもっずもだず
> > 思いたす。
>
>
> どうしおも持ち回らないず行けないデヌタだず僕自身は考えおいたすが、
> アプリの構成を芋盎すこずで、セッションに保存する圢に倉曎するこずも可胜かも
> しれたせん。
>
> そんな状況です。

Pagination に぀いおは、以䞋のチケットがあり、refactor される予定であり
HTML は入れないみたいなこずにかなり以前からなっおたす。

https://github.com/fuel/core/issues/601

そしお、http://fuelphp.com/roadmap には、

Refactor Pagination
Remove all application specific code from the current Pagination class,
and replace it by callbacks and app templates

ず蚘茉されおいたす。


しかし、この状態がずっず続いおたすが、2.0 の Pagination クラスはただない
わけで埮劙な状態が続いおしたっおたす。

ずいうこずで、1.x の Pagination に手を入れるにしおも、そういう方向性かなぁ
ず思いたす。たあ、結構難しいずいうか...

ただ、今のクラスは、POST にできなかったり、ク゚リ文字列にできなかったり、
柔軟性がないのは事実ですね。


// Kenji

Sotaro OMURA

unread,
Oct 16, 2012, 4:18:50 AM10/16/12
to fuelp...@googlegroups.com
倧村です

> 怜玢条件が倉われば、怜玢結果のペヌゞ数も倉わる可胜性があるず思いたすが、
> それは気にしなくおいいのでしょうか。


慣習的に、䞊蚘を蚱容する䜜りになっおしたっおいたす。
でも、よく考えるずその蟺を敎理するず、セッションぞ倀を远いやる圢に
移行できるかも知れたせんね。ご指摘ありがずうございたす。

本件に぀いおは、今のずころ、coreのpaginationクラスを自分で拡匵しお察応しおいたす。
ちなみに、この蚘事↓がずおも参考になりたした。
http://blog.godvalley.me/archives/473

珟状ず、2.0ぞ向けおの状況に぀いおも非垞に良く理解できたした。
これを機に、もう少し本家の情報をしっかりずりォッチしお行こうず思いたした。

Le Hung

unread,
Sep 20, 2017, 11:22:37 PM9/20/17
to fuelphp.jp
レフンです。自分も同じ問題が発生したした。䞊蚘の参考したしたので、簡単解決方法たずめたす。

Thank you for giving some ideas above. I used GET + SESSION with json_encode data instead of POST for keep form status as query .

Summary:
1. Save POST to SESSION 
2. Check SESSION & GET for pagination

Sample code
// POST
...
$data['query'] = base64_encode(json_encode((string) $query, JSON_HEX_QUOT|JSON_FORCE_OBJECT));
Session::set('SESSION_PAGINATION_DATA', $data['query']);
...

// GET
...
$sql = Session::get('SESSION_PAGINATION_DATA');
$sql = json_decode(html_entity_decode(base64_decode($sql)), true);
...




 
 
Reply all
Reply to author
Forward
0 new messages