Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [smarty] get, include
Forum PHP.pl > Forum > Przedszkole
krystian1991x
jak mam wstawić zmienną zamiast nazwy pliku ?
  1. {include_php file=zmienna.php}


dodam że tak nie działa
  1. {include_php file="$zmienna.php"}

  1. {include_php file=$zmienna.php}

  1. {include_php file="$zmienna".php}


help !
nospor
Mi bez problemu działa ta metoda:
{include_php file=$zmienna.php}
Jeśli Tobie nie działa, to może w $zmienna masz coś innego niż myślisz lub może w ogóle nic nie masz smile.gif
A może scieżki masz złe. Sprawdź

Kod
To jest zmienna: {$zmienna}
{include_php file=$zmienna.php}
krystian1991x
ta zmienna jest przekazywana jako get z pliku tpl do php przetwarzana na normalną zmienną i tam przekazywana do tpl z tym że jak ustawie te zmienną po za funkcją include to wtedy śmiga i pokazuje jest zawartość czyli news i tym podobne

w taki sposób mam podstrony wczytywane
  1. {if $modul == ""}
  2.  
  3. {include_php file="news.php"}
  4.  
  5. {/if}
  6.  
  7. {if $modul != ""}
  8. {include_php file="{$modul}.php"}
  9. {/if}


Zauważyłem że gdy nie ma podanej zmiennej get czyli jest pusta to nie wczytuje mi nic nawet news.php ...
w dodatku gdy już dopisze ręcznie ?id=news to wczytuje owszem ale i tak jak chce zmienić na inną podstronę to zostaje cały czas news.php ...

.
rocktech.pl
Widzę, że nie jesteś uważnym słuchaczem.
Moja odpowiedź w twoim poście rozwiązuje twój problem.

Zamykasz zmienną w ``.
  1. {include file=`$site`.tpl}
krystian1991x


Fatal error: Uncaught exception 'Exception' with message 'Syntax Error in template "./templates/index.tpl" on line 36 "{include_php file=`$site`.php} " - Unexpected "`", expected one of: "{" , "$" , "identifier" , LDELIF , LDELFOR , LDELFOREACH , "closing tag" , INTEGER , "+" , "-" , "(" , "(!,not)" , TYPECAST , HEX , "." , SINGLEQUOTESTRING , "#" , "[" , """' in /home/edesing/public_html/libs/sysplugins/smarty_internal_templatecompilerbase.php:403 Stack trace: #0 /home/edesing/public_html/libs/sysplugins/smarty_internal_templateparser.php(2669): Smarty_Internal_TemplateCompilerBase->trigger_template_error() #1 /home/edesing/public_html/libs/sysplugins/smarty_internal_templateparser.php(2734): Smarty_Internal_Templateparser->yy_syntax_error(75, '`') #2 /home/edesing/public_html/libs/sysplugins/smarty_internal_smartytemplatecompiler.php(49): Smarty_Internal_Templateparser->doParse(75, '`') #3 /home/edesing/public_html/libs/sysplugins/smarty_internal_templatecompilerbase.php(82): Smarty_Internal_SmartyTemplateCompiler->do in /home/edesing/public_html/libs/sysplugins/smarty_internal_templatecompilerbase.php on line 403


widzisz żeby działało ?!

  1. {$smarty.get.id}
  2.  
  3. {if $smarty.get.id !=""}
  4. {include_php file="`$smarty.get.id`.php"}
  5. {/if}


ok zrobiłem to aktualnie tak i niby działa ale zawartość na dole nie ulega zmianie tylko za pierwszym razem ładuje mi np jak wczytam news.php to mi wyswietla juz caly czas to i nie moge zmienić na żadną inną podstronę za to cały czas ulega zmianie luźno wrzucona zmienna na nazwy podstron ...
rocktech.pl
Wedle tego powinno zadziałać.

Coś ci się źle parsuje.
Spróbuj tak ale zakładam, że wynik będzie ten sam.
  1. {if $modul != ""}
  2. {assign var="plik" value=`$modul`.php}
  3. {include_php file=$plik}
  4. {/if}
krystian1991x
to prowadzi mnie do punktu wyjścia a pisałem wyżej że już to naprawiłem i jest innej natury problem


