December 31, 2015

My First DXA Module - JWPlayer - Steps by Step - Content Delivery

In last post, i detailed my experience on the CMS Part of the DXA module. In this post i will explain the CDA part

Visual Studio Solution: In MVC each Module is separated by respective Area in the project. There are different ways to set your solution.

  • Use exiting DXA project and create required Area using Mvc ' Add Area..
  • You can use Visual studio extension for DXA to add, required files e.g Registration and Modle classes.
  • I find it easy to add above in existing DXA website, as it make me easy to debug and go ;)
Structure of  this plugin
so when we add new Area all the above folders, except Entity are automatically created along with web.config and JWPlayerAreaRegistration.cs file. 

Step by Step changes:
  1. Create Model class which will be used in the ViewModel and carry the data from component of JWPlayer Schema.
so here i have mapped all fields of schema to this ViewModel.

2.  Create view which will use above model and render the JWplayer Video. the name of view should match with one given in CT's metadata.

3. Update JWPlayerAreaRegisteration.cs so that it inherits  from  Sdl.Web.Mvc.Configuration.BaseAreaRegistration class
and overrides the RegisterAllViewModels method to register above view and view-model in view-registry. see below image , This is again very important step

 Now time to compile and test the module.

You will see following output.

You can see JWPlayer logo on top the the video. this is there as i have not used any valid key for it.

So we are done with the working DXA module step by step. 

Now time to bundle this module using Powershell scripts and submit to the Gallery where people can use and improve it. 

I will also send pull request on GIT to open source the code.  

I have listed out the features  for next version, which i will definitely work in 2016. Stay tuned for that.

Happy new year!!

My First DXA Module - JWPlayer - Steps by Step - CMS

DXA Modules allows us to extend its Functionality via providing new modules. Making separate modules for functionality gives flexibility & re-usability. Independent release of the modules can happen without concerning about the main DXA version and developer can develop their modules and publish at DXA Module repository.
I was very impressed by the DXA modular approach and framework when Bart shown us the slides in last MVP meet. This modular functionality is near similar to WordPress plugin world, where you can download thousands of plugins. Right now downloading in Dxa is not that smooth because nature of the complexity of Tridion vs WordPress and its just start, but i hope SDL will make it smoother in next releases and Alchemy.
btw wordpress also has JWPlayer plugin :)

Each DXA module has primarily two sections.

  1. CMS
  2. CD
CMS Part
  •  Define module's folder structure
  •  DXA has a predefined structure for putting all the building blocks of the module.  
  •  For each new DXA module, we need to create a new folder in Modules Folder
  • The name of folder is usually module name.
  • In Admin folder of module(JWPlayer) , a component of Module Configuration schema is created  
  • Site Manager usually contains Schema and Template to be controlled by Site manager.
  • Settings also have similar folder as in Module but it just contains component etc for defining any settings.

Module Configuration: This is the Mandatory details of the Module

  • Module Name: Defines a unique name of this module
  • Version to track any updates in future
  • URL for additional details
  • Active: never used it, but to enable disable the module
  • if  you module is dependent on any other module, so far i have seen only Core here
  • Any settings component is attached here in "Further Configuration section"
  • After setting there is resource section. if you have any resource do attach the resource component there.

i have attached JWPlayer Configuration Component of JWPlayer Configuration Schema, which contains one field for JWPlayer Key.

I have created another schema "JWPlayer"

This schema will be used by Editor to define the JWPlayer Video components with required Video details and attached to desired page.
Component Template:
I have created a new CT (JWPlayer) to be attached with component of above schema  and following are the metadata settings of it

Entity View Name : Value for Area and View name which will render this CT.

Region Name: Section name of webpage where this CT needs to be rendered. i wanted to render it on home page so used this. but can can be any new region as well.

So we are done with CMS part of the Module. now time to publish.

December 30, 2015

An Encounter with Content Type in Tridion Experience manager

In my two last posts, i detailed about Page-Type feature of Tridion. In this article i am keying down my Encounter with Content type.

What is Content Type - It is predefined Component presentation that can be added to a Page in XPM, if that Component type is permissible on Page Template.

