Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]System podstron
Forum PHP.pl > Forum > Przedszkole
eXTrim
Witam, nurtuje mnie pytanie w jaki sposób tworzyć małe serwisy internetowe z "5 podstronami",
1. Czy stosować cały kod html z index.html i tylko zmieniać treść podstron czy lepiej używać do tego include.
2. Jak ma się includowanie z późniejszym pozycjonowaniem strony.
3. Czy stosowanie całego kodu nie spowolni za bardzo wczytywanie tych podstron ?
askone
Najprostszy system to ten z:
  • jednym plikiem index.php
  • numerem strony przekazywanym jako parametr w GET
  • na podstawie wartości include odpowiedniego pliku z treścią


Pozdrawiam
eXTrim
możesz pokazać mniej więcej jak ma wyglądać kod questionmark.gif
gigzorr
  1. switch($_GET['podstrona'])
  2. {
  3. default: include("index.php");
  4. case 'gry': include("gry.php"); break;
  5. }


gotowe smile.gif
askone
Cytat(gigzorr @ 25.08.2010, 13:06:15 ) *
  1. switch($_GET['podstrona'])
  2. {
  3. default: include("index.php");
  4. case 'gry': include("gry.php"); break;
  5. }


gotowe smile.gif


Jedna mała zmiana - ponieważ kod include jest już w pliku index.php to nie może on sam siebie znów includować winksmiley.jpg Tak więc powinno być tak:
  1. switch($_GET['podstrona'])
  2. {
  3. default: include("glowna.php");
  4. case 'gry': include("gry.php"); break;
  5. }


Pozdrawiam
eXTrim
a co sądzisz o tym questionmark.gif

  1. $site = $_GET['site'];
  2. if(!empty($site)) {if(is_file("$site.php"))
  3. include "$site.php";else include "error.php";}
  4. else include "glowna.php";

jakie są różnice?
askone
Wykorzystanie konstrukcji switch pozwala na łatwą rozbudowę kodu o kolejne podstrony. W przypadku if musisz zadbać o kolejne bloki if...else to znacząco wpływa na obniżenie przejrzystości kodu. Co do warunków testowych zastosuj try..catch to jest zdecydowanie lepszy sposób na obsługę błędów

Pozdrawiam
eXTrim
ehh muszę jeszcze o tym wszystkim poczytać trochę nie łapie tych komend itd
thomson89
Polecam zrobienie tego na bazie danych. W przyszłości będziesz mógł zrobić sobie jakiś panel administracyjny do zarządzania treścią.

Co do include, to stwórz sobie pliczki z treścią np. w folderze elementy. Samo pobieranie ich, jest proste:

  1. case($_GET['page'])
  2. {
  3. //o mnie
  4. case 'omnie':
  5. include 'elementy/omnie.html';
  6. break;
  7.  
  8. //kontakt
  9. case 'kontakt':
  10. include 'elementy/kontakt.html';
  11. break;
  12.  
  13. //glowna
  14. case 'glowna':
  15. default:
  16. include 'elementy/index.html';
  17. break;
  18.  
  19. }
eXTrim
ok zastosować to potrafię tylko za bardzo nie rozumiem składni ...
thomson89
Poczytaj trochę w internecie powinieneś zrozumieć.

Ogólne założenie: do switcha przekazujesz zmienną. Za pomocą case 'zmienna': ustawiasz co ma robić skrypt, gdy zmienna będzie równa wartości z case. Za pomocą break hamujesz dalsze wykonywanie. Default odpowiada za akcje, która będzie wykonana gdy w zmienna będzie pusta.

Przykład ważności break:
  1. $zmienna = '1';
  2. switch($zmienna)
  3. {
  4. case '1':
  5. case '2':
  6. echo 'test';
  7. break;
  8. //tutaj, echo wywoła się gdy zmienna bedzie równa 1, lub 2.
  9. }
Asmox
Cytat(eXTrim @ 25.08.2010, 14:38:24 ) *
ehh muszę jeszcze o tym wszystkim poczytać trochę nie łapie tych komend itd

Chodzi o funkcje PHP? Polecam manual + trochę angielskiego, bo nazwy funkcji to wszystko z angielskiego ew. jakieś skróty. A co do systemu podstron, to można to zrobić w trzech plikach:
1. index.php (kontroler, router)
  1. require_once('baza.php') // załącza skrypty do połączeń z bazą
  2. if(isset($_GET['pid'])) {// pid = page id (identyfikator podstrony)
  3. $pid = mysql_escape_string($_GET['pid']) // Co z tego, że wartość jest numeryczna, SQL inject zawsze można zrobić
  4. }
  5. else $pid = 1 // Czyli na stronę główną
  6. $pageArr = getPageArr($pid) // Funkcja pobiera dane strony
  7. require_once('szablon.phtml');