to jest poważny problem ;[

zaczyna mnie to irytować już powoli ... ;/
rocktech.pl
Pokaż cały kod w obecnej postaci. .php i .tpl. Zerkniemy, może problem leży w pliku .php.

Generalnie poniższy kod nie powinien być zmartwieniem warstw widoku jaką są smarty. nie myślałeś o przeniesieniu tego do pliku *.php.

  1. {if $modul != ""}
  2. {include_php file="{$modul}.php"}
  3. {/if}


Poproszę kod.
krystian1991x
index.php
  1. <?php
  2. require('libs/Smarty.class.php');
  3. require('cfg.php');
  4.  
  5. $smarty = new Smarty;
  6.  
  7. $_GET['id'];
  8.  
  9.  
  10. $smarty->assign("site", $_GET['id']);
  11.  
  12. $smarty->display('index.tpl');
  13.  
  14. ?>
  15.  

index.tpl
  1. <!doctype html public "-//w3c//dtd html 4.01 transitional//en">
  2. <head>
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
  4. <meta name="generator" content="pspad editor, www.pspad.com">
  5. <link rel="stylesheet" type="text/css" href="templates/style.css" />
  6. </head>
  7. <body>
  8. <div id="site">
  9. <div id="head">
  10. <div id="login">
  11. {include_php file="login.php"}
  12. </div>
  13. </div>
  14. <div id="menu">
  15. <div style="padding-left: 35px;">
  16. <table cellspacing="0" cellpadding="0"><tr>
  17. <td><a href="index.php?id=news"><img border="0" src="templates/images/aktualnosci.jpg"></a></td><td><img border="0" src="templates/images/kreska.jpg"></td>
  18. <td><a href="index.php?id=comments"><img border="0" src="templates/images/multimedia.jpg"></a></td><td><img border="0" src="templates/images/kreska.jpg"></td>
  19. <td><a href="#"><img border="0" src="templates/images/download.jpg"></a></td><td><img border="0" src="templates/images/kreska.jpg"></td>
  20. <td><a href="#"><img border="0" src="templates/images/artykuly.jpg"></a></td><td><img border="0" src="templates/images/kreska.jpg"></td>
  21. <td><a href="#"><img border="0" src="templates/images/forum.jpg"></a></td><td><img border="0" src="templates/images/kreska.jpg"></td>
  22. <td><a href="#"><img border="0" src="templates/images/faq.jpg"></a></td><td><img border="0" src="templates/images/kreska.jpg"></td>
  23. <td><a href="#"><img border="0" src="templates/images/kontakt.jpg"></a></td>
  24. </tr></table>
  25. </div>
  26. </div>
  27. <div>
  28.  
  29. {if $site ==""}
  30. {$site}
  31. zmienna site jest pusta
  32. {include_php file="news.php"}
  33. {/if}
  34. {if $site !=""}
  35. {$site}
  36. zmienna site posiada wartosc
  37. {include_php file="`$site`.php"}
  38. {/if}
  39.  
  40. </div>
  41. </div>
  42. </body>
  43. </html>
rocktech.pl
Ok pokaż jeszcze co się dzieje w pliku np. news.php, że chcesz go załączyć do szablonu.
krystian1991x
  1. <?php
  2.  
  3. require('cfg.php');
  4.  
  5. $smarty = new Smarty;
  6.  
  7. $result = mysql_query("SELECT id, title, author, text, img, date, commnets FROM news ORDER BY id ASC")
  8. or die("Niepoprawne zapytanie MySQL");
  9.  
  10.  
  11. while ($news = mysql_fetch_array($result))
  12. {
  13. $tablica[] = $news;
  14.  
  15. }
  16.  
  17. $smarty->assign('result',$tablica);
  18.  
  19.  
  20.  
  21. $smarty->display('news.tpl');
  22. ?>
  23.  


dodam że jak includuje konkretny plik to wtedy działa czyli np zamiast zmiennej w include jest news.php
rocktech.pl
No i wyszło szydło z worka. To co się dzieje w pliku news.php jest absolutnie bez sensu!

index.php - tu tworzysz obiekt smarty RAZ w pliku news.php masz do niego dostęp.

  1. <?php
  2. require('libs/Smarty.class.php');
  3. require('cfg.php');
  4.  
  5. $smarty = new Smarty;
  6.  
  7. switch($_GET['id']) {
  8. case 'news':
  9. require('news.php');
  10. break;
  11. }
  12.  
  13. $smarty->assign("site", $_GET['id']);
  14. $smarty->display('index.tpl');
  15.  
  16. ?>


news.php - tu nie potrzebujesz jeszcze raz tworzyć obiektu smarty, ustawiasz zmienne dla szablonu news.tpl
  1. <?php
  2. $result = mysql_query("SELECT id, title, author, text, img, date, commnets FROM news ORDER BY id ASC")
  3. or die("Niepoprawne zapytanie MySQL");
  4.  
  5.  
  6. while ($news = mysql_fetch_array($result))
  7. {
  8. $tablica[] = $news;
  9.  
  10. }
  11.  
  12. $smarty->assign('result',$tablica);
  13.  
  14.  
  15. ?>


w index.tpl includujesz plik tpl a nie plik .php . Smarty ma array result który wypełniłeś danymi w news.php i pliku news.tpl robisz np {foreach} czy {section}
  1. {if $site ==""}
  2. {$site}
  3. zmienna site jest pusta
  4. {include file="news.tpl"}
  5. {/if}
  6. {if $site !=""}
  7. {$site}
  8. zmienna site posiada wartosc
  9. {include file="`$site`.tpl"}
  10. {/if}


Teraz spróbuj przerobić swój kod, może uda ci się przy okazji rozwiązać to bardziej elegancko.


krystian1991x
zrobiłem tak jak napisałeś ale cóż nie działa sciana.gif
rocktech.pl
1. Jakie błędy wywala?
2. index.php?id=news - teraz zadziała tylko w tym przypadku
3. Masz plik news.tpl, jeżeli tak co w nim masz ?
krystian1991x
nie wywala błędów a dubluje mi news.php czyli wyświetla mi 2 razy jeden raz na górze strony a drugi raz tam gdzie pierwotnie powinno być :/ Teraz staram się jeszcze zrobić tak abym nie musiał każdej podstrony dopisywać bo to bez sensu jak ich będzie kilkadziesiąt ...

ok mam już wszystko zrobione brakuje mi odpowiedzi na pytanie dlaczego mi dubluje to co includuje ?! ;/
rocktech.pl
To do wywalenia z index.php zakładając, że kod login.php podobny do news.php.

  1. {include_php file="login.php"}
krystian1991x
nie login.php jest osobno ładowany i nie jest pod stroną a częścią konstrukcji szablonu
rocktech.pl
Możesz pokazać kod pliku login.php ?
krystian1991x
  1. <?php
  2.  
  3. require('cfg.php');
  4.  
  5. $smarty = new Smarty;
  6.  
  7. if (isset($_POST['login']) && isset($_POST['password'])) {
  8.  
  9. $login = $_POST['login'];
  10.  
  11. $password = $_POST['password'];
  12.  
  13. $password = md5($password);
  14.  
  15. $sql = "SELECT id, login, password FROM users WHERE login='".$login."' and password='".$password."'";
  16.  
  17. $result = mysql_query($sql) or die (mysql_error());
  18.  
  19. if (mysql_num_rows($result) == 1) {
  20.  
  21. $login_status= "SELECT id, login, password, level, points
  22. FROM users
  23. WHERE login='".$_POST['login']."'";
  24.  
  25. $status = mysql_query($login_status) or die (mysql_error());
  26. $status_user = mysql_fetch_array($status);
  27.  
  28. $_SESSION['zalogowany'] = $status_user['id'];
  29. $_SESSION['login2'] = $status_user['login'];
  30. $_SESSION['points'] = $status_user['points'];
  31.  
  32. } else {
  33.  
  34. $blad = 1;
  35.  
  36. $smarty->assign('blad', $blad);
  37.  
  38.  
  39. }
  40.  
  41. }
  42.  
  43. if ($_GET['logout'] == "log")
  44. {
  45. $sdestroy = session_destroy();
  46.  
  47. $smarty->assign('destroy', $sdestroy);
  48. }
  49. $smarty->assign('points', $_SESSION['points']);
  50. $smarty->assign('id', $_SESSION['zalogowany']);
  51. $smarty->assign('login2', $_SESSION['login2']);
  52. $smarty->display('login.tpl');
  53. return $return;
  54.  
  55.  
  56.  
  57.  
  58. ?>
  59.  


jak usunę $smarty = new Smarty; to mi wywali błąd więc tam musi zapewne pozostać
  1. Fatal error: Call to a member function assign() on a non-object in /home/edesing/public_html/login.php on line 50
rocktech.pl
Nie wiem dlaczego się upierasz żeby całą logikę aplikacji opierać o Smarty. W pliku login.php tworzyłeś nowy obiekt smarty nadpisując ten z index.php!!!

Wywalasz to include login.php z indexu zastępujesz {include file=login.tpl}.
Dajesz include('login.php'); w index.php w linni 7.

A plik login php ma wyglądać tak.
  1. <?php
  2.  
  3. if (isset($_POST['login']) && isset($_POST['password'])) {
  4.  
  5. $login = $_POST['login'];
  6.  
  7. $password = $_POST['password'];
  8.  
  9. $password = md5($password);
  10.  
  11. $sql = "SELECT id, login, password FROM users WHERE login='".$login."' and password='".$password."'";
  12.  
  13. $result = mysql_query($sql) or die (mysql_error());
  14.  
  15. if (mysql_num_rows($result) == 1) {
  16.  
  17. $login_status= "SELECT id, login, password, level, points
  18. FROM users
  19. WHERE login='".$_POST['login']."'";
  20.  
  21. $status = mysql_query($login_status) or die (mysql_error());
  22. $status_user = mysql_fetch_array($status);
  23.  
  24. $_SESSION['zalogowany'] = $status_user['id'];
  25. $_SESSION['login2'] = $status_user['login'];
  26. $_SESSION['points'] = $status_user['points'];
  27.  
  28. } else {
  29.  
  30. $blad = 1;
  31.  
  32. $smarty->assign('blad', $blad);
  33.  
  34.  
  35. }
  36.  
  37. }
  38.  
  39. if ($_GET['logout'] == "log")
  40. {
  41. $sdestroy = session_destroy();
  42.  
  43. $smarty->assign('destroy', $sdestroy);
  44. }
  45. $smarty->assign('points', $_SESSION['points']);
  46. $smarty->assign('id', $_SESSION['zalogowany']);
  47. $smarty->assign('login2', $_SESSION['login2']);
  48. //szablon już wyświetlasz w pliku index.php tu potrzebujesz tylko zmiennych do szablonu login.tpl
  49. //$smarty->display('login.tpl');
  50. //return $return;
  51.  
  52.  
  53.  
  54.  
  55. ?>
krystian1991x
ale co ma do tego login.php ? skoro nawet jak go nie dodam do indexu to i tak dubluje mi podstrony ... no i twoj sposób nie dziala bo wywala wielki błąd na pół strony smile.gif więc zostaje przy tym co mam aktualnie

pytasz dlaczego smarty ? bo jak już się zrobi to potem łatwo edytować łatwo wprowadzić nowy wygląd i ogólnie bardziej przekonuje mnie smarty niż wciskanie kodu html w kod php jest bardziej estetycznie przynajmniej
rocktech.pl
Kiedy ci tłumacze, że robisz wszytko źle i cała obecna myśl która prezentujesz w kodzie jest straszna. to jest aktualnie nadaje się do zaorania co jedynie.
krystian1991x
Powiedz że nie wiesz co jest źle a nie gadaj od rzeczy skoro jest do zaorania to pokaż inny sposób na podstawie smarty o takiej konstrukcji żebym nie musiał ładować wszystkiego za każdym razem od nowa
rocktech.pl
Ja wiem co jest źle tylko ty masz problem ze zrozumieniem.

1. index.php tworzysz obiekt smarty.
2. na podstawie id sprawdzasz jaka akcja i jaki szablon trzeba załadować.
3. w pliku $_GET['id'].php tworzysz zmienne do szablonu $_GET['id'].tpl nie wyświetlasz go tylko includujesz w index.tpl.
4. Na samym dole index.php masz $smarty->display('index.tpl'); <-smarty parsują cały plik łącznie z załączonym szablonem news.tpl czy innym
5. w news.tpl daj samo 'Hello world' albo np. {debug}.

Wywal wszystkie instrukcję typu {include_php file="login.php"} (tu jest źle) zrób to na najprostszym przykładzie.

Przy okazji w index.php daj w linni 7. Zobaczysz konsolę debugowania smarty.
  1. $smarty->debugging = true;


Uwierz mi, że czytając to za kilka lat będzie ci wstyd, ze byłeś tak nieogarnięty winksmiley.jpg
krystian1991x
uwierz że wystarczyło displays usunąć z podstron

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.