Search code examples
.netsitecoresitecore-mvctemplating-engine

How to change Sitecore's Templating Engine to Sharpy from Razor


Long story short Client provides us with Smarty Templates on Front end. The .Net port of Smarty (Sharpy) is capable of converting all of those templates and use just like we use RAZOR templates. I am unable to figure out how to switch the templating engine to render the Sharpy files instead of RAZOR files so that the Views need not be converted to RAZOR and avoid a lot of code-rewrite that is happening right now.

What I've tried:

  1. I added “sharpy” as valid extension in Sitecore MVC configuration.
  2. I added Sharpy.dll and System.ComponentModel.Composition.dll as reference in the project – required as per the Sharpy documentation.
  3. I added view engine in application_start function of global.asax ( ViewEngines.Engines.Add(new SharpyViewEngine()) );
  4. I added view engine in initialization pipeline – to make sure it’s available

Error:

There is no Build Provider registered for the Extension '.sharpy'. You can register one in the section in machine.config or web.config. Make sure is has a BuildProviderAppliesToAttribute attribute which includes the value 'Web' or 'All'.

I am unable to find the exact cause. Googling did not help much as almost all of the users prefer RAZOR to be used. Also need to know what build provider will be applicable here.

UPDATE: Can I find a post/blog on exactly how it is done. Its okay even if it is some other templating engine! I may be able to get around even if that is available.

P.S.: I am new to both .Net/Visual Studio and Sitecore, so any help appreciated


Solution

    1. Create new Sitecore initialization Pipeline in Project -> Pipeline -> Initialize -> Sharpy.cs, in the Process function add your code to add view engine ViewEngines.Engines.Add(new SharpyViewEngine())

    2. Add/Modify your project config to add new pipeline code using processor tag

      <pipeline><initialize><processor patch:after="processor[@type='Sitecore.Pipeline.Loader.EnsureAnonymousUsers, Sitecore.Kernal']" type="Project.Pienter code herepelines.Initialize.Sharpy, Project.Domain /></initialize></pipeline>
      
    3. Add build providers tag into the Project's Web config file.

      <compilation><buildProviders><add extension=".sharpy" type='System.Web.Compilation.PageBuildProvider"/></buildProviders></compilation>
      
    4. Add Shapry dll files to your project as reference.

    5. Add sharpy as valid extension in your Sitecore.MVC.Config

      <sitecore><settings><setting name="MVC.ViewExtensions" value="|cshtml|sharpy|"/></settings></sitecore>
      
    6. Rebuild entire project, publish and then check.

    7. Now your system start executing Sharpy view engine, and Sharpy will start executing .Sharpy files.