При кастомизации отображения результатов поиска SharePoint 2013 иногда приходится добавлять созданные Manager Property. Нужно обновить секцию <mso:ManagedPropertyMapping …>, добавив туда нужные свойства. Но почему свойства могут не отображаться в Display Template?
В моём случае помогла публикация (чекин) Major версии Display Template. Сделать это можно Site Settings > Design Manager > Edit Display Templates, найти нужный и зачекинить. Видимо при этом действии срабатывает ресивер, которые настраивает шаблон для новых свойств. Успехов в SharePoint!
При кастомизации представлений списков с помощью JSLink часто возникает небольшая проблема: переопределение overrideCtx.Templates.Header переопределяет заодно и меню переключения представлений. Аналогично и с overrideCtx.Templates.Footer. Но есть решение.
В файле clienttemplates.js (адрес /_layouts/15/clienttemplates.js) содержатся многие стандартные преобразования для представлений. Там можно найти стандартный заголовок — в функции SingleItem_RenderHeaderTemplate(renderCtx) { … }. Для использования кода удобно пользоваться файлом clienttemplates.debug.js.
Наш header будет выглядеть так:
...
overrideCtx.Templates.Header = customHeader;
...
function customHeader(ctx) {
var listSchema = ctx.ListSchema;
var ret = [];
ret.push("<div>");
if (listSchema.RenderViewSelectorPivotMenu == "True")
ret.push(RenderViewSelectorPivotMenu(ctx));
else if (listSchema.RenderViewSelectorPivotMenuAsync == "True")
ret.push(RenderViewSelectorPivotMenuAsync(ctx));
ret.push("</div>");
//наша добавленная разметка
ret.push("<div id='galleria' ></div>");
return ret.join("");
}
Вообще, полезно поизучать clienttemplates.debug.js. В этом файле есть часть стандартных JSLink представлений SharePoint 2013.
В SharePoint 2010 существовал серверный контрол SPSecurityTrimmedControl, который можно было использовать на masterpage для скрытия риббона, например, или других частей страницы. В SharePoint 2013 он никуда не делся, но скрыть риббон, редактируя страницу через Design Manager стало не так просто. Причина в том, что, во-первых, изменилась вёрстка, а во-вторых через сниппеты это делается чуть сложней…
Моя идея в том, чтобы скрыть риббон CSS-классом, а показавать его Javascript’ом, который будет выполняться только для админа. К сожалению, добавить CSS для админа через сниппет Design Manager’а у меня не получилось, некоторые символы «съедаются» при конвертации страницы в aspx.
Итак, 1. Скрываем риббон классом
#ms-designer-ribbon { display: none; }
2. Добавляем на Html Master Page код перед закрывающим тегом </body> (показываем риббон для админов):
<div data-name="SecurityTrimmedFullMask">
<!--CS: Start Security Trim Snippet-->
<!--SPM:<%@Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>-->
<!--MS:<SharePoint:SPSecurityTrimmedControl runat="server" Permissions="FullMask ">-->
<!--PS: Start of READ-ONLY PREVIEW (do not modify)--><span><!--PE: End of READ-ONLY PREVIEW-->
<script type="text/javascript">//<![CDATA[
var ribbonDiv = document.getElementById("ms-designer-ribbon");
ribbonDiv.setAttribute("style", "display: inline; position: static;");
//]]></script>
<!--PS: Start of READ-ONLY PREVIEW (do not modify)--></span><!--PE: End of READ-ONLY PREVIEW-->
<!--ME:</SharePoint:SPSecurityTrimmedControl>-->
<!--CE: End Security Trim Snippet-->
</div>
Permissions=»FullMask» указывает для пользователей с какими ролями показать участок кода внутри.
Важно прописать строку Register Tagprefix=»SharePoint» прямо перед самим использованием тега SharePoint:SPSecurityTrimmedControl, иначе страница будет выдавать ошибку и тогда вы не только не увидите риббон, но озаботитесь поиском ошибки по Correlation Id