Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [smarty] Instrukcja warunkowa, formularz, wyświetlania danych
Forum PHP.pl > Forum > Przedszkole
in5ane
Witam, dopiero zaczynam swoją przygodę ze Smarty i mam problem. Otóż chcę zrobić sobie stronę, na której będzie pisać wpisane w formularz imię. Ale jeżeli wyświetla się już imię (czyt. zmienna nie jest pusta), żeby formularz się pod spodem nie wyświetlał. Proszę o pomoc. Oto mój kod:

index.php
  1. <?php
  2. require_once('Smarty/Smarty.class.php');
  3. $smarty = new Smarty;
  4. $smarty->template_dir = "Style/";
  5. $smarty->compile_dir = 'Smartownia/templates_c/';
  6. $smarty->config_dir = 'Smartownia/configs/';
  7. $smarty->cache_dir = 'Smartownia/cache/';
  8. if(isset($_GET[act])) {
  9. switch($_GET[act]) {
  10. case 'glowna' : $strona = 'glowna';
  11. break;
  12. case 'aktualnosci' : $strona = 'aktualnosci';
  13. break;
  14. default : $strona = 'glowna';
  15. break;
  16. }
  17. } else {
  18. $strona = 'glowna';
  19. }
  20. $smarty->assign('strona', $strona);
  21. $smarty->display('index.tpl');
  22. ?>


index.tpl
  1. <?php
  2. <html>
  3. <head>
  4. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  5. <title>Insane
  6. </head>
  7. <body>
  8. <table border="1" width="800">
  9. <tr>
  10. <td colspan="2">LOGO
  11. </tr>
  12. <tr>
  13. <td width="150">{include_php file="menu.php"}
  14. <td width="650">
  15. {if $strona eq "glowna"}
  16.  
  17. {include_php file="glowna.php"}
  18.  
  19. {elseif $strona eq "aktualnosci"}
  20.  
  21. {include_php file="aktualnosci.php"}
  22. {/if}
  23. </td>
  24. </tr>
  25. </table>
  26. </body>
  27. </html>
  28. ?>


aktualnosci.php
  1. <?php
  2. require_once('Smarty/Smarty.class.php');
  3. $smarty = new Smarty;
  4. $smarty->template_dir = "Style/";
  5. $smarty->compile_dir = 'Smartownia/templates_c/';
  6. $smarty->config_dir = 'Smartownia/configs/';
  7. $smarty->cache_dir = 'Smartownia/cache/';
  8. $smarty->assign('imie', $imie);
  9. $smarty->display('aktualnosci.tpl');
  10. ?>


aktualnosci.tpl
  1. <?php
  2. <p>TUTAJ MO&#379;EMY ZAMIEścić AKTUALNOŚCI</p><br />
  3. {$imie}
  4. {if isset($imie)}
  5. wypelnij ponizszy formularz<br />
  6. <form method="post" action="index.php?act=aktualnosci">
  7. <input type="text" name="imie">
  8. <input type="submit">
  9. </form>
  10. {/if}
  11. ?>


To wszystko oczywiście to są ćwiczenie do nauki. To nie pod żadną stronę.


Edit by in5ane:
Nie dopisałem, że właśnie tutaj w tych "aktualnosciach" już to zacząłem kombinować, ale nie działa. Zawsze jest pusta strona. Nie pokazuje wogóle formularza. A jak poprawiłem trochę inaczej sobie IF'y to wtedy przeładowuje stronę i pokazuje nadal formularz zamiast imię. Po przerobieniu IF'y były na zasadzie {if $imie eq ''} {elseif $imie neq ''}.
nospor
Skoro imie zawsze bedzie, tylko ze raz bedzie puste , to nie isset a empty:
{if empty($imie)}
in5ane
Poprawiłem co prawda. Ale klikam na submit i mi przeładowuje stronę i nic. Nadal jest formularz, a imienia nie pokazuje.
nospor
tyle jestes na forum i nie wiesz ze nie $imie a $_POST['imie'] ?

  1. <?php
  2. $smarty->assign('imie', $_POST['imie']);
  3. ?>
in5ane
Tak myślałem o tym, że przy wysyłaniu i odbieraniu trzeba to uwzględnić. Ale mówię sobie, może w smarty nie trzeba. Ale już będę wiedział.
nospor
Cytat
Ale mówię sobie, może w smarty nie trzeba
Przeciez dane do smartiego zapodajesz z php, wiec nie wiem co ma piernik do wiatraka smile.gif

owszem, mozesz juz w szablonie dostac sie do posta, ale to sie robi tak:
Kod
{$smarty.post.imie}
JoShiMa
Prawdę mówiąc taką instrukcję uważam za kaleczenie sportu:
  1. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  2. <title>Insane
  3. </head>
  4. <table border="1" width="800">
  5. <tr>
  6. <td colspan="2">LOGO
  7. </tr>
  8. <tr>
  9. <td width="150">{include_php file="menu.php"}
  10. <td width="650">
  11. {if $strona eq "glowna"}
  12.  
  13. {include_php file="glowna.php"}
  14.  
  15. {elseif $strona eq "aktualnosci"}
  16.  
  17. {include_php file="aktualnosci.php"}
  18. {/if}
  19. </td>
  20. </tr>
  21. </body>
  22. </html>

Nie po to zostały wymyślone szablony smarty, żeby pakować do nich skrypty php. OK. Wymyślono taką furtkę dla szczególnych sytuacji, ale nie wierzę, że taka właśnie u Ciebie zachodzi. Spróbuj tak zmienić budowę swojego serwisu, żeby nie robić takich makabrycznych konstrukcji. Najpierw powinieneś wykonać odpowiednie skrypty a potem dane uzyskane z nich "wstrzyknąć" do odpowiedniego szablonu.

Jeśłi masz z tym problem (nie bardzo wiesz jak można to przebudować) to chętnie pomogę.
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.