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/
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&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