在HTML中查找自定义标记的出现,执行函数并用函数输出替换标记

时间:2011-03-12 16:37:12

标签: php regex templates content-management-system

这可能是一个非常简单的问题,所以对于不再具有挑战性而道歉!

我正在开发一个使用模板系统的内部CMS。

为了使这个CMS尽可能扩展,我想使用“模块”。因此,在模板文件中,我想放置代表模块的自定义HTML标记。

这看起来像是:

<p><Module name="newsTicker" property="value" anotherProperty="anotherValue" /></p>

我使用以下方法获取模板文件:

ob_start();
include "templatefile.tpl";
$buffer= ob_get_contents();
ob_end_clean();

现在我想查看$buffer的内容,并且对于每个<Module name="moduleName" />我想要include "moduleName.class.php"的出现,创建该类的新实例,运行getOutput()该模块的函数,并将返回值放在<Module />标记的位置。

我不知道该怎么做......:/任何想法?

如果您不理解新闻自动收报机。我可以编写一些代码来查看我的数据库中的新闻表,并列出10个最新的新闻故事,然后将其输出到html <ul>。我想抽象它,以便它可以在许多页面上使用。因此,在我的主页模板中,我可能会使用标记<Module name="newsTicker" />。现在当我访问主页时,我需要查看主页tpl文件,我会找到它所说的<Module name="newsTicker" />,我将提取name属性并包含一个基于该名称的类(在这种情况下,它将是newsTicker.class.php)。这将有一个名为getOutput()的函数,因此我将能够执行类似于$output = $current_module->getOutput();的操作,然后我需要返回到我的tpl文件并更改原始<Module name="newsTicker" />的内容$output

感谢您的帮助。 :)

汤姆

1 个答案:

答案 0 :(得分:2)

  • 使用DOMDocument查找Module元素(我只会亲自使用小写)。
  • 存储name属性。
  • include_once基于name属性的类(如果使用自动加载则跳过)。
  • 使用$class = new $name
  • 删除Module的原始appendChild DOM元素和$class->getOutput()