Mod_rewrite kullanarak URL değiştiğinde nasıl URL'den çağrı bağlantıları oluşturabilirsiniz

2 Cevap php

First of all I am in DESPERATE need of help here PLEASE I will most likely start a bounty as soon as SO lets me.

Ben oldukça büyük bir site (sosyal ağ) BİRÇOK SAYFALARI ben şu anda bunu inşa etmek için tam bir yeniden-yazma yapıyorum daha sonra 2 yıl önce yaptığı var. Ben değiştirmek için karar verdik 1 şey sitemde URL'ler olduğunu, http://example.com/?p=page-identifier-name and sometimes http://example.com/?p=page-identifier-name&page=2&user=343433 URL ultiple öğelerle nokta olsun, ben şimdi böyle vardı mod_rewrite kullanmak geçiş, ben aslında bunu yaptım, ben tüm site kullanmadan değişti ama ben 1 büyük sorun var

Benim sayfalama fonksiyonu, Bayıldım, bu prev gibi gerçekten güzel Çağrıyı yapan 1 2 - 34 35 36 37-189 190 sonraki veya benzer ve ancak şimdi ben mod-rewrite kullanarak anahtarının olmasını oldukça iyi çalışır, açıkçası benim URL'ler farklı Bana yardım için bakım eğer kolayca bırakabilirsiniz bu yüzden aşağıdaki sayfalama için tam kod girilmezse neden şimdi hangi çağrı cihazı tatili, ben doğru tekrar çalışır hale getirmek için henüz hiçbir şans ile bir kaç şey denedim, yani sayfa ve kendinizi nasıl çalıştığını görmek.

Çağrı kodu şu anda $_GET daha sonra ikonların bazı sayfalar sitemde sonra diğerleri daha beri, daha sonra doğru ile doğru URL'yi yeniden inşa hepsi aracılığıyla itterates için URL tüm tuşları ve değerleri arar sayfa numarası ve benim çağrı cihazı için ekranda dışarı tükürür. Yani o zaman www.example.com/?p=mail.inbox&page=12 şimdi www.example.com/?mail/inbox/page/12 başka bir sayfa olarak gösterecek yeterli olsa ürün sayfasında ise www.example.com/?p=mail.inbox, www.example.com/mail/inbox, şimdi olduğu gibi bir şey daha sonra olabilir sadece p=page göstermek ve page=page sayı bazı sayfalar en user_id ve sıralama tarafından ve sadece differetn şeyler, şimdi sadece güzel ekli şeyimi sahip sakıncası olmaz url ama ben bunu göstermek istiyorum nasıl göstermek istiyorum sayfa numarası gibi şeyler, ben sadece benim çağrı kodu doğru bağlantılar oluşturmak yapmak için yardıma ihtiyaç tüm mod_rewrite ve regex çalışma var. Tüm sayfaları yoluyla işlenmiş olduğundan index.php sayfa gösteren kök klasörü derin sonra asla ama bunu yapan oldukça url var zaman olduğunu düşünerek içine kandırmak belki güzel olurdu dosyası farklı bir klasörde gibi görünüyorsun. example.com / mail / gelen kök düzeyi endeksinde gerçekten olup 2 klasörler derin, gibi bir şey kullanarak çalıştı

$selfurl = $_SERVER["REQUEST_URI"].'/page/'. $pagenumber;

Ben bu bağlantıyı tıklayın olsaydı bu sayfada ise www.example.com/mail/inbox sonra bu belleği bağlantı bu gibi görünmesi olur www.example.com/mail/inbox/page/12, ancak daha sonra yeni çağrı bağlantılar bu {[benzeyecektir (2)]} bu yüzden belli ki çözüm değil, ben gerçekten burada sıkışıp kaldım ve bir çözüm bulamazsanız o zaman ben regex kullanarak çıkın ve bazı gerçekten berbat sayfalama var olacak, ben gerçekten deneyebilirsiniz herkes takdir ediyorum Bana yardım et, ben bir soltion görmek ama mutlaka biri olmak zorunda değilsiniz.

<?PHP

class Paging
{

