PHP kullanarak bir sayfa dizin oluşturmak için mevcut kamu kod bir parça var mı?

4 Cevap php

Ben kullanıcı erişimi vermek istediğiniz kayıtların çok tutan bir MySQL tablo var. Ben bu yüzden bir anda 25 kayıtları bölmek gerekiyor, bu yüzden bir sayfa dizini ihtiyaç sayfasına tüm tabloyu dökümü istemiyorum. Muhtemelen diğer sayfalarda bu gördük, onlar tür sayfanın dibinde şöyle:

< 1 2 3 4-5 6 7 8 9>

Örneğin, kullanıcı '4 'bağlantı, sayfa yenilenir ve (4 sayfa x 25 kayıt) üzerinde taşınır ofset üzerine tıkladığında. İşte ben zaten ne var:

function CreatePageIndex($ItemsPerPage, $TotalNumberOfItems, $CurrentOffset, $URL, $URLArguments = array())
{
    foreach($URLArguments as $Key => $Value)
    {
    	if($FirstIndexDone == false)
    	{
    		$URL .= sprintf("?%s=%s", $Key, $Value);
    		$FirstIndexDone = true;
    	}
    	else
    	{
    		$URL .= sprintf("&%s=%s", $Key, $Value);
    	}
    }

    Print("<div id=\"ResultsNavigation\">");
    	Print("Page: ");
    	Print("<span class=\"Links\">");
    		$NumberOfPages = ceil($TotalNumberOfItems / $ItemsPerPage);
    		for($x = 0; $x < $NumberOfPages; $x++)
    		{
    			if($x == $CurrentOffset / $ItemsPerPage)
    			{
    				Print("<span class=\"Selected\">".($x + 1)." </span>");
    			}
    			else
    			{
    				if(empty($URLArguments))
    				{
    					Print("<a href=\"".$URL."?Offset=".$x * $ItemsPerPage."\">".($x + 1)."</a> ");
    				}
    				else
    				{
    					Print("<a href=\"".$URL."&Offset=".$x * $ItemsPerPage."\">".($x + 1)."</a> ");
    				}
    			}
    		}
    		Print("</span>");
    		Print(" (".$TotalNumberOfItems." results)");
    Print("</div>");
}

Açıkçası bu kod parçası dinamik bir dizin oluşturabilirsiniz gelmez, sadece mevcut her sayfa için sayfanın altındaki bütün endeksi döker. Ne ben sadece ihtiyacınız bir >> veya skoru 5 ya da öylesine sayfaları taşımak için bir şey ile birlikte önceki 5 sayfa ve sonraki 5 sayfa (eğer varsa) gösteren dinamik bir çözümdür.

Herkes i tekerleği yeniden icat ediyorum hissediyorum, bu uygulama bir zarif ve yeniden kullanılabilir bir şekilde görülür? Herhangi bir yardım takdir edilmektedir.

4 Cevap

Bu Numaralandırma deniyor:

birkaç örnek:

  1. A nice one without SQL
  2. A long tutorial
  3. Another tutorial
  4. And Another
  5. Ve tabii ki .. google

Zend Framework yararlı bir koleksiyon olma ve bir göz değer olabilir, bir Zend_Paginator sınıfını içerir. Eğer çerçevesinden diğer sınıfları kullanarak zaman yatırım yapmak istiyorsanız, bir öğrenme eğrisi biraz ve sadece buna değer olabilir.

Bu olsa kendi rulo çok zor değil. COUNT (*) sorgusu ile kayıtların toplam sayısını alın, sonra bir LİMİT yan tümcesi ile sonuç sayfası elde.

Sayfa başına 20 ürün istiyorsanız sayfa 2 örneğin, 20,20 SINIR olacağını ise Örneğin, sayfa 1 LIMIT 0,20 olurdu

$count=getTotalItemCount();
$pagesize=20;

$totalpages=ceil($count/$pagesize);

$currentpage=isset($_GET['pg'])?intval($_GET['pg']):1;
$currentpage=min(max($currentpage, 1),$totalpages);

$offset=($currentpage-1)*$pagesize;

$limit="LIMIT $offset,$pagesize";

How about this jQuery-plugin? So all the work is done on the clientside.

http://plugins.jquery.com/project/pagination

demo: http://d-scribe.de/webtools/jquery-pagination/demo/demo_options.htm

İşte eski bir sınıf Ben PHP kullanmak için kullanılan çıkardı. Şimdi JavaScript bunun en başa. Nesne ve geçerli görünümü döndürmek (sayfalar içine yığını bölmek için kullandığınız) bir dizi alır. Böylece akılda tutmak bu dev masalarda sıkıcı olabilir. Ben genellikle 1000 altında öğelerin küçük veri kümeleri aracılığıyla çağrı için kullanabilirsiniz. Ayrıca isteğe bağlı olarak sizin için atlama menü oluşturabilirsiniz.

class pagination {

function pageTotal($resultCount, $splitCount) {
	if (is_numeric($resultCount) && is_numeric($splitCount)) {
		if ($resultCount > $splitCount) {
			$pageAverage = (integer)$resultCount / $splitCount;
			$pageTotal = ceil($pageAverage);
			return $pageTotal;
		} else {
			return 1;
		}
	} else {
		return false;
	}
}

function pageTotalFromStack($resultArray, $splitCount) {
	if (is_numeric($splitCount) && is_array($resultStack)) {
		if (count($resultStack) > $splitCount) {
			$resultCount = count($resultStack);
			$pageAverage = (integer)$resultCount / $splitCount;
			$pageTotal = ceil($pageAverage);
			return $pageTotal;
		} else {
			return 1;
		}
	} else {
		return false;
	}
}

function makePaginationURL($preURL, $pageTotal, $selected=0, $linkAttr=0, $selectedAttr=0) {
	if (!empty($preURL) && $pageTotal >= 1) {
		$pageSeed = 1;
		$passFlag = 0;
		$regLink = '<a href="{url}&p={page}"';
			if (is_array($linkAttr)) $regLink .=  $this->setAttributes($linkAttr); //set attributes
		$regLink .= '>{page}</a>';

		$selLink = '<a href="{url}&p={page}"';
			if (is_array($selectedAttr)) $selLink .=  $this->setAttributes($selectedAttr); //set attributes
		$selLink .= '>{page}</a>';

		while($pageSeed <= $pageTotal) {
			if ($pageSeed == $selected) {
				$newPageLink = str_replace('{url}', $preURL, $selLink);
				$newPageLink = str_replace('{page}', $pageSeed, $newPageLink);
			} else {
				$newPageLink = str_replace('{url}', $preURL, $regLink);
				$newPageLink = str_replace('{page}', $pageSeed, $newPageLink);
			}
			if ($passFlag == 0) {
				$passFlag = 1;
				$linkStack = $newPageLink;
			} else {
				$linkStack .= ', ' . $newPageLink;
			}
			$pageSeed++;
		}
		return $linkStack;
	} else {
		return false;
	}
}

function splitPageArrayStack($stackArray, $chunkSize) {
	if (is_array($stackArray) && is_numeric($chunkSize)) {
		return $multiArray = array_chunk($stackArray, $chunkSize);
	} else {
		return false;
	}
}

}