MoinMoin安装记
-
根据我自己的安装过程整理而成,安装期间在maillist及QQ群中得到了众多pythoner指点,在此一并表示感谢!
我的系统是win2000SP4,所有补丁俱全.
预备
-
安装好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运行
通过search, 我找到了我需要的软件,Abyss Web Server X1 V1.2.3.0。这是一个架设个人网站的免费软件,它提供了运行 CGI、HTTP 1.1 的执行能力,它的下载包只有146K,执行文件尺寸只有112K,运行时也仅消耗1M内存。
安装
-
将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下.
设置Web服务器
-
设置Aliase,既虚拟目录
与moin有关的有:
-
设置cgi参数,将D:\DevelopTools\python23\python.exe与.py和.cgi关联起来
讨厌的是 Abyss Web Server X1中不同的后缀名必须关联不同的程序,于是我用python.exe关联.cgi,用pythonw.exe关联.py。
-
设置起始页,令起始页自动转向 /Moin/moin.cgi/FrontPage
-
/wiki -> D:\Netapp\Moin\share\moin\htdocs
/wikidata -> D:\Data\Moin\wikidata
/moin -> D:\Data\Moin\mywiki
修改moin启动脚本
-
用IDLE打开 D:\Data\Moin\mywiki\moin.cgi
在前面加上
1 2 | import sys sys.path.append('D:\NetApp\Moin\lib\site-packages') |
运行
-
运行Abyss Web Server X1
-
启动IE,在地址栏敲入 http://127.0.0.1 ,回车
All Ok!我的wiki页面出现了!虽然还没有我的任何内容,而且界面也是E文的。
剩下的就是配置和定制自己的wiki了,不过还是先修改一下内容吧,否则别人以为走错地了呢。
MoinMoin设置记
基本设置
-
对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看起来是中文界面了.
页面外观
-
在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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | # -*- coding: iso-8859-1 -*- import urllib from MoinMoin import config, i18n, wikiutil, version from MoinMoin.Page import Page from classic import Theme as ThemeBase class Theme(ThemeBase): """ This is the starshine theme. """ name = 'mytheme' icons = { # key alt icon filename w h # ------------------------------------------------------------------ # navibar 'help': ("%(page_help_contents)s", "moin-help.png", 12, 11), 'find': ("%(page_find_page)s", "moin-search.png", 12, 12), 'diff': ("Diffs", "moin-diff.png", 15, 11), 'info': ("Info", "moin-info.png", 12, 11), 'edit': ("Edit", "moin-edit.png", 12, 12), 'unsubscribe':("Unsubscribe", "moin-unsubscribe.png", 14, 10), 'subscribe': ("Subscribe", "moin-subscribe.png",14, 10), 'raw': ("Raw", "moin-raw.png", 12, 13), 'xml': ("XML", "moin-xml.png", 20, 13), 'print': ("Print", "moin-print.png", 16, 14), 'view': ("View", "moin-show.png", 12, 13), 'home': ("Home", "moin-home.png", 13, 12), 'up': ("Up", "moin-parent.png", 15, 13), # FileAttach (is this used?) 'attach': ("%(attach_count)s", "moin-attach.png", 7, 15), # RecentChanges 'rss': ("[RSS]", "moin-rss.png", 36, 14), 'deleted': ("[DELETED]", "moin-deleted.png",60, 12), 'updated': ("[UPDATED]", "moin-updated.png",60, 12), 'new': ("[NEW]", "moin-new.png", 31, 12), 'diffrc': ("[DIFF]", "moin-diff.png", 15, 11), # General 'bottom': ("[BOTTOM]", "moin-bottom.png", 14, 10), 'top': ("[TOP]", "moin-top.png", 14, 10), 'www': ("[WWW]", "moin-www.png", 11, 11), 'mailto': ("[MAILTO]", "moin-email.png", 14, 10), 'news': ("[NEWS]", "moin-news.png", 10, 11), 'telnet': ("[TELNET]", "moin-telnet.png", 10, 11), 'ftp': ("[FTP]", "moin-ftp.png", 11, 11), 'file': ("[FILE]", "moin-ftp.png", 11, 11), # search forms 'searchbutton': ("[?]", "moin-search.png", 12, 12), 'interwiki': ("[%(wikitag)s]", "moin-inter.png", 16, 16), } stylesheets = ( # theme charset media basename (name, 'iso-8859-1', 'all', 'common'), (name, 'iso-8859-1', 'screen', 'screen'), (name, 'iso-8859-1', 'print', 'print'), ) def execute(request): 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 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | def footer(self, d, **keywords): """ Assemble page footer @param d: parameter dictionary @keyword ...:... @rtype: string @return: page footer html """ dict = { 'config_page_footer1_html': self.emit_custom_html(config.page_footer1), 'config_page_footer2_html': self.emit_custom_html(config.page_footer2), 'showtext_html': self.showtext_link(d, **keywords), 'edittext_html': self.edittext_link(d, **keywords), 'search_form_html': self.searchform(d), 'available_actions_html': self.availableactions(d), 'credits_html': self.emit_custom_html(config.page_credits), 'version_html': self.showversion(d, **keywords), 'footer_fragments_html': self.footer_fragments(d, **keywords), } dict.update(d) html = """ <div id="footer"> %(config_page_footer1_html)s %(showtext_html)s %(footer_fragments_html)s %(edittext_html)s %(search_form_html)s %(available_actions_html)s %(config_page_footer2_html)s </div> %(version_html)s """ % dict return html |
CategoryHomepage