zoukankan      html  css  js  c++  java
  • 秋色园QBlog技术原理解析

    文章回顾:

     

    ps:秋色园QBlog下载地址http://www.cyqdata.com/download/article-detail-427

     

    上节回顾:

    上一节 秋色园QBlog技术原理解析:独创的多语言翻译机制(九) 中,介绍了秋色园QBlog的多语言翻译机制,

    严重的解放了coder的劳动力,将翻译的职责分离给美工界。

    事隔10来天,本篇接给力,为大伙演示一下完整的内容填充及页面翻译。

    开始动手了:

     

    一:整体介绍解决方案:

     

    从上往下看,比上一个示例多了以下内容:

    1:数据库一个:myspace.mdb,采用的是秋色园的的数据库,里面还存有不少数据。

    2:Language.ashx:多语言处理程序,用来翻译用的。

    3:UrlRewriteEntity:增加的静态内容项目,放了一条SQL和表枚举

    OK,增加的东西并不多,其它的都是上次示例的内容了,不知道的回头看起吧。

     

    二:多语言翻译

     

    1:正如上节示例中,一次性的批量翻译代码:

            private void Translate(XmlHelper doc)
            {
                System.Xml.XmlNodeList list = doc.GetList("*", "key");//获取所有带key标签的节点
                System.Xml.XmlAttribute attr = null;
                if (list != null && list.Count > 0)
                {
                    string key = null;
                    for (int i = 0; i < list.Count; i++)
                    {
                        attr = list[i].Attributes["key"];
                        key = attr.Value;
                        list[i].InnerXml = _Language.Get(key);//翻译
                        list[i].Attributes.Remove(attr);//移除key属性
                    }
                }
                list = doc.GetList("*", "keyvalue");//获取所有带keyvalue标签的节点
                if (list != null && list.Count > 0)
                {
                    string key = null;
                    for (int i = 0; i < list.Count; i++)
                    {
                        attr = list[i].Attributes["keyvalue"];
                        key = attr.Value;
                        list[i].Attributes["value"].InnerXml = _Language.Get(key);//翻译
                        list[i].Attributes.Remove(attr);//移除keyvalue属性
                    }
                }
            }

     

    2:HttpCustom业务流程里,需要增加调用翻译这么一行

            private void Page_PreLoad()
            {
                if (_Document.Load(Context.Server.MapPath("Skin/system_health/index.html")))
                {
                    CssAndImg(_Document);
                    Translate(_Document);
                }
            }

     

    3:URL重写,将语言切换路径重定向到Lanuage.ashx处理程序中

            public void HttpUrlRewrite(HttpContext context)
            {
                string url = context.Request.Url.ToString();
                if (url.Contains(".css") || url.Contains(".jpg") || url.Contains(".png"))//放到css和jpg图片
                {
                    return;
                }
                if (url.Contains("lang"))
                {
                    context.RewritePath("~/Language.ashx", null, "url=" + url);
                }
                else
                {
                    //--这里要做很多Url逻辑处理
                    context.RewritePath("~/Default.ashx", null, "url=" + url);
                }
            }

     

    4:Language.ashx处理一下,然后返回原来页面

    public class Language : HttpCustom
    {
        protected override void Page_Load()
        {
            string url = Request["url"];
            string lanKey = url.Substring(url.LastIndexOf('/')+1);
            Language.SetToCookie(lanKey.Substring(0, 1).ToUpper() + lanKey.Substring(1));
            Context.Response.Redirect(Context.Request.UrlReferrer.ToString());

        }
    }

     

    OK,多语言处理就算结束了,预览效果?不急,等把内容填充也一并完成先吧。

     

    三:页面内容填充

     

    1:创造类似CMS般的约定语法

    示例:

    <ul class="evt_hots_list" name="catelist" id="16" count="8">
          <li><a href="http://www.cyqdata.com/">省略内容</a></li>
    </ul>

    说明:

    1:catelist,一个约定的标签,名称分类列表

    2:id,就是分类的id了。

    3:count,就是循环多少条

    4:Li那一行,装饰用的,因为最终它是被替换掉了。

    总说明:任意标签只要加上catelist+id,都可以得到一个分类的循环输出,至于count就是可选项了。

     

    2:整理HTML,按约定放好要显示分类的标签

    例如:

    <ul class="evt_plist" name="catelist" id="12" count="40">
     <!-- 健康·教育 -->
     <li><a target="_blank" title="路过秋天" href="#">教育</a></li>
     </ul>
     <ul class="evt_plist" name="catelist" id="13" count="40">
     <!-- 健康·和谐 -->
      <li><a target="_blank" title="路过秋天" href="#">和谐</a></li>
      </ul>
      <ul class="evt_plist" name="catelist" id="14" count="40">
      <!-- 健康·私语 -->
      <li><a target="_blank" title="路过秋天" href="#">私语</a></li>
       </ul>

    这么稳妥的放几行,结果就是自动取分类id为12,13,14的内容填充列表了。

     

    3:后台写一个通用的代码处理

    OK,现在类似CMS的自填充功能也写好了,程序员也轻松,美工也轻松。

     

    四:最终F5预览看效果

     

    1:访问,内容列表出现了

     

    2:英文翻译时

     

    翻译只是翻译了界面,内容是没有翻译的,想翻译内容?自己写多一篇英文的文章吧,哈哈!

     

    五:总结

    本节做为一基础的总结性文篇,没有太多的细节文字解说,旨在为大伙提供一个整体流程的示例代码,重点在源码。

    下节,将继续下一个流程,解析秋色园QBlog的Post提交机制。

     

    六:源码下载

     

    最后,就是大众期待的源码下载了。

    下载地址: 秋色园原理解析第十节示例.rar

    版权声明:本文原创发表于 博客园,作者为 路过秋天,博客 http://cyq1162.cnblogs.com/ 
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
  • 相关阅读:
    Android开发 使用 adb logcat 显示 Android 日志
    【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410
    C语言 结构体相关 函数 指针 数组
    C语言 命令行参数 函数指针 gdb调试
    C语言 指针数组 多维数组
    Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用
    C语言 内存分配 地址 指针 数组 参数 实例解析
    CRT 环境变量注意事项
    hadoop 输出文件 key val 分隔符
    com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Too many connections
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1988691.html
Copyright © 2011-2022 走看看