MoinMoin有一个主题插件系统,可以很容易的更改界面样式,而无须触及核心代码。您可以通过修改层叠样式表(CSS)来自定义颜色,或者用Python写一个新的主题插件来创造新的用户界面。升级MoinMoin时,您的主题不会被触及 - 它仍然可以在新版本下工作,也可能由于主题API的更改而需要作少量的修改。

一个主题"THEMENAME"由这些部分组成:

层叠样式表

"classic"主题基于CSS系统,所以对于简单的更改(比如更改颜色或字体,调整位置),您可能只需要更改CSS(就像starshine主题只是变黑一样)。

图片

当您创建一个新的主题时,把classic中所有的图片拷贝到您的img目录并修改需要修改的。如果您修改了一个图片,不要忘记更新主题代码中的图标字典(icon dict) - 为了更快地渲染,图片的几何属性保存在那里。

Python 模块

The theme code is called by moinmoin with (more or less) abstract data in a dictionary usually called d. 然后代码使用字典中的项目生成 HTML(也严重依赖于CSS). 在1.3中新的主题系统尽量避免使用此数据字典,而是调用moin不同部分来获得所需要的数据。

当您想创建一个新主题的时候,首先复制一个您喜欢的主题,然后尝试编辑样式表来获得您想要的。如果仅仅使用CSS不能制作出您想要的,那么可以在你的主题代码中覆盖一些函数.

所有主题都是MoinMoin.theme.ThemeBase的子类,MoinMoin.theme.ThemeBase定义了主要的用户界面元素, 像Logo、用户名、标题、搜索表格,编辑栏动作菜单等。您应该重新使用这些部分,除非您需要去更改那些您无法直接利用的已有的部分而去修改它们的内容或者创建新的元素。主题API目前还不稳定,所以在将来可能会有所更改。

安装

要安装主题,将压缩包解压,把它复制到顶层目录(比如 leftsidebar2)到维基htdocs目录,比如“/usr/share/moin/mywiki/htdocs”。你应该以下列子目录结束: css/, img/.

在你完成这个以后,复制“THEMENAME.py”文件(比如“leftsidebar2.py”)到您的维基的“data/plugin/theme”目录。

设置默认主题

一旦您创建了所有必须的主题元素,并已按照上面的方法保存,就可以通过改变"wikiconfig.py"中的"theme_default"将它设置为默认主题(参考 帮助-系统设置)。

共享主题

如果您创建了一个漂亮的主题(当然得符合HTML和CSS标准),按下面的格式打包并把它加入到MoinMoin:ThemeMarket. 如果可能的话,请使用GPL许可。

# <THEMENAME>-<VERSION>.tar.gz (or .zip), containing:
<THEMENAME>/<THEMENAME>.py
<THEMENAME>/img/*.png
<THEMENAME>/css/*.css

如果你不得不创建一个主题

  1. head
    • config.html_head 会被加入所有网页的 <head> 元素中

  2. body
    • 你可以使用一些HTML片段去定制Moin的输出(我们指的是"classic"主题,其他的可能会有所不同) - 下面是输出的顺序:
    • 头部:
      • config.page_header1
      • config.logo_string - 使用它去更改Logo(通常在左上角)
      • username, title
      • iconbar
      • config.navi_bar - 是要被添加到标题区域中的页面名字的列表,如果没有,则没有导航栏。
      • trail
      • config.page_header2
      • msg
    • 维基页面
    • 尾部:
      • config.page_credits
      • config.page_footer1
      • EditText, search forms, actions

      • config.page_footer2
  3. 作为一个维基用户,你可以在UserPreferences中设置你自己的CSS URL来替换主题中的CSS设置 - 这个样式表总是在主题样式表之后载入的,所以你可以替换所有希望更改的部分。你的CSS文件必须是UTF-8编码的 (ASCII编码是它的一个子集,所以也可以使用ASCII编码)。

"page_header1", "page_header2", "page_footer1"和"page_footer2"现在是可调用的(callable),而且使用"request"对象作为单独参数来调用 (注意,为了与未来的变化兼容,callable函数应当接受任意键值参数)。

此页的英文版本:HelpOnThemes