获取本地化站点中的内容类型

时间:2010-03-25 11:02:36

标签: sharepoint localization types

在MOSS2007中,我需要从列表中查找和删除默认内容类型(以便被自定义内容替换)。列表可以在多个站点上,站点可以是多种语言,并且此内容类型的名称可以是不同的(例如:EN中的“Wiki页面”,NL中的“Wikipagina”等)我的想法是查找内容使用Id或Id的前缀键入类型(例如:wiki页面始终使用0x010108)。还有更好的想法吗?我们可以根据语言在代码中获取内容类型的名称吗?

private static SPContentType GetWikiPageContentTypeFromList(SPList list)
    {
        string wikiPageStartId = "0x010108";
        foreach (SPContentType contentType in list.ContentTypes)
        {
            string ctId = contentType.Id.ToString();
            if (ctId.StartsWith(wikiPageStartId))
            {
                return contentType;
            }
        }
        return null;
    }

1 个答案:

答案 0 :(得分:3)

您可以使用SPBuiltInContentTypeId类来构建内容类型ID。那么为什么要使用名称,如果你可以使用更好的id?

本地化字符串

当然,你也可以使用名字,但是你应该使用SPUtility.GetLocalizedString。检查C:\ Program Files \ Common Files \ microsoft shared \ Web Server Extensions \ 12 \ Resources \ core.resx以查看哪些资源名称具有哪些值。

string strWikiDocumentTitle = SPUtility.GetLocalizedString("$Resources:WikiDocument", "core", SPContext.Current.Web.Language);

内容类型ID和层次结构

谈到id,内容类型有their own hierarchy,你是对的,像wiki这样的内容类型和从wiki派生的所有内容类型都将以0x010108开头。

无论如何,你走的是正确的道路。

//Returns best match, that is the content type that is Wiki document. If wiki document content type not in list, will return it's parent content type id.
SPContentTypeId bestMatch = list.ContentTypes.BestMatch(SPBuiltInContentTypeId.WikiDocument);
if (bestMatch.IsChildOf(SPBuiltInContentTypeId.WikiDocument))
{
   return list.ContentTypes[bestMatch];
}

关于列表内容类型

的问题

顺便说一句,返回的内容类型不会具有正确的ID 0x010108,而是0x010108xxxxxxxxxxxxxxxxx ....(如果是wiki内容类型,它将是CHILD),因为当您向列表添加内容类型时,它实际上创建了新内容从其父级派生的类型。

因此,如果您愿意,可以安全地删除该内容类型。如果要修改该内容类型,则使用返回的内容类型的PARENT(SPContentType.Parent属性)修改并应用对继承的所有内容类型的更改...