Tworzenie gry przeglądarkowej – #2 Konfiguracja, podział strony, mod rewrite
Kontynuujemy tworzenie gry przeglądarkowej.

Zanim przejdziemy do napisania klasy obsługującej zapytania bazodanowe, musimy zająć się podstawami naszej gry. Napiszemy plik konfiguracyjny oraz klasę która podzieli stronę na części i umożliwi ich ładowanie. Zajmiemy się również mod rewrite, czyli pisaniem „przyjaznych” adresów url. Zaczynajmy 🙂

Zacznijmy od stworzenia pustego pliku config.php w głównym folderze gry, obok pliku index.php.

Plik config.php:

<?php
ob_start();

// OKREŚLENIE POŁOŻENIA STRONY W SERWISIE
$AbsoluteURL = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
$dirCat = dirname($_SERVER['PHP_SELF']);
$AbsoluteURL .= $_SERVER['HTTP_HOST'];
$AbsoluteURL .= $dirCat != '\\' ? $dirCat : "";
$slash = substr($AbsoluteURL, -1);

$NewURL = $slash != '/' ? $AbsoluteURL.'/' : $AbsoluteURL;


// STAŁE DLA BAZY DANYCH
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'admin');
define('DB_PW', 'haslo');
define('DB_DB', 'gra');

// STAŁA DLA ADRESU I LOKALIZACJI APLIKACJI
define('SERVER_ADDRESS', $NewURL);

set_include_path(get_include_path(). PATH_SEPARATOR . "CLASS");
set_include_path(get_include_path(). PATH_SEPARATOR . "CLASS/Managers");
set_include_path(get_include_path(). PATH_SEPARATOR . "LIBRARY");

// Funkcja automatycznie ładująca klasy wg. zapotrzebowania

function __autoload($className) {
    
    include_once($className.".class.php");
    
}

?>

To cała zawartość pliku config.php. Całość kodu została opatrzona komentarzami, które mówią co w danym momencie się dzieje. W pierwszej części określone jest położenie strony w serwisie – przyda się nam to później. Druga część to zdefiniowanie stałych do bazy danych. Użyjemy ich w kolejnej części, w której napiszemy klasę realizującą zapytania bazodanowe. Dalej zdefiniowana jest stała, która przechowuje określone wcześniej położenie strony. Kolejne trzy linijki ustawiają ścieżki do podpinania plików. Foldery CLASS, Managers oraz LIBRARY stworzymy później.

Znajdująca się na końcu funkcja __autoload jest funkcją magiczną i zajmuje się ładowaniem klas według zapotrzebowania, dzięki czemu nie musimy ich podpinać do każdego pliku.

Stwórzmy teraz nowy folder wewnątrz głównego folderu. Nazwijmy go CLASS. Następnie zróbmy kolejny folder o nazwie Managers, tym razem wewnątrz wcześniej stworzonego CLASS. Posłużą one do przechowywania klas, które napiszemy. Możemy teraz stworzyć naszą pierwszą klasę, która zajmie się ładowaniem odpowiednich stron w zależności od wartości zmiennej page pobranej przy pomocy $_GET. Stwórzmy teraz plik MainPage.class.php wewnątrz folderu Managers.

Plik MainPage.class.php:

<?php

class MainPage {
    
    private $active_page;
    
    public function __construct($ACTIVE_PAGE) {
        
        $this->active_page = $ACTIVE_PAGE;
        
        switch($this->active_page) {
            
            case 'home':
            require_once $this->active_page.".library.php";
            break;   
            
        }
        
    }
    
}

?>

To cała klasa MainPage. Na początku deklarujemy zmienną prywatną $active_page. Następnie tworzymy konstruktor, który w parametrze przyjmuje zmienną $ACTIVE_PAGE. Następnie zmienną podaną w konstruktorze przypisujemy do zmiennej prywatnej stworzonej na początku. $this-> mówi po prostu że odwołujemy się do zmiennej z tej klasy. Poniżej tworzymy switcha który sprawdza wartość zmiennej active_page. Warto zauważyć że odwołując się do zmiennej za pomocą $this-> nie wstawiamy znaku przed nazwą zmiennej.

Jeśli active_page jest równa ’home’ to ładujemy odpowiednią stronę z biblioteki(jeszcze jej nie stworzyliśmy). Zdaje sobie sprawę z tego, że mogę to wydawać się trochę zawiłe, ale gdy już skorzystamy z tej klasy to wszystko się rozjaśni 🙂

Pora otworzyć stworzony w poprzedniej lekcji plik index.php i usunąć całą jego zawartość. Służyła jedynie do testów i nie jest już potrzebna. Napiszmy teraz kod, który skorzysta z utworzonej przed momentem klasy i załaduje odpowiednią stronę.

Plik index.php:

<?php

session_start();
require_once("config.php");

if(!(isset($_GET['page']))) { // przekierowanie do strony głównej
    
    header("Location: ".SERVER_ADDRESS."home");
    
} else {
    
    $mp = new MainPage($_GET['page']); // przekierowanie do podanej strony
    
}

?>

Na starcie zaczynamy sesje i podłączamy plik config.php.

Tworzymy instrukcję warunkową if. Jeśli nie jest ustawiona zmienna page w adresie to przekierowujemy użytkownika na stronę główną – home (zaraz ją stworzymy).

Jeśli jest ustawiona to w parametrze klasy MainPage podajemy właśnie tą zmienną. Klasa ładuje odpowiednią stronę z biblioteki.

