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. Vue 单页应用:记事本

    若文章中存在内容无法加载的情况,请移步作者其他博客. 简书 CSDN 最近在看 Vue 的时候,别人给我安利了一个国外的小案例,通过 Vue 和 Vuex 来实现一个记事本. 仔细剖析下,发现“麻雀虽 ...

  2. python3读取html文件

    # htmlf=open('E:\\test2.html','r',encoding="utf-8") # htmlcont=htmlf.read() # print(type(h ...

  3. javascript快速入门8--值,类型与类型转换

    原始值和引用值 在ECMAScript中,变量可以存放两种类型的值,即原始值和引用值. 原始值(primitive value)是存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量 ...

  4. 常用EXE文件反编译工具【转】

    http://www.cnblogs.com/happyday56/p/3740108.html PE Explorer V1.99 R5 绿色汉化特别版_强大的可视化汉化集成工具 功能极为强大的可视 ...

  5. BIO的简单Demo

    package jesse.test1; import java.io.BufferedReader; import java.io.IOException; import java.io.Input ...

  6. 百度地图-修改marker图标(icon)

    百度地图-修改marker图标(icon) 学习了:https://blog.csdn.net/clh604/article/details/9412291/ 源码膜拜: var map = new ...

  7. IOS Exception2 this class is not key value coding-compliant for the key Click

    2015-06-16 23:00:53.706 MyIOSPackage[823:280049] *** Terminating app due to uncaught exception 'NSUn ...

  8. [1-3] 把时间当做朋友(李笑来)Chapter 3 【提高心智,和时间做朋友】 摘录

    1. 精确感知时间 我有个朋友叫做时间.她跟我真可算作两小无猜,默默陪了二十多年我才开始真正认识她.她原本没有面孔,却因为我总是用文字为她拍照,而因此可以时常伴我左右.她原本无情,我却可以把她当作朋友 ...

  9. lucene 查询

    csdn blog - Lucene 3.0 的Query Parser(查询语法)   ibm developerWorks - 使用 Apache Lucene 2.4.1 搜索文本   osch ...

  10. win10下iis绑定局域网ip无效的解决方案

    win7不会出现此问题 win10会 win8未测试 问题描述 <binding protocol="http" bindingInformation="*:808 ...