Comments

Adding comments to a articles templates

I will explain how to add comments to a detail page of articles template by using Embedded Forms.

1. Adding Embedded Form in your template

More info on the Embedded Forms documentation page.

<div id="obs-comments"></div> <button type="button" class="btn btn-primary" id="submit-{{Context.ModuleId}}">Submit</button>
{{#each Collections.Submissions.Items}} <p>{{Name}} : {{Message}}</p> {{/each}}
$(document).ready(function () { var moduleId = {{Context.ModuleId}}; var itemId = "{{Context.Id}}"; var itemTitle = "{{Title}}"; var sf = $.ServicesFramework(moduleId); var form = $("#obs-comments").openContentForm({ servicesFramework: sf, onSubmit: function (data) { // execute some code before submit data.itemId = itemId; data.itemTitle = itemTitle; data.approvalEnabled = true; }, onSubmited: function (data) { // execute some code after submit form.destroy(); alert(data.message); $submitButton.hide(); } }); var $submitButton = $('#submit-' + moduleId); $submitButton.click(function () { form.submit(itemId); }); });

By adding data.approvalEnabled = true; in the data by javascript it tell opencontent to add a "approved" field to the comment initialised to false.

Modify manifst detail template for include comments in model for template rendering

"detail": { "template": "detail.hbs", "schemaInTemplate": true, "optionsInTemplate": true, "additionalDataInTemplate": true, "model": { "Submissions": { "query": { "RelatedField": "itemId", "Filter": { "approved": "true" }, "Sort": [ { "Field": "$timestamp", "Order": "desc" } ] } } } }

You can see in the query section that you can define filtering and sorting of the comments on the detail page of a article.

2. Create a submissions template

Create a copy of form-schema.json and form-options.json (created by the form builder) and nam it submissions-schema.json and submissions-options.json.
In this schema and options files add 3 new fields : approved, itemTitle, itemId.

{ "type": "object", "properties": { "Name": { "type": "string", "title": "Name" }, "Email": { "type": "string", "title": "Email" }, "Phone": { "type": "string", "title": "Phone" }, "Message": { "type": "string", "title": "Message" }, "itemId": { "type": "string", "title": "itemId" }, "itemTitle": { "type": "string", "title": "itemTitle" }, "approved": { "type": "boolean", "title": "approved" } } }
{ "fields": { "Name": { "type": "text" }, "Email": { "type": "email" }, "Phone": { "type": "text" }, "Message": { "type": "textarea" } } }

Add submissions template to manifest.json and create comments.hbs template file.

......... "comments": { "type": "multiple", "title": "comments", "collection": "Submissions", "main": { "template": "comments.hbs" } } .........
<p>submissions</p> {{#each Items}} <p>{{Name}} : {{Message}} <a href="{{Context.EditUrl}}">edit</a></p> {{/each}}

The template need to be placed on a page not publically accessible. And need to have as source of content the Articles template on a other page.