Wyświetlanie wybranych szablonów.

0

Witam, mam pytanie dotyczące szablonów. Mam z nimi styczność bardzo krótko, bo ogarniam je 1 dzień. Stworzyłem formularz w którym wpisuje jakieś dane i chciałbym osiągnąć taki efekt aby po kliknięciu wyświetliła się tylko zawartość szablon1.tpl gdy dane się zgadzają, a gdy się nie uda to szablon2.tpl. Obecnie jest tak, że wyświetla się zawartość formularz.tpl i pod spodem szablon1.tpl lub szablon2.tpl.

index.php

<?php
        
	require_once('./smarty/Smarty.class.php');
 
        $login = $_POST['imie'];
        
        $smarty = new Smarty;
        $smarty -> template_dir = './smarty/templates/';
        $smarty -> compile_dir = './smarty/templates_c/';
 
        $smarty -> assign('data', date('d.m.Y'));
        $smarty -> display('formularz.tpl');
        
        //Chodzi mi o cos takiego by wlasnie zaleznie od wyniku, wyswietlic odpowiednia templatke
        if($login == 'ab'){
            $smarty -> display('szablon1.tpl');
        }else{
            $smarty -> display('szablon2.tpl');
        }
?>

formularz.tpl

<html>
  <head>
   <title>Strona</title>
  </head>
  <body>
    <form action="index.php" method="post">
        <p>Imie: <input type="text" name="imie" value="" size="30" maxlenght="40" 
                 style="position: absolute; left: 160px"></p>
        <p><input type="submit" value="Zaloguj"></p>
    </form>
  </body>
</html>

szablon1.tpl

<html>
 <head>
  <title>Strona</title>
 </head>
 <body>
   <p>Witamy, jestes zalogowany. {$data}!</p>
 </body>
</html>

formularz.tpl

<html>
 <head>
  <title>Strona</title>
 </head>
 <body>
   <p>Witamy, nie jestes zalogowany. {$data}!</p>
 </body>
</html>

Obecnie wyświetla się zawartość formularz.tpl i zależnie od wyniku poniżej szablon1.tpl lub szablon2.tpl.

0

Wyświetla się tak, bo tak zrobiłeś. Z tego co zrozumiałem, to jeśli żadne dane nie zostały wysłane to masz wyświetlić formularz, a w przeciwnym wypadku szablon1 albo szablon2 w zależności od drugiego warunku.

Musisz zatem sprawdzać, czy aby tablica $_POST nie jest pusta (funkcja empty()) - jeśli jest, znaczy, że formularz nie został wyświetlony, więc go wyświetl, w przeciwnym razie pobierz imie i zrób dalej co trzeba.

Polecam też nauczyć się dzielić szablony na wiele plików i łączyć z użyciem {include}, abyś nie musiał wielokrotnie wpisywać sobie np. nagłówków HTML.

0

Chodzi mi o coś co działa na zasadzie podstrony, np. jeśli wpiszę w imię ab to wyświetli mi się tylko zawartość szablon1.tpl bez danych które zawiera formularz(czyli pola na tekst i buttona).

Przedstawię poniżej mniej więcej jak to wygląda.

Obecnie jest tak:

Miejsce na tekst
Button

Witamy, jestes zalogowany (tutaj odpowiednia data).

Chciałbym aby było:
gdy true:

Witamy, jestes zalogowany (tutaj odpowiednia data).

gdy false:

Witamy, nie jestes zalogowany (tutaj odpowiednia data).

PS. W pierwszym poście ostatni plik się nazywa oczywiście szablon2.tpl, a nie formularz, pomyłka się wkradła.

1 użytkowników online, w tym zalogowanych: 0, gości: 1