 
        
纸壳CMS在插件中创建独立页面
ZKEASOFT January 17, 2021
纸壳CMS的设计模式是基于组件的,但依然可以使用MVC的方式写完整的独立页面。
添加插件
首先我们需要添加一个插件,将根目录下的ZKEACMS.Standard.zip解压到src目录,然后重命名为ZKEACMS.Pages,同时把ZKEACMS.Standard.csproj也改名为ZKEACMS.Pages.csproj。然后再用记事本打开ZKEACMS.Pages.csproj,将里面的Standard重命名为Pages:

接下来我们把插件添加到项目中,鼠标右键单击Plugins,然后选择添加现有项目,选择刚刚添加的ZKEACMS.Pages.csproj插件:

打开插件下的zkea.plugin文件:

{
	ID:"D8543DD0-B100-4CA5-AEEA-B6182C38B6DC",
	Name:"ZKEACMS.Standard",
	FileName:"ZKEACMS.Standard.dll",
	Enable:"true"
}插件的ID,可以使用Visual Studio中的工具来生成:

再将里面的Standard替换为Pages:
{
	ID:"34B6118C-4AB8-49E0-8034-47ADC8E80712",
	Name:"ZKEACMS.Pages",
	FileName:"ZKEACMS.Pages.dll",
	Enable:"true"
}打开StandardPlug.cs选中类名,按F2将它改名为PagesPlugin,然后点击应用或者直接回车:

选中Standard命名空间,按F2把命名空间改为Pages:

最后我们将StandardController,Standard Model还有StandardService删除。
这样一个空的纸壳CMS插件就添加完了。
创建路由
假如我们现在需要添加一个/zkea/index的页面,打开PagesPlug,然后添加路由将/zkea/index路由到PluginPagesController的Index Action:
public override IEnumerable<RouteDescriptor> RegistRoute()
{
    yield return new RouteDescriptor
    {
        RouteName = "PluginPages",
        Template = "zkea/index",
        Defaults = new { controller = "PluginPages", action = "index" },
        Priority = 20
    };
}Controller
接下来我们在插件的Controllers添加PluginPagesController,并且,并且添加一个Index Action:
public class PluginPagesController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}Views
接下来我们需要创建一个Layout,我们在插件的Views目录下创建一个Shared目录,并创建一个_PluginPagesLayout.cshtml文件作为Layout。
_PluginPagesLayout.cshtml:
<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
</head>
<body>
    @RenderBody()
</body>
</html>然后再创建一个PluginPages目录,该目录与PluginPagesController对应。在PluginPages目录下添加Index.cshtml文件。
Index.cshtml:
@{ 
    Layout = "_PluginPagesLayout";
}
<h1>
    This is plugin pages
</h1>注意设置Index页面的Layout为_PluginPagesLayout!
注意:插件修改后一定要主动做一次生成,也可以直接按F6生成整个解决方案。
我们将纸壳CMS运行起来,然后访问一下/zkea/index试试,可以看到页面已经可以正常访问了:

 
                    