    /*////////////////////////////////////////////////////////////////////////
    * Paging Function
    * //paging(10000, 50, 4); //number of results / items per page / number of page links in center
    * // paging(10000, 50); //or
    */ ///////////////////////////////////////////////////////////////////////
    public static function show_paging($total_results, $items_per_page, $adjacents = 3)
    {
    	//$total_results = $reccnt;
    	//$items_per_page = $pagesize;
    	// adjacements will determinine how many paging links are in the middle of the outer paging

    	if ($total_results > $items_per_page) {
    		// build our link URLs
    		$url_string = "?";
    		foreach ($_GET as $k => $v) {
    			if ($k != "page") { // <-- the key you don't want, ie "page"
    				if ($url_string != "?") {
    					$url_string .= "&"; // Prepend ampersands nicely
    				}
    				$url_string .= $k . "=" . $v;
    			}
    		}
    		$selfurl = $url_string . '&page=';
    		$page = $_GET['page'];
    		if ($page) {
    			$start = ($page - 1) * $items_per_page;
    		}
    		else {
    			$start = 0;
    		}
    		if ($page == 0) {
    			$page = 1; //if no page var is given, default to 1.
    		}
    		$prev = $page - 1; //previous page is page - 1
    		$next = $page + 1; //next page is page + 1
    		$lastpage = ceil($total_results / $items_per_page); //lastpage is = total_results/ items per page, rounded up.
    		$lpm1 = $lastpage - 1; //last page minus 1
    		/*
    		* Now we apply our rules and draw the pagination object. 
    		* We're actually saving the code to a variable in case we want to draw it more than once.
    		*/
    		$pagination = "";
    		if ($lastpage > 1) {
    			$pagination .= '<div class="pagingspace"><div class="pager">';
    			//previous button
    			if ($page > 1) {
    				$pagination .= '<a href="' . $selfurl . $prev .
    					'" title="go to previous page"><span class="page-numbers prev">prev</span></a>';
    			}
    			//pages
    			if ($lastpage < 7 + ($adjacents * 2)) { //not enough pages to bother breaking it up{
    				for ($counter = 1; $counter <= $lastpage; $counter++) {
    					if ($counter == $page) {
    						$pagination .= '<span class="page-numbers current">' . $counter . '</span>';
    					}
    					else {
    						$pagination .= '<a href="' . $selfurl . $counter . '" title="go to page ' . $counter .
    							'"><span class="page-numbers">' . $counter . '</span></a>';
    					}
    				}
    			}
    			else {
    				if ($lastpage > 5 + ($adjacents * 2)) { //enough pages to hide some{
    					//close to beginning; only hide later pages
    					if ($page < 1 + ($adjacents * 2)) {
    						for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++) {
    							if ($counter == $page) {
    								$pagination .= '<span class="page-numbers current">' . $counter . '</span>';
    							}
    							else {
    								$pagination .= '<a href="' . $selfurl . $counter . '" title="go to page ' . $counter .
    									'"><span class="page-numbers">' . $counter . '</span></a>';
    							}
    						}
    						$pagination .= '<span class="page-numbers dots">&hellip;</span>';
    						$pagination .= '<a href="' . $selfurl . $lpm1 . '" title="go to page ' . $lpm1 .
    							'"><span class="page-numbers">' . $lpm1 . '</span></a>';
    						$pagination .= '<a href="' . $selfurl . $lastpage . '" title="go to page ' . $lastpage .
    							'"><span class="page-numbers">' . $lastpage . '</span></a>';
    						//in middle; hide some front and some back
    					}
    					else {
    						if ($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) {
    							$pagination .= '<a href="' . $selfurl .
    								'1" title="go to page 1"><span class="page-numbers">1</span></a>';
    							$pagination .= '<a href="' . $selfurl .
    								'2" title="go to page 2"><span class="page-numbers">2</span></a>';
    							$pagination .= '<span class="page-numbers dots">&hellip;</span>';
    							for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) {
    								if ($counter == $page) {
    									$pagination .= '<span class="page-numbers current">' . $counter . '</span>';
    								}
    								else {
    									$pagination .= '<a href="' . $selfurl . $counter . '" title="go to page ' . $counter .
    										'"><span class="page-numbers">' . $counter . '</span></a>';
    								}
    							}
    							$pagination .= '<span class="page-numbers dots">&hellip;</span>';
    							$pagination .= '<a href="' . $selfurl . $lpm1 . '" title="go to page ' . $lpm1 .
    								'"><span class="page-numbers">' . $lpm1 . '</span></a>';
    							$pagination .= '<a href="' . $selfurl . $lastpage . '" title="go to page ' . $lastpage .
    								'"><span class="page-numbers">' . $lastpage . '</span></a>';
    							//close to end; only hide early pages
    						}
    						else {
    							$pagination .= '<a href="' . $selfurl .
    								'1" title="go to page 1"><span class="page-numbers">1</span></a>';
    							$pagination .= '<a href="' . $selfurl .
    								'2" title="go to page 2"><span class="page-numbers">2</span></a>';
    							$pagination .= '<span class="page-numbers dots">&hellip;</span>';
    							for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++) {
    								if ($counter == $page) {
    									$pagination .= '<span class="page-numbers current">' . $counter . '</span>';
    								}
    								else {
    									$pagination .= '<a href="' . $selfurl . $counter . '" title="go to page ' . $counter .
    										'"><span class="page-numbers">' . $counter . '</span></a>';
    								}
    							}
    						}
    					}
    				}
    			}
    			//next button
    			if ($page < $counter - 1) {
    				$pagination .= '<a href="' . $selfurl . $next .
    					'" title="go to next page"><span class="page-numbers prev">next</span></a>';
    			}
    			else {
    				$pagination .= '<span class="page-numbers prev">next</span>';
    				$pagination .= '</div></div>';
    			}
    		}
    		echo '<table width="100%"  border="0" cellspacing="0" cellpadding="5" class="paginator">';
    		echo '<tr><td align="center" height="20" class="black11bold">';
    		echo $pagination;
    		echo '</td></tr></table>';
    	}
    }

    // converts page number to a start position number for MySQL query
    public static function page2db($page, $items_per_page)
    {
    	if ($page) {
    		$start = ($page - 1) * $items_per_page;
    	}
    	else {
    		$start = 0;
    	}
    	return $start;
    }

}

