簡體   English   中英

定制的PHP模板引擎

[英]Bespoke PHP Templating Engine

作為我正在研究的大學項目(基於定制MVC的項目管理系統)的一小部分,我需要開發一個模板引擎。 我不希望使用諸如Smarty之類的非自助系統,因為我已經自己編寫了項目的其他部分,並且現在不想再討論了。

無論如何,到目前為止,我已經設法編寫了一些簡單的代碼,我有一個類,創建它的實例,向該實例添加一些數據,然后傳入模板文件。 該文件具有一系列標簽,例如{this},然后將其替換為數據。 簡單。

我遇到的問題是涉及循環的事情,即用戶表或類別列表。 目前,我有一個頁面的模板文件(users.html),其中包含開始和結束標記,在它們之間有一個名為{users}的模板標記。 然后,我還有另一個模板文件(users-detail.html),該文件顯示包含用戶信息的表行。我正在創建users-detail.html模板的新實例,添加數據,對其進行解析,然后將其放置輸出(HTML字符串)到數組中。 然后,我循環該數組,將所有字符串附加在一起,然后將其分配給users.html模板文件中的{users}標簽。

正如您可能從該解釋中看到的那樣,這有點困難,而且可能有更好的方法來執行我要實現的目標。 理想情況下,如果可能的話,我想避免在模板文件中使用PHP,而且我經常需要在一個模板文件中包含多個循環。

如果有人對如何實現此目標有任何提示/建議,或者可以跟隨我的任何教程來獲得一些啟發,將不勝感激。

提前致謝。

我之前已經看過這種方法(包括用於循環內部的另一個模板)。 我曾經在vbulletin的舊版本上進行此工作。 這使事情變得非常煩人,因為您不能僅向模板添加循環-無需為循環的每一層設置一個全新的模板。

我建議您改走Smarty的路線。

傳統上,此語句:

我不希望使用諸如Smarty之類的非自助系統,因為我已經自己編寫了項目的其他部分,並且現在不想再討論了。

...表示您確實應該只使用Smarty。 在現實世界中,這對於自己重新實現某些功能來說是一個差勁的理由。 但是我就像你一樣,並且我理解你想自己實現一些東西(因為你想學習,發現它很有趣,是一個完美主義者,等等)。 只要您自己做,而且這是一個個人項目,那就去做吧。

值得研究Smarty以了解其工作原理(不僅是語法,還包括其如何編譯模板,存儲已編譯的版本等)。 您是否願意用PHP編寫可以編譯模板語言並輸出PHP的標記程序/解析器? 如果您足夠先進,可以執行此操作。 最簡單的說,您讀了一個{foreach from=$something}類的標簽,並以某種方式將其翻譯為<?php foreach ($something as $thing) { ?> 您檢查令牌類型等,以確保模板標記有效,依此類推。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM