为 CMS 创建自定义“html”标签?
Posted
技术标签:
【中文标题】为 CMS 创建自定义“html”标签?【英文标题】:Creating custom "html"-tags for CMS? 【发布时间】:2011-03-14 07:08:40 【问题描述】:我正在为 php 中的 Web 应用程序使用 CMS,它需要通过编写以下内容来缩短插入(嵌入)内容的过程,例如来自 youtube 或 vimeo 的视频,这些内容存储在数据库中:
<youtube id="wfI0Z6YJhL0" />
在某种替换后会输出以下内容:
<!-- Custom formatting before object !-->
<object ><param name="movie" value="http://www.youtube-nocookie.com/v/wfI0Z6YJhL0&hl=sv_SE&fs=1?rel=0&color1=0xe1600f&color2=0xfebd01"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/wfI0Z6YJhL0&hl=sv_SE&fs=1?rel=0&color1=0xe1600f&color2=0xfebd01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" ></embed></object>
<!-- Custom formatting after object !-->
我如何在 PHP 中做到这一点?
【问题讨论】:
取决于 CMS,以及它是否已经支持这样的东西,或者您必须从头开始构建它。不管你怎么做,你可能想要使用 html 的标签分隔符以外的东西来环绕你的“标签”,或者解析和替换会非常慢。我强烈推荐[]
或
,后者在PHP 模板工具中特别常见。
将全部用于自定义cms。正如你所说,我确信它可以用一些 []/ 括号来制作,但我不知道如何进行替换。你愿意举个例子吗?
【参考方案1】:
我已经编写了一个类,它完全可以满足您对我自己的 cms 的要求。我已经为您上传了 src,虽然我从未发布过它,但源代码是在 BSD 样式许可下发布的。 Custom Tags
它基本上可以让你完全按照你的要求去做。在课堂上有一些示例自定义标签,所以我不会在这里粘贴代码。告诉我你的进展情况。
编辑 1:请求的示例代码。 :-)
编辑 2:我应该添加它支持隐藏的自定义标签。
编辑3:它还支持内联模板和标签替换,即
<ct:inline some="attribute">
This is an in line template. <br />
This is a #tag that can be accessed by the callback function
</ct:inline>
PHP/HTML:example.php
<?php
$current_dir = dirname(__FILE__).DIRECTORY_SEPARATOR;
require_once dirname($current_dir).DIRECTORY_SEPARATOR.'customtags.php';
$ct = new CustomTags(array(
'parse_on_shutdown' => true,
'tag_directory' => $current_dir.'tags'.DIRECTORY_SEPARATOR,
'sniff_for_buried_tags' => true
));
?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>untitled</title>
<meta name="generator" content="TextMate http://macromates.com/">
<meta name="author" content="Oliver Lillie">
<!-- Date: 2010-07-10 -->
</head>
<body>
<ct:youtube id="wfI0Z6YJhL0" />
</body>
</html>
自定义标签 PHP 函数:tags/youtube/tag.php:
function ct_youtube($tag)
return '<object id="'.$tag['attributes']->id.'" value="http://www.youtube.com/v/'.$tag['attributes']->id.'" /><param ......>';
输出:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>untitled</title>
<meta name="generator" content="TextMate http://macromates.com/">
<meta name="author" content="Oliver Lillie">
<!-- Date: 2010-07-10 -->
</head>
<body>
<object id="wfI0Z6YJhL0" value="http://www.youtube.com/v/wfI0Z6YJhL0" /><param ......>
</body>
</html>
【讨论】:
@buggedcom 这听起来很有趣。在这里编辑示例代码对于将来的提问者进行快速比较会很有趣。 我刚刚测试了一个将 simpleHTMLDom 与 CustomTags 进行比较的示例脚本,比较结果如下:simpleHTMLDom -> 时间:0.0057680606842 秒,内存使用:0.608268737793 MB,内存使用峰值:0.654273986816 MB。 CustomTags:时间:0.00264501571655 秒,内存使用:0.452098846436 MB,内存峰值使用:0.518165588379 MB。事实证明自定义标签在性能方面稍微好一些,所以我会使用它,除非你需要 simpleHTMLDom 使用的其他细节。 我一直在考虑对此进行适当的发布,但还没有时间。它确实具有提供跨 cms 功能的巨大潜力,即视频标签、swf 标签等。总有一天我会抽空去做... 我有一个very similar problem,这看起来可能正是我一直在寻找的解决方案。现在,如果我能在 7 月份你发布它的时候找到... 这听起来也很有趣。在 Java 中使用类似的东西,并且正在寻找 PHP 替代方案。我喜欢在标签文件中隐藏后端代码的能力。【参考方案2】:我不能 100% 确定它将如何对非标准标签做出反应,但如果它有效,simpleHTMLDom 将是完美的选择。
$html = str_get_html('....');
然后是...
$element = $html->find('youtube',0 ); // Finds first element
// - use "foreach" loop for final version
$element->tag = 'object';
$element->value = "http://www.youtube.com/v/".$element->id;
$element->innertext= "<param ......>"
....
echo $html;
你明白了。
这种方法的美妙之处在于,每个特定的扩展都可以用干净的 HTML 符号 <tagname attribute="value">
添加其数据,甚至可以为结构化信息添加子标签,而不是 kludgy placeholder
s 和正则表达式等开。
我从未尝试过,现在也没有时间测试,但如果您决定尝试一下,我很想知道这种方法是否有用。
【讨论】:
它应该工作得很好,因为 Simple DOM 将解析 XML 而不仅仅是 HTML,尽管它的名字。我已经按照您描述的方式完成了一个简单的内容替换处理引擎,尽管我使用了带有特定类的 span:s,在包含 html cmets 时指定了参数。 确实有效 我做了一个比较,效果很好,但是它使用的资源比自定义标签略多,大概是因为自定义标签专门针对提供特定级别的功能,所以除非你需要它我会选择 CustomTags以上是关于为 CMS 创建自定义“html”标签?的主要内容,如果未能解决你的问题,请参考以下文章
动易CMS如何在文章频道,文章自定义列表标签中调用“自定义自段$MY_ABC
织梦CMS自定义标签在哪设置?网站模板自己做的,以前用过科讯CMS,不了解织梦,想知道怎么自己定义