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. MAC接普通外置键盘的修改键位的方法

    使用mac电脑已经有一年多,现在对它的喜欢是每天都在增加,甚至有些离不开了.今天突然想接个外置键盘,在使用过程中,遇到一些问题,记录一下. 使用过mac的同学都知道,mac键盘有一个最大的特点是: 比 ...

  2. Swift,集合

    1.创建(Set)集合(无序不可重复) (1)创建空集合 var a=Set<Int>() //[] (2)创建集合 var a:Set=[1,2,3] //[2,3,1] 2.集合插入( ...

  3. php之文件类型解析漏洞防御与攻击

    php在处理文件上传时,经常可以用到下面几种方式来判断文件的类型 1.通过文件名后缀,不安全,非常容易欺骗2.通过mime判断,部分类型的文件通过修改文件后缀名,也可以欺骗服务器3.通过头字节判断文件 ...

  4. Java集合迭代器 Iterator分析

    简介 迭代器是遍历容器的一种常用方法,它屏蔽了容器的实现细节,无需暴露数据结构内部,就可以对容器进行遍历,迭代器本身也是一种设计模式,迭代是一种特殊的遍历方式. Iterator 在java中,迭代器 ...

  5. EL表达式介绍(1)

    1. 产生背景: 在MVC体系结构中,JSP页面只是用来显示数据,但JSP脚本中的表达式功能不够强大,它不能直接对隐式对象中某对象的属性进行显示,需要配合 scriptlet才能显示数据,很是麻烦,如 ...

  6. 如何在不重启或重新格式化hadoop集群的情况下删除集群节点

    在master节点上的hadoop安装目录下 进入conf目录 配置hdfs-site.xml文件 添加节点如下: <property> <name>dfs.hosts.exc ...

  7. Java连接MySQL数据库,并进行增删改查

    1.具体的代码实现 import java.sql.*; public class DatabaseService { /** * Create Connection * * @param dbtyp ...

  8. CStdioFile类学习笔记<转>

    本文转自:http://www.cnblogs.com/JiMuStudio/archive/2011/07/17/2108496.html   CStdioFile类的声明保存再afx.h头文件中. ...

  9. __block 和__weak 区别及使用

    API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variables ...

  10. 工作总结 Ajax.BeginForm 默认action

    生成源代码 点提交 总结 BeginForm 的 active 默认指向 进当前页面的 操作方法    若第一次进页面时带着参数, 那么也会将参数放到active 简单点  BeginForm 的 a ...