Обновление главной страницы для дочерних сайтов при применении новой к корневому веб-сайту - PullRequest
1 голос
/ 20 июня 2011

Позвольте мне выставить мой вопрос: У меня есть корневой сайт, с главной страницей и множеством дочерних сайтов. Некоторые используют главную страницу корневого сайта (путем наследования), а некоторые не используют главную страницу корневого сайта.

Когда я обновляю MP корневого сайта таким приемником событий, как этот:

SPWeb w = ((SPSite)properties.Feature.Parent).OpenWeb();
Uri masterUri = new Uri(w.Url + "/_catalogs/masterpage/AdventureWorks.master");
//MasterPage used by publishing pages
w.CustomMasterUrl = masterUri.AbsolutePath;
w.AllowUnsafeUpdates = true;
w.Update();

... главная страница обновляется для корневого сайта, но НЕ для дочерних сайтов, которые наследуются от главной страницы корневого сайта! И когда я захожу на страницу настроек главной страницы сайта для дочернего сайта, переключатель «Унаследовать главную страницу сайта от родителя этого сайта» хорошо проверен.

Когда я применяю новую мастер-страницу со страницы «Настройки главной страницы сайта», я не вижу этой проблемы.

Для информации: Мой корневой сайт на сайте публикации и функции «Публикация инфраструктуры SharePoint Server» и «Публикация SharePoint Server» работают.

Я что-то пропустил?

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Все еще нет ответов через месяц: / Так что я думаю, что нет механизма обновления всех мастер-страниц для дочерних сайтов. Поэтому я обновил приемник событий с активированной функцией следующим образом:

using (SPWeb w = ((SPSite)properties.Feature.Parent).OpenWeb())
        {
            Uri masterUri = new Uri(w.Url + "/_catalogs/masterpage/AdventureWorks.master");
            w.CustomMasterUrl = masterUri.AbsolutePath;
            w.AllowUnsafeUpdates = true;
            w.Update();

            foreach (SPWeb ww in w.Site.AllWebs)
            {
                if (!ww.IsRootWeb)
                {
                    Hashtable hash = ww.AllProperties;
                    if (string.Compare(hash["__InheritsCustomMasterUrl"].ToString(), "True", true) == 0)
                    {
                        ww.CustomMasterUrl = masterUri.AbsolutePath;
                        ww.AllowUnsafeUpdates = true;
                        ww.Update();
                    }
                }
            }
        }

Цель состоит в том, чтобы тестировать каждую веб-страницу, наследует ли она masterPage (или нет). Если это так, мы должны обновить свойство CustomMasterUrl.

0 голосов
/ 06 октября 2016

Используйте это, чтобы установить главную страницу для корневого каталога и всех дочерних сайтов:

        var web = site.RootWeb;

        web.MasterUrl = web.CustomMasterUrl = SPUtility.ConcatUrls(web.ServerRelativeUrl, "_catalogs/mymaster.master");
        web.Update();

        foreach (SPWeb subWeb in site.AllWebs)
        {
            using (subWeb)
            {
                if (subWeb.IsRootWeb) continue;

                var hash = subWeb.AllProperties;

                subWeb.MasterUrl = subWeb.CustomMasterUrl = web.MasterUrl;

                hash["__InheritsMasterUrl"] = "True";
                hash["__InheritsCustomMasterUrl"] = "True";

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