目录结构

结构解释

  • theme-name目录下的pages和static两个目录名称不可自定义

  • pages下是自定义区, 可根据自己的需求设计路由

  • static下主页用于存放css, js ,img等静态文件

路由

pages目录下的所有html文件的 "路由" 都和目录结构层次一样, 路由从pages下的第一级目录开始.

路由上无需带上".html"后缀. 比如需要访问theme-name/pages/contcat/weixin.html, 路由则是/contcat/weixin.

如果路由只写到目录层(未写到具体文件名), 则会响应此目录下的index.html文件.如果该目录下无index.html文件, 则响应404

比如:访问路由为/about-us和/about-us/index都会响应同一个about-us/index.html文件

conf.yaml 使用说明(格式)

  1. # 主题名必须和主题主目录一致
  2. theme_name: Your theme's name
  3. author: Allen Woo
  4. theme_uri: yoursite.com
  5. introduce: 这里是主题的简单介绍
  6. cover_path: static/sys_imgs/cover.png
  7. version: v0.1
  8. license: BSD-2

init_setting.json 初始化配置文件

  1. [
  2. {
  3. name: <str>
  4. type: <str>
  5. category: <str>
  6. title: <str>
  7. link: <str>
  8. switch: <int:0 or 1>
  9. code_type: <str:'html' or 'json'>
  10. code: <str or json>
  11. text: <str>
  12. text_html: <str>
  13. }
  14. ]

示范

  1. "name": "about_us",
  2. "category": "文本信息",
  3. "type": "text",
  4. "link":"",
  5. "code_type":"html",
  6. "code":"",
  7. ""
  8. "text": "这里展示关于我们信息",
  9. "title": "关于我们"
  10. },
  11. {
  12. "name": "contact",
  13. "type": "text",
  14. "text": "Email:xxx@xxx.com",
  15. "title": "联系"
  16. },
  17. {
  18. "name": "contact",
  19. "category": "文本信息",
  20. "type": "image",
  21. "text": "Email:xxx@xxx.com",
  22. "title": "联系"
  23. },
  24. {
  25. "name": "photo-page-nav",
  26. "category": "Photo导航",
  27. "type": "text",
  28. "link": "",
  29. "title": "Photo页面导航",
  30. "code":["城市","风光"],
  31. "code_type":"json",
  32. "text_html": "导航是[多媒体>图库]中的任一[分类名称]",
  33. "text": "导航是[多媒体>图库]中的任一[分类名称]"
  34. },
  35. {
  36. "name": "display_tag",
  37. "category": "首页展示",
  38. "type": "text",
  39. "title": "Home页面文章Tags展示开关, 不需要展示则关闭开关",
  40. "switch":1,
  41. "link": "",
  42. "text": "管理端->主题展示设置->图文里添加或修改,删除"
  43. }
  44. ]

全局变量

全局变量 g

  • 在html中使用osroom提供的全局变量 g 可以获取站点的一些公开设置与数据(使用方法见模板引擎Jinjia2)

全局遍历current_user

  • 在html中使用osroom提供的全局变量cureent_user(提供当前用户的一些可公布信息与方法), 使用方法见模板引擎Jinjia2

current_user 提供的方法有

  1. current_user.id
  2. current_user.username
  3. current_user.email
  4. current_user.mphone_num
  5. current_user.gender
  6. current_user.avatar_url
  7. current_user.role_id
  8. current_user.active
  9. current_user.is_delete
  10. current_user.create_at
  11. current_user.update_at
  12. current_user.editor
  13. current_user.jwt_login_time
  14. current_user.user_info

 注意

  • 以上全局变量只适合在OSROOM主题上使用, 未经过OSROOM系统的html等, 可以调用API: /api/global来获取全局数据了.
  1. API: /api/global
  2. 获取当前全局数据,包括站点的公开设置, 当前登录用户的基本可公开信息.
  • 使用模板引擎可以将数据渲染在html中

示范1: 获取全局变量g

  1. <!--获取site配置的LOGO路由-->
  2. <img class="osr-logo" src="{{g.site_global.site_config.LOGO_IMG_URL}}" alt="Logo">
  3. <!--想知道g会包含哪些数据可以将它在html页面中全部显示出来,如下-->
  4. {{ g }}
  5. <!--想知道网站的全局数据site_global,如下-->
  6. {{ g.site_global }}
  7. <!--这样也可以,如下-->
  8. <script>
  9. var current_lang = '{{g.site_global.language.current}}';
  10. alert(current_lang);
  11. </script>

示范2: 获取cureent_user

更多的Jinjia2的语法

  • 了解了OSROOM提供的相关信息后就可以开发自己的主题了, 当然你要先去学习下Jinjia2使用.

其他公共数据

  • 最后我们要通过Api获取和提交其他数据,比如登录, 注册, 发表等, 具体有哪些Api请看Api文档

主题设置数据

这里要强调的是一个多媒体数据获取API:

/api/global/theme-data/display
  • 主题的很多设置可以在Admin管理的主题展示设置中设置

  • 比如图片设置页面中: 127.0.0.1/osr-admin/theme-setting/display/image

例子:

var conditions = [
     {
        type:"image",
        name_regex:"home-carousel-[0-9]+",
        result_key:"home_carousel"
     },
     {
        type:"image",
        name_regex:"home-rec1-[0-9]+",
        result_key:"rec_1"
     }
];
var d ={
    conditions:JSON.stringify(conditions)

}

// js请求api
var result = $.request("GET","/api/global/theme-data/display", d);
result.then(function (r) {
    var carousel = r.data.medias.home_carousel;
    var rec_1 = r.data.medias.rec_1;
});


  • /api/global/theme-data/display的具体使用方式可以见api文档, 以下文档不一定是最新的
/api/global/theme-data/display 调用说明
GET:
    1.获取主题展示用的多媒体数据
    conditions:<array:dict>, Such as:[{'type':<str>, 'names':<array>, 'name_regex':''}]
        说明:
            type-可以是"text", "image", "video", "audio"
            names-数组,指定要获取数据的name
            name_regex-字符串,获取匹配此正则的media,如果为空值,则不使用正则匹配(空置包括null, None,False, "")
            注意:name 与name_regex不能同时使用,当name_regex非空时,查询自动忽略names
        使用示例:前提在管理端多媒体中存在的内容
        如:首页轮播图片和获取”关于我们“页面的文字内容
        [
            {"type":"image", "names":["home-carousel-1", "home_carousel-2"]},
            {"type":"text", "names":["about-me"]},
            {"type":"image", "name_regex":"test-[0-9]+"}
        ]


标记文本

  • 使用{{_()}}标记

提取文本

提取文本使用osroom下的翻译提取脚本具体请看transations_tool提取

工具文档


# 获取提取工具帮助文档(osroom根目录下)
python tools/transations/transations_tool.py -h

步骤:每个步骤操作请看transations_tool.py -h 文档

  • 1.初始化语言目录(注意: 第一次提取前使用)

  • 2.update: 更新内容(提取最新的文本)

  • 3.翻译.po文本, 在语言目录(初始化后会自动建立)下, 比如osroom/apps/transations/theme/en_US/LC_MESSAGES/messages.po

End 后续再补充