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运行
    虽然我的用途仅限于学习并用来作工作笔记,但我希望能使用以前我生成的许多html文件,且不排除以后还要使用html文件;我决定使用第一种方式。但Apache 和IIS有点太大了,我并没有多么高的要求,而且我的机子并不是专用作服务器的,我也不希望Web服务器在运行时占太多的内存。 通过search, 我找到了我需要的软件,Abyss Web Server X1 V1.2.3.0。这是一个架设个人网站的免费软件,它提供了运行 CGI、HTTP 1.1 的执行能力,它的下载包只有146K,执行文件尺寸只有112K,运行时也仅消耗1M内存。

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