我有一种情况,我希望最终用户能够创建新的Sitecore项目......然后立即能够导航到项目的URL。显然该项目必须发布......但这发生在一个黑盒子里。有没有办法保证项目从Master发布到Web?
或者,我可以在Web DB中创建项目...然后在某个时刻重新创建/复制Master版本。但这种策略似乎充满了危险。也许只是一个坏主意。
连连呢?我是否对在Web上直接创建项目感到不必要的偏执?
答案 0 :(得分:2)
您无法“保证”,因为发布可能会排队,也不会立即生效。相反,如果您需要即时访问,我建议使用指向主数据库的预览站点:
How to Setup a Sitecore Preview Site to Review Content Before Publishing
答案 1 :(得分:1)
我首先要说我的答案不一定合情理。但是,根据您的情况,它应该工作。
如果用户创建的项目始终具有相同的模板,您可以尝试创建回退到使用Master数据库的自定义项目解析程序。
使用此方法,您可以从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上只读取此数据库中的数据。