Czytałem to pytanie przy przepełnieniu stosu:
/programming/104516/calling-php-functions-within-heredoc-strings
a zaakceptowana odpowiedź mówi, aby robić proste szablony PHP takie jak to:
template.php:
<html> <head> <title><?=$title?> </title> </head> <body> <? = getContent ()?> </body> </html>
index.php:
<? php $ title = „Tytuł demonstracyjny”; funkcja getContent () { return '<p> Witaj świecie! </p>'; } include („template.php”); ?>
Dla mnie powyższe nie jest dobrze skonstruowane w tym sensie, że template.php zależy od zmiennych zdefiniowanych w innych skryptach. I używasz metody include () do wykonywania kodu, kiedy to robisz include('template.php')
(w przeciwieństwie do metody include () w celu uwzględnienia klasy lub funkcji, która nie jest natychmiast wykonywana).
Wydaje mi się, że lepszym rozwiązaniem jest zawinięcie szablonu w funkcję:
template.php:
<? php szablon funkcji ($ tytuł, $ treść) { ob_start (); ?> <html> <head> <title><?=$title?> </title> </head> <body> <? = $ content?> </body> </html> <? php return ob_get_clean (); } ?>
index.php:
<? php requ_once ('template.php'); szablon wydruku („Tytuł demonstracji”, „<p> Hello World! </p>”); ?>
Czy drugie podejście jest lepsze? Czy jest na to lepszy sposób?
extract($this->properties);
do wyodrębnienia właściwości do zmiennych, tuż przed instrukcją include.Szablon zawsze będzie zależeć od zewnętrznych zmiennych, a ponieważ PHP jest językiem dynamicznym, nie ma sposobu na wymuszenie w czasie kompilacji, że będą tam. Więc pierwsze podejście jest prawdopodobnie w porządku; wciąż jednak istnieje kilka problemów:
Bardzo prostym podejściem jest napisanie funkcji, najlepiej o bardzo krótkiej nazwie, która zajmie się obydwoma; nazywanie tego
_()
wydaje się być wspólną konwencją. Prosta wersja może wyglądać następująco:A następnie w swoim szablonie zrobiłbyś:
Więcej rzeczy związanych z
_()
funkcją:htmlspecialchars
wywołania, w przypadkach, gdy chcesz przekazać do niego HTML zamiast nieprzetworzonych ciągów.Array
iObject
, ale raczej coś sensownego (lub pusty ciąg znaków).źródło
Pierwszy
template.php
jest łatwiejszy do załadowania w obecnej postaci do Dreamweaver / bluegriffon / czegokolwiek i edytowany przez nieznajomego projektanta stron internetowych po stronie serwera, drugi ... no cóż, nadal może, ale znacznie bardziej prawdopodobne jest uszkodzenie podczas procesu edycji .Wybrałbym pierwszy, aby wyglądał jak HTML z korzyściami , jak zwykle wolą projektanci zewnętrzni.
źródło
Ponieważ Codeigniter jest moim ulubionym frameworkiem, proponuję ci rozwiązanie oparte na Codeigniter:
Twój szablon wyglądałby następująco:
I wyrenderowałbyś to, tworząc instancję klasy, przekazując dane do tablicy jako parametr konstruktora i wywołując metodę „renderowania”:
W ten sposób nie wykonujesz bezpośrednio dołączonego kodu, a Twój szablon jest czytelny, więc projektanci będą zadowoleni.
źródło
Php nie jest językiem programowania. Tak więc pisanie z silnym pisaniem na klawiaturze nie jest możliwe, jeśli twój język nie ma prawdziwego systemu pisma. Ale możesz pomóc swojemu IDE, tak jak PHP-Storm, zrobić sztuczkę, którą chcesz ...
Twoja definicja widoku:
Twój plik szablonu:
źródło