2011-11-24 119 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