1

我正在尝试使用Zend_Paginate()基于 GET 搜索字符串加载的查询调用页面,该查询基本上执行以下操作:

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

当通过搜索/提交文本表单调用时,查询工作正常,并且 URL 返回类似于

URLINK.php?search=searchstring

然而,当试图进入下一页时,程序将我转储回分页备用 URL(用于错误或无页面显示)——希望最后一行有意义,但已经晚了,我尽我所能以透明的方式输入.

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=2的后备 URL 。list_sql_rows.php任何想法/意见表示赞赏。

只是为了澄清 search.php 页面中的搜索字段/表单通过&&作为故障安全发送$searchstring到 results.php 页面。get 方法在 URL 标头中发送 ,因此搜索结果确实可以在第一页results.php?search=$searchstring上工作。这工作得很好。分页似乎丢失了,我想知道这是否是由于/当分页器开始“分页”时丢失了它返回 URL results.php?page=2所以它似乎不是选择的方法?$_POST$_GET$searchstring$searchstring$_POST$_GET$_GET

更新 在写轨道上,现在分页工作是我的链接结构被破坏了。 _results_samples.php?search=robert&page=4_实际上会使用 ROBERT 这个词返回分页结果的第 4 页

解决方案通过 ROCKYFORD 的变体建议 推荐方法的变体,首先持续$searchstring 更改分页链接,如下所示

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

2 回答 2

2

这是正确使用分页的示例:在动作方法中:

$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 回答