SuperCMS的目的

Jan 14, 2010 at 8:56 AM

只是提供一个基础的模板和标签解析引擎。

SuperCmsBase 

接口定义。

SuperCmsDataProvider

标签的数据源提供程序,统一实行 IDataProvider接口。通过扩展可以自定义一个 直接执行SQL Statement的数据提供程序。

SuperCmsUrlReader

要生成的URL列表,统一实行IUrlReader 接口。可以通过传递不同的参数,执行诸如 生成指定范围 内的URL,例如 ID>80 AND  ID <800等此类URL列表。

SuperCmsXsltExtension

XSLT的扩展,用于在XSLT解析式可以直接调用的部分函数。目前尚实例。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sc="urn:SystemConfig">
<xsl:param name="conv" select="1.15"/>

<xsl:template match="bookstore">
    <bookstore>
        <xsl:for-each select="book">
            <book>
                <xsl:copy-of select="node()"/>
                <new-price>
                    <xsl:value-of select="sc:UserIsOnLine(Buyer)"/>
                </new-price>
            </book>
        </xsl:for-each>
    </bookstore>
</xsl:template>
</xsl:stylesheet>

 

 

SuperCmsWeb

模板和标签的解析引擎实现。嵌套标签尚未实现。不过该起来也很快。

例如:

protected Result  ParseHtml(string templateContent, NameValueCollection args)
        {
            Result rs = new Result();
            int deepCounnt = 100;
            try
            {
                string strCont = templateContent;
                NEXT:
                MatchCollection request = tagRequest.Matches(strCont );
                foreach (Match mr in request)
                {
                    string name = mr.Groups[0].Value.ToLower();
                    name = name.Substring("@Request_".Length);
                    string key = args[name];
                    strCont = templateContent.Replace(mr.Value, key);
                }
                MatchCollection tags = tagRegex.Matches(strCont);
                foreach (Match tag in tags)
                {
                    string tagCnt = ParseTag( tag.Value);
                    strCont = strCont.Replace(tag.Value, tagCnt);
                }
                request = tagRequest.Matches(strCont);
                tags = tagRegex.Matches(strCont);
                if ((request.Count > 0 || tags.Count > 0) && deepCounnt > 0)
                {
                    deepCounnt--;
                    goto NEXT;
                }
                rs.Ok = true;
                rs.Content = strCont;

            }
            catch (System.Exception ex)
            {
                rs.Ok = false;
                rs.Content = ex.Message;
            }
            return rs;
         
        }

---------------此段代码尚未测试。

 

因为目前主要是测试生成流程,对标签的嵌套解析和XSLT的扩展均无任何实现