[kooboo]创建站点过程
KooBoo创建站点是从一个压缩的文件包中取得模板文件的,然后再根据这个模板文件进行进行调整,这样一个过程。
从代码来看:
从创建一个根站点开始:
1,http://localhost:3910/Sites/Site/CreateRootSite ,
[CreateSiteAuthroziation]
public virtual ActionResult CreateRootSite()
{
//取得模板路径下所有 .zip 结尾的文件及取得预览图。
ViewData["TemplatesJSON"] = ServiceFactory.SiteTemplateManager.All().Select(o => { o.Thumbnail = !string.IsNullOrWhiteSpace(o.Thumbnail) ? Url.Content(o.Thumbnail) : null; return o; }).ToJSON();
//取得所有分类
ViewData["TemplateCategorys"] = ServiceFactory.SiteTemplateManager.AllCategories();
return View(new CreateSiteModel() { Version = "1.0.0.0" });
}
2,提交创建过程,这一步就有点意思了。
[CreateSiteAuthroziation]
[HttpPost]
public virtual ActionResult CreateRootSite([Bind(Exclude = "Parent")]Site site, string template, string parent)
{
return Create(site, parent, template);
}
[CreateSiteAuthroziation]
[HttpPost]
public virtual ActionResult Create([Bind(Exclude = "Parent")]Site site, string parent, string template)
{
JsonResultEntry resultEntry = new JsonResultEntry(ViewData.ModelState);
try
{
if (ModelState.IsValid)
{
Site parentSite = null;
if (!string.IsNullOrEmpty(parent))
{
parentSite = new Site(SiteHelper.SplitFullName(parent));
}
var createdSite = Kooboo.CMS.Sites.Services.ServiceFactory.SiteManager.Create(parentSite, site.Name, template, site, User.Identity.Name);
resultEntry.RedirectUrl = Url.Action("SiteMap", new { controller = "home", siteName = createdSite.FullName });
}
}
catch (Exception e)
{
resultEntry.AddException(e);
}
return Json(resultEntry);
}
下面就是根据 zip文件来了创建模板了。
public virtual Site Create(Site parent, string siteName, string templateFullName, Site siteSetting, string userName)
{
if (string.IsNullOrEmpty(templateFullName))
{
if (parent == null)
{
throw new KoobooException("Parent site is required.".Localize());
}
parent = parent.AsActual();
siteSetting.Parent = parent;
// Set the same settings with parent.
siteSetting.EnableJquery = parent.EnableJquery;
siteSetting.EnableStyleEdting = parent.EnableStyleEdting;
siteSetting.EnableVersioning = parent.EnableVersioning;
siteSetting.InlineEditing = parent.InlineEditing;
siteSetting.CustomFields = parent.CustomFields;
siteSetting.Smtp = parent.Smtp;
// 这里有点意思, 模板方法
Add(parent, siteSetting);
if (!string.IsNullOrEmpty(siteSetting.Repository))
{
CopyRepository(parent.GetRepository(), siteSetting.Repository);
}
return siteSetting;
}
else
{
var template = new ItemTemplate(templateFullName);
var itemTemplate = ServiceFactory.SiteTemplateManager.GetItemTemplate(template.Category, template.TemplateName);
if (itemTemplate == null)
{
throw new KoobooException("The template does not exists.");
}
Site site = null;
using (FileStream fs = new FileStream(itemTemplate.TemplateFile, FileMode.Open, FileAccess.Read, FileShare.Read))
{
site = Create(parent, siteName, siteSetting.Repository, fs, userName);
}
//copy site setting...
site.Repository = siteSetting.Repository;
site.DisplayName = siteSetting.DisplayName;
site.Culture = siteSetting.Culture;
site.Domains = siteSetting.Domains;
site.SitePath = siteSetting.SitePath;
site.Version = siteSetting.Version;
site.Mode = siteSetting.Mode;
// 这里有点意思, 模板方法
Update(site);
return site;
}
}
public virtual Site Create(Site parent, string siteName, string repositoryName, Stream siteStream, string userName)
{
//注意了,这里 create 是使用的文件,
var site = SiteProvider.Create(parent, siteName, siteStream, repositoryName);
site.Repository = repositoryName;
Update(site);
SiteProvider.Initialize(site);
SiteProvider.Online(site);
return site;
}
初始化存储
namespace Kooboo.CMS.Content.Persistence.SqlServer
{
public class RepositoryProvider : Kooboo.CMS.Content.Persistence.Default.RepositoryProvider
{
public override void Add(Models.Repository item)
{
base.Add(item);
DatabaseHelper.InitializeDatabase(item);
}
public override void Remove(Models.Repository item)
{
try
{
DatabaseHelper.DisposeDatabase(item);
}
catch
{
}
base.Remove(item);
}
public override void Initialize(Models.Repository repository)
{
DatabaseHelper.InitializeDatabase(repository);
base.Initialize(repository);
}
public override bool TestDbConnection()
{
//Do not use sharing database, do not test the sharing connection string.
//if (SqlServerSettings.Instance.SharingDatabase == false)
//{
// return true;
//}
var shareConnectionString = SqlServerSettings.Instance.SharingDatabaseConnectionString;
return SQLServerHelper.TestConnection(shareConnectionString);
}
}
}
public virtual void Initialize(Repository repository)
{
ITextContentProvider textContentProvider = Providers.DefaultProviderFactory.GetProvider<ITextContentProvider>();
Providers.DefaultProviderFactory.GetProvider<IMediaContentProvider>().InitializeMediaContents(repository);
ISchemaProvider schemaProvider = Providers.DefaultProviderFactory.GetProvider<ISchemaProvider>();
//if (!(textContentProvider is TextContentProvider))
//{
ISchemaProvider xmlSchemaProvider = new SchemaProvider();
ITextContentProvider xmlContentProvider = new TextContentProvider();
foreach (var schema in xmlSchemaProvider.All(repository))
{
schemaProvider.Initialize(schema);
textContentProvider.ImportSchemaData(schema, xmlContentProvider.ExportSchemaData(schema));
}
textContentProvider.ImportCategoryData(repository, xmlContentProvider.ExportCategoryData(repository));
//}
}
转载于:https://www.cnblogs.com/zbw911/archive/2013/01/16/2862846.html
[kooboo]创建站点过程相关推荐
- mysql创建数据库1064_Mysql创建表过程中报1064错误
Mysql创建表过程中报1064错误 发布时间:2020-06-18 06:23:08 来源:51CTO 阅读:7528 作者:白羊IT 我在自己搭建的mysql服务中,在使用create table ...
- OpenCms创建网站过程图解——献给OpenCms的初学者们
很多人都听说了OpenCms,知道了它的强大,索性的下载安装了,终于见到了久违OpenCms,看到了它简洁的界面,欣喜过后却不免一脸茫然,这个东西怎么用,我怎么用它来建站,从哪开始,无从下手,找资料, ...
- (1)访问控制 (2)final关键字 (3)对象创建的过程 (4)多态
1.访问控制(笔试题) 1.1 常用的访问控制符 public - 公有的 protected - 保护的 啥也不写 - 默认的 private - 私有的 1.2 访问控制符的比较 访问控制符 访问 ...
- Oracle 10G 全新创建数据库过程(暂记)
创建数据库过程: 1.通过Oracle 10G 自带的DBCA(Database Configuration Assistant),创建全新的数据库.一般是通过"定制数据库".这个 ...
- wdcp mysql密码_WDCP提示无法连接mysql及创建站点提示mysql密码不正确
一.wdcp系统访问提示无法连接mysql 1.可能是mysql服务没启动,首先ssh登陆服务器,然后执行service mysqld restart重启mysql再访问试下,如果无法启动,先用df ...
- Java对象创建的过程及对象的内存布局与访问定位
这里以HotSpot为例,且所说的对象指普通的Java对象,不包括数组和Class对象等. 1.对象创建的过程 1.类加载.解析.初始化:虚拟机遇到new时先检查此指令的参数是否能在常量池中找到类的符 ...
- Oracle创建存储过程时出现“警告: 创建的过程带有编译错误。”
执行完存储过程的创建后,如出现"警告: 创建的过程带有编译错误.",可执行语句: show errors; 查看具体哪里出现了编译错误.
- 一步步学习SPD2010--第一章节--探索SPD2010(4)--使用SharePoint Designer创建站点
通常你创建解决方案的第一步是创建站点.当你使用SharePoint创建一个站点时,你可以从中选择许多网站模板--将页面.Web部件和其他功能整合--以使你能够组织信息.管理文档和创建工作流支持业务环境 ...
- html以自己的学号命名站点,实验6.1创建站点并掌握编辑网页的基本操作.docx
实验6.1 创建站点并掌握编辑网页的基本操作 一.实验目的 1.熟悉Dreamweaver 的工作环境 2.掌握使用Dreamweaver创建站点的基本步骤 3.掌握网页编辑的基本方法 二.实验要求 ...
最新文章
- 营销自动化为什么能吸引企业的喜欢?它有何魅力?
- Javascript实现复选框(全选反选功能)
- vue each_Vue 应用单元测试的策略与实践 05 - 测试奖杯策略
- 微博预计要火一阵的SleepSort之Shell及C实现
- python元组元素删除_Python3基础 通过拆分元素 把元组的数据删除
- OpenJudge——0003:jubeeeeeat
- python接口测试之新手篇
- Python 安装MySQL数据库工具包
- 面试指南:新人面试做好三个“第一”
- mysql数据库修改排序规则
- 数据结构笔记(三十三)--二叉排序树的插入与生成
- [UWP]涨姿势UWP源码——IsolatedStorage
- w3school和w3cschool两个网站有什么关系和区别?
- Linux上安装rz、sz命令
- 大数据开发学习教程——大数据的基本概念
- 电脑计算机怎么显示到桌面,怎么显示我的电脑到桌面
- android ios相机,曝苹果iOS13相机加入了这项功能 安卓上早就有了
- 一文带你了解移动入库指南(详细版)
- AI产业链的划分,主要可分为基础层、技术层和应用层
- 用 django 构建翻译网站——软件工程课程设计