1. MoinMoin安装记
- 根据我自己的安装过程整理而成,安装期间在maillist及QQ群中得到了众多pythoner指点,在此一并表示感谢! 我的系统是win2000SP4,所有补丁俱全.
1.1. 预备
- 安装好python2.3.4和pywin32(现成的,一直用着呢) 不知道pywin32是不是必须要有,但其帮助文件中要求有,而且我的系统上本来就有。 我的python安装目录是D:\Developtools\python23;
- 下载Moin-1.2.3.zip
- 准备Web服务器 虽然都推荐使用Apache,但仔细看下去后发现,实际上Moin可以有三种方式运行:
- 1,在Web服务器中以cgi的方式运行(不一定要Apache,只要是支持cgi及Aliase的Web服务器就行) 2,作为一个单独的程序运行,仅适合用于小型应用,如用作私人的工作笔记等等. 3,使用twisted运行
1.2. 安装
- 将Moin-1.2.3.zip解压到C:\Temp目录,打开explore,文件被释放到C:\temp\Moin-1.2.3下.
- 进入命令界面,cd到上述目录执行命令
python setup.py install --prefix=D:\Netapp\Moin --record=install.log
- Moin被安装到D:\Netapp\Moin 目录下.
- 我想把我的数据保存在D:\Data目录下
- 1,在D:\Data下新建目录Moin,再在其下新建mywiki和wikidata子目录 2,浏览至D:\Netapp\Moin\Share\moin\,把其下的整个data子目录拷至D:\Data\mywiki下. 3,将D:\Netapp\Moin\Share\moin\cgi-bin下所有文件拷至D:\Data\mywiki下.
1.3. 设置Web服务器
- 设置Aliase,既虚拟目录 与moin有关的有:
/wiki -> D:\Netapp\Moin\share\moin\htdocs
/wikidata -> D:\Data\Moin\wikidata
/moin -> D:\Data\Moin\mywiki
设置cgi参数,将D:\DevelopTools\python23\python.exe与.py和.cgi关联起来 讨厌的是 Abyss Web Server X1中不同的后缀名必须关联不同的程序,于是我用python.exe关联.cgi,用pythonw.exe关联.py。
设置起始页,令起始页自动转向 /Moin/moin.cgi/FrontPage
1.4. 修改moin启动脚本
- 用IDLE打开 D:\Data\Moin\mywiki\moin.cgi
在前面加上
1 import sys
2 sys.path.append('D:\NetApp\Moin\lib\site-packages')
1.5. 运行
- 运行Abyss Web Server X1
启动IE,在地址栏敲入 http://127.0.0.1 ,回车 All Ok!我的wiki页面出现了!虽然还没有我的任何内容,而且界面也是E文的。 剩下的就是配置和定制自己的wiki了,不过还是先修改一下内容吧,否则别人以为走错地了呢。
2. MoinMoin设置记
2.1. 基本设置
对MoinMoin进行设置首先要修改moin_config.py文件, 该文件与moin.cgi在同一目录下(D:\Data\Moin\mywiki),保存了对moin的设置,实际上是对一些python变量的赋值。
- 修改名称
sitename = "My Wiki"
- 这样以后洌览时,My Wiki将成为页面标题的一部分.
- 修改字符集
charset = 'utf-8' upperletters = "A-Z" lowerletters = "0-9a-z" default_lang = 'zh'
- 修改导航条
navi_bar = ['[FrontPage 首页]','[RecentChanges 最近更新]', '[FindPage 搜索]','[HelpContents 帮助]']
navi_bar为一字符串列表,其中每一项将显示一个导航按扭,格式为'[url text]'。如 '[FrontPage 首页]'项将会在页面导航条上显示按扭"首页",并指向FrontPage页. 经过以上修改后,My Wiki看起来是中文界面了.
2.2. 页面外观
在moin_config.py的下一行中指定了,moin默认的页面主题名称是classic.在D:\NetApp\Moin\lib\site-packages\MoinMoin\theme下,可发现有文件classic.py,该文件既为classic主题时生成HTML文件的代码.
theme_default = 'classic'
除classic主题外,MoinMoin还提供了rightsidebar、starshine、viewonly三个主题供选择。除此外,还可以生成自己的主题。
- 生成自己的主题
1,在D:\NetApp\Moin\lib\site-packages\MoinMoin\theme下,新建mytheme.py文件。
1 # -*- coding: iso-8859-1 -*-
2 import urllib
3 from MoinMoin import config, i18n, wikiutil, version
4 from MoinMoin.Page import Page
5
6 from classic import Theme as ThemeBase
7
8 class Theme(ThemeBase):
9 """ This is the starshine theme. """
10
11 name = 'mytheme'
12 icons = {
13 # key alt icon filename w h
14 # ------------------------------------------------------------------
15 # navibar
16 'help': ("%(page_help_contents)s", "moin-help.png", 12, 11),
17 'find': ("%(page_find_page)s", "moin-search.png", 12, 12),
18 'diff': ("Diffs", "moin-diff.png", 15, 11),
19 'info': ("Info", "moin-info.png", 12, 11),
20 'edit': ("Edit", "moin-edit.png", 12, 12),
21 'unsubscribe':("Unsubscribe", "moin-unsubscribe.png", 14, 10),
22 'subscribe': ("Subscribe", "moin-subscribe.png",14, 10),
23 'raw': ("Raw", "moin-raw.png", 12, 13),
24 'xml': ("XML", "moin-xml.png", 20, 13),
25 'print': ("Print", "moin-print.png", 16, 14),
26 'view': ("View", "moin-show.png", 12, 13),
27 'home': ("Home", "moin-home.png", 13, 12),
28 'up': ("Up", "moin-parent.png", 15, 13),
29 # FileAttach (is this used?)
30 'attach': ("%(attach_count)s", "moin-attach.png", 7, 15),
31 # RecentChanges
32 'rss': ("[RSS]", "moin-rss.png", 36, 14),
33 'deleted': ("[DELETED]", "moin-deleted.png",60, 12),
34 'updated': ("[UPDATED]", "moin-updated.png",60, 12),
35 'new': ("[NEW]", "moin-new.png", 31, 12),
36 'diffrc': ("[DIFF]", "moin-diff.png", 15, 11),
37 # General
38 'bottom': ("[BOTTOM]", "moin-bottom.png", 14, 10),
39 'top': ("[TOP]", "moin-top.png", 14, 10),
40 'www': ("[WWW]", "moin-www.png", 11, 11),
41 'mailto': ("[MAILTO]", "moin-email.png", 14, 10),
42 'news': ("[NEWS]", "moin-news.png", 10, 11),
43 'telnet': ("[TELNET]", "moin-telnet.png", 10, 11),
44 'ftp': ("[FTP]", "moin-ftp.png", 11, 11),
45 'file': ("[FILE]", "moin-ftp.png", 11, 11),
46 # search forms
47 'searchbutton': ("[?]", "moin-search.png", 12, 12),
48 'interwiki': ("[%(wikitag)s]", "moin-inter.png", 16, 16),
49 }
50 stylesheets = (
51 # theme charset media basename
52 (name, 'iso-8859-1', 'all', 'common'),
53 (name, 'iso-8859-1', 'screen', 'screen'),
54 (name, 'iso-8859-1', 'print', 'print'),
55 )
56 def execute(request):
57 return Theme(request)
- 上面代码中,第6行中,导入moin的标准实现模块classic.py中的Theme作为我们自己类的基类;第11行指定主题名称;第12行定义使待moin使用我们自己的img文件(见下面);第50行定义使得moin使用我们自己的css文件(见下面),最后的函数定义是moin要求的。 2,在D:\Netapp\Moin\share\moin\htdocs\下建目录mytheme,把D:\Netapp\Moin\share\moin\htdocs\classic下的css和img目录拷入. 3,在moin_config.py中修改的默认主题名称.
theme_default = 'mytheme'
现在,自己的主题已搭好了,当然内容还是原来classic的,下面就是修改这些内容了. - CSS定制 在D:\Netapp\Moin\share\moin\htdocs\mytheme下,css子目录中保存了wiki页面的css文件,其中screen.css影响浏览器中的外观,根据需要修改它既可改变wiki页的显示。(我对css一窍不通,从老大们那里弄了一个,替换了原来的)
- 图标定制 修改img目录下的文件可改变页面中的各图标。但若想改变图标的大小,就对修改icons字典中的数据. 我喜欢starshine下的几个图标,就先从D:\Netapp\Moin\share\moin\htdocs\starshine\img下把moin-print.png、moin-diff.png、moin-edit.png、moin-info.png、moin-show.png、moin-xml.png拷到D:\Netapp\Moin\share\moin\htdocs\mytheme\img下覆盖原来的文件. 再从icons字典中把上述几个图片对应的宽w和高h改为21和32。
在页面右上角 UserPreference下的几个图标变了模样了,不过其中有一个没有什么用处,把它去掉吧!在moin_config.py文件中加入下行:
page_iconbar = ['edit','view','diff','info','xml','print']
- 好了,现在只有几个指定的图标才出现了。
- 更多的定制 其实,theme类实现了页面生成的大部分过程,通过修改它的成员函数就可以控制页面的生成,我简单的试了一下,修改了页脚部分的生成,去掉了python的标志。方法是把如下代码加到了Theme类中:
1
2 def footer(self, d, **keywords):
3 """
4 Assemble page footer
5
6 @param d: parameter dictionary
7 @keyword ...:...
8 @rtype: string
9 @return: page footer html
10 """
11 dict = {
12 'config_page_footer1_html': self.emit_custom_html(config.page_footer1),
13 'config_page_footer2_html': self.emit_custom_html(config.page_footer2),
14 'showtext_html': self.showtext_link(d, **keywords),
15 'edittext_html': self.edittext_link(d, **keywords),
16 'search_form_html': self.searchform(d),
17 'available_actions_html': self.availableactions(d),
18 'credits_html': self.emit_custom_html(config.page_credits),
19 'version_html': self.showversion(d, **keywords),
20 'footer_fragments_html': self.footer_fragments(d, **keywords),
21 }
22 dict.update(d)
23
24 html = """
25 <div id="footer">
26 %(config_page_footer1_html)s
27 %(showtext_html)s
28 %(footer_fragments_html)s
29 %(edittext_html)s
30 %(search_form_html)s
31 %(available_actions_html)s
32 %(config_page_footer2_html)s
33 </div>
34 %(version_html)s
35 """ % dict
36
37 return html