Программно перечисление зон веб-частей макета страницы публикации

У меня есть ситуация, когда мой класс передается экземпляру PublishingPage, и я хочу перечислить все зоны веб-частей, которые используются на странице макета для этой страницы.

Это тяжело.

PublishingPage имеет свойство с именем Layout, которое имеет тип PageLayout. Это отличается от PublishingLayoutPage, который наследует (в конце концов) страницу, которая имеет свойство Zones. Этот тип PageLayout не имеет ссылки на обычный тип страницы ASP.NET, который обладает необходимым мне свойством Zones.

Я могу получить SPListItem и SPFile из свойства PublishingPage.Layout и получить содержимое макета страницы в необработанном текстовом виде, но его нельзя проанализировать с помощью XmlReader, поскольку он не является допустимым XML (имеет теги <%, которые недопустимы).

Я могу получить SPWeb от PublishingPage.ListItem.Web, и это может дать мне SPLimitedWebPartManager, где я могу получить коллекцию LimitedWebParts (которая содержит информацию о зоне) - но это не поможет, потому что на этом этапе моего кода у меня есть нет веб-частей.

Я застрял, похоже, что издательская инфраструктура совершенно не связана с ASP.NET и SharePoint.

ОБНОВИТЬ:

Я могу использовать SPLimitedWebPartManager, чтобы добавить фиктивную веб-часть (например, новый ContentEditorWebPart) в зону веб-части (у меня есть имена используемых зон), но когда я сохраняю это и проверяю страницу обратно (и получаю новый SPLWPM), я могу вернуть WebParts, но свойство Zone имеет значение null (свойство ZoneID заполнено и правильно).

1 ответ

Сообщения от Уэйна Фана в этой теме, кажется, охватывают то, что вы пытаетесь сделать. Надеюсь это поможет.

Другие вопросы по тегам