Skocz do zawartości
atsiv

Kilka podstron ze wpisami na jednej stronie w PHP

Rekomendowane odpowiedzi

Wg tego poradnika zrobiłem przykładowa stronę w PHP:

 Jak zbudować prosty szablon strony www wykorzystując php?

1. Działa ok, ale chciałbym aby podstrony: 1.html, 2.html, ..., 9.html ładowały się na jednej stronie głównej, a gdy kliknę na link (na stronie głównej) z artykułem np. 3.html, po załadowaniu strony pojawiły się komentarze do wpisu.

2. Chciałbym też, aby na stronie głównej wyświetlało się co 10 artykułów/wpisów.

 

Mógłby ktoś na przykładzie podpowiedzieć jak to zrobić? Wystarczą tylko fragmenty kodu, ponieważ myślę, że dojdę sam.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeżeli dobrze rozumiem, chcesz zrobić prosty system newsów. A więc robisz tak:

  • montujesz sobie bazę danych (nieważne, czy mysql, czy sqlite, czy dowolną inną)
  • w bazie tworzysz strukturę wpisów (pojedyncza tabelka, z kolumnami mniej-więcej: "id", "autor", "data_dodania", "tresc", {tutaj dowolne inne pola, które chcesz jeszcze wrzucić - kolejność na ten przykład})
  • tworzysz strukturę komentarzy (kolejna tabelka - "id", "id_wpisu", "tresc", "autor", "data_dodania", {tutaj dowolne inne...}
  • tworzysz panel zarządzania wpisami, co zwykle sprowadza się do utworzenia części "admin" strony. Dochodzi weryfikacja administratora (czyli trzecia tabelka z userami, albo przynajmniej blokada w .htaccess na katalog z panelem administracyjnym)
  • w panelu robisz dodawanie, edycję, usuwanie wpisów "głównych" - nie będę pisał jak, poczytaj o budowaniu zapytań "insert", "update", "delete", etc.
  • w panelu robisz też (jeżeli potrzebne) moderację komentarzy. Czyli możliwość kontrolowania wpisów, które ludzie będą zamieszczać (np. usuwanie wulgaryzmów, treści niepoprawnych politycznie :lol:, etc.)
  • wreszcie na samej stronie modyfikujesz strukturę:

    - nie będzie już potrzebne wrzucanie treści "1.html", "2.html", etc, tylko wyciąganie konkretnych wpisów z bazy

    - w związku z tym przykładowe pobieranie 10 wpisów w pliku "index.php" może wyglądać tak (pisane z głowy, na w głowie istniejącej bazie danych, więc może i na pewno nie będzie działać):

    <?php$numerStrony = isset($_GET['nr']) && $_GET['nr'] > 1 ? (int)$_GET['nr'] : 1;	// numer aktualnej strony$ileNaStrone = 10; // ilość wpisów na jednej stronie$oIleRazem	= mysql_query("SELECT count(*) FROM `wpisy` WHERE `wlaczony` = '1'");	// to nam będzie potrzebne do zrobienia pagera$aIleRazem	= mysql_fetch_row($oIle);$ileRazem	= $aIleRazem[0]; // Wyciągamy 10 wpisów. Jeżeli napisałem to bezbłędnie, to nieodwołanie znak, że wręcz ociekam zajebistością// w skrócie: ($numerStrony-1)*$ileNaStrone - to jest numer wpisu, od którego zaczynamy// a $ileNaStrone to ilość wpisów wyciąganych na raz$oRes = mysql_query("SELECT * FROM `wpisy` WHERE `wlaczony` = '1' ORDER BY `data_dodania` limit (".($numerStrony-1)*$ileNaStrone.",".$ileNaStrone.")");while ($wpis = mysql_fetch_assoc($oRes)) {	// wyciągamy wpisy z obiektu je przechowującego i tworzymy "w miarę" zrozumiałą tablicę	$aWpisy [] = $wpis;	// tada.wav - tablica z wpisami}?>bla bla bla... jakiś html<?php// Teraz tak - można, teoretycznie, i jeżeli komuś zależy na zasobach serwera, robić wypisywanie danych od razu w poprzedniej pętli, bez robienia tablicy $aWpisy.// Ja się przyzwyczaiłem do robienia takich tablic, bo korzystając z szablonów i Smarty po prostu jest mi wygodniej przesłać do Smarty całą tablicę z danymi. Wszystko i tak jest cache-owane, etc, a więc nie obciąża serwera tak bardzo jak w pewnych warunkach obciążać by mogło (np menu z 70 kategoriami, mającymi po 40 podkategorii mającymi po 15 pod-podkategorii).// no to lecimy:if(is_array($aWpisy)){	foreach($aWpisy as $row) {		echo '<div class="wpis">';		echo '	<div class="wpis_info>autor: '.$row['autor'].', data: '.$row['data_dodania'].'</div>';		echo '	<div class="wpis_tresc">'.$row['tresc'].'</div>';		echo '	<div class="wpis_moar"><a href="?wpis='.$row['id'].'">więcej...</a></div>';		echo '</div>';	}}// a tutaj można pager:if($ileNaStrone < $ileRazem){	$ileStron = ceil($ileRazem/$ileNaStrone);		for($i=1; $i<=$ileStron; $i++)		echo '<a href="?nr='.$i.'">'.$i.'</a> ';	// czy jakoś tak}// więcej mi się nie chce :E?>
  • dla podstrony pojedynczego wpisu robisz odpowiednie zapytania wyciągające komentarze, no i odpowiednio formatujesz wyświetlanie

    <?php$idWpis = $_GET['wpis'] ? (int)$_GET['wpis'] : 0;if($idWpis == 0)	echo 'buuuu, nie ma takiego wpisu';else {	$aWpis = mysql_fetch_assoc(mysql_query("SELECT * FROM `wpisy` WHERE `id` = '".$idWpis."' LIMIT 1"));	// dane wpisu.. powinno zadziałać... w sumie wieki nie korzystałem z takiego zapisu		$oRes = mysql_query("SELECT * FROM `komcie` WHERE `id_wpis` = '".$idWpis."' ORDER BY `data_dodania`");		while($row = mysql_fetch_assoc($oRes) {		$aKomcie [] = $row;	// tablica z komentarzami	}}// dalej wypisywanie wpisu i komciów do niego, analogicznie do wypisywania wpisów?>
  • I tak dalej... I tym podobne...

A najlepiej po prostu zainstalować sobie Wordpressa, zedrzeć i zmodyfikować jakiś szablon, albo zrobić własny. Wszystko ładnie skonfigurować i w rezultacie zaoszczędzić parę godzin pisania autorskiego skryptu, no i nerwów spędzonych na szukaniu bugów i ich poprawianiu.

Poprzednie zdanie nie istnieje, jeżeli chcesz się nauczyć skryptowania w php.

  • Upvote 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wielkie dzięki, sorry że takie spóźnione, ale po prostu zapomniałem o tym temacie :P Mimo tego przyda mi się Twoja porada, ponieważ do tej pory nie wziałem się za PHP, ponieważ musiałem wyjechać i tak jakoś wyszło. Właśnie najpierw zamierzam wykorzystać WP, żeby nie uczyć się złych nawyków (jak to mówią inni, bierz przykład od dobrych...). Dopiero w przyszłości dla samej zabawy (właściwie nauki) spróbuję coś sam stworzyć.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...