Получить тип контента на локализованном сайте - PullRequest
0 голосов
/ 25 марта 2010

В MOSS2007 мне нужно найти и удалить, например, тип содержимого по умолчанию из списка (чтобы его можно было заменить на пользовательский). Список может быть на нескольких сайтах, сайты могут быть на нескольких языках, а название для этого типа контента может быть различным (например, «Wiki Page» на EN, «Wikipagina» на NL и т. Д.) Моя идея заключалась в том, чтобы найти контент введите Id или префикс Id (например, вики-страница всегда начинается с 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 Ответ

3 голосов
/ 25 марта 2010

Вы можете использовать SPBuiltInContentTypeId класс, чтобы получить встроенные идентификаторы типов контента. Так зачем использовать имена, если вы можете использовать идентификаторы, которые намного лучше?

Локализованные строки

Конечно, вы также можете использовать имена, но тогда вам следует использовать SPUtility.GetLocalizedString . Проверьте C: \ Program Files \ Common Files \ microsoft shared \ Расширения веб-сервера \ 12 \ Resources \ core.resx, чтобы узнать, какие имена ресурсов имеют какие значения.

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

Идентификаторы и иерархия типов контента

Говоря об идентификаторах, типы контента имеют свою собственную иерархию , и вы правы, что типы контента, такие как вики и все типы контента, полученные из вики, будут начинаться с 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 .... (это будет CHILD, если тип контента wiki), поскольку при добавлении типа контента в список он фактически создает новый контент тип, производный от его родителя.

Так что вы можете безопасно удалить этот тип контента, если хотите. А если вы хотите изменить этот тип контента, то используйте возвращаемое PARENT возвращаемого типа контента (свойство SPContentType.Parent), чтобы изменить и применить изменения ко всем унаследованным типам контента ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...