宏是 Wiki 重要的功能扩展,相当于执行了一个外挂程序或函数,对相应的输入参数进行处理,输出各式各样的内容。

宏的常用调用语法有:

  • <<宏名>>

  • <<宏名(参数1,参数2,...)>>

下面重点介绍一些常见或者群英汇定制/增强的宏。MoinMoin 维基关于宏的帮助只作为参考,如果有差异以本文档为主。 MoinMoin 自带的宏帮助文档: 帮助-宏, HelpOnMacros

1. Include 宏

Include 宏

此宏命令会把指定页面中格式化的内容包含进插入位置,并且会对指定的页面递归包含。系统将会自动探测并防止出现循环包含!

用法:

  • <<Include(pagename, heading, level, from="regex", to="regex", sort=ascending|descending, items=n, skipitems=n, titlesonly|titleonly, editlink|pagelink, filter|extra="opt1:value1;opt2:value2;...")>>

参数:

  • pagename

    需要包含的页面名。以 "/" 或者 "../" 开头的页面为相对页面,如果本参数以 "^" 开头,它将被作为正则表达式处理,并包含所有匹配的页面。

    • 如果 pagename 是正则表达式,其中可以出现名为 sort 的具名匹配,形如 "(?P<sort>...)",则包含的页面不再按照页面标题排序,而是按照页面名称中的 sort 具名匹配来排序。

    heading

    为引用部分增加一个标题(需要使用 "'" 包含,以防止其中的特殊字符过早被解释,本项为可选项)。如果使用空标题如 "",则自动使用页面名称为标题(优先使用页面中名为 page_title 的 pragma 内容作为页面标题)。(可选项)。

    level

    为上一项所增加的标题定义标题级别(可用级别为1..5,本项为可选项)。如果是包含页面内容(非titleonly和titlesonly),页面内容的标题级别会自动设置为 level 之下的级别。(可选项)。

    from

    需要包含页面中的部分内容时,选中内容的起始标志──可用正则表达式(可选项)。

    to

    需要包含页面中的部分内容时,选中内容的结束标志──可用正则表达式(可选项)。

    sort

    当 pagename 为正则表达式时,也就是以 "^" 开头时(即要包含多个页面),所包含的页面的排序方式(可选项)。

    items

    当使用正则表达式匹配到多个页面时,可以用此参数限制最多能显示出的页面个数(可选项)。

    skipitems

    当使用正则表达式匹配到多个页面时,可以使用此参数指定跳过前面的若干页面不显示(可选项)。

    titlesonly

    包含一个指向页面的链接以及包含内容的标题形成的提纲,而不是页面的内容。以标题样式显示整个大纲(可选项)。

    titleonly

    页面标题作为一个可点击的列表项显示。而 titlesonly 出了会显示包含页面内大纲外,还显示为标题样式(可选项)。

    editlink

    在被包含页面的页脚增加链接,仅当页面允许编辑时显示指向被包含页面以及编辑被包含页面的链接,如果无权编辑页面,则不显示任何链接(可选项)。

    pagelink

    在被包含页面的页脚增加链接,当页面允许编辑时显示指向被包含页面以及编辑被包含页面的链接,如果无权编辑页面,仅显示到被包含页面的链接(可选项)。

    filter 或者 extra

    附加参数提供对 Include 宏更多的控制(可选项)。

    • user:anonymous ── 含义为仅对匿名(未登录状态)访问Web页面执行该 Include 宏,对于登录账号,不执行该宏。

    • user:known ── 含义为仅对登录账号执行该 Include 宏,对于匿名(未登录状态)访问 Web页面,则不执行 Include 语句。

    • subpages:yes|no ── 当被包含页面是一个分类页面,该 Include 宏包含或者不包含该分类下的子页面。

    • subcategories:yes|no ── 当被包含页面是一个分类页面,该 Include 宏包含或者不包含该分类的子分类。

    • recursive:yes|no ── 当使用了 subpages 或 subcategories 时,是否进行递归包含。

  • (!) 除了 pagename 以外的其他参数均为可选项,群英汇增强的 Include 宏,除了 heading 参数和 level 参数外,其它参数的顺序无须顾虑。level参数只有在提供 heading 参数(空标题亦可)时才能出现。heading 参数可以被省略而无须占位符。

