2011-11-24 83 views
0

當我與Joomla玩耍時!源代碼,我看到諸如代碼(或類似這樣的,我不是很肯定,因爲它是一個,而當時):PHP中的自定義HTML標記

<juc:place name="module" some-other-attributes/> 

我不告訴它是完全一樣的一個以上,但我實際上驚訝,當我看到Asp.NET般的自定義標籤:

<asp:Label ID="lblLabel" runat="server"/> 

我現在想知道如何做到同樣的事情,或者類似的PHP,就像他們在Asp.NET一樣。有沒有這樣或那樣的框架庫?

我是否需要寫一個解析器解析我的PHP代碼和搜索這類標籤和以上是相應的像Asp.NET什麼替代<asp:Label/><span/>

我個人的偏好替換它們:

我就像Asp.NET通過從設計視圖中分離代碼隱藏或從C#代碼中分離出html一樣。使用asp.net的服務器端控件,開發人員可以輕鬆地從代碼隱藏中訪問html控件。這聽起來像是關注點的分離,我想知道是否有任何項目或方式已經做了同樣的事情?

+1

說實話,我不是從我與其他人交談,但你能不能達到一個模板引擎類似Asp.NET的粉絲嗎?首先想到的是Smarty,我現在用了很長一段時間,非常可靠且易於破解。 – Claudiu

+1

PHP是一種解釋性語言,它意味着它在執行逐行代碼的同時將其自身配置到apache或IIS環境中,然後執行任何結束PHP的文件。這意味着所有事情都在服務器端執行,而.net使用Just in time編譯器,這會節省語法並在稍後階段執行。這將是可能的,但有些fundementally你需要改變PHP。即讓它像JIT編譯器...! –

+0

[用PHP解析自定義標籤]可能的副本(http://stackoverflow.com/questions/1201778/parsing-custom-tags-with-php) – esqew

回答

1

如果使用一種方法,將表示層與執行邏輯(例如,模板引擎)分開存儲,那麼創建一個解析器非常簡單,該解析器在HTML中查找特定的代碼並用其他方法替換它。你可以製作自己的「SMARTY」語言。但是,如果你的代碼只是「可執行的PHP」而沒有層分離,你不能做這樣的替換(因爲它是由PHP腳本引擎直接執行的)。通過「可執行PHP的」我的意思是這樣的:

<html> 
    <head> 
    ... 
    </head> 
    <body> 
    <?php echo "Hello world"?> 
    </body> 
</html> 
+0

感謝您對模板引擎的熱衷 – Tarik

1

或者,你可以使用一個MVC框架(Zend框架,笨或類似),它做了很多對你的關注分離。

如上所述,SMARTY是一種模板引擎,它可以完成您所追求的功能,但這只是難題的一部分。抽象你的數據訪問層也是一個好主意。

你也可以在你的服務器配置使短標籤,那麼你甚至可以收拾你的演示代碼類似...

<html> 
    <head> 
    ... 
    </head> 
    <body> 
     <?= "Hello, world!" ?> 
    </body> 
</html> 
+0

不要將'<?'與'<?='不是短標籤,它的替代語法基本上是指'<?php echo',並且在php5及以上版本支持,無需啓用它 –

+0

哎,真的嗎?我理解你的關心。然而,如果他們想要使用更多的「模板風格」標記,比如<? foreach($ var as $ k => $ v):?> – jellis

0

你可以嘗試SimpleHTMLDOM。你可以運行類似...

$html = new simple_html_dom(); 
$html->load_file(fileToParse.html'); 
foreach($html->find('tagToFind') as $element){ 
    $element->tag='span'; 
} 

這應該工作。

你可能想看看Creating custom html tags for cms