【问题标题】:Custom HTML Tags in PHPPHP 中的自定义 HTML 标签
【发布时间】:2012-01-05 08:36:47
【问题描述】:

当我在玩 Joomla 时!源代码,我看到了这样的代码(或类似的,我不太确定,因为那是一段时间):

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

我并没有说它和上面的完全一样,但是当我看到类似 Asp.NET 的自定义标签时,我真的很惊讶:

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

我现在想知道如何像在 Asp.NET 中那样在 PHP 中完成相同或类似的事情。是否有任何此类框架的库?

我是否需要编写一个解析器来解析我的 php 代码并搜索此类标签并将它们替换为对应的内容,例如 Asp.NET 将 &lt;asp:Label/&gt; 替换为 &lt;span/&gt;

我的个人喜好:

我喜欢 Asp.NET 通过将代码隐藏与设计视图或 html 与 c# 代码分开所做的工作。并且使用 asp.net 的服务器端控件使开发人员可以轻松地从代码隐藏访问 html 控件。这听起来像是关注点分离,我想知道是否有任何项目或方式已经做了同样的事情?

【问题讨论】:

  • 老实说,从我与其他人的谈话来看,我不是 Asp.NET 的粉丝,但你不能用模板引擎实现类似的东西吗?首先想到的是 Smarty,我已经使用了很长一段时间了,它非常可靠且易于破解。
  • PHP 是一种解释性语言,这意味着它会逐行执行代码,同时将自身配置到 apache 或 IIS 环境中,然后执行任何以 PHP 结尾的文件。这意味着一切都在服务器端执行,而 .net 使用即时编译器,它保存语法并在稍后阶段执行。这是可能的,但从根本上说您需要更改 PHP。即让它像 JIT 编译器......!
  • Parsing Custom Tags with PHP 的可能重复项

标签: php asp.net custom-tags


【解决方案1】:

如果您使用一种方法,其中表示层与执行逻辑分开存储(例如,模板引擎),那么创建一个解析器非常容易,它在 HTML 中查找特定代码并将其替换为其他内容。您可以制作自己的“SMARTY”语言。

但是,如果您的代码只是“可执行的 PHP”,没有层分离,则不能进行此类替换(因为它是由 PHP 脚本引擎直接执行的)。通过“可执行的 php”,我的意思是这样的:

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

【讨论】:

  • 感谢您对模板引擎的关注
【解决方案2】:

或者,您可以使用 MVC 框架(Zend 框架、Codeigniter 或类似框架),它为您做了很多关注点分离。

正如建议的那样,SMARTY 是一个模板引擎,几乎可以满足您的需求,但这只是难题的一部分。抽象您的数据访问层也是一个好主意。

你也可以在你的服务器配置中启用短标签,然后你甚至可以用类似...的东西来整理你的演示代码

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

【讨论】:

  • 不要混淆&lt;?&lt;?=不是短标签它的替代语法基本上它意味着&lt;?php echo,并且在php5及更高版本上支持,无需启用它
  • 哎呀,真的吗?我理解你的担心。但是,如果他们还想使用更多的“模板样式”标记,例如 $v) : ?>
【解决方案3】:

你可以试试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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多