0

モデルから多次元配列のユーザーデータを取得する検索フォームを作成していますが、MVCスタイルの設定でページ分割する方法がわからないようです。すべてオプションの検索フィールドがいくつかあるため、モデルは不明な長さの配列をビューに送信します。データなので、ページを更新すると$_POSTデータが失われます。

これが配列の簡略化されたバージョンです...

Array
(
[0] => Array
    (
        [id] => 1

        [username] => Rebequa

        [city] => arlington

        [state] => va

    )

[1] => Array
    (
        [id] => 2

        [username] => steve

        [city] => 

        [state] => 

    )

[2] => Array
    (
        [id] => 6

        [username] => Rebequa2

        [city] => arlington

        [state] => va

    )
)
4

2 に答える 2

1

あなたを本当に理解するのは難しいですが、array_chunk は配列を「チャンク」または「ページ」に分割するために機能するかもしれません: http://php.net/manual/en/function.array-chunk.php

たとえば、配列のページサイズを 1 にする配列を取得するには、次のようにします。

array_chunk($my_model_array, 1);

次のようなものが出力されます。

Array
(
[0] => Array(
    [0] => Array
    (
        [id] => 1

        [username] => Rebequa

        [city] => arlington

        [state] => va

    )
), 
[1] => Array(
    [0] => Array
    (
        [id] => 2

        [username] => steve

        [city] => 

        [state] => 

    )
)

したがって、ルート配列内の各要素はページに等しくなり、それらの「ページ」をスクロールできます。次に、各ルート要素を div に配置し、JS を使用してページを切り替えることができます。

編集

もちろん、ここでの最良の方法は、AJAX を使用して結果を取得し、検索フォームからユーザーの AJAX リストを取得するか$_GET、このデータは DB モデルなどを設定していないため、検索のようにモデルからユーザーを取得するためにのみ使用されるためです。クエリ。

于 2012-09-26T11:44:10.787 に答える
1

まず、 から直接データを読み取らないでください$_POST。代わりに、条件を に保存するか$_SESSION、検索結果をキャッシュして、ユーザーを にリダイレクトする必要があり"results"ます。

Firefox または Internet Explorer でフォームとF5キーをいじってみると、どのような問題が発生するかがわかります。

リダイレクトを実行する前に、条件を に保存$_SESSIONし、結果の総数 ( にも保存されます) を取得することをお勧めします。$_SESSION

次に、ページごとに条件を修正し、結果のリストを生成します。


ところで、MVC デザイン パターンを実際に実装しようとしている場合は、モデル レイヤーにPageの概念が含まれていてはならないことに注意してください。それはプレゼンテーションロジックの一部です。give me 1..10 entryビューは、モデル レイヤーから情報を取得するときに、などを要求する必要give me 31..40 entryがあります。

次に、ビューはモデル レイヤーからこの情報を取得し、必要な数のテンプレートを使用して応答をレンダリングします。

もう 1 つ理解する必要があるのは、$_SESSIONと 形式のキャッシュはどちらもストレージの媒体であることです。モデルレイヤーからのみ直接アクセスするべきではありません。

検索結果のキャッシュは、取得に時間がかかる少量のデータの場合にのみ役立つため、避けることをお勧めします。何千もの要素を含む配列をキャッシュすると、逆効果になります。

于 2012-09-26T11:44:59.027 に答える