?>

Kullanmak için

<?PHP
//to use the paging functions i do something like this
$pagesize = 10;
$start = Paging::page2db($_GET['page'], $pagesize); //page number and items perpage

//the show the pager links
Paging::show_paging($total_count, $pagesize, 4);

?>


UPDATE

I need to figure out a way to get the value from URLs like this and only have the part minus the domain name, so http://example.com/mail/inbox would only return /mail/inbox this should work on and number of directories and should not return valus like ?var1=something that are on it, so it should only return the folders that are added onto a domain the catch is these folders are not real folders, they are created with mod_rewrite in the URL

http://example.com/mail/inbox
http://example.com/forums/category
http://example.com/users/online
http://example.com/users/online/friends

O $_GET değerlere dayalı URL oluşturur, çünkü ben şimdi mod-rewrite kullanmanız berbat bir PHP çağrı kodu düzeltmek için çalışıyorum, bu ekrana yazdırır bağlantıları yanlıştır, bu işe yaramazsa URL'leri isimleri $_GET değerleri uyuşmuyor artık olarak

SO, bir URL http://example.com /users/online ya da http://example.com /users/online/page/22 sonra [(0)] {gibi bir değişkenli içine rebuld gerekir ise, gerekirse} ** / users / online / sonra benim çağrı kod adlı sayfası parçası ekleyebilirsiniz.

2 Cevap

Ben bulduk iyi yöntem çağrı işlevi geçmesine görünüyor, sayfanın URL'sini Ben kullanarak duyuyorum

$pagingurl = 'http://localhost/mail/inbox/';
Paging::show_paging($total_count, 3, $pagingurl, 4);

Benim mod-rewrite URL'leri kullanmaya izin verdiği için en iyi çözüm dokunuşlar Bu seesm

Her şeyden önce, siz don´t mod-rewrite in regex iyi ise, bu http://domain.com/?p=page-identifier-name&page=2&user=343433 url basmayacak, bir şey değiştirmek zorunda, sadece adresler işleyecek nereye { [(2)]} (klasörler olarak / bla / bla / etc /) bulunur. Bu yüzden bile yeni sayfalama fonksiyonu olmadan, her both the old and the new urls ile tam olarak önceki gibi çalışması gerekir.

Bunun dışında her zaman gerekli olduğu gibi her zaman url / buna göre mod-rewrite regex bakmak ve tasarım nasıl biliyorum ki gerekli unsurları ekleyerek, sıfırdan url oluşturmak için tavsiye ederim bundan.

Yani, sayfanın başında, tüm değişkenleri (sayfa, sayfa numarası, alt sayfası, vb) almak ve her url oluşturmak için bu unsurları kullanmak.

Edit: Tamam, bu sayfalama yüzden kirli bir çözüm zaten sayfa [0-9] kısmı için var ve numarasını veya değiştirin url arama olacaktır çok ayrı url kalanından görünüyor buldum değilse bu kısmı ekleyin. Ben gerçekten bunu tavsiye etmem, ama mümkün görünüyor.