CemesiK
Silnik systemu - Wersja do druku

+- CemesiK (https://cemesik.7m.pl)
+-- Dział: Jak stworzyć własny BLOG (https://cemesik.7m.pl/forumdisplay.php?fid=14)
+--- Dział: Silnik systemu (https://cemesik.7m.pl/forumdisplay.php?fid=170)
+--- Wątek: Silnik systemu (/showthread.php?tid=72)



Silnik systemu - Admin - 05-16-2025

Lokalizacja pliku: /engine/engine.php

Silnik systemu jest najważniejszym plikiem, który należy napisać dla błoga. Będzie on zawierał najbardziej popularne funkcje używane w całym systemie oraz definicje podstawowych zmiennych.

Rozpoczynamy skrypt PHP znacznikiem otwierającym:

Kod PHP:
<?php 


Następnie ustawiamy set_magic_quotes_runtime na wartość zero, aby wszystkie zmienne przychodziły do skryptu w takiej formie, w jakiej zostały przesłane (za pomocą metody GET lub POST). Musimy pamiętać o tym, aby takie zmienne odpowiednio zabezpieczać

Kod PHP:
set_magic_quotes_runtime(0); 


Rozpoczynamy sesję użytkownika. Sesję trzeba rozpocząć na samym początku skryptu, przed wysłaniem jakichkolwiek nagłówków do przeglądarki.

Kod PHP:
session_start(); 


Teraz zarejestrujemy zmienne w sesji użytkownika. Będą to między innymi:
usr_id - zawierająca ID użytkownika,
usr_name - zawierająca nazwę użytkownika,
usr_email - zawierająca adres e-mail użytkownika,
usr_template - zawierająca szablon użytkownika,
usr_language - zawierająca język użytkownika,
usr_admin - zawierająca informację o tym, czy użytkownik jest administratorem serwisu,
uzy_login - zawierająca informację o tym, czy użytkownik jest zalogowany na swoim koncie w serwisie

Kod PHP:
session_register('usr_id');
session_register('urs_name');
session_register('usr_email');
session_register('usr_template');
session_register('usr_language');
session_register('usr_admin');
session_register('usr_login'); 


Następnie, za pomocą instrukcji reąuire, dołączamy plik z konfiguracją bazy danych MySQL lub jakiejkolwiek innej bazy. Zawiera on podstawowe dane potrzebne do połączenia.

Kod PHP:
reąuire('./config.php'); 


Wykrywamy, na jaką wartość jest ustawiona zmienna $DBIs. Jeżeli jest ustawiona na wartość mysąl, wówczas dołączamy za pomocą funkcji include sterownik do bazy danych.

Kod PHP:
if($DBIs == 'mysql')

include(
'./engine/mysql_drv.php');




Gdy sterownik bazy danych jest już podłączony, możemy uruchomić połączenie z tą bazą. Wykorzystujemy tutaj funkcję ze sterownika, przypisując ją do zmiennej SConnection. Wewnątrz funkcji podajemy dane potrzebne do nawiązania połączenia z serwerem baz danych.

Kod PHP:
$Connection ConnectToDB$HostToDB$UserLogin$UserPassword); 


Następnie sprawdzamy, czy połączenie zostało nawiązane, porównując zmienną $Connection z wartością FALSE.

Kod PHP:
if($Connection == FALSE) { 


Jeżeli zmienna ma wartość FALSE, wówczas wyświetlamy błąd

Kod PHP:
echo 'It is no ability to connect with the database.'

Następnie za pomocą funkcji exit() kończymy działanie skryptu.

Kod PHP:
exit();



Jeżeli połączenie zostało nawiązane, możemy wybrać bazę danych. Wybieramy ją za pomocą funkcji ze sterownika bazy danych. Wynik funkcji przypisujemy do zmiennej SSelectingDB.

Kod PHP:
$SelectingDB SelectDB($DBName); 


Następnie sprawdzamy, czy baza danych została wybrana prawidłowo. Możemy to ustalić za pomocą instrukcji if, która sprawdza, czy zmienna, w której jest przechowywany wynik wybierania bazy danych, równa jest FALSE.

Kod PHP:
if ($SelectingDB == FALSE) { 


Jeśli zmienna jest równa FALSE, oznacza to, że wybranie tej bazy danych nie powiodło się. Wówczas wywołujemy odpowiedni komunikat.

Kod PHP:
echo 'It is no ability to select the database in the server.'


Kończymy wykonywanie skryptu za pomocą instrukcji exit().

Kod PHP:
exit(); 



Zadeklarujemy teraz funkcję, która wyświetli informację o błędzie, jeśli wystąpił podczas wykonywania zapytania do bazy danych. W parametrach będzie przyjmowała nazwę pliku, linię, w której został popełniony błąd oraz źle sformułowane zapytanie SQL.

Kod PHP:
function DBShowError($Message,$ErrorFhow_many,$ErrorLine,$ErrorSQLQuery) 
  



Wyświetlamy informację o błędzie w zapytaniu do bazy danych wraz z zapytaniem SQL, w którym błąd wystąpił.


Kod PHP:
echo 'Error in DB' ;
echo 
'<br />'
echo 
'In file: '.$ErrorFhow many;
echo 
'<br />'
echo 
'On line: '.$ErrorLine;
echo 
1<br />'; 
echo '
In Query'.$ErrorSQLQuery;
echo '
<br />'; 


W celu lepszej identyfikacji błędu możemy pobrać informacje zwrócone przez serwer bazy danych z funkcji ShowErrorOfDB().

Kod PHP:
echo 'Information from DB:';
echo 
ShowErrorOfDB();



Następnym etapem będzie pobranie tablicy konfiguracyjnej z systemu. Najpierw musimy sprawdzić, jaki interfejs bazy danych jest włączony do pliku.

Kod PHP:
if($DBIs == 'mysql') 
  



Deklarujemy zapytanie SELECT, które wybierze wszystkie dane z tabeli konfiguracyjnej.

Kod PHP:
$QueryConfig 'SELECT config_name, config_value FROM '.$TablePrefix.'config';




Sprawdzamy, czy zapytanie zostało wykonane poprawnie. Jeśli wystąpił błąd, odwołujemy się do funkcji wyświetlającej informacje o błędzie.

Kod PHP:
if(!MakeQuery($QueryConfig))
  


Do funkcji przekazujemy informację o błędzie w zapytaniu, plik, w którym on nastąpił, za pomocą _FILE_ , linie za pomocą _LINE_ i samo zapytanie do bazy danych, aby mogło zostać wyświetlone.

Kod PHP:
DBShowError('Error in Query',_FILE_,_LINE_,$QueryConfig);




Jeżeli zapytanie, które wpisaliśmy, było poprawne, wówczas pobieramy wynik do zmiennej $Result i liczbę rekordów do zmiennej $Rows.

Kod PHP:
$Result GetResult(); $Rows GetHowMany(); 


Następnie za pomocą pętli for przekształcamy uzyskaną z zapytania tablicę w tabelę asosjacyjną , w której kluczami będą wartości w polu config_name , natomiast wartościami dane wprowadzone do pola config_value.

Kod PHP:
for($i=0;$i<$Rows;$i++)
  {
$KeyResult $Result[$i]['config_name'];
$ConfigurationOfSite[$KeyResult] = $Result[$i]['config_value'];



Sprawdzamy, czy użytkownik jest załogowany na swoje konto w systemie. Korzystamy z funkcji empty, za pomocą której sprawdzamy, czy zmienna $_SESSION[tuzy_id'] zawiera jakąś wartość Jeżeli brak w niej wartości, wówczas definiujemy zmienne sesji jako puste.

Kod PHP:
if(empty($_SESSION['usr_id']))
   {
       $_SESSI0N['usr_id'] = '';
       $_SESSI0N['urs_name'] = '';
       $_SESSI0N['usr_email'] = ''


Przy zmiennych $_SESSION['usr_template'] i $_SESSION['usr_language'] wpisujemy wartości z tablicy konfiguracyjnej, którą przed chwilą uzyskaliśmy . Dzięki temu dla użytkownika niezalogowanego zostanie ustalony domyślny szablon i język strony.

Kod PHP:
$_SESSI0N['usr_template'] = $ConfigurationOfSite['dt'];
$_SESSI0N['usr_language'] = $ConfigurationOfSite['dl'];
$_SESSI0N['usr_admin'] = '';
$_SESSI0N['usr_login'] = '';




Teraz możemy przejść do blokowania użytkowników o określonym adresie IP. Na początek musimy sprawdzić, czy opcja ta została włączona za pomocą panelu administratora.


Kod PHP:
if($ConfigurationOfSite['blip'] == 'yes'){ 


Jeżeli opcja została włączona, wówczas wykonujemy zapytanie, aby pobrać wszystkie numery IP, z których dostęp jest zabroniony.

Kod PHP:
if($DBIs == 'mysql') {
  $QueryIP 'SELECT ip_number FR0M '.$TablePrefix.'baningip'
 } 


Sprawdzamy, czy zapytanie zostało wykonane poprawnie.

Kod PHP:
if(!MakeQuery($QueryIP))
{
  DBShowError('Error in Query',_FILE_,_LINE_,$QueryIP);



Pobieramy wyniki zapytania do zmiennych zawierających wynik oraz ich liczbę.

Kod PHP:
$Result GetResult();
$Rows GetHowMany(); 


Za pomocą pętli for sprawdzamy, czy którykolwiek z wyników pasuje do IP obecnego użytkownika zapisanego w zmiennej $_SERVER['REMOTE_ADDR'].

Kod PHP:
for($i=0;$i<$Rows;$i++)
  {
   if($Result[$i]['ip_number'] == $_SERVER['REM0TE_ADDR'])
  


Jeżeli wynik pasuje do obecnego adresu IP użytkownika, możemy mu wyświetlić stronę z informacją, że nie ma dostępu do strony. W tym celu włączymy odpowiedni plik.

Kod PHP:
include('./html_page/'.addslashes($_SESSI0N['usr_language']).'/ban_ip.html'); 


Następnie kończymy wykonywanie skryptu PHP za pomocą instrukcji exit().

Kod PHP:
exit();
   }
  }



Teraz należy włączyć zapisany w pliku określony język dla strony. Wpisujemy odpowiednią wartość w instrukcji if, aby sprawdzić, czy język został włączony.

Kod PHP:
if(!include('./language/'.addslashes($_SESSI0N['usr_language']).'/language.php'))
  


Jeśli określony język dla strony nie został włączony, wyświetlamy odpowiedni komunikat.

Kod PHP:
echo 'No language file found: '.addslashes($_SESSI0N U['usr_language']); 


Następnie kończymy pracę skryptu za pomocą instrukcji exit().

Kod PHP:
exit();



Teraz możemy wyświetlić szablon strony. Deklarujemy odpowiednią funkcję.

Kod PHP:
function PrintThemOfSite()
  


Wewnątrz funkcji musimy zadeklarować zmienne jako globalne, ponieważ są to zmienne ustawione poza funkcją i nie byłoby ich widać wewnątrz niej.

Kod PHP:
global $CMSModule;
global 
$SiteTitle;
global 
$SiteKeywords;
global 
$Brief0fPage


Następnie sprawdzamy za pomocą instrukcji if, czy można włączyć szablon użytkownika.

Kod PHP:
if(!include('./themes/'.addslashes($_SESSI0N['usr_template']).'/theme.php'))
  


Jeżeli nie można go włączyć do pliku, wówczas wyświetlamy odpowiedni komunikat.

Kod PHP:
echo 'File not found: '.addslashes($_SESSI0N['usr_template']); 


Wywołujemy także instrukcję exit() w celu zakończenia przetwarzania skryptu.

Kod PHP:
exit () ;

}




Funkcją, która będzie nam potrzebna, jest funkcja do deklaracji nagłówka strony. Przyjmuje ona argumenty :
  • $SiteTitle - zawierający tytuł obecnej strony, 
  • $Keywords - zawierający słowa kluczowe, które zostaną umieszczone w sekcji .



META strony oraz $BriefOfPage - zawierający opis strony, który także zostanie umieszczone w sekcji META.

Kod PHP:
function PrintHeader($SiteTitle,$Keywords,$BriefOfPage)
  


Na początek deklarujemy zmienne jako globalne, gdyż zostały one zadeklarowane na zewnątrz funkcji i daltego nie byłoby ich widać

Kod PHP:
global $ConfigurationOfSite;
global 
$PageLanguage


Deklarujemy elementy języka XHTML odpowiedzialne za utworzenie nagłówka strony.
Kod PHP:
echo '<?xml version="l.0" encoding='".$PageLanguage['coding'].'"?>';
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"';
echo '"http://localhost/dtd/xhtmlll.dtd">';
echo '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="'.$PageLanguage['lang'].'">';
echo '<head>';
echo '<meta http-equiv="Content-Type" content="text/html; charset='.$PageLanguage['coding'].'" />';
echo '<meta http-equiv="Content-language" content="'.$PageLanguage['lang_config'].'" />';
echo 'cmeta name="copyright" content="Cemesik CMS" />'; 


W miejscu, gdzie znacznik META przyjmuje parametr description, wpisujemy zmienną odpowiedzialną za opis strony.

Kod PHP:
echo '<meta name="description" content="'.$BriefOfPage.'" />'


Natomiast w miejscu, gdzie znacznik META przyjmuje parametr keywords, wpisujemy zmienną odpowiedzialną za słowa kluczowe dla danej strony.

Kod PHP:
echo '<meta name="keywords" content="'.$Keywords.'" />';
echo 
'<meta name="robots" content="all" />';
echo 
'<meta name="rating" content="general" />';
echo 
'<meta name="reso-urce-type" content="document" />';
echo 
'<meta name="generator" content="Cemesik Blog" /> '


Następnie włączamy plik ze stylami CSS, za pomocą których będzie sformatowana nasza strona.
Kod PHP:
echo '<link rel="stylesheet" type="text/css" href="themes/'.addslashes($_SESSION['usr_template']).'/style.css" />'


W znaczniku title, czyli w tytule strony, wpisujemy zawartość zmiennej SSiteTitle, a następnie nazwę systemową strony WWW SConfigurationOfSite ['name'].


Kod PHP:
echo '<title>'.$SiteTitle.''.$ConfigurationOfSite['name'].'</title>';
echo 
'</head>';
echo 
'<body>'


Teraz deklarujemy tabelę, w której będzie zawarte logo naszej strony. Przypisujemy tabeli i komórce odpowiednie nazwy stylów, które później zadeklarujemy w arkuszu stylów CSS.

Kod PHP:
echo '<table class="table_logo">';
echo 
'<tr>';
echo 
'<td class="row_logo"></td>';
echo 
'</tr>';
echo 
'</table>';



Następnie wprowadzamy funkcję, która wyświetli ścieżkę dostępu do strony, na której obecnie się znajdujemy.

Kod PHP:
function PrintPath()
  


Deklarujemy zmienną $URIForModule jako globalną, gdyż jest ona zdefiniowana poza funkcją.

Kod PHP:
global $URIForModule


Następnie wyświetlamy ścieżkę za pomocą instrukcji echo.

Kod PHP:
echo $URIForModule;



Deklarujemy funkcję wyświetlającą bloki po lewej stronie naszej witryny.

Kod PHP:
function PrintLeftMenu()
  


Definiujemy wartości pobieranych zmiennych jako zmienne globalne, gdyż są zadeklarowane poza funkcją i nie byłyby widoczne.

Kod PHP:
global $DBIs;
global 
$TablePrefix


Następnie sprawdzamy, jaka baza danych jest włączona, i deklarujemy odpowiednie zapytanie.

Kod PHP:
if($DBIs == 'mysql')
  {
       $QueryBlock' SELECT * FROM '.$TablePrefix.'blocks
       WHERE
       block_side = "1"
       AND
       block_active = "t"
       ORDER BY
       block_poz ASC'
;
  


Za pomocą interfejsu wykonujemy zapytanie do bazy danych.

Kod PHP:
if(!MakeQuery($QueryBlock))
  {
      DBShowError('Error in Query',_FILE_,_LINE_,$QueryBlock);
  


Pobieramy wyniki zapytania i umieszczamy je w zmiennych.

Kod PHP:
$Result GetResult();
$Rows GetHowMany(); 


Deklarujemy tabelę w języku XHTML wraz z przypisaną do niej klasą, za pomocą której będziemy mogli ją później sformatować w arkuszu stylów CSS.

Kod PHP:
echo '<table class="l_menu" cellpadding="0" cellspacing="0">'


Rozpoczynamy pętlę for w celu wyświetlenia wszystkich bloków ustawionych po tej stronie witryny.

Kod PHP:
for($i=0;$i<$Rows;$i++) 
  



Wyświetlamy nagłówek bloku wraz z jego nazwą pobraną z bazy danych.

Kod PHP:
echo '<tr>';
echo 
'<td class="1_1">'.stripslashes($Result[$i]['block_show']).'</td>';
echo 
'</tr>';
echo 
'<tr>';
echo 
'<td class="1_2">'


Następnie, za pomocą instrukcji include(), włączamy plik zawierający dany blok, w celu jego wyświetlenia.

Kod PHP:
include('./blocks/'.$Result[$i]['block_name'].'/'.$Result [$i]['block_name'].'.php');
echo 
'</td>';
echo 
'</tr>';
echo 
'<tr>';
echo 
'<td class="1_3"></td>';
echo 
'</tr>';



Zamykamy całą tabelę bloków po lewej stronie.

Kod PHP:
echo '</table>';



Teraz deklarujemy funkcję wyświetlającą bloki po prawej stronie naszej witryny.

Kod PHP:
function PrintRightMenu()



Definiujemy wartości zmiennych pobieranych jako zmienne globalne gdyż są zadeklarowane poza funkcją i nie byłyby widoczne.

Kod PHP:
global $DBIs;
global 
$TablePrefix


Następnie sprawdzamy, jaka baza danych jest włączona i deklarujemy odpowiednie zapytanie.

Kod PHP:
if($DBIs == 'mysql') 
  
{
      $QueryBlock1 SELECT FR0M '.$TablePrefix.'blocks
      WHERE
      block_side 
"p"
      AND
      block_active "t"
      ORDER BY
      block_poz ASC
';



Za pomocą interfejsu wykonujemy zapytanie do bazy danych.

Kod PHP:
if(!MakeQuery($QueryBlock))
  {
       DBShowError('Error in Query',_FILE_,_LINE_$QueryBlock);
  


Pobieramy wyniki zapytania i umieszczamy je w zmiennych.

Kod PHP:
$Result GetResult();
$Rows GetHowMany(); 


Deklarujemy tabelę w języku XHTML wraz z przypisaną do niej klasą, za pomocą której będziemy mogli ją później sformatować w arkuszu stylów CSS.

Kod PHP:
echo '<table class="p_menu" cellpadding="0" cellspacing="0">'


Rozpoczynamy pętlę for w celu wyświetlenia wszystkich bloków ustawionych po tej stronie witryny.

Kod PHP:
for ($i=0;$i<$Rows;$i++)
    


Wyświetlamy nagłówek bloku wraz z jego nazwą pobraną z bazy danych.

Kod PHP:
echo '<tr>';
echo 
'<td class="p_l">'.stripslashes($Result[$i]['block_show']).'</td>';
echo 
'</tr>';
echo 
'<tr>';
echo 
'<td class="p_2">'


Następnie, za pomocą instrukcji include(), włączamy plik zawierający dany blok, w celu jego wyświetlenia.

Kod PHP:
include('./blocks/'.$Result[$i]['block_name'].'/'.$Result[$i]['block_name'].'.php');
echo 
'</td>';
echo 
'</tr>';
echo 
'<tr>';
echo 
'<td class="p_3"></td>';
echo 
'</tr>';



Zamykamy całą tabelę bloków po prawej stronie.

Kod PHP:
echo '</table>'; 



Deklarujemy funkcję, która wyświetli nam stopkę strony wraz z napisem Copyright.

Kod PHP:
function PrintFoot 
  



Elementy w stopce umieszczamy na warstwie, która dzięki przypisaniu do niej klasy zostanie później odpowiednio sformatowana w stylach CSS.

Kod PHP:
echo '<div class="foot">';
echo 
'Copyright &copy; 2004-2025 <a href="http://cemesik.7m.pl">Cemesik Blog</a>';
echo 
'</div>';
echo 
'</body>';
echo 
'</html>';



Następnie możemy zadeklarować funkcję, która wyświetli nam błąd, jeśli taki wystąpi. Funkcja ma jeden argument $lnformationContent, zawierający informacje o błędzie.

Kod PHP:
function PrintError($InformationContent)

global 
$PageLanguage;

echo 
'<div class="badstyle">';
echo 
$InformationContent;
echo 
'<br />';
echo 
$PageLanguage['back_error'];
echo 
'</div>';




Potrzebna będzie także funkcja, która poinformuje użytkownika o pomyślnym zakończeniu akcji. Będzie ona przyjmowała jeden argument $lnformationContent, zawierający informację o działaniach, które udało się wykonać

Kod PHP:
function PrintOK($InformationContent)
  {

global 
$PageLanguage;

echo 
'<div class="isok">';
echo 
$InformationContent;
echo 
'<br />';
echo 
$PageLanguage['good_go_next'];
echo 
'</div>';

 } 


Należy także zdefiniować funkcję do logowania się na konto administratora, aby przy bezpośrednim wejściu do panelu użytkownik mógł się od razu zalogować

Kod PHP:
function ShowLoginForm()
  {

global 
$AdminLang;

?>


Deklarujemy formularz, który zostanie wysłany do pliku login.php ze skryptem do logowania w serwisie. W formularzu umieścimy dwa pola. Pierwsze będzie przeznaczone na login, drugie na hasło do konta.

Kod PHP:
<form method="post" action="login.php">
<
table>
<
tr>
<
td><?php echo $AdminLang['account_name'];?></td>
<td><input type="text" name="account_login"></td>
</tr>
<tr>
<td><?php echo $AdminLang['password_access'];?></td>
<td><input type="password" name="account_pwd"></td>
</tr>
<tr>
<td></td>
<td><input type="hidden" name="login" value="yes"><input type="submit" value="<?php echo $AdminLang['login_me'];?>"></td>
</tr>
</table>
</form>
<?php

}

?>