2. baza.php (model do pobierania danych, obsługa bazy danych)
  1. mysql_conntect('host', 'user_name', 'pass');
  2. mysql_select_db('nazwa_bazy')
  3.  
  4. function getPageArray($pid) {
  5. $sql = "SELECT * FROM tabela_ze_stronami WHERE id=$pid LIMIT 1"; // czy jakoś tak z tym limitem
  6. $resource = mysql_query($sql);
  7. if(!is_resource($resource)) die('Sorry nie można pobrać strony');
  8. $row = mysql_fetch_assoc($resource);
  9. $pageArray = array();
  10. $pageArray['title'] = $row['title'] // Pole z tabeli w DB
  11. $pageArray['content'] = $row['content'];
  12.  
  13. return $pageArray;
  14. }

3. szablon.phtml (widok strony, szablon ze wstawkami z php)
  1. <head><title><?php echo $pageArr['title']; ?></title></head> <!-- Wstawiony tytuł z php (załączony szablon) -->
  2. <body><?php echo $pageArr['content']; ?></body>
  3. </html>

Yeah, parę minut pisania i masz działający oraz w miarę bezpieczny skrypt stronki biggrin.gif
*SQL inject to takie hakierowanie, że podstawiasz apostrofy w odpowiednich miejscach i ci wywala całą zawartość z bazy, a nawet można ją wyczyścić, więcej jest napisane na forum, poszukaj w dziale o SQLu
eXTrim
Asmox, to bardzo ciekawe co opisujesz ale czy jest sens takiej rzeźby (złożony kod, baza mysql) dla małej strony ? rozumiem że chcesz aby witryna była bezpieczna, ale czy za pomocą includowania plików .php da się również bezpiecznie to zrobić questionmark.gif
Asmox
Kwestię bezpieczeństwa zmieściłem w 2 linijkach kodu - zabezpieczenie warunku od $_GET oraz limit 1 rekordu z bazy danych. Swoją drogą nie jest to dużo, a zawsze jakoś zwiększa bezpieczeństwo.

Napisałem ten skrypt w oparciu o MVC (bardzo, bardzo pobieżnie, ale jednak). Jeśli nie wiesz jeszcze co to jest, to informuję, że jest to taki styl programowania, w którym oddzielasz od siebie szablon strony określający jej wgląd (mVc - view, czyli widok), elementy pobierające dane (Mvc - model, typ zbierania danych) oraz warstwę łączącą, która pozwala na współpracę między tymi elementami (mvC - controller). Więcej możesz poczytać w googlach, wiki oraz na forum, gdzie te kwestie były wyjaśniane dokładniej setki razy.

I teraz tak: chcesz mieć dane z plików zamiast z bazy? Spoko. Zamieniasz element pobierający dane na taki, który wykorzystuje pliki, oraz modyfikujesz nieco kontroler index.php:
1. Index.php
  1. require_once('teksty.php') // załącza skrypty DO POBIERANIA ZAWARTOŚCI PLIKÓW - zmiana I
  2. if(isset($_GET['pname'])) {// pname = page name (nazwa pliku) - zmiana II ALE TO TYLKO KWESTIA WIZUALNA
  3. $pname = mysql_escape_string($_GET['pname']) // WARTOŚĆ TEKSTOWA, SQL inject zawsze można zrobić, a z tekstem łatwiej na to wpaść
  4. }
  5. else $pname = 'glowna' // Czyli na stronę główną
  6. $pageArr = getPageArr($pname) // Funkcja pobiera dane strony
  7. require_once('szablon.phtml');

I to by było na tyle co do modyfikacji index.php. Szablonu nie trzeba zmieniać, można tak napisać skrypt, żeby wciskał do tablicy te same dane.
2. teskty.php
  1. function getPageArr($pname) {
  2. $plik = file('jakas/sciezka/' . $name . '.php');
  3. $pageArray['title'] = $plik[0];
  4. foreach($plik as $klucz => $linia) {
  5. if($klucz == 0) continue // Pierwsza linia jest określana jako tytuł strony, więc nie zaliczamy jej do treści
  6. $pageArray['content'] .= nl2br($linia); // Zamieniamy znaki końca linii na znaczniki <br />,które powodują przejście do nowej lini w HTMLu
  7. }
  8. return $pageArray
  9. }

No i to wszystko. W sumie nie trzeba nawet robić tego nl2br. file pobiera plik z wpisaniem każdej linii w osobnym polu tabeli - pierwsza linia w kluczu [0], druga w [1] itd...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.