1)在O365管理中心,确保启用了站点脚本定制,否则,网站不允许将页面切换到编辑模式。
2)Ribbon上,列表-》表单web部件-》编辑窗体
如果没有Ribbon,则到列表高级设置,启用经典UI
3)编辑表单webpart,设置其表单模板名称为CSRListForm, 默认的ListForm,只能支持定制某个字段,不支持定制整个Layout
4)增加脚本编辑器Web部件,里面写脚本,很多文章都讲了CSR机制.
ref:https://code.msdn.microsoft.com/office/CSR-code-samples-11-Fully-54ebcaa6
<script>
// List Forms – User CSRListForm Server Tempalte
// Muawiyah Shannak , @MuShannak
(function () {
// Create object that have the context information about the field that we want to change it's output render
var formTemplate = {};
formTemplate.Templates = {};
formTemplate.Templates.Item= viewTemplate;
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(formTemplate);
})();
// This function provides the rendering logic for the Custom Form
function viewTemplate(ctx) {
var formTable = "".concat("<table width='100%' cellpadding='5'>",
"<tr>",
"<td><div>Title</div></td>",
"<td><div>{{TitleCtrl}}</div></td>",
"<td><div>CompanyCtrl</div></td>",
"<td><div>{{CompanyCtrl}}</div></td>",
"</tr>",
"<tr>",
"<td><div>Category</div></td>",
"<td><div>{{CategoryCtrl}}</div></td>",
"<td><div>Active</div></td>",
"<td><div>{{ActiveCtrl}}</div></td>",
"</tr>",
"<tr>",
"<td></td>",
"<td><input type='button' value='Save' onclick="SPClientForms.ClientFormManager.SubmitClientForm('{{FormId}}')" style='margin-left:0' ></td>",
"</tr>",
"</table>");
//Replace the tokens with the default sharepoint controls
formTable = formTable.replace("{{TitleCtrl}}", getSPFieldRender(ctx, "Title"));
formTable = formTable.replace("{{CompanyCtrl}}", getSPFieldRender(ctx, "Company"));
// formTable = formTable.replace("{{CategoryCtrl}}", getSPFieldRender(ctx, "Category"));
// formTable = formTable.replace("{{ActiveCtrl}}", getSPFieldRender(ctx, "Active"));
formTable = formTable.replace("{{FormId}}", ctx.FormUniqueId);
return formTable;
}
//This function code set the required properties and call the OOTB (default) function that use to render Sharepoint Fields
function getSPFieldRender(ctx, fieldName)
{
var fieldContext = ctx;
//Get the filed Schema
var result = ctx.ListSchema.Field.filter(function( obj ) {
return obj.Name == fieldName;
});
//Set the field Schema & default value
fieldContext.CurrentFieldSchema = result[0];
fieldContext.CurrentFieldValue = ctx.ListData.Items[0][fieldName];
if(ctx.Templates.Fields[fieldName]==null)
return "";
//Call OOTB field render function
return ctx.Templates.Fields[fieldName](fieldContext);
}
</script>