JetNuke笔记 ( by quqi99 )
http://blog.csdn.net/quqi99/article/details/1624223
——————————————————————————————————————————————————————————
JetNuke笔记 ( by quqi99 )
作者:张华 发表于:2007-05-24 ( http://blog.csdn.net/quqi99 )
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明。
JetNuke
示范网站
:
网址:
http://gforge.osdn.net.cn/projects/jetnuke/
JetNuke
最大的优势就是集成了众多应用。
JetNuke
提供了:
Jforum
论坛、新闻发布和管理、内容分类、私人消息、链接管理、下载管理、调查、统计、站点搜索、
FAQ
、内容反馈、广告管理、管理控制台等等功能。用它来做一个普通网站的应用,应该差不多了。
JetNuke
在内容显示方面主要采用的技术是
Velocity
模版技术
有些遗憾的是,
JetNuke
目前不支持最新的
JAVA
内容管理规范
JSR-170
。
JetNuke
页面的架构被分成
Modules
和
Blocks
。
Modules
定义了页面的主要内容,而
Blocks
则定义了显示在页面左右列的块。
Blocks
在页面上的位置是可自定义的。
Blocks
可以通过控制台在左、右、上、下等方向进行位置调整。
下面说一下
JetNuke
的内容扩展机制。静态的
Blocks
很容易通过
web
界面或编辑配置文件来创建。动态的
Blocks
的创建可以通过继承一个
Block
接口创建一个
JAVA
后台程序并在
xml
配置文件里注册这个
Block
。这个过程对于开发者来说是非常简单的。
同样的,对于
Modules
也有类似的接口和配置来创建自定义模块。
Blocks
和
Modules
的显示都是基于
Jakarta Velocity Template Language
。
这使得自定义和扩展
JetNuke
变得很容易。(我看来一下
Velocity
的语法,不是很难,有点编程基础的都很容易看懂。)
如何开发
Modules
和
Blocks
请参考相关的文档
Module developing guide
.
从上面的分析可以知道,如果你想通过研究
JetNuke
来学习新技术,那你还不如选择
Magnolia
。如果你想利用
JetNuke
来开发网站,那倒是个不错的选择。不过,目前
JetNuke
还没有汉化,要用它需要你自己汉化。工作量不小亚。:(
一、汉化:
jetnuke
里默认的语言是英文。为了让用户在页面的下拉框里选择
"chinese"
就可以看到中文界面,我们还需要修改
D:Tomcat5newwebappsjetnukeWEB-INFclassesblocksLanguagesblock.vm
文件。在该文件里的第
16
行插入
<option value="zh_CN" #if($_locale.toString()=='zh') selected #end>Chinese</option>
。注意,
value="zh_CN"
,而不是
"zh"
。如果是
"zh"
,那么相对应的资源文件就应该写出
resources_zh.properties
。
另外,为了保证汉化完整,还需要在第
56
行插入
<a
href="${contextPath}/do?module=your_account&op=chg_session_lang&
amp;amp;locale=zh"><img
src="${contextPath}/images/language/flag-chinese.png" border="0"
alt="Chinese" title="Chinese" hspace="3" vspace="3"></a>
。
经过多次失败后,终于找到了终于找到汉化
JetNuke
的办法。;)
汉化的关键:在
/WEB-INF/classes
目录下,有
blocks
和
modules
两个目录。这两个目录下都有多个子目录。以
blocks
下的
Admin
目录为例,
Admin
目录下有一个
resources.txt
和
languages
子目录。
resources.txt
文件里包含了英文的信息。为了汉化,你需要把
resources.txt
文件拷贝到
languages
子目录里,然后把
resources.txt
改名成
resources_zh_CN.txt
。最后,你就可以在
resources_zh_CN.txt
做汉化了。
我数了一下,大概有
48
个
resources_zh_CN.txt
文件需要翻译。工作量不小。:(
等我把
AtLeap
项目的安装文档翻译完了,我再开始做
JetNuke
的汉化吧。
二、安装
1
、创建一个空库(
mysql
)
: create database jetnuke default character set utf8;
2
、将
jetnuke1
。
2
的包丢到
tomcat
的
webapp
目录下。
3
、运行
http://localhost:8080/jetnuke
三、构建开发环境
1
、安装
Tomcat
插件。
2
、将
jetnuke
解压到
tomcat
的
webapp
下,然后从
eclipse
中直接将
jetnuke
工程导入进去就行。在导入的过程中出问题,是缺少
mail.jar
包。
3
,有问题:
java.sql.SQLException
: Base table or view not found message from server: "Table 'jetnuke.stories' doesn't exist"
,将相应的
sql
语句改正弄进去即可。
4
、管理端:
http://localhost:8080/jetnuke/do?/module=admin
四、预安装的模块。
1
、新闻
2
、管理。管理员以图形化方式来管理整个系统
3
、百科全书
4
、
FAQ
:对一个问答的集合
5
、反馈:回馈信息
6
、论坛:用
JFORUM
实现的。
7
、用户列表。显示所有注册的用户,从
JRORUM
直接过来的功能
8
、消消话
9
、查找,搜索。
10
、节
11
、统计:
IE
,
OS
,查看的用户信息
12
、故事集:对新闻的集中回顾。
13
、新闻提交。
14
、调查。
15
、
TOP10
。最活跃的
10
个元素。可以是文章,也可以是用户。
16
、主题。
17
、
web
连接
18
你的帐户。
五、预安装的版块。
1
、管理
2
、广告
3
、今日最火
4
、分类
5
、内容。显示了所有可用页的标题
6
、百科全书
7
、论坛
8
,
google
广告
9
、语言
10
、最新的
10
篇文章
11
,最新的
http
引用
12
、登陆
13
、模块
14
在线
15
回复
16
搜索
17
调查
18
下载
TOP10
19
连接
TOP10
20
站点点击数
21
不清待验内容
六、创建一个版块
(
版块相当于
ASOP
中的组件
)
6.1
创建一个版块
在
WEB-INFblocks
目录下。有
3
部分:
n
Config.xml
包括了版块的描述和它的描述。
n
Bloak.vm
被调用的
html
版块内容。
n
在
resources.txt
中指定版块的标题。
例:
Config.xml:
<?xml version="1.0"?>
<block-config>
<name>quqiBlock</name>
<description>
曲奇
</description>
<block-class>quqi.HelloWorldDyn</block-class>
</block-config>
package quqi;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import org.apache.velocity.VelocityContext;
import org.jetnuke.common.IAdminInfo;
import org.jetnuke.common.IBlock;
import org.jetnuke.common.IBlockInfo;
import org.jetnuke.common.IUserInfo;
public class HelloWorldDyn implements IBlock {
public void serviceBlock(HttpServletRequest req, VelocityContext vc,
IBlockInfo blockInfo, IUserInfo userInfo, IAdminInfo adminInfo)
throws Exception {
vc.put("hello_world_key",new Integer(new Random().nextInt()));
}
}
七、创建一个模块(相应于一个用组件组装的应用)
模块是和特定的内容一起填充每一页的中间列的。每一个模块就是一些
”action:”
的集合。
例:
Config.xml
<?xml version="1.0"?>
<module-config>
<name>hello world module</name>
<description>hello world</description>
<defaction class="quqi.Act" page="helloWorldMod.vm"/>
<action name="act1" class="quqi.Act2" page="act2.vm"/>
<forward name="fwd" page="forward.vm"/>
</module-config>
上面可以看出,
defaction
(默认的)只能有一个,它是预定义的没有名字。若不需要
action,
可直接
faword.
package quqi;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.VelocityContext;
import org.jetnuke.common.ActionForward;
import org.jetnuke.common.IAction;
import org.jetnuke.common.IAdminInfo;
import org.jetnuke.common.IModuleInfo;
import org.jetnuke.common.IUserInfo;
public class Act implements IAction {
public ActionForward exec(HttpServletRequest request,
HttpServletResponse response, VelocityContext vc, IModuleInfo info,
String op, IUserInfo ui, IAdminInfo ai) throws Exception {
vc.put("time",new Object());
//op
是
config.xml
中所对应的这个
action
的名字。
//
通常
URL
是这样的:
do?module=download&op=viewdownload&cid=1
return new ActionForward(op,info);
}
}
helloWorldMod.vm
文件是:
hello world
now is
#medium_date($time)
八
velocity
<ul>
#foreach( $product in $allProducts )
<li>$product</li>
#end
</ul>
#include
脚本元素允许模板设计者引入一个本地文件:
#include( "one.txt" )
#parse
脚本元素允许模板设计者引入一个
VTL
的本地文件。
Velocity
会编译
VTL
然后
调用制定的模板。
#parse( "me.vm" )
#macro( row )
<tr><td>$nbsp;</td></tr>
#end
然后你就可以在一个模板文件里使用这个宏了。
#row()
通常情况下,
JetNuke
把系统中能用到的宏全部包含在一个宏库文件中
(WEB-INF/classes/VM_global_library.vm)
。
这样一来,这些宏对全部的模板都可用了。
九、样式
查看
WEB-INF/style/NukeNews/
文件夹
;
一共有
4
个文件
:
- template.vm
- sidebox.vm
- opentable.vm
- closetable.vm
另外,图片和
CSS
文件放在这个目录:
jetnukestyleNukeNews
最新文章
- js判断当前页面在移动设备还是在PC端中打开
- Caffe学习笔记1--Ubuntu 14.04 64bit caffe安装
- 在nginx日志的access log中记录post请求的参数值
- (SenchaTouch+PhoneGap)开发笔记(1)开发环境搭建一
- 【转】MySQL的各种timeout
- JavaScript 全局对象
- Android中用双缓存技术,加载网络图片
- STL笔记(5)条款49:学习破解有关STL的编译器诊断信息
- 【C#】用C#通过读取数据库方式读取CSV文件
- Unity3D开发(五):Unity3D 4.x 使用Mecanim实现连击(转)
- Angularjs简介
- SGU 220.Little Bishops(DP)
- 解决gstreamer无法播放的bug
- 【组合数学】Bzoj2916 [Poi1997]Monochromatic Triangles
- Oracle database link中查询会开启事务吗?
- 解决fastDFS客户端连接超时问题
- 开启win10下Ubuntu子系统的SSH服务 并设置为开机启动
- csp20170304地铁修建_Solution
- ubuntu14.04 LTS Shutter配置快捷键
- leetcode:Reverse Words in a String【Python版】
热门文章
- MORMOT数据库连接池
- WebLogic Server 12.1.2后的字符型安装模式
- touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
- javascript 正则表达式判断只能是中文、英文或者中文加英文
- Node.js 使用爬虫批量下载网络图片到本地
- python中的ord,chr函数
- Andrew Ng机器学习课程6
- Eclipse Mylyn成为顶级项目
- oc block 遍历数组及字典
- 转:nolock的替代方案-提交读快照隔离[行版本控制]