Skocz do zawartości

Archiwizacja wiadomości


kikas

Rekomendowane odpowiedzi

Witam Was.

Obecnie uczę się programować PHP, lecz jestem na poziomie początkującego.

Pragnę stworzyć stronkę, z działem newsy. chciałbym żeby kolejno dodawane wiadomości "spychały" wcześniejsze w tył.

Problem zaczyna się gdy nazbiera się ich cała masa, wtedy najlepiej jakby wiadomości były cofane na strony "1" "2" "3" itp.

To byłby duży problem jakby trzeba to robić ręcznie, dlatego zastanawiam się nad skryptem PHP / JS. Niestety nie mam pomysłu jak by takowy skrypt miał wyglądać.

Czy ktoś mógłby naprowadzić mnie chociaż na jakiś trop? Z góry dziękuję.

Odnośnik do komentarza
Udostępnij na innych stronach

Poczytaj o stronicowaniu/porcjowaniu wyników zapytań. Ja do tego używam własnej klasy i dość szybko się to robi. Pamiętaj, że musisz też nadać ORDER BY przy zapytaniu MySQL.

Moja klasa. Nie mówię, że jest idealna, ale może kiedyś się przyda komuś:

class porcjowanie{

//zmienne 
//zapytanie - zapytanie do bazy odnosnie konkratnych danych
//wns - wynikow na strone(domyslnie ustawione na 5)
//s - podstrona porcjowania

var $zapytanie, $wns, $s;




//zadaniem jest zwrocenie odpowiedniego zapytania gotowe do wlozenie do mysql_fetch_array
function zapytanie($display = 0){
	//Jaka jest liczba rekordow w zapytaniu - potrzebne do porcjowania
	$max_r = mysql_num_rows(mysql_query($this->zapytanie));

	//Ustalanie czy nalezy porcjowac
	if($max_r > $wns){

		//czy jestesmy na jakies podstronie porcjowania
		if(strlen($this->s)>0){
			$strona = $this->s;
		}
		else{
			$strona = 0;
		}


		// Wynikow Na Strone
		$wns = $this->wns;


		//Zapytanie z porcjowaniem
		if($display == 0){
		$co_do = mysql_query($this->zapytanie . " LIMIT " . ($wns*$strona).", ".($wns)."");
		}
		//Pokazywanie jakie to zapytanie
		else{
		$co_do = $this->zapytanie . " LIMIT " . ($wns*$strona).", ".($wns)."";
		}
	}
	//Jesli mniej to normalne zapytanie o wszystkie
	else{
		$co_do = mysql_query($this->zapytanie);
	}

	//zwraca odpowiednie zapytanie do bazy gotowe do wlozenie do mysql_fetch_array
	return $co_do;
}	

function numerki($link_przed, $link, $link_po, $przed_granicznymi){

	//Jaka jest liczba rekordow w zapytaniu - potrzebne do porcjowania
	$max_r = mysql_num_rows(mysql_query($this->zapytanie));

	//ile wynikow-reszta- zostanie na ostatniej karcie
	$reszta = $max_r%$this->wns;

	//Podziel dokladnie bez reszty ile jest stron pelnych
	$liczba = ($max_r - $reszta)/$this->wns;

	//Jesli jest reszta to 1 strona wiecej
	if($reszta>0){
		$liczba++;
	}

	//Pierwsza strona = 0 wiec jesli sa np 3 strony to 3=2
	$max = $liczba-1;
	$min = 0;		

	$obecna = $this->s;

	$najmniejsza = $obecna-2;
	$mniejsza = $obecna-1;
	if($najmniejsza<0){
		if($mniejsza == 0){
			$ciag .= $link_przed.$mniejsza.$link.$mniejsza.$link_po;
		}
	}
	elseif($najmniejsza == 0){
		$ciag .= $link_przed.$najmniejsza.$link.$najmniejsza.$link_po;
		$ciag .= $link_przed.$mniejsza.$link.$mniejsza.$link_po;
	}
	else{ 
		$ciag .= $link_przed.$min.$link.$min.$link_po.$przed_granicznymi;
		$ciag .= $link_przed.$najmniejsza.$link.$najmniejsza.$link_po;
		$ciag .= $link_przed.$mniejsza.$link.$mniejsza.$link_po;
	}

	if(strlen($obecna)>0){
		$ciag .= " [".$obecna."] ";
	}
	else{
		$ciag .= " [0] ";
	}


	$najwieksza = $obecna+2;
	$wieksza = $obecna+1;
	if($najwieksza>$max){
		if($wieksza == $max){
			$ciag .= $link_przed.$wieksza.$link.$wieksza.$link_po;
		}
	}
	elseif($najwieksza == $max){
		$ciag .= $link_przed.$wieksza.$link.$wieksza.$link_po;
		$ciag .= $link_przed.$najwieksza.$link.$najwieksza.$link_po;
	}
	else{
		$ciag .= $link_przed.$wieksza.$link.$wieksza.$link_po;
		$ciag .= $link_przed.$najwieksza.$link.$najwieksza.$link_po;
		$ciag .= $przed_granicznymi.$link_przed.$max.$link.$max.$link_po;
	}

			return $ciag;

}

function s_back(){

	//czy jestesmy na jakies podstronie porcjowania
	if(strlen($this->s)>0){
		$strona = $this->s;
	}
	else{
		$strona = 0;
	}

	//Po ustawieniu porcjowania nalezy dac mozliwosc przejscia na kolejna strone
	//Sprawdzanie poprzedniego	
	if($this->s != 0){
		$poprzednia = $strona-1;
		return $poprzednia;
	}
	else{
		//dane jako string bo false jest takie same jak 0
		return 'zle';

		/*
		np.

		if($porcjowanie->s_back() !== 'zle'){

			$back = '<a href="'.linkowe().'products.php?s='.$porcjowanie->s_back().'">poprzednia</a>';

		}
		*/
	}
}

function s_next(){

	// Wynikow Na Strone
	$wns = $this->wns;

	//czy jestesmy na jakies podstronie porcjowania
	if(strlen($this->s)>0){
		//dodanie +1 ze wzgledu na liczenie od 0,1,2
		$strona = $this->s;
	}
	else{
		$strona = 0;
	}
	$strona++;
	$nastepne = $strona;
	//Sprawdzanie nastepnego
	$ileich = mysql_num_rows(mysql_query($this->zapytanie. " LIMIT " . ($wns*$strona) . ", ".$wns.""));

	if($ileich> 0){
		return $nastepne;
	}
	else{
		//dane jako string bo false jest takie same jak 0
		return 'zle';
	}
}

}

Przykładowe zastosowanie

									$porcjowanie = new porcjowanie;
								$porcjowanie->zapytanie = "SELECT * FROM offers WHERE lang='".$lang."' AND zrealizowane='0'";
								$porcjowanie->wns = 10;
								$porcjowanie->s = $_GET[s];

								$zak = mysql_query($porcjowanie->zapytanie(1));
								while($rz = @mysql_fetch_array($zak)){

								}

+ nawigacja w stronach porcjowania

												<? if($porcjowanie->s_back() === 'zle'){}
												else{ 
												echo '<li><a href="offers-'.$lang.'-'.$porcjowanie->s_back().'.html">< '._OFERTA_POPRZEDNIA_.'</a></li>';} 
											?>
											<? echo $porcjowanie->numerki('<li><a href="offers-'.$lang.'-', '.html">', '</a></li>', '');?>
											<? if($porcjowanie->s_next() === 'zle'){}
												else{ 
												echo '<li><a href="offers-'.$lang.'-'.$porcjowanie->s_next().'.html">'._OFERTA_NASTEPNA_.' ></a></li>';} 
											?>

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności