动手改simiki

simiki 是 Jigsaw of CxumoL 使用的 wiki 框架,属国产个人作品。

样式

简单粗暴·杂交两种首页

两种首页:

  1. %source%/index.md
  2. 根据文件结构,自动生成 wiki 目录

1.3 以后的 simiki,如果 site_config 的 index 为 true,按照第一种方式渲染,否则按第二种方式

这个处理办法,不太灵活。如果既能自编首页内容,又能保留自动生成的目录:目录或是放在首页之下,或是新开一页,是为目录页,岂不妙哉。

若想改成像现在这般,上面为自定内容,下面放置脚本生成的目录,须从两处着手。
本应更有妙招,奈何技术不精,下述方案,无不体现了简单粗暴的霸蛮风格。

改首页模板

/themes/simple/index.html

{% if site.index %}
  {{ page.content }}
  ooo
{% else %}
  xxx
{% endif %}

把 xxx , 复制到 ooo 的位置,结果没有用。应该是还有哪里缺了东西。

目录生成~移花接木

到底是拿我py编出来的,这时候赶紧趁机得意洋洋地炫耀其优越性:想改神马,直接改源码,改完马上就能运行。顺着报错提示,摸到了这里:

%python-env%/Lib/site-packages/simiki/generators.py

分析调试不表。
我不懂面向对象,若有大神看到以下胡闹,别打我。若能不嫌弃指点一二,更是感激。

把CatalogGenerator类的(除了__init__,get_template_varsgenerate_catalog_html)各种函数,统统复制到CustomCatalogGenerator麾下。

传参进来

CustomCatalogGenerator(以下简称CCG) 比 CatalogGenerator(以下简称CG) 少进来一个参数pages。

__init__()里面,不知道为什么, CG 的 super() 第一个是self, 可是 CCG 的,第一个就不能是self。
反正我 CCG 的 __init__() 是这么写的:

    def __init__(self, site_config, base_path, pages):

        super(CustomCatalogGenerator, self).__init__(site_config,base_path,pages)
        self.pages = pages

至于是哪一句起了作用,还是共同起作用……不管他,反正能用。

另外,cli.py 里 Generator.generate_catalog 相应的,不忘加上pages

百尺竿头

CCG的get_template_vars中生成自定内容的部分,到 page = {"content": idx_content} 为止,趁着还没有和 site_config 一起,打包到 tpl_vars 里面,赶紧夹带点私货。

        self.site_config["structure"] = \
            self.sort_structure(self.get_content_structure_and_meta())

好吧,所谓私货,其实也是从 CG 里搬运过来的

功成

生成目录

维基页面嘛,不都得摆个目录,装装b吗

其实它本来就支持 TOC,但是,文档里面并没有提到这个功能。说一下发现过程。
simiki 开源,托管在 github,先用 repo内搜索,发现是有 TOC 功能的。然并卵,不知道怎么用
抱着试一试的心态,又在issue搜了一遍,哈哈哈,居然找到了用法。

在需要 TOC 的地方写上 [TOC] ,即可。

想自动给每篇新page加目录。然而 simiki 耦合度并不象 hexo 那么低,又得到 site-packages/simiki/cli.py

找到函数 create_new_wiki,加一行 "[TOC]"

知识共享许可协议本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。