I was looking for a way to automatically generate Glass Models for my Sitecore Templates that had been serialized using Unicorn’s Rainbow YAML serialization formatter and came across this post by Sitecore MVP Robin Hermanussen – http://hermanussen.eu/sitecore/wordpress/2015/04/generating-sitecore-code-without-tds
After reading the documents on GitHub it sounded perfect so I forked the repo and took a look at what the project was doing – https://github.com/hermanussen/sitecore.codegenerator
My first step were :-
Then I made some updates to the models that were being outputted using the T4 helpers from the tds-codegen project – https://github.com/HedgehogDevelopment/tds-codegen
Changed to GlassGenerator :-
Changes to GlassMappedClassTemplate :-
Here is the original output :-
| // <autogenerated> | |
| // This file was generated by T4 code generator SampleScriptTemplates.tt. | |
| // Any changes made to this file manually will be lost next time the file is regenerated. | |
| // </autogenerated> | |
| namespace Sitecore.CodeGenerator.Sample.Glass.Models | |
| { | |
| using System; | |
| using System.Collections.Generic; | |
| using System.Collections.Specialized; | |
| using global::Glass.Mapper.Sc.Configuration; | |
| using global::Glass.Mapper.Sc.Configuration.Attributes; | |
| using global::Glass.Mapper.Sc.Fields; | |
| /// <summary> | |
| /// Represents a mapped type for item {F4A0D5D5-49F9-488F-82AA-D4BE1ADCB662} in Sitecore. | |
| /// Path: /sitecore/templates/Sitecore Code Generator Sample/Dog | |
| /// </summary> | |
| [SitecoreType(TemplateId = "{F4A0D5D5-49F9-488F-82AA-D4BE1ADCB662}")] | |
| public partial interface IDog : IAnimal, INameable | |
| { | |
| #region Dog | |
| /// <summary> | |
| /// What food does the dog eat? | |
| /// </summary> | |
| [SitecoreField(FieldId = "{1033D7C1-9C1A-4C65-8316-81B6D5E46EB5}")] | |
| IEnumerable<IFood> Eats { get; set; } | |
| /// <summary> | |
| /// Other dogs that this dog likes | |
| /// </summary> | |
| [SitecoreField(FieldId = "{20D7789D-BCE0-473E-BB46-59B216CE2C10}", Setting = SitecoreFieldSettings.DontLoadLazily)] | |
| IEnumerable<IDog> Friends { get; set; } | |
| #endregion | |
| } | |
| } |
And this is what Sitecore.CodeGenerator is outputting now with my changes:-
| // <autogenerated> | |
| // This file was generated by T4 code generator SampleScriptTemplates.tt. | |
| // Any changes made to this file manually will be lost next time the file is regenerated. | |
| // </autogenerated> | |
| namespace Sitecore.CodeGenerator.Sample.Glass.Models.sitecore.templates.SitecoreCodeGeneratorSample | |
| { | |
| using global::Sitecore.Data; | |
| using global::System; | |
| using global::System.Collections.Generic; | |
| using global::System.Collections.Specialized; | |
| using global::Glass.Mapper.Sc.Configuration.Attributes; | |
| using global::Glass.Mapper.Sc.Configuration; | |
| using global::Glass.Mapper.Sc.Fields; | |
| /// <summary> | |
| /// Represents a mapped type for item {F4A0D5D5-49F9-488F-82AA-D4BE1ADCB662} in Sitecore. | |
| /// Path: /sitecore/templates/Sitecore Code Generator Sample/Dog | |
| /// </summary> | |
| [SitecoreType(TemplateId = IDogConstants.TemplateIdString, Cachable = true)] | |
| public partial interface IDog: IGlassBase , global::Sitecore.CodeGenerator.Sample.Glass.Models.sitecore.templates.SitecoreCodeGeneratorSample.IAnimal, global::Sitecore.CodeGenerator.Sample.Glass.Models.sitecore.templates.SitecoreCodeGeneratorSample.INameable | |
| { | |
| #region Dog | |
| /// <summary> | |
| /// What food does the dog eat? | |
| /// </summary> | |
| [SitecoreField(IDogConstants.EatsFieldName)] | |
| IEnumerable<IFood> Eats { get; set; } | |
| /// <summary> | |
| /// Other dogs that this dog likes | |
| /// </summary> | |
| [SitecoreField(IDogConstants.FriendsFieldName, Setting = SitecoreFieldSettings.DontLoadLazily)] | |
| IEnumerable<IDog> Friends { get; set; } | |
| #endregion | |
| } | |
| public static partial class IDogConstants | |
| { | |
| public const string TemplateIdString = "{F4A0D5D5-49F9-488F-82AA-D4BE1ADCB662}"; | |
| public static readonly ID TemplateId = new ID("{F4A0D5D5-49F9-488F-82AA-D4BE1ADCB662}"); | |
| public const string TemplateName = "Dog"; | |
| public static readonly ID EatsFieldId = new ID("{1033D7C1-9C1A-4C65-8316-81B6D5E46EB5}"); | |
| public const string EatsFieldName = "Eats"; | |
| public static readonly ID FriendsFieldId = new ID("{20D7789D-BCE0-473E-BB46-59B216CE2C10}"); | |
| public const string FriendsFieldName = "Friends"; | |
| } | |
| } |
Have a play with the code – https://github.com/Wesley-Lomax/sitecore.codegenerator and checkout Robins repo – https://github.com/hermanussen/sitecore.codegenerator I’ve found it a great timesaver for boiler plate models for your renderings.