another: already defined component presentation on a page automatically become  content type for that page.

Hows it defined - Go to publication Property then on the tab "Content type", at bottom click on Insert. you will see following form on the screen.

all the fields are very descriptive itself. i don't think more explanation required here. but one think i would like to point out here. Define you content type zt some common publication e.g Website Site Master. so that it gets available to all the site publication in XPM.

Don't know feature or bug,
All Content types are by default available to all child publications via blueprinting but they are not visible in child-publication in CME.

there are two types of settings in Content Type:

  • Blueprint Context Setting
  • Content type mapping Setting

Blueprint context Settings: Here we define if  a component for is created for a page in any publication what should be physical location of that component. as pages and components are created in different publications.
Just choose the publication here. More details here

Content Type Mapping: In this mapping we basically specify mapping between Page template and Content type. e.g Carousel content type should only be available on Article and home page template

So you can do this setting on parent publication and post that. its get available to all child publication. 

Because "Inherit setting from Parent" is selected by default on all publications. so this setting get automatically available to all child publications. if you wan to override these settings, you can un-check the check-box and define new setting for that required publication.

Here you see all content type available in choose publication. here you can define what all Content type are available to which page template

How to use content type in XPM:

After defining the content type, time to use it on desired pages. So load the XPM with the target page where you need to insert the content. when page loads. make sure lock sign in not there on top of the page. else you will not see options under Insert Content, as shown below

when you load a page in Xpm, and select Create and insert New Content option, on left side slider all content type enabled(which we did in last steps) on that PT is shown here. You choose it and it show you form to give a name to the component and choose the folder of that component, if you want to go ahead with earlier selected location that is also OK.

Publication for the component is chosen as per the blueprint context you set in settings.

Same issue exists in Content type which i mentioned for page types earlier
  1. only first level of components are cloned in content types any linked component is not cloned but same component is used.
  2. When we create Content-type and choose folder location, it does not pick the bluprint context but show the folder from that publication only.
    but when you create component in XPM publication and folders are selected as per blueprint context. if folder choose at creation of content type not exists in the publication as per blueprint context, XPM throws Error.
  3. by default content type are inherited to child publications but via looking on to CME GUI you can not find it out what all content type are being inherited.  

December 27, 2015

Decoding Publish Settings in DXA

Decoding Publish Settings in DXA.
DXA has few system pages like Html-design, _navigation and “Publish Settings”, out of these Publish Settings is the one which boots an DXA application and considered as the very important system page.
Publish setting provides intelligence to the MVC application to get it work faster and isolated from CMS.
How does it choose what to publish?
So DXA provides a schema called Module Configuration. Whenever a module is created, a component of this schema is created you define the module name, version and related dependencies of it.

Whenever Publish-settings is published. It searches for the all components created with this schema
& generate files which store as binaries in the Broker DB. Above picture is of Core component (Module-Configuration schema). If you see it has listed configuration and Resource dependencies of this module.
Files Generated –  (each files starts with its module name)
-          Core.json  - Contains all the configuration values(combined)  from attached components above
-          Core.schemas.json – contains name and id of all the schema of this module
-          Core.taxonomies.json – contain all taxonomies of the system.
There is another file _all.json in this directory which actually list all above files and few other environment settings.
-          Core.json – a combined file of the entire resource component attached in module configuration.
We can say it is master data of schemas & templates, this is not module dependent files but global files.
-          Schemas.json - it contains all the schemas’ definitions from the CMS.
-          Regions.json - it has details of all the regions and details of component template where it’s used, along with linked schema of CT.
-          Includes.json – it contains all the Page Template Ids and associated includes in that PT.
So this is wealth of information required/used by DXA for various purposes.
It needs schemas. Json to map field values to the respective entity, Semantics and XPM in MVC application. So whenever there is change in schema you have to publish “Publish settings” page to reflect the change in application.
Any change in schema CT’s Region and PT’s includes require users to publish this page. Otherwise you will spend hours to figure out where the heck are my changes.
When DXA boots it loads _all.json of config and resources to read all the respective files and download all these under BinaryData folder of your application’ root directory.