示例:

  • <<Include(FooBar)>> -- 将页面 !FooBar 的内容包含入当前段落。

  • <<Include(FooBar,"Foo Bar")>> -- 为包含的内容增加一个内容为 'Foo Bar' 的H1标题, FooBar 内容如果包含标题,则自动在级别1下重排。

  • <<Include(FooBar,"", 2)>> -- 为包含的内容增加一个内容为 'Foo Bar' 的H2标题, FooBar 内容如果包含标题,则自动在级别2下重排。

  • <<Include(FooBar, 'All about Foo Bar', 2)>> -- 增加一个 'All about Foo Bar' 的H2标题

  • <<Include(FooBar, from="^----$")>> -- 仅包含第一条横线后的内容

  • <<Include(FooBar, to="^----$")>> -- 仅包含第一条横线以前的内容

  • <<Include(^FooBar/.*, sort=descending)>> -- 使包含的页按页面名称的字母顺序降序排列

  • <<Include(^FooBar/.*, items=3)>> -- 最多包含入3个页面

  • <<Include(^BlogBase/.*, to="^----$", sort=descending, items=7)>> -- 最多显示一个星期的blog项目

  • <<Include(^BlogBase/.*, to="^----$", sort=descending, items=7, skipitems=7, titlesonly)>> -- 仅显示上个星期的标题

  • 您可以将本宏命令与 MonthCalendar宏 结合使用来实现 blogging 功能:

    • <<Include(^FirstnameLastname/20..-..-..,,to="^----",sort=descending,items=3)>> -- 显示月历中的最近的三个项目

    • <<Include(^FirstnameLastname/20..-..-..,,to="^----",sort=descending,items=4,skipitems=3,titlesonly)>> -- 只显示下面的4个标题

2. NewPage 宏

NewPage 宏

提供一个创建页面的对话框,方便用户创建(子)页面, 使用 PageTemplate 作为新页面的模板, NameTemplate 用于名字模板和用户输入的页面名组合形成新页面的名称。

用法:

  • <<NewPage(PageTemplate,ButtonLabel,ParentPage[,NameTemplate])>>

  • <<NewPage(PageTemplate,ButtonLabel,parentPage[, NameTemplate] [, type="select"] [, layout=""] [, category=""] [, validate="")]>>

