为了改善SharePoint WCM发布页面的编辑和显示体验,我希望能够在编辑模式下切换到一组特殊的Masterpage / PageLayout。
所以在/ _catalogs / masterpage中我希望:
MyMasterpage.master - 显示模式的母版页 MyMasterpage-edit.master - 编辑模式的母版页,仅在可用时使用 MyPageLayout.aspx - 用于显示模式的pagelayout MyPageLayout-edit.aspx - 编辑模式的页面布局,仅在可用时使用
当我在Pages库中创建一个新的发布页面时,我选择了MyPageLayout页面布局。
在渲染页面时,我想检测我是否处于编辑显示模式,就像服务器控件一样。此控件执行以下代码以确定呈现模式:
private void calculateShouldRender()
{
SPControlMode contextualFormModeFromPostedForm = ConsoleUtilities.GetContextualFormModeFromPostedForm();
if ((SPControlMode.Display == contextualFormModeFromPostedForm) && (PageDisplayMode.Display == this.PageDisplayMode))
{
this.shouldRender = true;
}
else if ((SPControlMode.Edit == contextualFormModeFromPostedForm) && (PageDisplayMode.Edit == this.PageDisplayMode))
{
this.shouldRender = true;
}
else
{
this.shouldRender = false;
}
this.Visible = this.shouldRender;
}
如果渲染模式为编辑,我想切换到MyMasterpage-edit.master materpage和MyPageLayout-edit.aspx页面布局。
我可以在由服务器控件控制的母版页和页面布局中进行大转换,但我想分割可靠性。 SharePoint Analist可以创建最佳的编辑模式页面,前端开发人员可以创建干净漂亮的显示模式页面,而不会造成任何编辑混乱。
关于如何实现这一目标的任何想法?主页切换似乎不是问题,我曾经写过blogpost。困难的事情似乎是页面布局的切换。
答案 0 :(得分:1)
我认为如果你继续沿着这条路走下去,你会与SharePoint作斗争,我担心它也会成为一种支持噩梦,因为问题就变得不那么清楚,或者记得在两者中都做出改变(或者全部四个!)什么东西更新的地方。
您可以根据页面的编辑模式显示或隐藏控件,以便向用户显示的内容完全不同,但页面的所有代码仍然在一个位置。
调查editmodepanel。
<publishingwebcontrols:editmodepanel ID="Editmodepanel1" runat="server">
<link id="Link2" rel=Stylesheet href="<% $SPUrl:~sitecollection/EditMode.css %>" runat="server" type="text/css" />
</publishingwebcontrols:editmodepanel>
我意识到这并不是你提出的要求......但是我觉得与SharePoint战斗是一场失败的战斗,你只需要用它的'方式'。
答案 1 :(得分:1)
我曾经写过一个功能来根据不同的标准切换页面布局。不同之处在于,页面布局在网站创建期间更改,而不是在查看或编辑模式下。更改页面布局的代码如下:
private void SetPageLayout(SPWeb web, string pageName, string pageLayoutName)
{
PageLayout layout = null;
PublishingPage page = null;
SPFile pageFile = null;
bool checkedOut = false;
try
{
PublishingWeb publishWeb = PublishingWeb.GetPublishingWeb(web);
// verify that the requested pageLayout is available
foreach (PageLayout pl in publishWeb.GetAvailablePageLayouts())
{
if (pl.Name.Equals(pageLayoutName, StringComparison.OrdinalIgnoreCase))
{
layout = pl;
break;
}
}
// got my layout
if (layout != null)
{
page = null;
foreach (PublishingPage pubPage in publishWeb.GetPublishingPages())
{
if (pageName == pubPage.Name)
{
page = pubPage;
break;
}
}
// got my page
if (page != null)
{
pageFile = page.ListItem.File;
page.CheckOut();
checkedOut = true;
page.Layout = layout;
page.Update();
page.CheckIn("changed the page-layout to " + pageLayoutName);
checkedOut = false;
pageFile.Publish("");
// If required, approve the page
try
{
pageFile.Approve(string.Empty);
}
catch
{
// Page doesn't need to be approved
}
}
}
}
答案 2 :(得分:0)
我的文字对于评论框来说太长了,所以我回答Aiden就好像这是一个答案,但我的问题仍然存在!
嗨Aidan,我将SharePoint视为一个可以构建解决方案的平台。我认为微软在平台上构建的WCM解决方案很薄弱。我知道我的方式不是直接采用SharePoint标准方式,但标准方式不起作用。结合编辑和显示模式导致(选择你的选择): - 标准的SharePoint发布网站,它们看起来很相似,但在编辑模式下工作正常 - 一个非常可编辑但外观非常基本的网站 - 在显示模式下看起来很棒的网站,几乎不可能编辑 我们在显示模式下需要的样式表与MOSS WCM样式表之间存在很多冲突。我们确实编写了各种补偿样式表以使其正常工作,但这是一个痛苦的***。在页面中使用样式注入代码以使编辑成为可能是一个主要缺陷,这应该完全在您正在编辑的页面之外完成。例如,在iframe中,可以在您正在编辑的页面顶部显示为浮动窗口。但这种情况并非如此。然后,当你在页面上有标签或手风琴控件时,我甚至没有提到你遇到的问题。
我们的目标是真正具有互动性的Web 2.0网站,其中必须完成大量内容管理。以SharePoint方式直接获取编辑模式不起作用。
最佳编辑体验是关键。那么为什么不使用优化的母版页和pagelayout进行编辑,以便以清晰一致的方式访问所有可编辑元素。但是你仍然需要显示模式。这可以使用仅使用SharePoint中生成的数据的完整单独站点来完成。这可以是一个ASP.NET站点,或者如果你想完全控制html MVC可以使用。我不这样做,因为它在导航,安全性,控件重用,Web部件的使用等方面有很多含义。
如果使用针对编辑进行了优化的母版页/ pagelayout,我认为你可以获得两个世界的最佳效果,另外两个母版页/ pagelayout仅用于在pagelayout中使用最少的代码集进行显示。
所以......请保持答案!
答案 3 :(得分:0)
当然这需要继承Microsoft.SharePoint.Publishing.PublishingLayoutPage并使用它来呈现实际的PublishingLayoutPage的内容,具体取决于“编辑模式”。
如何更改母版页... ek。
答案 4 :(得分:0)
尝试再次将SharePoint弯曲到您的意愿? ;)
我感觉到你的痛苦。我正在使用两种方法来获得类似的行为:
一个容器控件,用于条件渲染部分页面,我想像你建议的那样。最初,当某个字段具有特定值时,我需要它来隐藏页面的某些部分,因此没有呈现html。见wrapper controls。 控件本身非常简单,它的类需要一个[ParseChildren(false)],如果不满足条件,render方法不会调用基础渲染。 您可以扩展它以向编辑器和设计者显示完全不同的页面,尽管它们仍然存在于同一页面中。我想你可以去除分析师使用的部分,并把它放在自己的用户控件中,但这不是很容易维护。
其次,表单页面,例如“/Pages/Forms/EditForm.aspx?ID=1”,提供了发布页面上所有字段的清晰视图..没有设计可以阻碍。 (我在所有页面布局上使用一个控件,提供对此页面库和当前页面库的单击访问,并显示所使用的内容类型和页面布局。在构建WCM站点时非常有用。)
答案 5 :(得分:0)
这个问题的最终答案现在被“烘焙”到我们称之为DualLayout for SharePoint的产品中!我们的方法解决了所有SharePoint WCM设计的噩梦:
在http://www.macaw.nl/Het+Bedrijf/Producten/Macaw+DualLayout+for+SharePoint.aspx查看,请参阅该页面博客论文中的博文,了解详细背景信息。