none
SharePoint 2013. Custom master page RRS feed

  • Вопрос

  • Здравствуйте. Скопировал seattle.master, сделал свой модуль со следующим содержанием:

    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
      <Module Name="DMSMasterPages" RootWebOnly="FALSE" List="116" Url="_catalogs/masterpage" >
        <File Path="DMSMasterPages\dms.master" Url="dms.master" ReplaceContent="TRUE"
              Name="dms.master" Type="GhostableInLibrary"/>
      </Module>
    </Elements>

    В файле onet.xml site definition'а прописал эту страницу. Сайт (не корневой, а подсайт) создается, мастер страница применяется, на подсайте в библиотеке страница есть (/subsite/_catalogs/masterpage/), все ок. Включаем публикацию для созданного подсайта (можно руками, можно через site definition) и заходим на страницу изменения главной страницы сайта (/_layouts/15/ChangeSiteMasterPage.aspx) и в выборе страниц ее там нет.

    Если вынести модуль с мастер-страницей в feature уровня сайта, активировать ее, то мастер-страница появится в галерее мастер-страниц корневого сайта и при активации публикации на подсайте ее можно будет выбрать. Но в этом случае нельзя указать эту мастер страницу в onet.xml, потому что искать он ее будет в _catalogs/masterpage/ созданного подсайта, а находиться файл будет в коллекции корневого сайта семейства сайтов.

    Итого: либо все работает, но в выборе мастер-страницы нет. Либо ничего не работает, но в выборе мастер-страница есть.

    Как декларативно сделать так, чтобы при создании шаблона сайта применялась кастомная мастер-страница и при этом она была бы в выборе мастер-страниц при активации публикации с учетом того, что сайт не является корневым сайтом семейства сайтов?

    UPD. Или мне нужно пропихивать модуль с мастер-страницей и на уровень site и на уровень web?
    • Изменено skyl1n3 22 июля 2013 г. 12:56 upd1
    22 июля 2013 г. 12:29

Ответы

  • На вопрос:

    Как декларативно сделать так, чтобы при создании шаблона сайта применялась кастомная мастер-страница и при этом она была бы в выборе мастер-страниц при активации публикации с учетом того, что сайт не является корневым сайтом семейства сайтов?

    Вот это вот:

    We then need to make sure that this module deploys the files to the Master Page Gallery, which is done by setting the Url attribute of the Module element to _catalogs/masterpage. We also need to set some properties of the master page file

    Не отвечает. У меня мастер-страница попадает в галерею, применяется и все такое прочее. А не отвечает потому что:

    Если вынести модуль с мастер-страницей в feature уровня сайта, активировать ее, то мастер-страница появится в галерее мастер-страниц корневого сайта и при активации публикации на подсайте ее можно будет выбрать. Но в этом случае нельзя указать эту мастер страницу в onet.xml, потому что искать он ее будет в _catalogs/masterpage/ созданного подсайта, а находиться файл будет в коллекции корневого сайта семейства сайтов.

    Т.е. есть шаблон сайта, есть модуль с мастер-страницей (он есть в первом сообщении). В onet.xml определения сайта прописываем:

    CustomMasterUrl="_catalogs/masterpage/dms.master"
    MasterUrl="_catalogs/masterpage/dms.master

    Создаем сайт из шаблона. Все ок - создалось. Активируем публикацию на сайте. Заходим на /_layouts/15/ChangeSiteMasterPage.aspx В списке выбора нет кастомной мастер-страницы. Потому что при активации публикации в этот выпадающий список мастер-страниц попадают мастер-страницы из _catalogs/masterpage/ корневого узла, а не текущего. Если поместить модуль с мастер-страницей в feature уровня сайта, то он появится в корневом _catalogs/masterpage/ и при активации публикации будет доступен, но при создании сайта из шаблона будет ошибка, потому что он будет искать мастер-страницу на текущем (только что созданном сайте), а не в каталоге корневого сайта.

    Декларативно я только так смог добиться нужного: один и тот же модуль поместил в feature уровня site и в feature уровня web. При создании сайта из шаблона, берется мастер-страница, которая попала из feature уровня web. Ну а при выборе со включенной публикацией будет видна хотя бы мастер-страница уровня site. Но т.к. это стыд, то сейчас я реализовал через код - при создании сайта из кастомного шаблона.

    UPD: что-то похожее здесь описывается http://www.go4sharepoint.com/Forum/masterpage-galleries-subsites-6880.aspx
    24 июля 2013 г. 11:20

