我们先看一下一个手动区块的构成。
在下图的选择框,我们以 “简单列表”(只有一列的列表)为例来分析源码。

这个section的控制器有两个,分别用于前台显示和后台管理:

前台显示的controller后台管理的controller

一、前台显示的区块控制器

请打开前台显示的 ListController :

这个区块控制器必须符合两个条件:
1)打上 [App(type)] 批注(attribute)
2)实现 IPageSection 接口。这个接口有如下4个方法:


方法名称含义
SectionShow在前台的区块中显示
AdminSectionShow在后台的区块中显示
GetMoreUrl在每个区块的标题右侧,有个“更多”链接
GetSettingLink返回后台配置的链接

对于一个前台显示的section控制器,除了必须提供 SectionShow 和 GetMoreUrl 方法之外,还要让用户点击了文章链接之后,能进去查看详细页;也要让用户点击了更多之后,能进去查看列表页。所以我们往往,另外添加两个方法:Show 和 List:


二、后台管理用的区块控制器
后台控制器也要实现 IPageSection 接口。同时,除了显示内容,后台区块还要提供管理的命令,如下图所示:

最主要的是在 “我的简单列表” 下面的红色命令文字:“添加列表项” 和 “全部” 链接,这个都要你在后台的 ListController 的 AdminSectionShow 方法中设置。除此之外,还要增加“CURD”操作的方法:Add/Edit/Delete/AdminList 等:


三、自定义区块控制器的流程

通过上面的源码分析,我们知道设计一个新的区块,需要如下步骤:

1)依次创建两个控制器,一个用于前台显示,一个用于后台管理。
这两个控制器都要打上 [App(type)] 批注(attribute) 和实现 IPageSection 接口。
当然,开发这两个控制器的的方式和传统的mvc开发方式是一样的,一样需要创建视图文件,比如:


2)为你的新区块制作缩略图(大小在220px*160px左右),放在 /static/img/app/content/section/ 中:

缩略图的后缀名必须是png,名称就是新区块前台控制器的全名。
另外,从上图中,你可以类推,聚合区块的缩略图要放在 Binder 目录下。

3)将新的区块注册到区块列表中,你需要打开文件 /framework/data/wojilu.Apps.Content.Domain.ContentSectionType.config:

打开这个区块注册表文件之后,你会看到所有12个区块都在里面: