同步操作将从 JPressProjects/jpress 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
1、安装Docker
JPress 模板开发准备,主要是准备 docker 环境,Docker 的安装可以参考一下链接:
Docker 的安装过程略,一般情况下都是安装比较顺利的,若安装处错自行搜索引擎查询下。
2、通过Docker运行JPress
Docker 安装完毕后,下载文件 https://gitee.com/fuhai/jpress/raw/v2.0/docker-compose-for-dev.yml 到本地。(打开此链接,然后右键另存为... 或者按快捷键 ctrl+s
保存到本地,mac系统的快捷键是command+s
)
下载完毕后,重命名刚刚下载文件 docker-compose-for-dev.yml
为 docker-compose.yml
,并把 docker-compose.yml
放入提前建好的文件夹中。
然后通过 shell ( window系统是cmd )进入该文件夹,执行如下命令:
docker-compose up -d
Shell小知识
如何用命令进入某个文件夹? 答:进入文件夹的命令是:
cd 文件夹的路径
稍等片刻,命令执行完毕后,就可以通过 http://127.0.0.1:8080
进行访问 JPress了,此时浏览器会出现 JPress 安装向导,一路 下一步
就可以。
同时,在 docker-compose.yml
所在的同级目录下会出现一个 templates
等目录,我们开发自己模板的时候,需要把自己的模板放到templates
目录,然后开始开发。
Docker小知识
1、通过 Docker Compose 命令启动 JPress 后如何停止? 答:通过shell进入 docker-compose.yml 所在的目录,然后执行:
docker-compose down
命令2、如何查看 JPress 运行的日志信息? 答:先通过
docker ps
命令查看 JPress 的 container id,然后执行命令:docker logs -f 查看到的container-id
一个完整的模板,文件内容如下:
mytemplate
├── article.html
├── artlist.html
├── css
│ └── xxx.css
├── img
│ ├── xxx.png
│ ├── xxx.jpg
├── index.html
├── page.html
├── screenshot.png
├── setting.html
└── template.properties
其中 index.html
、 screenshot.png
、template.properties
是模板的必须文件,一个模板最少由着三个文件组成。
当我们开始开发一个新的模板的时候,可以先用这个三个文件,然后通过 JPress 后台进行安装,看一下效果。
模板的配置文件 template.properties
内容如下
id = cn.jeanstudio.bluelight
title = BlueLight
description = BlueLight是JeanStudio工作室为JPress设计的官网模板
anthor = jeanStudio
authorWebsite = http://www.jeanstudio.cn
version = 1.0
versionCode = 1
updateUrl =
screenshot = screenshot.png
域名+名称
的命名方式xxx
为样式的名称。备注:
所有的模板文件都可以扩展出专门用于渲染手机浏览器的模板。 例如:首页的渲染模板是
index.html
,如果当前目录下有index_h5.html
,那么,当用户通过手机访问网站的时候,JPress 会自动使用index_h5.html
去渲染。 page 和 article、artlist 同理。
有了以上这些目录结构,我们实际上不用编写任何的标签,就可以制作模板了,只是做出来的模板是静态模板,不能读取后台数据。
要读取后台的数据,需要用到模板标签。只有通过在静态的html上,添加 JPress 标签,才能可以读取后台数据。
在学习 JPress 模板标签之前,我们需要了解模板引擎的几个基本用法。
1、输出功能:
#(content ??)
2、循环功能:
#for(item : items)
//...do something
#end
3、判断功能:
#if(...)
//...do something
#elseif(...)
//...do something
#else
//...do something
#end
更多的功能和文档,请参考 JPress 模板引擎文档:https://www.jfinal.com/doc/6-4
JPress的模板标签,分为以下三种:
名称 | 数据类型 | 标签描述 |
---|---|---|
#(WEB_NAME ??) | 字符串 | 网站名称 |
#(WEB_TITLE ??) | 字符串 | 网站标题 |
#(WEB_SUBTITLE ??) | 字符串 | 网站副标题 |
#(WEB_DOMAIN ??) | 字符串 | 网站域名 |
#(WEB_COPYRIGHT ??) | 字符串 | 网站版权信息 |
#(SEO_TITLE ??) | 字符串 | 网站SEO标题 |
#(SEO_KEYWORDS ??) | 字符串 | 网站SEO关键字 |
#(SEO_DESCRIPTION ??) | 字符串 | 网站SEO描述 |
MENUS | 数据列表( list ) | 菜单数据 |
USER | 对象( object ) | 已经登录的用户对象 |
CSRF_TOKEN | 字符串 | 当进行数据操作的时候必须要传入这个参数 |
标签描述,标签建议用 #( 名称 ??)
的方式来读取数据,而不是用 #(名称)
两个问号(??)的意思是如果 后台填写的名称为空格,那么就用 两个问号(??)之后的内容来显示。
例如:
#(WEB_NAME ??)
表示优先使用 WEB_NAME 来显示,但是当 WEB_NAME 为空的时候,显示空数据(因为两个问好(??)之后的内容为空)。
#(WEB_NAME ?? WEB_TITLE)
表示优先使用 WEB_NAME 来显示,但是当 WEB_NAME 为空的时候,用 WEB_TITLE(网站标题) 来显示。
#(SEO_TITLE ?? WEB_TITLE +'-'+ WEB_SUBTITLE)
表示优先使用 SEO_TITLE(SEO标题) 来显示,但是当 SEO_TITLE 为空的时候,用 WEB_TITLE - WEB_SUBTITLE
来显示。
有了以上知识后,我们的 index.html 首页模板文件可以如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title>#(SEO_TITLE ?? (WEB_TITLE + '-' + WEB_SUBTITLE))</title>
<meta name="keywords" content="#(SEO_KEYWORDS ??)">
<meta name="description" content="#(SEO_DESCRIPTION ??)">
</head>
<body>
这是首页....
</body>
</html>
以上内容都只是针对 字符串
这种数据类型进行展示的,全局标签中还有一种数据类型叫 数据列表( list )
,那么,怎么来显示数据列表呢?
这个时候#( 名称 ??)
就不能正常显示了,需要用到一个新的标签:
#for
...
#end
#for ... #end
标签也叫循环标签,意思是把列表循环显示出来。
对于 MENUS
这种数据类型为 数据列表( list )
的数据,#for ... #end
标签使用如下。
#for(menu : MENUS)
<li> <a href="#(menu.url ??)">#(menu.text ??)</a> </li>
#end
这样,若我们在后台创建了5个菜单,那么html会输出 5个 <li> ... </li>
对于以上的菜单显示,还有一个问题就是如何显示二级菜单呢?
代码如下:
#for(menu : MENUS)
<li> <a href="#(menu.url ??)">#(menu.text ??)</a> </li>
#if(menu.hasChild())
<div class="二级菜单的class">
#for(childMenu : menu.getChilds())
<li> <a href="#(menu.url ??)">#(menu.text ??)</a> </li>
#end
</div>
#end
#end
以上代码显示了所有菜单的的二级菜单,但是,有些时候我们想在网站的某些位置,显示 当前菜单 下的子菜单,如何做呢?
代码如下:
#for(me: MENUS)
#if(me.isActive && me.hasChild())
<h3 class="menut-title">#(me.text ??)</h3>
<ul class="inner-menut">
#for(m : me.getChilds())
<li class="#(m.isActive ? 'active' : '')">
<a href="#(CPATH)#(m.url ??)">
#(m.text ??)
</a>
</li>
#end
</ul>
#end
#end
在很多模板中,往往需要判断当前用户是否已经登录,用来对模板进行特定的展示。
代码如下:
#if(USER)
#(USER.nickname ??) 欢迎回来,头像:#(USER.avatar ??)
#else
请登录
#end
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。