在 HTML 中查找自定义标签的出现,执行函数并用函数输出替换标签
这可能是一个非常简单的问题,所以很抱歉没有更具挑战性!
我正在开发一个使用模板系统的内部 CMS。
为了使这个 CMS 尽可能可扩展,我想使用“模块”。因此,在模板文件中,我想放置代表模块的自定义 HTML 标签。
这看起来像:
我通过使用以下方式获取模板文件:
ob_start();
include "templatefile.tpl";
$buffer= ob_get_contents();
ob_end_clean();
现在我想浏览 $buffer
的内容,并且对于每次出现
我想 include "moduleName .class.php"
,创建该类的一个新实例,运行该模块的 getOutput()
函数,并将返回值放在
标签曾经是。
我不知道该怎么做...:/有什么想法吗?
如果您不明白,请考虑新闻报道。我可能会编写一些代码来查看数据库中的新闻表并列出 10 条最新新闻报道的列表,然后将其输出到 html
。我想对其进行抽象,以便它可以在许多页面上使用。因此,在我的主页模板中,我可能有标签
。现在,当我访问主页时,我需要查看主页 tpl 文件,我会找到其中显示
的位置,我将提取 < code>name 属性并包含一个基于该名称的类(在本例中为 newsTicker.class.php
)。这将有一个名为 getOutput()
的函数,因此我将能够执行类似于以下内容的操作: $output = $current_module->getOutput();
然后我需要返回我的 tpl 文件并将原始
更改为 $output
的内容。感谢您的帮助。 :)
汤姆
This is probably a really easy question, so apologies for not being more challenging!
I am developing an in house CMS which uses a templating system.
To make this CMS as extendable as possible I want to use "modules". Hence in the template files I want to put custom HTML tags which represent modules.
This will look like:
<p><Module name="newsTicker" property="value" anotherProperty="anotherValue" /></p>
I get my template file by using:
ob_start();
include "templatefile.tpl";
$buffer= ob_get_contents();
ob_end_clean();
Now I want to go through the contents of $buffer
and for every occurance of <Module name="moduleName" />
I want to include "moduleName.class.php"
, create a new instance of that class, run the getOutput()
function of that module and put the return value in where that <Module />
tag used to be.
I have no idea how to go about that... :/ Any ideas?
If you don't understand think about a news ticker. I may write some code that looks through the news table in my database and makes a list of the 10 latest news stories, then it outputs it to a html <ul>
. I want to abstract this so that it can be used on many pages. So in my template for the home page I might have the tag <Module name="newsTicker" />
. Now when I visit the home page I need to look through the home page tpl file and I'll find where it says <Module name="newsTicker" />
, I'll extract the name
attribute and include a class based on that name (in this case it will be newsTicker.class.php
). This will have a function called getOutput()
so I will be able to something similar to: $output = $current_module->getOutput();
and then I need to go back to my tpl file and change the original <Module name="newsTicker" />
for the contents of $output
.
Thanks for your help. :)
Tom
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Module
元素(我个人只会使用小写字母)。name
属性。include_once
基于name
属性的类(如果使用自动加载则跳过)。$class = new $name
。Module
DOM 元素和$class->getOutput()
的appendChild
。Module
elements (I would use lowercase only personally).name
attribute.include_once
the class based onname
attribute (skip if using autoloading).$class = new $name
.Module
DOM element andappendChild
of$class->getOutput()
.