1

Zend_Paginate()GET検索文字列に基づいて読み込まれるクエリを使用してページを呼び出そうとしていますが、クエリは基本的に次のことを行います。

SELECT * FROM table WHERE column LIKE '%searchstring%' OR alt_column LIKE '%searchstring%';

検索/送信テキストフォームを介して呼び出された場合、クエリは正常に機能し、URLは次のようなものを返します

URLINK.php?search=searchstring

ただし、次のページに移動しようとすると、プログラムはページの代替URLに戻ります(エラーまたはページ表示なしに使用されます)-この最後の行が遅れていることを理解し、透明性を持ってこれを入力するために最善を尽くしていることを願っています。

"に対してpaginateを使用する場合の最良の方法は何URL.php?search=searchstringですか?

URLの呼び出しについてもう少し

//search query 
$search = searchQuery('search', 'list_sql_rows.php');
$results - searchTable($dbRead, $search);

上記の変数を以下の順序で使用する検索方法

if(isset($_POST['submit_search'])) { $searchstring = $_POST['searchstring'];
if($searchstring) { header('Location: results.php?search=' . $searchstring); } }

このビットはうまく機能しますが、results.php?page=2with paginatorを呼び出そうとすると、システムはlist_sql_rows.php上記のようにフォールバックURLに戻ります。任意の考え/コメントをいただければ幸いです。

search.phpページから検索フィールド/フォームを明確にするために、フェイルセーフとして&&$searchstring経由でresults.phpページにを送信します。getメソッドはURLヘッダーでを送信するため、検索結果は最初のページで機能します。results.php?search =$searchstring。これは問題なく機能します。ページ付けが失われたようです。これは、ページ付けが「ページ付け」を開始したときに/が失われたことが原因であるのではないかと思います。URLresults.php ?page = 2が返されるため、選択した方法ではないようです。$_POST$_GET$searchstring$searchstring$_POST$_GET$_GET

更新 書き込みトラックでpaginateが機能するようになりましたが、壊れているのはリンク構造です。 _results_samples.php?search = robert&page = 4_は、実際には、ROBERTという単語を使用してページ化された結果のページ4を返します。

$searchstring 以下に示すように 、最初にページネーションリンクへの変更を永続化することにより、推奨される方法のROCKYFORDバリアントによるソリューションが見つかりました。

<a href='" . $_SERVER['PHP_SELF'] . "?search=" . $searchstring . "&page={$page}'>$page</a>
4

2 に答える 2

2

これは、ページ付けを正しく使用する例です。in action-method:

$select = $clients->getAll();                               
$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbSelect($select));
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(20);
$this->view->clients = $paginator;

ビュースクリプトの場合:

<?php if (count($this->clients) > 0): ?>
...
    <?php echo $this->paginationControl($this->clients, 'Sliding', 'partials/paginator.phtml'); ?>
<?php else: ?>
        <h3 class="notice">No registered clients found!</h3>
<?php endif; ?>

ただし、このバリアントで失敗した場合でも、いつでも独自のコンポーネントの作成を試みることができます。Zendは、一部のタスクの解決にのみ役立ちます。

于 2012-05-26T12:03:39.880 に答える
1

リクエスト間でクエリ文字列を保持していることを確認する必要があります。Zend_Session_NamespaceまたはZend_registryを使用してください。

Zend_Paginatorは、DbTableSelectまたはDbSelectアダプターを使用しているときにページをロードするたびに、クエリでデータベースにアクセスする必要があり、制限オプションを変更するだけです。

または、クエリ結果全体をZend_Paginator_Adapter_Arrayにダンプするだけで、配列をページングできます。

[編集]
クエリ文字列をリクエスト間で永続化して、URL文字列に戻すことができるようにする必要があります。通常、Zend_Registryを使用しますが、MVCスタック全体を使用します。スタック全体を使用しているようには見えないので、別のメソッドが必要になります。おそらく$_SESSIONが機能します。このデータを永続化する方法は他にもたくさんあると思います。

PS使用しているアダプターについて言及していなかったので、いくつかの仮定を立てています。

[編集] 個人的には、これをすべて回避するために、可能な場合は常に$ _postを使用しますが、$_getでのみこの問題が発生するようです。

于 2012-05-26T07:08:48.317 に答える