Technologie i narzędzia: język PHP 5, Java, JavaScript, Python, system Zend Framework, Django, biblioteka jQuery, Smarty, platforma Eclipse, MySQL, SVN, CVS, UML, Firefox.
WebProgramming - wszystko o serwisach internetowych
O serwisach internetowych.
[smarty] Ciekawe wykorzystanie modyfikatora.
Przyszedł czas na ciekawostkę, a dokładnie na nietypowe (wg mnie) wykorzystanie modyfikatorów biblioteki Smarty. Wyobraźmy sobie, że mamy bibliotekę do obsługi formularzy (wraz z walidacją pól), która dla każdego pola przechowuje informacje o tym, czy jest ono poprawne, czy też nie - informacja ta bardzo by się przydała w warstwie widoku, tylko jak ją “przekazać”. Pierwsza myśl jaka przyszłaby mi do głowy to stworzenie funkcji (wtyczki typu ‘template function’) Smarty, która realizowałoby tą funkcjonalność, na przykład:
-
function smarty_function_hasError($params, &$smarty) {
-
$hasError = false;
-
// Sprawdź, czy pole $params['field'] ma błędy
-
$hasError = Form::getFieldError($params[‘field’]);
-
}
-
return $hasError;
-
}
Problem jest gdy chcemy sprawdzić w warunku ‘if’, czy dane pole posiada błąd. W tym przypadku najczęściej tworzy się możliwość zapisywania wyniku danej funkcji do zmiennej Smarty, w stylu:
-
// …
-
// } (linia #6)
-
$smarty->assign($params[‘assign’], $hasError);
-
return ”;
-
}
-
// return $hasError; (linia #7)
-
// …
W szablonie Smarty wykorzystanie tej wtyczki wygląda następująco:
-
{hasError field="lastname" assign="lastnameErr"}
-
{if $lastnameErr} … {/if}
Niestety jest to mało przyjemne w użyciu… jest jednak inne wyjście - stworzenie prostego modyfikatora w postaci:
-
function smarty_modifier_hasError($field) {
-
return Form::getFieldError($field);
-
}
Wówczas wykorzystanie jest dużo prostsze i łatwiejsze:
-
{if "lastname"|hasError} … {/if}
Mimo, iż sam zapis wydaje się dość dziwny - w końcu modyfikatory powstały głównie do “filtrowania” zmiennych, a nie interpretowanie bezpośrednio napisów - to w/w sposób wydaje się idealny do tej sytuacji.
Napisz komentarz