Nadszedł wreszcie czas by tą bibliotekę stworzyć. W głównym folderze stwórzmy teraz folder LIBRARY w którym będziemy przechowywać poszczególne strony. Możemy teraz zrobić nowy plik – stronę główną. Nazwijmy plik home.library.php. Wszystkie podstrony będziemy nazywali według tego wzoru, ponieważ tak ustaliliśmy w pliku MainPage.class.php.

Dla celów testowych sprawny aby wyświetlał jakąś treść.

Plik home.library.php:

<?php

echo "Strona Główna";

?>

Przejdźmy teraz do strony o adresie localhost/gra/home. Gra to nazwa głównego folderu. Po przejściu pod ten adres otrzymamy błąd. Dzieje się tak dlatego, że musimy jeszcze zająć się przepisywaniem adresów przy pomocy mod_rewrite. Stwórz plik .htaccess lub pobierz gotowy stąd.

Plik .htaccess:

Options FollowSymLinks

RewriteEngine On

RewriteRule ^([0-9a-zA-Z\-\#]+)/?$ index.php?page=$1 [L]

Ten zapis spowoduje że będziemy mogli odnosić się do plików przy pomocy ich nazwy i wszystko będzie działało. Nie chciałbym tutaj opisywać tej reguły, nie ma na to czasu a w sieci dostępnych jest dużo poradników na ten temat. Np. tutaj. 🙂

Gdy teraz wejdziemy pod adres localhost/gra/home zobaczmy napis Strona główna czyli wszystko działa.

Uwaga! Wamp może mieć domyślnie wyłączoną opcję przepisywania adresów. Aby temu zaradzić kliknij w ikonę wampa w pasku narzędzi i wybierz kolejno z listy Apache -> Apache modules -> rewrite_module.

Zajmijmy się teraz już ostatnią sprawą w tym wpisie. Tworząc jakąkolwiek stronę, a szczególnie taką na której jest dużo podstron powinniśmy pociąć szablon strony na mniejsze części. I nie chodzi mi tutaj o cięcie grafiki np. w Photoshopie a o podzielenie struktury pliku na mniejsze części – osobno nawigacja, sekcje, footer itd. Po co? Wyobraź sobie że tworzysz duży projekt, który posiada 100 podstron. W każdym występują elementy wspólne takie jak nawigacja czy stopka. Napisałeś cały projekt i okazuje się że musisz wprowadzić drobną zmianę w stopce strony. Musiałbyś modyfikować 100 stron a to dość czasochłonne. Zdecydowanie lepszym sposobem jest pocięcie szablony i podłączanie go do kolejnych podstron. Gdy będziemy chcieli coś zmienić – wystarczy zmiana w jednym pliku.

Napiszmy klasę która będzie ładowała poszczególne części strony. W folderze CLASS stwórzmy plik ModuleLoader.class.php.

Plik ModuleLoader.class.php:

<?php

class ModuleLoader {
    
    static public function load($MODULE) {

        switch($MODULE) {
            
            case 'home':
            echo '
            
            <h1>Strona główna</h1>
            
            ';
            break;
                 
            
            default;     
            break;
            
        }
        
    }
    
}

?>

Na początku tworzymy statyczną publiczną metodę load z parametrem $MODULE. Podobnie jak w przypadku klasy MainPage tutaj również skorzystamy ze switch. W przypadku gdy wartość $MODULE jest równa ’home’ wyświetlamy nagłówek h1 z napisem Strona główna. Jeśli zmienna $MODULE nie pasuje do żadnego case to po prostu przerywamy działanie za pomocą break.

Użyjmy teraz tej klasy w pliku home.library.php. Usuńmy poprzednią zawartość i zastąpmy ją nową.

Plik home.library.php:

<?php

ModuleLoader::load('home');

?>

Odświeżmy teraz stronę localhost/gra/home. Wyświetlił się napis Strona główna – działa.

Na tej zasadzie w kolejnych lekcjach będziemy dodawali kolejne case do klasy ModuleLoader i wywoływali jest na kolejnych podstronach.

 

To wszystko w tym wpisie. W razie pytań – napisz komentarz 🙂

Pozdrawiam.

Pobierz gotową paczkę stąd.

Spodobał Ci się artykuł? Dzięki naciśnięciu serduszka poniżej będę wiedział jakie treści tworzyć. Dzięki! :)

Tworzenie gry przeglądarkowej – #1 Przygotowanie Jak zrobić chat Tworzenie wtyczek WordPress – #4 Shortcode i ustawienia
View Comments
  • Po stworzeniu pliku ModuleLoader.class.php wszystko przestaje się wyświetlać cokolwiek (błąd 404 Not found), problem występuje zarówno przy tworzeniu wszystkiego krok po korku jak i pobierając gotową paczkę. Wcześniej było ok – w locahost wyświetlało się „wszystko działa” jakaś rada?

  • tylko, że ten sposób działa tylko na lokalu bo już na hostingu nie działa…
    może ktoś się z tym uporał?

    • Cześć, przepraszam za tak późną odpowiedź, ale Twój komentarz w jakiś sposób trafił automatycznie do spamu. Z jakiego hostingu korzystasz? Może nie zmieniłeś ustawień bazy danych w pliku config.php?

    • Zapewne dla mod rewrite nie podałeś aktualnej domeny, przy zmianie ścieżki musisz poinformować moduł o tej zmianie by ci generował poprawne przyjazne linki,

      Też kiedyś mi to ulatywało 🙂

  • Świetna seria, dobra robota!

  • Idzie w dobrą stronę 😀

  • Super, bede śledził