参数:

  • PageTemplate

    创建新页面的模板。
    PageTemplate 为一个字符串,该字符串指定模板名称。新页面以该模板页面为原型创建。或者
    PageTemplate 为 python 的 dict 类型,支持根据多个模板创建新页面。Dict 的索引为模板名称(或者逗号分隔的模板名称以及页面归属的分类),键值为显示在下拉列表或者radio 中的名称。示例:

    • 单一模板文件

    • 代码:

      • <<NewPage(缺省权限页面模板)>>

    • 示例输出:

    • 多模板: 用户从下拉框中选择模板 AbcTemplate 还是 XyzTemplate。新页面创建在 Meetings 下面。新页面名称为 "年-月-日_用户输入的页面名称"。新页面被自动加入分类 CategoryX 和 CategoryY。

    • 代码:

      • <<NewPage({"AbcTemplate":u"模板一","XyzTemplate":u"模板二"}, "创建新页面",会议,%Y-%m-%d_%s, category="会议纪要类,CategoryMeeting")>>

    • 示例输出:

      • Input title:
        Select template:
    • 多模板: 用户从下拉框中选择模板。新页面创建在 "会议" 下面。新页面名称为 "年-月-日_用户输入的页面名称"。新页面根据模板的选择自动加入不同分类。

    • 代码:

      • <<NewPage({"公司会议模板,公司会议纪要类":u"公司会议纪要","部门会议模板,部门会议纪要类":u"部门会议纪要"}, 创建新页面, @PAGE, %Y-%m-%d_%s, type=radio)>>

    • 示例输出:

      • Input title:
        Select template: 公司会议纪要 部门会议纪要
    ButtonLabel

    对话框的提交按钮名称。

    ParentPage

    指定父页面名称,即在此页面下创建新页面。可以使用参数 @SELF 或者 @PAGE。

    • @SELF : 当前页面(包含该 NewPage 宏的页面)名称。

    • @PAGE : 请求的页面名称。当包含 NewPage 宏的页面被"页面A"包含,访问“页面A” 时, @PAGE 设定为“页面A”。

    NameTemplate

    页面名称。如果 NameTemplate 中包含 %s,则显示表单,用户可以自定义页面名称,页面名称会替换 NameTemplate 中的 %s 而组成页面名称。

    type

    多分类模式下,分类选择的方式,缺省为 "select"

    • type=select : 下拉菜单选择模板

    • type=radio : radio 风格选择模板

    layout=

    用于定制 HTML 提交表单,缺省为空,即使用预定义格式的表单。缺省表单如下:

    • <table class="borderless">
        <tr>
          <td>""" + _("Input title: ") + """</td><td>%(input)s</td></tr>
        <tr>
          <td>""" + _("Select template: ") + """</td><td>%(select)s</td></tr>
        <tr><td colspan="2" align="right">%(button)s</td></tr>
      </table>
    category

    逗号分隔的分类名称,该分类被自动添加到新页面中

    validate

    根据参数确定验证用户输入的合法性。

    • validate=category : 页面名称必须是合法的分类名称

    • validate=nocategory : 页面名称不能是分类名

    • validate=template: 页面名是模板

    • validate=notemplate: 页面名不能是模板

    • validate=group: 页面名是组名

    • validate=nogroup: 页面名不能是组名

    • validate=dict: 页面名是词典

    • validate=nodict: 页面名不能是词典

示例:

3. ShowCategory 宏

ShowCategory 宏

一般嵌入到分类页面中,提供更好的分类页面显示。过去分类页面为了显示子分类或者子页面,往往用 FullSearch 宏,效率低下而且界面难看。ShowCategory 宏读取分类索引缓存提高效率,而且采用 MediaWiki 页面样式展示分类。

(!) 分类页面的创建大大简化,一般仅在分类页面中只放入一条 <<ShowCategory>> 语句即可。

用法:

  • <<ShowCategory>>

  • <<ShowCategory(all)>>

  • <<ShowCategory(分类名,参数...)>>

参数

  • (!) 说明:

    • 所有布尔值参数,例如 summary, 可以通过 summary=0 或者 summary=false 或者 nosummary 设置为 False,

      • 可以通过 summary 或者 summary=1 或者 summary=yes 设置为 "真"。

    • 参数也可以缩写,只要不合其它参数的缩写冲突即可。例如 summary 可以缩写为 su,nosummary 可以缩写为 nosu。

    • 下面参数之外的关键字作为分类名称。

    • all 显示所有分类。

    • 如果没有指定分类,使用当前页面名称作为分类。

  • categories

    是否显示子分类。缺省是

    pages

    是否显示分类包含的页面。缺省是

    summary

    是否显示分类说明等信息。缺省是

    capital

    是否显示排序头文字。缺省是

    templates

    是否显示模板文件。缺省否

    ascending|descending

    排序方式是正序还是逆序。缺省为正序

    recursive

    是否递归查找子分类或者分类包含的页面?。缺省否

    sort

    排序方式。缺省为 "title" 即按照标题排序

    • title: 按照标题排序

    • timestamp: 按照时间绰排序

    column

    缺省按照3列显示。

    items

    显示的条目总数

    skipitems

    跳过的条目数

