Ghosting 不可 Ghost 的内容





5.00/5 (1投票)
本示例展示了如何在 SharePoint 中幽灵化不可幽灵化的文件,以及如何重新定位现有的幽灵化内容。
引言
本文展示了一种将幽灵化文件重新映射到新位置的方法,并展示了如何幽灵化不可幽灵化的文件,例如通过 SharePoint 设计器最初创建的文件。这假定您对 SharePoint 以及幽灵化和非幽灵化文件的概念有基本的了解。
这实际上是一种技巧,它用新的幽灵化版本覆盖现有文件。实际上修改不可幽灵化的文件使其变为可幽灵化几乎是不可能的,除非直接修改内容数据库,这是不可饶恕的罪过。另一种方法是删除原始文件并部署幽灵化版本来代替;但是,对于可能仍然被现有内容引用的布局(例如),会出现问题。我发现以下技术可以克服这些问题,并允许无缝地用幽灵化版本替换文件。
注意:如果您的目标仅仅是重新幽灵化现有文件,那么我建议使用许多现有的工具,例如 gl-reghostfile。
解决方案
在本示例中,我们将从 SharePoint 发布模板中重新映射 ArticleLeft
布局,到通过我们的示例功能部署的更新版本。这将幽灵化文件的位置更改为我们功能的位置,并允许我们通过升级新的解决方案来部署 ArticleLeft
布局的后续更改。该示例在模板的页面标题中添加了已修改字样。
第一步是使用 SharePoint 设计器从 SharePoint 数据库中保存现有文件。然后将其添加到功能中,就像您第一次配置它一样。对于布局,请务必同时配置原始文件中的属性;否则,新的布局将无法正常工作。
<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Url="_catalogs/masterpage" Path="Layouts">
<File Url="ArticleLeft_Ghosted.aspx"
Type="GhostableInLibrary" IgnoreIfAlreadyExists="true">
<Property Name="Title"
Value="Modified Article page with image on left" />
<Property Name="MasterPageDescription"
Value="The modified article page with image on left contains
an image field and a rich text field." />
<Property Name="ContentType"
Value="Page Layout" />
<Property Name="PublishingPreviewImage"
Value="/_catalogs/masterpage/en-US/Preview Images/ArticleLeft.png,
/_catalogs/masterpage/en-US/Preview Images/ArticleLeft.png" />
<Property Name="PublishingAssociatedContentType"
Value=";#Article Page;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007
948130EC3DB064584E219954237AF3900242457EFB8B24247815D688C526CD44D;#" />
</File>
</Module>
</Elements>
下一步是重命名文件,以便最初可以将其与现有的布局一起部署。在包含的示例中,我将文件命名为 ArticleLeft_Ghosted.aspx。
最后,我们添加一个功能接收器,其中包含以下代码,以用新的幽灵化版本覆盖目标文件。注意:此代码已为简洁起见进行了简化;有关完整代码,请参阅示例。
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSite site = properties.Feature.Parent as SPSite;
PublishingWeb pubweb = PublishingWeb.GetPublishingWeb(site.RootWeb);
// get reference to newly provisioned file
SPFile file = site.RootWeb.GetFile("/_catalogs/masterpage/ArticleLeft_Ghosted.aspx");
if (file != null)
{
// overwrite the old layout with the ghosted version
file.MoveTo("/_catalogs/masterpage/ArticleLeft.aspx", true);
file.Update();
}
}
覆盖后,文件的新的版本将保持幽灵化状态。对于布局和母版页,所有现有内容都将开始使用幽灵化版本。该技术的关键在于 MoveTo
命令,它允许覆盖任何引用的布局,而不会破坏对现有内容的引用。