Все ответы

  • Привет,

    Из статьй Creating a custom master page

    Module element that we call SiteBranding. Visual Studio 2012 will automatically create a feature for us when the SPI is added, make sure to change the scope of that feature from Web to Site. To add the default seattle.master to the module, you just copy and paste the original file from the SharePoint root into the SiteBranding SPI, and rename it to something appropriate. We then need to make sure that this module deploys the files to the Master Page Gallery, which is done by setting the Url attribute of the Module element to _catalogs/masterpage. We also need to set some properties of the master page file. To tell SharePoint that it is a master page we set the content type of the item to the master page content type id and in order to make the master page available for the SharePoint 2013 UI, the UIVersion is set to 15. Finally the title of the page is set using the Title property. Listing 7-12 shows the required modifications to the element manifest.

    Не забывайте помечать сообщения как ответы и полезные, если они Вам помогли.

    23 июля 2013 г. 10:23
    Модератор
  • Petko Krushev, спасибо. Но я не увидел того, что спрашивал. Возможно, упустил, ткните пожалуйста. Страница попадает в коллекцию, на сайте применяется - здесь все ок. Проблема в другом.
    23 июля 2013 г. 12:31
  • Не за что.

    Из Вашего вопроса :

    Как декларативно сделать так, чтобы при создании шаблона сайта применялась кастомная мастер-страница и при этом она была бы в выборе мастер-страниц при активации публикации с учетом того, что сайт не является корневым сайтом семейства сайтов?

    и для того, чтобы она была видна на выборе мастер-страниц, то из статьй:

    We then need to make sure that this module deploys the files to the Master Page Gallery, which is done by setting the Url attribute of the Module element to _catalogs/masterpage. We also need to set some properties of the master page file

    Не забывайте помечать сообщения как ответы и полезные, если они Вам помогли.

    24 июля 2013 г. 6:52
    Модератор
  • На вопрос:

    Как декларативно сделать так, чтобы при создании шаблона сайта применялась кастомная мастер-страница и при этом она была бы в выборе мастер-страниц при активации публикации с учетом того, что сайт не является корневым сайтом семейства сайтов?

    Вот это вот:

    We then need to make sure that this module deploys the files to the Master Page Gallery, which is done by setting the Url attribute of the Module element to _catalogs/masterpage. We also need to set some properties of the master page file

    Не отвечает. У меня мастер-страница попадает в галерею, применяется и все такое прочее. А не отвечает потому что:

    Если вынести модуль с мастер-страницей в feature уровня сайта, активировать ее, то мастер-страница появится в галерее мастер-страниц корневого сайта и при активации публикации на подсайте ее можно будет выбрать. Но в этом случае нельзя указать эту мастер страницу в onet.xml, потому что искать он ее будет в _catalogs/masterpage/ созданного подсайта, а находиться файл будет в коллекции корневого сайта семейства сайтов.

    Т.е. есть шаблон сайта, есть модуль с мастер-страницей (он есть в первом сообщении). В onet.xml определения сайта прописываем:

    CustomMasterUrl="_catalogs/masterpage/dms.master"
    MasterUrl="_catalogs/masterpage/dms.master

    Создаем сайт из шаблона. Все ок - создалось. Активируем публикацию на сайте. Заходим на /_layouts/15/ChangeSiteMasterPage.aspx В списке выбора нет кастомной мастер-страницы. Потому что при активации публикации в этот выпадающий список мастер-страниц попадают мастер-страницы из _catalogs/masterpage/ корневого узла, а не текущего. Если поместить модуль с мастер-страницей в feature уровня сайта, то он появится в корневом _catalogs/masterpage/ и при активации публикации будет доступен, но при создании сайта из шаблона будет ошибка, потому что он будет искать мастер-страницу на текущем (только что созданном сайте), а не в каталоге корневого сайта.

    Декларативно я только так смог добиться нужного: один и тот же модуль поместил в feature уровня site и в feature уровня web. При создании сайта из шаблона, берется мастер-страница, которая попала из feature уровня web. Ну а при выборе со включенной публикацией будет видна хотя бы мастер-страница уровня site. Но т.к. это стыд, то сейчас я реализовал через код - при создании сайта из кастомного шаблона.

    UPD: что-то похожее здесь описывается http://www.go4sharepoint.com/Forum/masterpage-galleries-subsites-6880.aspx
    24 июля 2013 г. 11:20