2013-03-27 70 views
1

我已经通过类似的问题进行了搜索,但无济于事,所以希望有人可以提供帮助。使用分页搜索结果使用Zend Paginator

我在使用Zend Framework(1.12)构建的网站上对搜索结果进行分页问题。我可以检索这些项目,也可以形成分页,但是当我点击进入分页的下一页时,所有的搜索结果都会丢失。代码将?page = 2 e.t.c附加到URL,但代码会丢失搜索项。

我在一个关于可能使用会话或Zend_Session的问题中阅读,但我目前有点失落!相对较新的PHP。

首先这里是我的搜索形式 - 这是包含在我的其他网页搜索form.php的(XHTML)

<?php 
// Search Form 
?> 
<div id="search"> 
    <h4 style="margin-bottom:20px;">Search</h4> 
    <form name="prodSearch" action="listing-search.php" method="post"> 
     <input type="text" name="searchitems" id="searchitems" /> 
     <input type="submit" name="search_items" id="search_items" value="Go" /> 
    </form> 
</div> 

。 挂牌的search.php然后如下

<?php 
require_once('admin/scripts/library.php'); 
require_once('admin/scripts/db_definitions.php'); 
try { 
?> 
<!-- HTML Doc Type, Head removed e.t.c --> 
<div id="listing-col-main"> 
<div id="all-cars"> 
    <h4>Search Results</h4> 
</div> 
<!-- Listings --> 
<?php 
    $query = $_POST['searchitems']; 
    $min_length = 3; 
    if (strlen($query) >= $min_length) { 
     $query = htmlspecialchars($query); 
     $query = mysql_real_escape_string($query); 
     $raw = searchItems($dbread, $query); 
     $paginator = Zend_Paginator::factory($raw); 
      if (isset($_GET['page'])) { 
       $paginator->setCurrentPageNumber($_GET['page']); 
      } 
      $paginator->setItemCountPerPage(8); 
      $paginator->setPageRange(3); 
      $count = $paginator->getTotalItemCount(); 
      if ($count > 0) {   
       foreach ($paginator as $results) { // repeat all results ?> 
<?php 
       $item_id = $results['item_id']; 
       $photos = getRelatedPhotos2($dbread, $item_id); 
       ?> 
<div class="product-listing"> 
    <div class="product-listing-image"> 
    <?php foreach ($photos as $photo) { //repeat ?> 
    <img src="image_upload/<?php echo $photo['filename']; ?>" width="75" alt="" /> 
    <?php } ?> 
    </div> 
    <div class="product-listing-title"> 
    <h4><?php echo $results['type_name']; ?> - <?php echo $results['item_make'] . ' ' . $results['item_model']; ?> </h4> 
    </div> 
    <div class="product-listing-details"> 
    <p>YEAR: <?php echo $results['item_year']; ?> FUEL: <?php echo $results['item_fuel']; ?> TRANS: <?php echo $results['item_transmission']; ?> MILEAGE: <?php echo $results['item_mileage']; ?> </p> 
    </div> 
    <div class="product-listing-viewmore"><a href="itempage.php?item_id=<?php echo $results['item_id']; ?>">More Info</a></div> 
</div> 
<?php } ?> 
<!-- 8 products per page --> 
<div id="product-listing-pagination"> 
    <?php 
    $pages = $paginator->getPages('Elastic'); 
    if (isset($pages->previous)) { 
echo '<a href="' . $_SERVER['PHP_SELF'] . '?page=' . $pages->previous . '">Prev</a>'; 
    } 
    foreach ($pages->pagesInRange as $page) { 
if ($page != $pages->current) { 
    echo " <a href='" . $_SERVER['PHP_SELF'] . "?page={$page}'>$page</a>"; 
} else { 
    echo ' ' . $page; 
} 
    } 
    if (isset($pages->next)) { 
echo ' <a href="' . $_SERVER['PHP_SELF'] . '?page=' . $pages->next . '">Next</a>'; 
    } 

    ?> 
</div> 
<?php } else { ?> 
<div id="noresults"> <?php echo "No results found for " . $query; ?> </div> 
<?php } 
    } ?> 
</div> 
<div id="col-right"> 
<?php include("search-usedcars.php"); ?> 
<!-- End of Main Search --> 
<div id="latest-news"> 
    <h3>Latest News</h3> 
    <?php include("latestnews.php"); ?> 
</div> 
</div> 
<div class="clear"></div> 
<div id="footer-bar"> <a href="#">Designed by</a> </div> 
</div> 
</body> 
</html> 
<?php 
} catch (Exception $e) { 
echo $e->getMessage(); 
} 
?> 

回答

0

这是因为你的查询传递在$ _ POST,当您点击导航链接远离你失去存储在$ _ POST数据,并只保留什么是在$ _得到。将您的搜索表单方法更改为$ _GET并将&searchitems="'.$query.'"添加到您的导航链接,或将查询存储在$ _SESSION中,或者您可以将导航链接更改为包装在带有方法过帐的表单中的按钮,并包含searchitemspage的隐藏字段。我建议改变搜索表单方法,因为它允许搜索书签并避免复杂性。

+0

谢谢。我知道这会很简单,但我只是被它蒙上了一层阴影。更改方法GET和修改链接已经过去了。 – 2013-03-27 21:27:12