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

JetNuke笔记 ( by quqi99 )的更多相关文章

  1. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  2. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  3. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  6. NET Core-学习笔记(三)

    这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...

  7. springMVC学习笔记--知识点总结1

    以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...

  8. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  9. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

随机推荐

  1. Java下String和List<String>的互相转换

    // List转换为String数组 List<String> list = new ArrayList<String>(); list.add("a1") ...

  2. CentOS 6.9使用Setup配置网络(解决dhcp模式插入网线不自动获取IP的问题)

    说明:dhcp模式插入网线不自动获取IP是因为网卡没有激活,造成这种原因的,应该是安装系统时没有插入网线造成的. 解决方法: 修改网卡配置文件 vim /etc/sysconfig/network-s ...

  3. 一个简单的WeakList的实现

    有的时候,我们会使用到WeakList,它和传统的List不同的是,保存的是对象的弱应用,在WeakList中存储的对象会被GC回收,在一些和UI相关的编程的地方会用到它(弱事件,窗体的通知订阅等). ...

  4. Linux 动态库 静态库

    什么是库 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和Linux的本质不同,因此二者库的二进制是不兼容的.Linux操作系统支持的库函数分为静态库和动态库 ...

  5. Django入门与实践

    安装: 1.https://www.djangoproject.com/查找最新版本 2.pip install Django==1.10.6安装Django   创建项目: 1.打开命令行,进入想要 ...

  6. onvif 协议

    1.ONVIF 协议解读 https://www.onvif.org 一.什么是ONVIF? 1.1形成 2008年5月,由安讯士(AXIS)联合博世(BOSCH)及索尼(SONY)公司三方宣布携手共 ...

  7. LoadRunner测试Google Suggest

    Google的搜索框是典型的AJAX应用,用户在输入关键字的同时,前端页面通过xmlhttp与后台服务器动态交互,根据用户输入的关键字查找匹配的内容,向用户提示建议的搜索项,也就是所谓的“google ...

  8. lodash 判断相等 eq isEqual

    var object = { 'a': 1 }; var other = { 'a': 1 }; //true console.log(_.eq(object, object)) //true con ...

  9. 表单提交post和get方法区别

    表象不同,get把提交的数据url可以看到,post看不到 原理不同,get 是拼接 url, post 是放入http 请求体中 提交数据量不同,get最多提交2k数据,浏览器的限制.post理论上 ...

  10. Property with &#39;retain (or strong)&#39; attribute must be of object type

    AFNetworking 2.0 当Deployment Target 低于6.0时,AFURLConnectionOperation.h,AFURLSessionManager.h @propert ...