## 在这里详述"0.706/MyInstallMoin". = 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运行 虽然我的用途仅限于学习并用来作工作笔记,但我希望能使用以前我生成的许多html文件,且不排除以后还要使用html文件;我决定使用第一种方式。但Apache 和IIS有点太大了,我并没有多么高的要求,而且我的机子并不是专用作服务器的,我也不希望Web服务器在运行时占太多的内存。 通过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有关的有: /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 == 修改moin启动脚本 == *用IDLE打开 D:\Data\Moin\mywiki\moin.cgi 在前面加上 {{{ #!python 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文件。 {{{ #!python # -*- 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类中: {{{ #!python 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 = """ %(version_html)s """ % dict return html }}}