http://blog.csdn.net/quqi99/article/details/1624223

——————————————————————————————————————————————————————————

                                                                       JetNuke笔记 ( by quqi99 )


作者:张华 发表于:2007-05-24  ( http://blog.csdn.net/quqi99 )

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明。

JetNuke

示范网站
:

http://www.kuayue.com.cn/

网址:
http://gforge.osdn.net.cn/projects/jetnuke/

下载地址:
http://sourceforge.net/project/downloading.php?groupname=jetnuke&filename=Jetnuke1.2.zip&use_mirror=nchc

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
.


Block 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&amp;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

最新文章

  1. js判断当前页面在移动设备还是在PC端中打开
  2. Caffe学习笔记1--Ubuntu 14.04 64bit caffe安装
  3. 在nginx日志的access log中记录post请求的参数值
  4. (SenchaTouch+PhoneGap)开发笔记(1)开发环境搭建一
  5. 【转】MySQL的各种timeout
  6. JavaScript 全局对象
  7. Android中用双缓存技术,加载网络图片
  8. STL笔记(5)条款49:学习破解有关STL的编译器诊断信息
  9. 【C#】用C#通过读取数据库方式读取CSV文件
  10. Unity3D开发(五):Unity3D 4.x 使用Mecanim实现连击(转)
  11. Angularjs简介
  12. SGU 220.Little Bishops(DP)
  13. 解决gstreamer无法播放的bug
  14. 【组合数学】Bzoj2916 [Poi1997]Monochromatic Triangles
  15. Oracle database link中查询会开启事务吗?
  16. 解决fastDFS客户端连接超时问题
  17. 开启win10下Ubuntu子系统的SSH服务 并设置为开机启动
  18. csp20170304地铁修建_Solution
  19. ubuntu14.04 LTS Shutter配置快捷键
  20. leetcode:Reverse Words in a String【Python版】

热门文章

  1. MORMOT数据库连接池
  2. WebLogic Server 12.1.2后的字符型安装模式
  3. 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?
  4. javascript 正则表达式判断只能是中文、英文或者中文加英文
  5. Node.js 使用爬虫批量下载网络图片到本地
  6. python中的ord,chr函数
  7. Andrew Ng机器学习课程6
  8. Eclipse Mylyn成为顶级项目
  9. oc block 遍历数组及字典
  10. 转:nolock的替代方案-提交读快照隔离[行版本控制]