0

Ajax を使用して自分のサイトにページングを設定しようとしています。スクリプトを継承し、次のリンクで実践しています - http://www.testing.arrivaldesign.co.uk/properties

ある程度は機能していますが、最初の 9 件のレコードを表示し、そこから続行するように設定されていますが、最初のページには最初の 9 件しか表示されていませんが、クリックして次のページに移動すると、同じことが繰り返されます既存のレコードの 4 つ。

私が見る限り、それはクエリの制限に関係していますが、それを機能させる方法がわかりませんか?

これは、ajax 側のコードです。

<?php 
include('Connections/connection.php');

include 'functions.php';

// Pagination params
$basePath       = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];
$qString        = $_REQUEST['qString'];
$items          = $_REQUEST['items'];
$loadPage       = $_REQUEST['p'];
$current        = $_REQUEST['current'];

$limit = $loadPage*$items;
$min = ($max-$items)+1;

mysql_select_db($database, $conn);
$query_RSproperty = "SELECT properties.*, type.* FROM (properties LEFT JOIN type ON properties.propType=type.typeID) WHERE offline = 'N' ORDER BY propID ASC LIMIT 0, $limit";
$RSproperty = mysql_query($query_RSproperty, $conn) or die(mysql_error());
$row_RSproperty = mysql_fetch_assoc($RSproperty);
$totalRows_RSproperty = mysql_num_rows($RSproperty);

$maxItems       = $totalRows_RSproperty;

// New pagination
$pagination = paginator($basePath . $qString, $loadPage, $maxItems, $items);

// Direction is important for the script to determine which way to animate, left or right. 
$direction = 'left';
if ($current < $loadPage) {
    $direction = 'right';
}
$paginatedStyle = 'style="left:'.($direction == 'left' ? '0' : '-960px').';"';


// The paginated content HTML slide
$page = '<div class="paginated" id="" '.$paginatedStyle.'>';

ob_start();
do {
?>
<div class="grid-1third res-block">
<div class="prop-brief-desc">
            <div class="grid-140"><a href="/properties/<?php echo $row_RSproperty['propSEO'] . '/' . $row_RSproperty['propID']; ?>" id="new<?php echo $no; ?>" class="thumb"><img src="/prop-images/thumbs/<?php echo $row_RSproperty['propImage1']; ?>" width="140" height="105" alt=""></a></div>
            <div class="grid-140 fr">
              <h2><?php echo $row_RSproperty['propBeds']; ?> Bed <?php echo $row_RSproperty['typeName']; ?></h2>
              <?php
              $fulladdress = $row_RSproperty['propAddress1'] . '<br />' . $row_RSproperty['propCity'] . ', ' . $row_RSproperty['propCounty'] . '<br />' . $row_RSproperty['propPostcode'];
              ?>
              <p><?php echo $fulladdress; ?></p>
            </div>
          </div>
          <div class="prop-brief-options<?php echo $no == 2 || $no == 3 ? " hide" : ""; ?>" id="newopt<?php echo $no; ?>">
            <div class="grid-140"> <a href="/properties/<?php echo $row_RSproperty['propSEO'] . '/' . $row_RSproperty['propID']; ?>" class="green_button">Details</a> <a href="#" class="green_button">Arrange Viewing</a> <a href="#" class="green_button">Place Bid</a> <a href="#" class="green_button">Buy it Now</a> </div>
            <div class="grid-140 fr">
              <dl>
                <dt>Auction Ending:</dt>
                <dd><?php
                if(!function_exists('countdown'))  {            
                    function countdown($year, $month, $day, $hour, $minute) {

                        $the_countdown_date = mktime($hour, $minute, 0, $month, $day, $year, -1);
                        $current = time();

                        $difference = $the_countdown_date - $current;
                        if ($difference < 0) $difference = 0;

                        $days = floor($difference/60/60/24);
                        $hours = floor(($difference - $days*60*60*24)/60/60);
                        $minutes = floor(($difference - $days*60*60*24 - $hours*60*60)/60);

                        echo $days."d ".$hours."h ".$minutes."m";
                    }
                }

                $theyear = date("Y",strtotime($row_RSproperty['propEndDate']));
                $themonth = date("n",strtotime($row_RSproperty['propEndDate']));
                $theday = date("d",strtotime($row_RSproperty['propEndDate']));
                $thehour = date("H",strtotime($row_RSproperty['propEndDate']));
                $theminute = date("i",strtotime($row_RSproperty['propEndDate']));

                countdown($theyear,$themonth,$theday,$thehour,$theminute);
                ?></dd>
                <?php if ($row_RSproperty['propCurrBid'] > 0) { ?>
                <dt>Current bid:</dt>
                <dd>£<?php echo number_format($row_RSproperty['propCurrBid']); ?></dd>
                <?php } else { ?>
                <dt>Starting Price:</dt>
                <dd>£<?php echo number_format($row_RSproperty['propStartPrice']); ?></dd>
                <?php } ?>
                <dt>Buy it now:</dt>
                <dd><span class="green">£<?php echo number_format($row_RSproperty['propBinPrice']); ?></span></dd>
              </dl>
            </div>
          </div>
          </div>
<?php       
    } while ($row_RSproperty = mysql_fetch_array($RSproperty));
    /*while ($min <= $max) {
        $page .= '<li>'.$min.'</li>';
        $min++;
    }*/
    $page .= ob_get_contents();
    ob_end_clean();

$page .= '</div>';


// return the JSON
echo json_encode(array( 'pagination' => $pagination, 'page' => $page, 'current' => $loadPage ));
exit;

?>

どうもありがとう

クリス

4

1 に答える 1

1

これは、クエリで LIMIT を 0 としてハードコーディングしたためです。

$query_RSproperty = "SELECT properties.*, type.* FROM (properties LEFT JOIN type ON properties.propType=type.typeID) WHERE offline = 'N' ORDER BY propID ASC LIMIT 0, $limit";

したがって、2 番目のページに移動すると、次のようにクエリが生成される必要があります。

$query_RSproperty = "SELECT properties.*, type.* FROM (properties LEFT JOIN type ON properties.propType=type.typeID) WHERE offline = 'N' ORDER BY propID ASC LIMIT 0, 4"; 

したがって、最初の 4 つのレコードを取得しています。後続のページで次のレコード セットを取得する場合は、次のLIMIT 0, $limitように動的に 0 を作成する必要があります。

$query_RSproperty = "SELECT properties.*, type.* FROM (properties LEFT JOIN type ON properties.propType=type.typeID) WHERE offline = 'N' ORDER BY propID ASC LIMIT $offset, $limit";

ページごとに表示する結果の量に応じて、$offset を計算する必要があります。最初のページでは、オフセットは常に 0 になります。1 ページあたり 10 レコードを表示している場合、2 ページ目ではオフセットが 11、3 ページ目ではオフセットが 21 というようになります。

于 2012-08-07T09:24:16.060 に答える