示例:

  • Code

    Description

    <<ShowCategory(CategoryNews)>>

    显示分类 CategoryNews 页面,其中包含 CategoryNews 的子分类和子页面列表。

    <<ShowCategory>>

    显示当前页面的分类说明页面,包含子分类和子页面索引。 <!> 当前页面应该为一个分类页面

    <<ShowCategory(all)>>

    显示所有分类。参见页面:IndexPage

    <<ShowCategory(CategoryNews, nocategories)>>

    仅显示分类 CategoryNews 的子页面,不显示子分类

    <<ShowCategory(CategoryNews, nopages)>>

    仅显示分类 CategoryNews 的子分类,不显示子页面

    <<ShowCategory(CategoryNews, nocat, nosummary)>>

    不显示子分类,也不显示分类说明,仅仅显示子页面列表

    <<ShowCategory(CategoryNews, nocapital,nosum)>>

    不显示分类说明,也不显示排序的题头字母

    <<ShowCategory(CategoryNews, recursive, descending)>>

    递归显示子分类以及子页面,逆序排列

    <<ShowCategory(CategoryNews, rec, cat=0, items=20,skipitems=5,column=2,sort=timestamp)>>

    不显示分类,仅显示子页面,按照页面修改时间排序,跳过前5条记录,总共显示20条,并分两列显示

参考:

4. jQuery 宏

jQuery 宏

jQuery 是一个成熟和强大的 JavaScript 扩展框架,往往只需要向网页中添加一个简单的 JavaScript脚本,就可以为网页添加绚烂的特效。jQuery 宏 命令会根据不同的参数包含不同的 JavaScript 脚本到网页中。

用法:

  • <<jQuery>>

    • 会在网页中嵌入 <script type="text/javascript" src="/m/common/js/jquery.js"></script>

  • <<jQuery(extension)>>

    • 会执行名为 '<extension>' 的扩展,或者

    • 简单的包含名为 jquery_<extension>.js 脚本到页面中。

  • <<jQuery(extension, args...)>>

    • 提供使用参数 args,调用 extension.

4.1. jQuery(example)

该扩展简单的包含 jquery.js 和 jquery_example.js 到页面中。 凡是在 Example 样式的文字块中定义的附件或者外部图片,自动添加消隐功能

