New Module
I would really appreciate some pointers, I've based this attached module on the Jobs example but I've been unable to get it to list on the Dashboard > Content.
001.using System;002.using System.Linq;003.using Telerik.Sitefinity;004.using Telerik.Sitefinity.Abstractions;005.using Telerik.Sitefinity.Configuration;006.using Telerik.Sitefinity.Modules.Pages.Configuration;007.using Telerik.Sitefinity.Services;008.using Rotator.PublicControls;009. 010.namespace Rotator011.012. /// <summary>013. /// A module for managing job application uploads and providing an overview thereof.014. /// </summary>015. public class RotatorModule : ModuleBase016. 017. #region Fields018. 019. /// <summary>020. /// The name of the module021. /// </summary>022. public const string ModuleName = "RotatorModule";023. 024. /// <summary>025. /// The landing page id.026. /// </summary>027. private readonly Guid landingPageId = new Guid("13FA3CB0-6F00-4DFB-A534-28EA60252A17");028. 029. /// <summary>030. /// The sub page id.031. /// </summary>032. private readonly Guid subPageId = new Guid("A52C36E1-3D29-4F39-BB8D-BB1F064E556B");033. 034. #endregion035. 036. /// <summary>037. /// Gets the CLR types of all data managers provided by this module.038. /// </summary>039. /// <value>An array of <see cref="T:System.Type"/> objects.</value>040. public override Type[] Managers041. 042. get043. 044. return null;045. 046. 047. 048. /// <summary>049. /// Gets the landing page id for each module inherited from <see cref="T:Telerik.Sitefinity.Services.ModuleBase"/> class.050. /// </summary>051. /// <value>The landing page id.</value>052. public override Guid LandingPageId053. 054. get055. 056. return this.landingPageId;057. 058. 059. 060. /// <summary>061. /// Gets the sub page id.062. /// </summary>063. /// <value>The sub page id.</value>064. public Guid SubPageId065. 066. get067. 068. return this.subPageId;069. 070. 071. 072. /// <summary>073. /// Initializes the service with specified settings.074. /// </summary>075. /// <param name="settings">The settings.</param>076. public override void Initialize(ModuleSettings settings)077. 078. base.Initialize(settings);079. 080. 081. /// <summary>082. /// Installs this module in the Sitefinity system.083. /// </summary>084. /// <param name="initializer">The Site Initializer. A helper class for installing Sitefinity modules.</param>085. public override void Install(SiteInitializer initializer)086. 087. bool restart = false;088. //this.EnsureMetaFields(ref restart);089. 090. using (var sf = App.WorkWith())091. 092. int result;093. sf.DocumentLibraries().Where(l => l.Title == "Rotator").Count(out result);094. 095. if (result < 1)096. 097. sf.DocumentLibrary().CreateNew().Do(lib =>098. 099. lib.Title = "Rotator";100. lib.UrlName = "Rotator";101. );102. 103. 104. sf.Page().PageManager.Provider.SuppressSecurityChecks = true;105. 106. var moduleNode = sf.Page(SiteInitializer.ModulesNodeId).Get();107. 108. var rotatorNode = sf.Pages().Where(p => p.Id == this.LandingPageId).Get().SingleOrDefault();109. if (rotatorNode == null)110. 111. sf.Page().CreateNewPageGroup(moduleNode, this.LandingPageId).Do(p =>112. 113. p.Name = "Rotator";114. p.ShowInNavigation = true;115. p.Attributes["ModuleName"] = RotatorModule.ModuleName;116. p.Title = "Rotator";117. p.UrlName = "Rotator";118. );119. restart = true;120. 121. 122. // Create the subpage123. var subPage = sf.Pages().Where(p => p.Id == this.SubPageId).Get().SingleOrDefault();124. if (subPage == null)125. 126. sf.Page().CreateNewStandardPage(this.LandingPageId, this.SubPageId).Do(p =>127. 128. p.Name = "RotatorOverview";129. p.UrlName = "RotatorOverview";130. p.Description = "Rotator Overview";131. p.ShowInNavigation = false;132. p.Attributes["ModuleName"] = RotatorModule.ModuleName;133. ).CheckOut()134. .Do(draft => draft.TemplateId = sf.Page().PageManager.GetTemplates().Where(t => t.Name == SiteInitializer.BackendTemplateName).SingleOrDefault().Id)135. .Control().CreateNew(new RotatorOverview(), "Content").Done()136. .Publish();137. restart = true;138. 139. 140. 141. if (restart)142. 143. SystemManager.RestartApplication(false);144. 145. 146. this.RegisterToolboxControl();147. 148. 149. /// <summary>150. /// Registers the public control inside the SF toolbox151. /// </summary>152. private void RegisterToolboxControl()153. 154. string controlType = typeof(RotatorDisplay).AssemblyQualifiedName;155. var conf = Config.Get<ToolboxesConfig>();156. 157. var pageControls = conf.Toolboxes["PageControls"];158. 159. if (pageControls.Tools.Values.Count(x => x.Name == "RotatorDisplay") > 0)160. 161. return;162. 163. 164. var section = pageControls165. .Sections166. .Where<ToolboxSection>(e => e.Name == "Custom")167. .FirstOrDefault();168. 169. if (section == null)170. 171. section = new ToolboxSection(pageControls.Sections)172. 173. Name = "Custom",174. Title = "Custom widgets",175. Description = "A section storing custom widgets"176. ;177. pageControls.Sections.Add(section);178. 179. 180. section.Tools.Add(new ToolboxItem(section.Tools)181. 182. ControlType = controlType,183. ModuleName = RotatorModule.ModuleName,184. Name = "RotatorDisplay",185. Title = "Rotator Public Display",186. Description = "The Public view for the Web Rotator"187. );188. 189. Config.GetManager().SaveSection(conf);190. 191. 192.Hello Trevor,
Please take a look at this post.
Best wishes,
Ivan Dimitrov
the Telerik team
Hi Ivan,
Hi Trevor,
I checked the example and it is working fine. In your code you are not creating any backend pages through the page manager and this is why the module does not appear.
Sincerely yours,
Ivan Dimitrov
the Telerik team
Hi Ivan,
Thank you for your reply. I built a module from your sample and I'm running into the exact same problem. I'm attaching the project as well as the steps I took after I added the reference and built the website:
Project Code: Code
Administration > Settings THEN System > ApplicationModules
Create New
Name: SampleModule
Title: SampleModule
Type: SampleModule.SampleModule
StartupType: OnApplicationStart
Install: Check
Save Changes
Restart IIS site. (Tried rebuilding the site, restarting the PC, stopping and starting IIS... no luck.)
Some where I am missing a step with setting up modules. I would really appreciate it if you could list the steps I should take since I cant see anything different from what I'm doing compared to what is setup in the SDK tutorial.
Hello Trevor,
There is a bug that we introduced in the BETA 2 related to the modules and the Main Menu. The backend pages are created, but they are not visible in the menu. We have fixed the issue, and you will be able to see your module in the navigation in the RC.
Sincerely yours,
Ivan Dimitrov
the Telerik team
Hi Ivan,
Thank you for getting back to me. I'm looking forward to the release of the RC version, luckily just a few more days to go.