Szablony Smarty 3
Framework używa Smarty 3 jako domyślnego silnika szablonów. Informacje na temat użycia innych silników szablonów znajdują się poniżej.
Twórca aplikacji nie jest ograniczony technicznie w zakresie możliwości projektowania i rozmieszczenia interfejsu. Tylko lokalizacja i nazwa pliku szablonu są obowiązkowe.
Używanie Smarty
Aby uprościć programowanie, framework dostarcza szereg zmiennych i helperów, które są dostępne w szablonie.
Zmienne są następujące
- {$wa_url}: ścieżka do katalogu głównego instalacji frameworka z katalogu głównego witryny.
- {$wa_app_url}: względny adres URL strony frontend aplikacji z głównego katalogu witryny. W szablonach frontendowych zmienna zwraca ścieżkę do strony frontendowej aplikacji, w szablonach backendowych ścieżkę do strony backendowej aplikacji.
- {$wa_app_static_url}: ścieżka do katalogu aplikacji z korzenia strony (używana do budowania linków do statycznych plików aplikacji, np: {$wa_app_static_url}img/logo.png.
- {$wa_app}: zwraca APP_ID aplikacji.
- {$wa_backend_url}: względny URL backendu.
Helper $wa:
- {$wa->header()} - zwraca kod nagłówka HTML backendu z listą zainstalowanych aplikacji i nazwą bieżącego użytkownika.
- {$wa->app()} - APP_ID aplikacji.
- {$wa->appName()} -nazwa aplikacji.
- {$wa->accountName()} - nazwa konta (instancja instalacji frameworka).
- {$wa->css()} - zwraca kod HTML do podłączenia wymaganych plików CSS.
- {$wa->user()->getName()} - bieżąca nazwa użytkownika.
- {$wa->user()->getId()} - identyfikator bieżącego użytkownika.
- {$wa->version()} - numer wersji aplikacji.
- {$wa->url()} - ścieżka instalacji frameworka od korzenia witryny.
- {$wa->url(true)} - ścieżka do backendu z korzenia strony.
Lokalizacja
Aby wyświetlić ciągi znaków, które muszą być przetłumaczone w zależności od locale użytkownika, należy użyć mechanizmu gettext. W takim przypadku do kodu szablonu wstawiany jest klucz do tłumaczenia w ramce projektu
[` `], np: [`some gettext key`]. Więcej informacji na temat mechanizmu lokalizacji znajduje się w rozdziale Lokalizacja.
Przykład
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{$wa->appName()} — {$wa->accountName()}</title>
{$wa->css()}
<script src="{$wa_url}wa-content/js/jquery/jquery-1.4.2.min.js" type="text/javascript"></script>
</head>
<body>
<div id="wa">
{$wa->header()}
<div id="wa-app">
<div class="block">
{if !$records}
<p>[`Guestbook is empty. Write a new post on the public guestbook page.`]</p>
{else}
<ul class="zebra">
{foreach from=$records item=r}
<li>
{if $rights_delete}<a class="count" href="?action=delete&id={$r.id}"><i class="icon16 delete"></i></a>{/if}
<span class="hint">
<strong>{$r.name|escape}</strong>
{$r.datetime|wa_datetime}
</span>
{$r.text|escape|nl2br}
</li>
{/foreach}
</ul>
{/if}
<a href="{$url}" target="_blank">[`Guestbook on site`]</a>
<i class="icon10 new-window"></i>
</div>
</div>
</div>
</body>
</html>
Używanie alternatywnych silników szablonujących
Domyślny silnik Smarty 3 może być zastąpiony dowolnym alternatywnym silnikiem szablonów.
Framework komunikuje się z silnikiem szablonów poprzez specjalną klasę adaptera. W szczególności, system uzyskuje dostęp do Smarty 3 poprzez klasę systemową waSmarty3View, która znajduje się w pliku wa-system/view/waSmarty3View.class.php.
Aby użyć innego silnika szablonów, należy zaimplementować klasę adaptera i podłączyć ją (poprzez plik konfiguracyjny), aby umożliwić interakcję pomiędzy frameworkiem a silnikiem szablonów.
Łączenie szablonów w czystym PHP
Framework zawiera adapter, który pozwala na użycie zwykłych plików PHP jako szablonów.
Uwaga: Ten adapter został obecnie zaimplementowany w uproszczonej formie w celach demonstracyjnych i nie jest przeznaczony do stosowania w projektach o dużym obciążeniu.
Aby używać w swojej aplikacji szablonów PHP zamiast Smarty, wystarczy utworzyć plik konfiguracyjny wa-apps/{APP_ID}/lib/config/factories.php o następującej zawartości:
<?php
return array(
'view' => 'waPHPView'
)
Jeśli w aplikacji istnieje już plik factories.php, należy dodać do niego odpowiednią linię.
Konwencja nazewnictwa dla szablonów PHP jest taka sama jak dla szablonów Smarty. Jedyną różnicą jest rozszerzenie plików szablonów: w przeciwieństwie do szablonów Smarty, które mają rozszerzenie .html, szablony PHP mają domyślne rozszerzenie .php.
W szablonach PHP dostępne są te same wbudowane zmienne i helper $wa, co w szablonach Smarty.
Tworzenie adaptera do podłączenia silnika szablonów alternatywnych
Każdą tworzoną aplikację można skonfigurować tak, aby korzystała z silnika szablonów znanego twórcy. W tym celu należy określić klasę adaptera silnika szablonów w pliku konfiguracyjnym aplikacji wa-apps/{APP_ID}/lib/config/factories.php:
<?php
return array(
'view' => '{NAZWA KLASY ADAPTERA VIEW}'
);
Domyślną wartością parametru view
jest waSmarty3View
(adapter dla Smarty 3).
Możesz zdefiniować własną klasę jako klasę adaptera (musi ona pochodzić od klasy systemowej waView), umieścić ją w pliku o odpowiedniej nazwie w dowolnym miejscu podkatalogu lib/ aplikacji, a następnie zaimplementować w niej wszystkie potrzebne funkcje.
Implementacja adaptera do podłączenia silnika szablonów na przykładzie klasy waPHPView:
<?php
/**
* Każdy adapter View musi być dziedziczony z klasy systemowej waView
*/
class waPHPView extends waView
{
// Tutaj ustawiono domyślne rozszerzenia plików szablonów .html,
// aby używać zwykłego PHP jako view, pliki szablonów muszą mieć nazwy widoku *.php
protected $postfix = '.php';
// Zmienna do przechowywania danych przekazanych do view
protected $vars = array();
// Katalog główny dla szablonów (określony w konstruktorze)
protected $template_dir = array();
// Obiekt waSystem aplikacji
protected $system;
// Zmienna pomocnicza do przechowywania aktualnie aktywnego szablonu
protected $current_template;
public function __construct(waSystem $system, $options = array())
{
$this->system = $system;
// Ustawiamy katalog główny dla szablonów,
// domyślnie jest to katalog aplikacji wa-apps/{APP_ID}/
$this->template_dir = isset($options['template_dir']) ? $options['template_dir'] : $this->system->getAppPath();
}
/**
* Implementacja funkcji assign - przekazywanie danych do szablonu z działania/kontrolera
*/
public function assign($name, $value = null)
{
if (is_array($name)) {
$this->vars += $name;
} else {
$this->vars[$name] = $value;
}
}
/**
* Usuwanie zmiennej
*/
public function clearAssign($name)
{
if (isset($this->vars[$name])) {
unset($this->vars[$name]);
}
}
/**
* Czyszczenie wszystkich przesłanych danych do szablonu
*/
public function clearAllAssign()
{
$this->vars = array();
}
/**
* Zwraca jedną lub wszystkie zmienne przekazane do szablonu
*/
public function getVars($name = null)
{
if ($name === null) {
return $this->vars;
} else {
return isset($this->vars[$name]) ? $this->vars[$name] : null;
}
}
/**
* Zwraca wynik renderowania szablonu jako ciąg
*/
public function fetch($template, $cache_id = null)
{
ob_start();
$this->display($template, $cache_id);
$result = ob_get_contents();
ob_end_clean();
return $result;
}
/**
* Renderuje szablon do przeglądarki klienta
*/
public function display($template, $cache_id = null)
{
if ($this->templateExists($template)) {
$this->current_template = $template;
extract($this->vars);
include($this->template_dir.'/'.$this->current_template);
} else {
throw new waException("Template ".$template.' not found');
}
}
/**
* Sprawdza, czy podany szablon istnieje
*/
public function templateExists($template)
{
return file_exists($this->template_dir.'/'.$template);
}
}
0 komentarzy