我可以保证发布我刚刚创建的项目吗?

时间:2014-02-05 00:22:59

标签: sitecore sitecore6

我有一种情况,我希望最终用户能够创建新的Sitecore项目......然后立即能够导航到项目的URL。显然该项目必须发布......但这发生在一个黑盒子里。有没有办法保证项目从Master发布到Web?

或者,我可以在Web DB中创建项目...然后在某个时刻重新创建/复制Master版本。但这种策略似乎充满了危险。也许只是一个坏主意。

连连呢?我是否对在Web上直接创建项目感到不必要的偏执?

4 个答案:

答案 0 :(得分:2)

您无法“保证”,因为发布可能会排队,也不会立即生效。相反,如果您需要即时访问,我建议使用指向主数据库的预览站点:

How to Setup a Sitecore Preview Site to Review Content Before Publishing

答案 1 :(得分:1)

我首先要说我的答案不一定合情理。但是,根据您的情况,它应该工作。

如果用户创建的项目始终具有相同的模板,您可以尝试创建回退到使用Master数据库的自定义项目解析程序。

  1. 允许Sitecore尝试正常解析该项目。
  2. 如果失败,请查看Master数据库。
  3. 如果项目在那里,请确保其具有正确的模板
  4. 将找到的项目设置为上下文项目。
  5. 使用此方法,您可以从Master-> Web s normal发布项目,但您不必等到发布完成才能看到它。

    再一次,这应该可以解决问题,但是由您来衡量提供主数据库内容的风险。

答案 2 :(得分:0)

您可以创建一个事件映射到类,其中包含用于发布项目的代码。在代码中,您可以定义您希望是否发布的任何规则。

<event name="item:saved">
   <handler type="YourType.ItemEventHandler, YourType" method="OnItemSaved" />
</event>

OnItemSaved看起来像这样:(未经测试)

protected void OnItemSaved(object sender, EventArgs args)
{
    if (args == null)
    {
        return;
    }
    Item item = Event.ExtractParameter(args, 0) as Item;

    var webDb = Sitecore.Configuration.Factory.GetDatabase("web");
    var masterDb = Sitecore.Configuration.Factory.GetDatabase("master");

    foreach (Language language in masterDb.Languages)
    {
        var options = new PublishOptions(masterDb, webDb, PublishMode.SingleItem, language, DateTime.Now) 
                    { RootItem = item, Deep = true };

        var myPublisher = new Publisher(options);
        myPublisher.Publish();
    }
}

关于在web db中创建项目,我也不会这样做。它会被意外的默认发布过程取代。

答案 3 :(得分:0)

我个人不喜欢在master数据库中创建项目的前端用户,我觉得只有内容作者/编辑应该是从内容编辑器或页面编辑器创建项目的人。

无法保证项目立即发布,我建议您将任何用户创建的数据存储在单独的数据库中,并在重定向URL上只读取此数据库中的数据。