我正在尝试使用Zend_Paginate()
在基于GET搜索字符串加载的查询上调用页面,查询基本上执行以下操作:
SELECT * FROM table WHERE column LIKE '%searchstring%' OR alt_column LIKE '%searchstring%';
通过搜索/提交文本表单调用查询时工作正常,URL返回类似于
的内容URLINK.php?search=searchstring
然而,当试图进入下一页时,程序会将我转发回paginate备用URL(用于错误或没有页面显示) - 希望这最后一行有意义它已经晚了并且我正在尽力输入透明度。
对URL.php?search=searchstring
使用分页时,最好的方法是什么?
更多关于对网址的调用
//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); } }
此位效果很好,但当我尝试使用paginator调用results.php?page=2
时,系统会将我还原为后退网址list_sql_rows.php
,如上所述。任何想法/意见都表示赞赏。
只是为了澄清search.php页面中的搜索字段/表单,将$searchstring
通过$_POST
&&发送到results.php页面。 $_GET
为失败安全。 get方法在URL标头中发送$searchstring
,以便搜索DO的结果在第一页 results.php?search = $ searchstring 上工作。这很好用。分页似乎丢失了$searchstring
,我想知道这是否是由于$_POST
/ $_GET
在分页器开始'分页'时丢失它返回网址 results.php?page = 2 所以似乎$_GET
可能不是首选方法?
更新 在写入轨道上现在paginate工作它是我的链接结构被打破。 _results_samples.php?search = robert& page = 4 _ 实际上将使用单词ROBERT
返回分页结果的第4页 解决方案通过ROCKYFORD提出的变体建议
首先持久化$searchstring
的推荐方法的变体
更改为分页链接,如下所示
<a href='" . $_SERVER['PHP_SELF'] . "?search=" . $searchstring . "&page={$page}'>$page</a>
答案 0 :(得分: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只会帮助我们解决一些任务。
答案 1 :(得分:1)
您需要确保在请求之间保留查询字符串,使用Zend_Session_Namespace或Zend_registry。
每次Zend_Paginator使用DbTableSelect或DbSelect适配器加载页面时,它必须使用查询命中数据库,它只是更改限制选项。
或者您可以将整个查询结果转储到Zend_Paginator_Adapter_Array中,它将遍历数组。
<强> [编辑] 强>
你将不得不在请求之间保持查询字符串,所以你可以把它放回url字符串,我通常使用Zend_Registry,但后来我使用整个MVC堆栈。您似乎没有使用整个堆栈,因此您需要另一种方法,可能$ _SESSION会起作用。我确信还有很多其他方法可以保留这些数据。
P.S。你没有提到你正在使用哪个适配器,所以我做了一些假设。
<强> [编辑] 强> 就个人而言,我总是使用$ _post来避免这一切,但似乎只有$ _get这个问题。