Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Instalacja i użycie Smarty (PHP)
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
lahhott
Wrzuciłem na lokalny dysk robiący za serwer (WebServ) biblioteki Smarty. Idąc według krótkiego przewodnika ze strony Smarty, zmieniłem plik php.ini pod Windows. Utworzyłem odpowiednie katalogi. Smarty działa w prostym pliku index.php i index.tpl. Jest tam przykładowa zmienna {$name}, przeglądarka wyświetla "Hello Ned!", gdzie kod jest "Hello {$name}". Czyli działa.

Jednak borykam się z uruchomieniem obsługi Smarty w innych plikach. Dostałem od kogoś pliki używające zmiennych Smarty i chciałbym je uruchomić. Mam powiedzmy plik aaa.tpl i aaa.php. Uruchamiam ten aaa.tpl jako htm i wynik w przeglądarce zawiera tylko odwołania zmiennych Smarty, a nie wynik. Jak to zrobić? Czy ktoś mógłby mnie naprowadzić?
rama
Źródło: http://www.smarty.net/manual/en/installing.smarty.basic.php

Plik o nazwie index2.tpl w katalogu $smarty->template_dir
  1. Jakas {$variable}


  1. <?php
  2. // Ładuje nam klasę Smarty, która jest w ./smarty/
  3. require_once('./smarty/libs/Smarty.class.php');
  4.  
  5. // Tworzy instancję Smarty
  6. $smarty = new Smarty();
  7.  
  8. // Przypisujemy atrybuty.
  9. // Dobrym zwyczajem jest umieszczanie poniższych katalogów poza katalogiem htdocs.
  10. $smarty->template_dir = './templates/';
  11. $smarty->compile_dir  = './templates_c/';
  12. $smarty->config_dir   = './configs/';
  13. $smarty->cache_dir    = './cache/';
  14.  
  15. // Przypisujemy "zmienną" o nazwie variable o wartosci "zmienna"
  16. $smarty->assign('variable','zmienna');
  17.  
  18. // Wyrzuca wynik (tzn. generuje zawartość szablonu)
  19. $smarty->display('index.tpl');
  20. ?>


Jak łatwo zauważyć Smarty jest obiektem, gdzie definiujemy podstawowe atrybuty ($smarty->zmienna, np. $smarty->templete_dir), a następnie przypisujemy "zmiennym w szablonach" wartości ($smarty->assign('nazwa_zmiennej_w_szablonie', wartosc)). Później wyrzucamy wynik generowania szablonu ($smarty->display('index2.tpl'))
lahhott
Bardzo dziękuję za ten opis. Chodzi. Muszę teraz tylko na spokojnie wpleść to w większe pliki.

Jeszcze takie pytanie: jak poprawnie użyć zmiennej Smarty w następującym przykładzie. Otóż mam formularz <form> w pliku .tpl. Wewnątrz formularza jest użyty Smarty, pętla. Wygląda to mniej więcej tak:
Cytat
<form method="post" action="plik.php?action=xxxx">
....
{section name=xxxx loop=$xid}
<td><input type="checkbox" name="{$xid[xxxx]}" /></td>
<td><input type="text" name="{$amount[xxxx]}" /></td>
{/section}
....

$xid to ID rekordu w tabeli MySQL, skąd dane są wcześniej ściągnięte i obrobione. Natomiast do zmiennej $amount chciałbym "dynamicznie" przesłać dane formularzem. Ponieważ jest to w pętli dla wielu rekordów, sądzę iż to powinna być tabela. Nie wiem, gdzie taką zmienną zadeklarować oraz czy tak można. Następnie chciałbym te dane używać w pliku .php.

W jaki sposób potem mogę odwołać się w pliku .php do zmiennej $amount i zadać odpowiednie komendy do MySQL, aby zaktualizować odpowiednie ilości w bazie danych? W MySQL już sobie poradzę, jednak jak "przerzucić" dane z formularza do pliku .php aby je tam używać?
nmts
Cytat
W MySQL już sobie poradzę, jednak jak "przerzucić" dane z formularza do pliku .php aby je tam używać?


Ale o co chodzi? Wszystko masz w tablicy $_POST. Przetwarzasz w pętli każdy element i wysyłasz.
lahhott
Nie jestem pewien, jak się odwoływać do zmiennych poprzez $_POST. Czy coś poniższego:

plik.tpl
Cytat
<form method="post" action="plik.php?action=xxxx">
....
{section name=xxxx loop=$xid}
<td><input type="checkbox" name="{$xid[xxxx]}" /></td>
<td><input type="text" name="{$amount[xxxx]}" /></td>
{/section}
....
<input type="submit" name="wyslij" value="Wyślij">

plik.php
Cytat
if (isset($_GET['action']) && $_GET['action'] == "xxxx")
{
$zmienna=$_POST[$amount]
}
Czy też w plik.php również muszę wstawić pętlę?
nmts
Dynamicznie wypełniasz name, więc możesz nie wiedzieć czego się spodziewać, poniżej masz kod, którym odczytasz klucz i wartość każdego elementu tablicy POST.
  1. <?php
  2. while (list($key, $value) = each($_POST)) {
  3.    echo "Name: $key; Value: $value<br />\n";
  4. }
  5. ?>

Jeśli nie wiesz jak z tego skorzystać to może powinieneś się pouczyć podstaw..
Ps.
Autor odpowiada po kilku promilach - może się mylić.
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-2024 Invision Power Services, Inc.