• 秋色园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/ 
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
  • 相关阅读:
    git 之gitignore 添加项之后生效的问题
    使用 padding-bottom 设置高度基于宽度的自适应
    ES5中新增的Array方法详细说明
    zepto.js 自定义打包集成其他模块构建流程
    移动端如何让页面强制横屏
    快来看看抓包工具有哪些?
    实践出真知,小程序wepy,uni-app框架开发使用!
    开发过程遇到的css样式问题记录
    带坑使用微信小程序框架WePY组件化开发项目,附带第三方插件使用坑
    微信 + weui 框架记录
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1988691.html
Copyright © 2020-2023  润新知