Gwiazdka nieaktywnaGwiazdka nieaktywnaGwiazdka nieaktywnaGwiazdka nieaktywnaGwiazdka nieaktywna
 

Mechanizm przekazywania tablicy asocjacyjnej do szablonu Smarty wykonano za pomocą pętli foreach (Listing 1), dzięki czemu jeśli dodamy nową wartość do tablicy $language (Listing 2), w pliku index.php nie będziemy musieli ręcznie dodawać nowych zmiennych szablonowych. Jednak jeśli w pliku index.php pozbędziemy się pętli foreach będziemy musieli dodać linie kodu przedstawione na listingu 4. Szablon Smarty template.tpl odpowiedzialny za część prezentacyjną strony przedstawiono na listingu 3.

Układ plików w projekcie przedstawiono na rysunku 1., można również pobrać plik wczytywanie-tablicy-smarty.zip z kodem źródłowym artykułu. Projekt stworzony w środowisku programistycznym Eclipse PDT.

 

Układ plików, katalogów w artykule

Rys. 1. Układ plików, katalogów w artykule

 

Krótki opis plików, katalogów stworzonych na potrzeby artykułu:

  • Smarty-3.1.29 – Biblioteka Smarty, www.smarty.net
  • templates_c – katalog zawiera skrypty PHP, utworzone w wyniku kompilacji szablonów Smarty
  • index.php – główny plik przykładu uruchamiany w przeglądarce (Listing 1)
  • pl.php – zawiera tablicę asocjacyjną (Listing 2)
  • template.tpl – szablon Smarty (Listing 3)

 

Listing 1. Zawartość pliku index.php

<?php
// Dodajemy bibliotekę Smarty
require_once 'smarty-3.1.29/libs/Smarty.class.php';

$objSmarty = new Smarty();

// Ścieszka do folderu, w którym przechowywane są pliki skompilowane
$objSmarty->compile_dir = 'templates_c';

// Instalacja pliku z językiem polskim, wszystko w jednym pliku pl.php
include_once 'pl.php';

// Dynamiczne wczytanie całej tablicy z pliku pl.php
foreach ($language as $key => $lang) {
$objSmarty->assign($key, $lang);
}

// Załadowanie pliku template.tpl (tpl - rozszerzenie szablonów Smarty)
$objSmarty->display('template.tpl');

 

Listing 2. Zawartość pliku pl.php

<?php
$language = array(
'author' => 'Piotr Klimek',
'email' => Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie w przeglądarce obsługi JavaScript.',
'head_title' => 'Witamy na stronie testowej!',
'head_noscript' => '<h1>Wymagany JavaScript!</h1><p>Strona działa nieprawidłowo z powodu braku obsługi JavaScript</p>',
'h1' => 'Witamy na stronie WiedzaNaPlus.pl',
'footer' => 'Nie jest obsługiwany Internet Explorer 6, 7, 8. Wszelkie prawa zastrzeżone (ang. All rights reserved).'
);

 

Listing 3. Zawartość pliku template.tpl

<!DOCTYPE html>
<html lang="pl">
<head>
<meta name="author" content="{$author}" />
<title>{$head_title}</title>
<noscript>
{$head_noscript}
</noscript>
</head>
<body>
{$h1}
<hr />
{$footer}
</body>
</html>

 

Listing 4. Ręczne przekazywanie informacji z tablicy do szablonu Smarty

// Jeżeli interesuje nas ręczne dodanie wszystkich wierszy tablicy asocjacyjnej,
// należy zamiast pętli foreach w pliku index.php dodać poniższy fragment kodu.

$objSmarty->assign('author', $language['author']);

// Wartość tablicy pominięta w pliku template.tpl
$objSmarty->assign('email', $language['email']);

$objSmarty->assign('head_title', $language['head_title']);
$objSmarty->assign('head_noscript', $language['head_noscript']);
$objSmarty->assign('h1', $language['h1']);
$objSmarty->assign('footer', $language['footer']);

 

Po wprowadzeniu adresu http://localhost/tablica zostanie uruchomiona strona (rys. 2.), zawierająca szablon Smarty przedstawiony na listingu 3. Jednak jeśli np. zamienimy w pliku template.tpl zmienną szablonową {$footer} na {$footer1}, która nie istnieje w tablicy $language (Listing 2), to zostanie wygenerowany błąd (rys. 3.).

 

Prawidłowe uruchomienie przykładowej strony internetowej

Rys. 2. Prawidłowe uruchomienie przykładowej strony internetowej

 

Błąd - niezdefiniowany indeks footer1

Rys. 3. Błąd - niezdefiniowany indeks footer1

 

Materiały do artykułu można znaleźć w pliku wczytywanie-tablicy-smarty.zip – kodowanie plików tekstowych UTF-8, znaki końca linii (Unix).

 

Warto przeczytać:

Wybrane książki:

Strony internetowe:

 

Książki Helion

Promocja dnia

REKLAMA

Tagi - Popularne