为 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&amp;hl=sv_SE&amp;fs=1?rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/wfI0Z6YJhL0&amp;hl=sv_SE&amp;fs=1?rel=0&amp;color1=0xe1600f&amp;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 符号 &lt;tagname attribute="value"&gt; 添加其数据,甚至可以为结构化信息添加子标签,而不是 kludgy placeholders 和正则表达式等开。

我从未尝试过,现在也没有时间测试,但如果您决定尝试一下,我很想知道这种方法是否有用。

【讨论】:

它应该工作得很好,因为 Simple DOM 将解析 XML 而不仅仅是 HTML,尽管它的名字。我已经按照您描述的方式完成了一个简单的内容替换处理引擎,尽管我使用了带有特定类的 span:s,在包含 html cmets 时指定了参数。 确实有效 我做了一个比较,效果很好,但是它使用的资源比自定义标签略多,大概是因为自定义标签专门针对提供特定级别的功能,所以除非你需要它我会选择 CustomTags

以上是关于为 CMS 创建自定义“html”标签?的主要内容,如果未能解决你的问题,请参考以下文章

帝国cms 标签模板的页面模板内容怎么调用栏目自定义变量

动易CMS如何在文章频道,文章自定义列表标签中调用“自定义自段$MY_ABC

杂项-Java:自定义标签

织梦CMS自定义标签在哪设置?网站模板自己做的,以前用过科讯CMS,不了解织梦,想知道怎么自己定义

织梦CMS如何在自定义表单页调用arclist标签啊,怎么在自定义表单页调用无效!

FastAdmin CMS内容管理插件标签文档