示例代码

  • <<jQuery(example)>>
    
    {{{#!wiki Example
     * [[attachment:jquery_example.js|Click to view code: jquery_example.js]]
     * [[attachment:no_lastchild_for_ie.png]]
     * [[http://www.ossxp.com/HelpCenter/00000_OSSXP/AboutUs_Slide?action=AttachFile&do=get&target=animate.gif|Click to display external image]]
    }}}

显示效果

4.2. jQuery(mark)

该扩展简单的包含 jquery.js 和 jquery_mark.js 到页面中。

  • 为列表中最后一个 li 元素添加 'last-child' 样式;

  • 目的是修正 IE 无法对列表的最后一个元素进行定制的缺陷;

  • 在 "组织结构图" 等页面中,需要使用该扩展,以便在 IE 和 Firefox 中有一致的显示。

示例代码

  • <<jQuery(mark)>>
    
    {{{#!wiki tree
    {icon:building} Company
      * {icon:person} CEO: Name of CEO
      * {icon:building} R&D Dept
        * {icon:person} CTO - Name of CTO
        * {icon:persons} Devs - Dev1, Dev2, Dev3
    }}}

演示效果

  • 使用 <<jQuery(mark)>> 宏的效果:

      • {icon:building} Company

        • {icon:persion} CEO: Name of CEO

        • {icon:building} R&D Dept

          • {icon:persion} CTO - Name of CTO

          • {icon:persions} Devs - Dev1, Dev2, Dev3

  • 不使用 <<jQuery(mark)>> 宏,在 MicroSoft IE 中可能的显示效果:

    • no_lastchild_for_ie.png

4.3. jQuery(toggle)

参考了 jQuery plugin: Animated Collapsible DIV,增加文字块缩放的特效。

该 jQuery 插件的调用稍微复杂,需要针对每个显示区域进行设置,并设置按钮样式,因此需要多次用不同的参数调用该插件。

用法:

  • <<jQuery(toggle, set, #id|.class, fade=1,hide=1,group=demo,persist=1)>>

  • <<jQuery(toggle, show, #id|.class, type=radio|button|link, name=name, text=text)>>

  • <<jQuery(toggle, hide, #id|.class, type=radio|button|link, name=name, text=text)>>

  • <<jQuery(toggle, toggle, #id|.class, type=radio|button|link, name=name, text=text)>>

  • 其中:

    • toggle 插件的第一个参数代表动作,其余参数用于对该动作进行设定。

      • set 动作是设定显示区域的属性

      • show/hide/toggle 显示按钮。其中 show 具有显示区域功能,hide具有隐藏功能,toggle是切换显示和隐藏

    • #<id> 或者 .<class> 用于指定区域

    • name 用于设定分组

    • type 用于设定显示的按钮的样式: radio 或者按钮,或者文字链接

    • text 用于设定按钮的文字

说明:

  • 只要该插件被调用,就会一次性包含相关 JavaScript 脚本并做相应的初始化。

    • <script type="text/javascript" src="/m/common/js/jquery_3stateradiobutton.js"></script>
      <script type="text/javascript" src="/m/common/js/jquery_animatedcollapse.js"></script>
      <script type="text/javascript">animatedcollapse.init();</script>
  • 调用该插件的 set 方法,设置各个显示区域的属性:相关区域的 id 或者 css_class,区域是否分组,初始是隐藏还是显示,是否需要淡入淡出效果等。

    • <<jQuery(toggle,set,.region1,hidden=1,group=demo,fade=1)>>
      <<jQuery(toggle,set,.region2,hidden=1,group=demo,fade=1)>>
      <<jQuery(toggle,set,.region3,hidden=1,fade=1)>>
  • 调用该插件三个方法: show(显示区域), hide(隐藏区域), toggle(切换显示和隐藏状态),以显示按钮。相关的参数设置:按钮控制的区域(用相关区域的 id 或者 css_class 表示),按钮的类型(按钮或者radio),按钮文字等:

    • <<jQuery(toggle,show,.region1,.region2,.region3,type=button,text=显示所有)>>
      <<jQuery(toggle,hide,.region1,.region2,.region3,type=button,text=隐藏所有)>>
      <<jQuery(toggle,toggle,.region1,type=radio,name=grp1,text=显示1)>>
      <<jQuery(toggle,toggle,.region2,type=radio,name=grp1,text=显示2)>>
      <<jQuery(toggle,toggle,.region3,type=button,text=显示3)>>
  • 在 Wiki 页面中定义 ID 或者 css_class 名称:

    • {{{#!wiki region1 hidden left
      ~+'''文字块1'''+~
      这是文字块 1 的内容...
      }}}

示例代码

  • <<jQuery(toggle)>>
    <<jQuery(toggle,set,.region1,hidden=1,group=demo,fade=1)>>
    <<jQuery(toggle,set,.region2,hidden=1,group=demo,fade=1)>>
    <<jQuery(toggle,set,.region3,hidden=1,fade=1)>>
    
    <<jQuery(toggle,show,.region1,.region2,.region3,type=button,text=显示所有)>>
    <<jQuery(toggle,hide,.region1,.region2,.region3,type=button,text=隐藏所有)>>
    
    <<jQuery(toggle,toggle,.region1,type=radio,name=grp1,text=显示1)>>
    <<jQuery(toggle,toggle,.region2,type=radio,name=grp1,text=显示2)>>
    <<jQuery(toggle,toggle,.region3,type=button,text=显示3)>>
    
    {{{#!wiki region1 hidden left
    ~+'''文字块1'''+~
    这是文字块 1 的内容...
    }}}
    
    {{{#!wiki region2 hidden left
    ~+'''文字块2'''+~
    这是文字块 2 的内容...
    }}}
    
    {{{#!wiki region3 hidden left
    ~+'''文字块3'''+~
    这是文字块 3 的内容...
    }}}

演示效果

  • 显示1

    显示2

5. MiniPage 宏

5.1. MiniPage 宏

MiniPage 宏

MoinMoin 的表格语法功能不强,单元格难以嵌入多行文本。MiniPage 宏可以解决在表格中嵌入多行 wiki 格式化内容的难题。

  • MiniPage 把传递给它的参数作为一个字符串进行处理,无须在字符串两端添加引号

  • 对其中的 \n 替换为换行符,这样单行文本转换为多行文本

  • 将替换后的多行文本交由 Wiki 语法解析器处理,并将结果输出

用法:

  • <<MiniPage(...)>>

示例代码:

  • ||cell 1 ||cell 2||
    ||{{{line 1:\nline 2:}}} ||<<MiniPage(2H,,2,,+O,,2,,=2'''H,,2,,O'''\n\na^2^+b^2^=c^2^)>>||

显示效果:

  • cell 1

    cell 2

    line 1:
    line 2:

    2H2+O2=2H2O

    a2+b2=c2

5.2. ThisPage 和 OtherPage 宏

ThisPage 和 OtherPage 宏是 MiniPage 宏的两个变体。区别在于:

  • ThisPage 宏的内容只显示在本页面,当本页面被其它页面包含时不会被显示;

  • OtherPage 宏则正好相反。内容在本页面不显示,仅当本页面被其它页面包含时才会在其它页面中显示;

示例代码:

  • ||cell 1 ||cell 2||
    ||{{{line 1:\nline 2:}}} ||<<OtherPage(2H,,2,,+O,,2,,=2'''H,,2,,O'''\n\na^2^+b^2^=c^2^)>> <<ThisPage(Only display something when included by other page.)>> ||

显示效果:

  • cell 1

    cell 2

    line 1:
    line 2:

    2H2+O2=2H2O

    a2+b2=c2

6. StatsChart(contribute) 数据统计宏

StatsChart(contribute)

是对宏 StatsChart 做的扩展,提供维基贡献率查询界面。关于宏 StatsChart 的其它用法,参见: EventStats

用法:

  • <<StatsChart(contribute)>>

示例:

7. MonthCalendar 宏

MonthCalendar 宏

可用于个人信息管理,整合日历功能。

用法:

  • <<MonthCalendar(BasePage, Year, Month, MonthOffset, MonthOffset2, Height6, Maniversary, Template)>>

参数:

  • BasePage

    新页面在此页面下创建,缺省为当前页面下创建。BasePage 可以是相对页面名

    height6

    是否以6行显示月历。若为0,则根据情况显示4行到6行月历。若大于0,则始终显示6行(有的月份出现空行)

    Maniversary

    为1,则创建子页面格式为 MM-DD(即没有年);若 Maniversary 为0,则子页面格式为 YYYY-MM-DD

    Template

    是创建子页面的模板名称

示例:

  • 当前月份月历: <<MonthCalendar>>

  • 上一个月份月历: <<MonthCalendar(,,,-1)>>

  • 下一个月份月历: <<MonthCalendar(,,,+1)>>

  • SampleUser 12月份月历: <<MonthCalendar(SampleUser,,12)>>

  • 2001/12 + 2 个月后的月历: <<MonthCalendar(,2001,12,+2)>>

  • 显示多个用户月历: <<MonthCalendar(MyPage*TestUserA*TestUserB)>>

  • 新创建的日历条目以 MonthCalendarTemplate 为模板:

    • <<MonthCalendar(,,,,,,MonthCalendarTemplate)>>

  • 显示 2002 年全年月历 (每个月历显示6行):

    • Calendar of year 2002 (every month padded to height of 6):
      ||||||Year 2002||
      ||<<MonthCalendar(,2002,1,,,1)>>||<<MonthCalendar(,2002,2,,,1)>>||<<MonthCalendar(,2002,3,,,1)>>||
      ||<<MonthCalendar(,2002,4,,,1)>>||<<MonthCalendar(,2002,5,,,1)>>||<<MonthCalendar(,2002,6,,,1)>>||
      ||<<MonthCalendar(,2002,7,,,1)>>||<<MonthCalendar(,2002,8,,,1)>>||<<MonthCalendar(,2002,9,,,1)>>||
      ||<<MonthCalendar(,2002,10,,,1)>>||<<MonthCalendar(,2002,11,,,1)>>||<<MonthCalendar(,2002,12,,,1)>>||

8. MailTo 宏

通过使用 MailTo 宏,您可以放心的将邮件地址写在wiki中,不必担心邮件地址被垃圾邮件程序收集(这种机器人程序专门收集电子邮件地址),或被垃圾邮件制造者非法使用。

用法:

  • <<MailTo(Firstname DOT Lastname AT example DOT net)>>

  • <<MailTo(Firstname DOT Lastname AT example DOT net, link text)>>

  • 如果禁止了匿名查看页面维基源码,这样写也可以:
    <<MailTo(Firstname.Lastname@example.net)>>

    • 即邮件地址在 Wiki 代码中即使没有换码也会在页面输出的时候加以保护。

这个宏应该做些什么?

  • 我们需要区分已登录用户和匿名用户(其中包含了垃圾邮件机器人程序)。

    已登录用户应该可以看到邮件地址,并且应该可以通过点击链接来使用该邮件地址。

    匿名用户的情况比较棘手 — 他们可能是“普通”用户,也可能是一些专门收集邮件地址的人或者其他什么东西(比如,垃圾邮件机器人)。这些邮件地址可能被滥用于发送商业邮件,这也是因特网上普遍存在的问题。

    • 对于已登录用户,他们将看到下面的结果:

    • 对于匿名用户

      • /!\ MoinMoin原始的实现是对匿名用户,输出形如 Firstname DOT Lastname AT example DOT net 的地址。我们觉得并非最好的解决方案,因为对于商业网站,可能会导致部分用户无法和我们联系,或者需要无谓的说明和解释。

      • 改进后,匿名用户(比如垃圾邮件机器人程序和其它用途的机器人程序)将会得到 JavaScript 编码或者 url-encode 编码的邮件地址。但在浏览器的输出中,将显示正常的邮件地址并且也可以点击。

      • 因为人是通过浏览器访问网站,会自动对 JavaScript 或 url-encode 编码进行解析,但是对于一个自动化的机器人,会形成阻碍,不能从中提取出有用信息,因而忽略它。这个宏命令就达到了它的目的,防止垃圾邮件。

示例代码:

  • 这是我的邮件地址 <<MailTo(worldhello DOT net AT gmail DOT com, 蒋鑫)>>

演示效果:

  • 这是我的邮件地址

参考:

9. FreeMind 宏

FreeMind 宏

可以在页面中嵌入 FreeMind 的 Flash 插件以显示嵌入式的脑图。

示例:

  • <<FreeMind( urlOfMindmap )>>

  • <<FreeMind( urlOfMindmap, width )>>

  • <<FreeMind( urlOfMindmap, width, height )>>

10. Hello 宏

Hello 宏

您可以把 Hello 宏看作是 Hello world! 因为它是如此的简陋 ;)

  • 主要对时间参数进行处理,以更好的显示

  • 例如显示: 今天, 今年, 去年, ...

用法:

  • <<Hello(type, text)>>

参数:

  • type

    时间类型。可用的类型有: day, week, month, year

    text

    时间字符串

示例:

  • <<Hello(day, 2009-01-31)>>

    • 根据当前时间的不同,可能显示为: 昨天,今天,明天,或者原样显示 2009-01-31

  • <<Hello(week, 2009年第5周)>>

    • 根据当前时间的不同,可能显示为: 上一周,本周,下一周,或原样显示 2009年第5周

  • <<Hello(year, 2005/8/31)>>

    • 根据当前时间的不同,可能显示为: 去年,今年,明年,或原样显示 2005/8/31

11. 其它宏

<<Anchor(anchorname)>>

定义锚点

<<BR>>

换行符

<<TableOfContents([maxdepth])>>

显示目录

<<RecentChanges>>

显示最新改动

<<AttachList(pagename,mimetype)>>

附件列表

<<TitleIndex>>

页面列表

<<WantedPages>>

未撰页面

<<OrphanedPages>>

孤儿页面,未有其它页面链接到

<<AbandonedPages>>

很长时间未编辑页面,疑似废弃页面

<<RandomPage>>

随机页面

<<EditedSystemPages>>

被更改了的系统页面

<<Action(action [,text])>>

动作链接

<<AdvancedSearch>>

搜索对话框

<<SystemInfo>>

系统信息

参见: