Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Smart - proszę spojrzeć w szkielet. Nie wyświetla podstron.
Forum PHP.pl > Forum > Przedszkole
casperii
Panowie z racji tego, że nie ogarnąłem MVC to na chwilę obecną sobie odpuściłem i postanowiłem pisać stronę opartą o smarty.
Zresztą jest to mały serwis logowanie, rejestracja więc zrobię to po staremu - smarty.

  1.  
  2. <?php
  3. define( 'dostep', 1 );
  4. header('Content-Type: text/html; charset=utf-8');
  5. include ("tempp.php");
  6. require_once 'libs/Smarty.class.php';
  7. if (!file_exists('templates/'.$template_name.'/index.tpl')){
  8. echo 'Brak pliku index.tpl lub folderu. Główny plik pownien znajdować się w folderze templates/nazwa_szablonu';
  9.  
  10. }else{
  11.  
  12. $page=basename($_GET['w']);
  13. if (!empty($_GET['w']) and file_exists("controller/".$_GET['w'].".php")){
  14. switch($page) {
  15. //case ''.$page.'': $file = "controller/".$page.".php";
  16. case ''.$page.'' : include('controller/'.$page.'.php');
  17. break;
  18. default: $file = "controller/home.php";}
  19. }else{
  20.  
  21. $file='controller/home.php';
  22. }
  23.  
  24. $smarty = new Smarty;
  25. $smarty -> assign('page', $page);
  26. $smarty -> assign('file', $file);
  27. $smarty -> display(''.$template_name.'/index.tpl');
  28.  
  29. }
  30. ?>
  31.  


Czy powyższy kod jest optymalnie napisany? Nie zawiera błędów?
Druga sprawa to nie wiem czemu nie wczytuje mi podstrony test.

index.php?w=test

plik test.tpl znajduje się w templates
plik test.php znajduje się w controller
nospor
1) Uzywanie smarty nie wyklucza posiadania MVC.
2) Uzywaj basename() do w
3) A niby czemu ma ci wczytac strone test? W kodzie co tu pokazales nigdzie tego nie robisz
casperii
@nospor zedytowałem:

$page=basename($_GET['w']);

czy teraz dobrze ? smile.gif

rozumiem że to :
  1. if (!empty($_GET['w']) and file_exists("controller/".$_GET['w'].".php"))


powinno wyglądać teraz tak:

  1. if (!empty($page) and file_exists("controller/".$page.".php")){
nospor
Powiedzmy.

Po co ten case w tym IF?? Przeciez jak IF jest spelniony to page istnieje i po grzyba jeszcze to caseowac?
casperii
@nospor czyli twoim zdaniem to:

  1. if (!empty($_GET['w']) and file_exists("controller/".$_GET['w'].".php")){
  2. switch($page) {
  3. //case ''.$page.'': $file = "controller/".$page.".php";
  4. case ''.$page.'' : include('controller/'.$page.'.php');
  5. break;
  6. default: $file = "controller/home.php";
  7. }
  8. }else{
  9.  
  10. $file='controller/home.php';
  11. }


powinno wyglądać tak:

  1. if (!empty($page) and file_exists("controller/".$page.".php")){
  2. include('controller/'.$page.'.php');
  3. }else{
  4.  
  5. $file='controller/home.php';
  6. }


może i faktycznie jest zoptymalizowany kod, ale czy bezpieczniejszy?
nospor
Tak, tak powinno wygladac.

A co niby twoim zdaniem dodaniem tam zbednego case w jaki sposob wplywa na bezpieczenstwo?
casperii
Czy bezpieczniej nie wiem, ale kiedyś uczono robić na case'ach :-)
nospor
Tak, ale na caseah miales porownywac zmienna do jakiejs wartosci... A ty tutaj porownywale czy zmienna $page rowna sie zmiennej $page... Ot mi bezpieczenstwo wink.gif zmienna $page jest ZAWSZE rowna zmiennej $page.
casperii
@nospor postanowiłem powrócić do swojego "szkieletu" strony:-) i oprzeć go o smarty (na razie MVC na bok).

  1. $smarty = new Smarty;
  2. $smarty->template_dir = 'templates/';
  3. $smarty->compile_dir = 'templates_c/';
  4.  
  5. $page=basename($_GET['w']);
  6. if (!empty($page) and file_exists("controller/".$page.".php")){
  7. define($page, true);
  8. $file='controller/'.$page.'.php';
  9. }else{
  10.  
  11. $page='controller/start.php';
  12. }
  13.  
  14. $smarty -> assign('page', $page);
  15. $smarty -> assign('file', $file);
  16. $smarty -> display(''.$template_name.'/index.tpl');


zauważyłem jak dla mnie poważny błąd w tej składni - mianowicie, dołączam do index.tpl owy plik:

  1. {include_php file="controller/test.php"}


który to zostaje przekazany do

  1. $smarty -> display(''.$template_name.'/test.tpl');


a następnie wczytany w index. OK wszystko działa. Ale np jak wywołam sobie index.php?w=test <-- to mi ten test wczyta w index tak jakby 2 x.
Domyślam się , że pliki includowane mogę sobie w inny katalog wstawić, tak aby wykraczał poza "controller" ale czy i w jaki inny sposób zapobiegać takim "jajom" smile.gif


Dodatkowo chciałbym się dowiedzieć od ekspertów po co się stosuje taki kod na początku pliku:

  1. if (eregi("start.php", $_SERVER['PHP_SELF'])) {
  2. Header("Location: ./index.php");
  3. die();
  4. }


Oczywiście wiem, że eregi już jest przestarzałe i można zastąpić to strstr();

nikt nie zna odpowiedzi?
nospor
Poprostu ktos przekierowuje start.php na index.php . A po grzyba to robi to sie jego spytac. Moze kiedys to start.php byl glownym plikiem a teraz juz tego nie chce
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.