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]创建站点过程相关推荐

  1. mysql创建数据库1064_Mysql创建表过程中报1064错误

    Mysql创建表过程中报1064错误 发布时间:2020-06-18 06:23:08 来源:51CTO 阅读:7528 作者:白羊IT 我在自己搭建的mysql服务中,在使用create table ...

  2. OpenCms创建网站过程图解——献给OpenCms的初学者们

    很多人都听说了OpenCms,知道了它的强大,索性的下载安装了,终于见到了久违OpenCms,看到了它简洁的界面,欣喜过后却不免一脸茫然,这个东西怎么用,我怎么用它来建站,从哪开始,无从下手,找资料, ...

  3. (1)访问控制 (2)final关键字 (3)对象创建的过程 (4)多态

    1.访问控制(笔试题) 1.1 常用的访问控制符 public - 公有的 protected - 保护的 啥也不写 - 默认的 private - 私有的 1.2 访问控制符的比较 访问控制符 访问 ...

  4. Oracle 10G 全新创建数据库过程(暂记)

    创建数据库过程: 1.通过Oracle 10G 自带的DBCA(Database Configuration Assistant),创建全新的数据库.一般是通过"定制数据库".这个 ...

  5. wdcp mysql密码_WDCP提示无法连接mysql及创建站点提示mysql密码不正确

    一.wdcp系统访问提示无法连接mysql 1.可能是mysql服务没启动,首先ssh登陆服务器,然后执行service mysqld restart重启mysql再访问试下,如果无法启动,先用df  ...

  6. Java对象创建的过程及对象的内存布局与访问定位

    这里以HotSpot为例,且所说的对象指普通的Java对象,不包括数组和Class对象等. 1.对象创建的过程 1.类加载.解析.初始化:虚拟机遇到new时先检查此指令的参数是否能在常量池中找到类的符 ...

  7. Oracle创建存储过程时出现“警告: 创建的过程带有编译错误。”

    执行完存储过程的创建后,如出现"警告: 创建的过程带有编译错误.",可执行语句: show errors; 查看具体哪里出现了编译错误.

  8. 一步步学习SPD2010--第一章节--探索SPD2010(4)--使用SharePoint Designer创建站点

    通常你创建解决方案的第一步是创建站点.当你使用SharePoint创建一个站点时,你可以从中选择许多网站模板--将页面.Web部件和其他功能整合--以使你能够组织信息.管理文档和创建工作流支持业务环境 ...

  9. html以自己的学号命名站点,实验6.1创建站点并掌握编辑网页的基本操作.docx

    实验6.1 创建站点并掌握编辑网页的基本操作 一.实验目的 1.熟悉Dreamweaver 的工作环境 2.掌握使用Dreamweaver创建站点的基本步骤 3.掌握网页编辑的基本方法 二.实验要求 ...

最新文章

  1. 营销自动化为什么能吸引企业的喜欢?它有何魅力?
  2. Javascript实现复选框(全选反选功能)
  3. vue each_Vue 应用单元测试的策略与实践 05 - 测试奖杯策略
  4. 微博预计要火一阵的SleepSort之Shell及C实现
  5. python元组元素删除_Python3基础 通过拆分元素 把元组的数据删除
  6. OpenJudge——0003:jubeeeeeat
  7. python接口测试之新手篇
  8. Python 安装MySQL数据库工具包
  9. 面试指南:新人面试做好三个“第一”
  10. mysql数据库修改排序规则
  11. 数据结构笔记(三十三)--二叉排序树的插入与生成
  12. [UWP]涨姿势UWP源码——IsolatedStorage
  13. w3school和w3cschool两个网站有什么关系和区别?
  14. Linux上安装rz、sz命令
  15. 大数据开发学习教程——大数据的基本概念
  16. 电脑计算机怎么显示到桌面,怎么显示我的电脑到桌面
  17. android ios相机,曝苹果iOS13相机加入了这项功能 安卓上早就有了
  18. 一文带你了解移动入库指南(详细版)
  19. AI产业链的划分,主要可分为基础层、技术层和应用层
  20. 用 django 构建翻译网站——软件工程课程设计

热门文章

  1. 《Python编程无师自通》第13章 面向对象编程的四大支柱
  2. 计算机应用基础二,计算机应用基础二
  3. 前员工又作乱,华人AI学者陷学术造假风波,真假难辨
  4. vue3的pinia(大菠萝)
  5. 用计算器来进行计算10的几次方的问题
  6. redis客户端命令
  7. 双非保研大佬的逆袭之路 | 你想要的这里通通有!
  8. 2021年茶艺师(中级)考试题库及茶艺师(中级)实操考试视频
  9. git的安装与基础操作
  10. Echarts line折线图使用(vue)