Our blog contains the activity stream of Orchard Dojo: general news, new resources or tutorials are announced here.

AI framework for .NET, New View Roles permission - This week in Orchard (28/08/2026)

Want to give support staff a way to see role definitions without letting them change anything? A new View Roles permission does exactly that.

Need to cap how long, or short, a text field's content can be? Text Field settings now support Minimum and Maximum length validation.

Building AI features outside of Orchard Core? CrestApps.Core brings the same AI Suite services to any ASP.NET Core project.

And signing into DotNest just got easier, with social sign-in via Microsoft, Google, GitHub, or Facebook.

This week's changes come from Matt Varblow, Antoine Griffard, and Mike Alhayek.

Latest tutorials

Hosting Orchard Core at Exoscale
zoltan.lehoczky
Step away from that Node.js
sara.el-saig

Featured tags

AI
SMS
IIS
MCP
API
SEO
SSL
All tags >

ConsoleLog helper, IsSectionDefined method - This week in Orchard (03/01/2020)

Happy new year everyone! There was no meeting this week, but in the first post of 2020, we would like to give you a nice overview of the latest improvements of Orchard Core, including the ConsoleLog helper, updated documentation, the new look and feel of our weekly blog post and newsletter and many more! Orchard Core updates ConsoleLog Razor helper and Liquid filter Sometimes you may struggle to get the correct placement or the available alternates of a shape. From now there is a shape dumper to try and see what was going on. Dean Marcussen adapted the dumper to use the ConsoleLog, so when you dump ZoneHolding, you see the holding zone, then another log with all the items in it, with their alternates (as they are calculated at execution time). Let's say you rewrite the Content-BlogPost.liquid to Content-BlogPost.cshtml. In this case, you can use the ConsoleLog Razor helper in the following way: @Orchard.ConsoleLog((object)Model) Then hit F12 if you are using Google Chrome and check the content of the console. The ConsoleLog extension method can be used to dump data from well-known properties, or objects serializable to JSON to the browser console. But if you prefer Liquid instead of Razor, you can use the console_log Liquid filter that will do the same for you in Liquid! Check out the documentation for more info about these new features! Thanks to this new shape dump feature you can construct your Orchard Core site faster and easier! Register User class as an accessible Liquid member Let's say you want to get the User fields from a Liquid template when you are using the UserCreated event of a Workflow. To do that, it's required to make this class an available one from Liquid. Else the only value accessible is the Workflow.Input.User which returns the username. If you check the content of the UserLiquidTemplateEventHandler class, you will see that the User class has been registered. Handle error while rendering resources When using the ResourcesTagHelper and referencing a non-existing resource, it breaks page rendering with the following error: Error 500 : InvalidOperationException: Could not find a resource of type 'X' named 'Y' with version 'Z'. It should log an error, but not break the rendering. To do not break the rendering, the Process method of the ResourcesTagHelper now catches the exception if any and creates a log entry instead of breaking the rendering. Clarify getting started and update for .NET Core 3 in the documentation The Getting Started page of the documentation is one of the most important parts of the Orchard Core documentation where you can see how you can add the Orchard Core NuGet packages to your .NET Core web application. Now this page got some more details about how to create your empty .NET Core web application, how to use the dev packages of Orchard Core and so on. Cloning removed LocalizationSet When cloning a content item that has a LocalizationSet, a duplicate entry of a language was created. That's because the LocalizationSet was not being cleared when cloning so a duplicate entry would be created for a locale. The fix was to remove the LocalizationSet when cloning in the CloningAsync method of the LocalizationPartHandler. Here you can see that the LocalizationSet of the cloned part will get an empty string value. Added IsSectionDefined method Let's say you are using RenderSection to render a zone in a view and you want to render certain HTML elements before and after rendering the zone, only if the zone is available. First, you can call IsSectionDefined to verify if the zone is present as follows: @if (IsSectionDefined("News")){ <div class="news"> @await RenderSectionAsync("News", required: false) </div>} But it was throwing the following exception. InvalidOperationException: IsSectionDefined invocation in '/Areas/XXX/Views/XXX.cshtml' is invalid. IsSectionDefined can only be called from a layout page. The fix for this issue was to add the IsSectionDefined method to the RazorPage abstract class. News from the community Improving our This week in Orchard newsletter We published our first This week in Orchard post on the 20th of June, 2018 and since then we wrote 75 posts, 76 with this one :). Our goal is with the series is to give you valuable news and demos about the happenings around Orchard and Orchard Core every week. To do it we improve the posts from time to time and from this year we would like to introduce a new pack of changesets. Last month we created a poll on Twitter and asked you: would you like keywords about highlights in the title of This week in Orchard blog posts and newsletter subjects? We had 10 votes and everyone agreed that this would help to search, so from now, we changed the title in this way. And that's not everything about the title. Regarding the current date, we used the following format: mm/dd/yyyy. From this year we will use the following format: dd/mm/yyyy, which is a more international way to represent the date. We also changed the structure of the posts a little bit. Let's see the old way: On Orchard 1.x: contained everything that is related to Orchard 1.x. On Orchard Core: contained everything that is related to Orchard Core like the new features, bug fixes, new websites built with Orchard Core. Demos: this section was inside the On Orchard Core section and contained demos about Orchard Core. If there were demos about Orchard 1.x, the On Orchard 1.x also had this section. On Lombiq: news from Lombiq. And now let's see the structure that we use from this year: On Orchard 1.x: new features and news around Orchard 1.x, but the demos will be in a separate place together with Orchard Core demos. Orchard Core updates: bug fixes, new features of Orchard Core. Demos: here come the demos of Orchard 1.x and Orchard Core. News from the community: new websites, news about the Harvest, blog posts about Orchard Core, news from Lombiq, everything that is not related to the code itself. And if you are subscribed to our newsletter you will see that we created a new template for our emails that looks nicer and easier to read. We hope you will like our improvements! Feel free to contact us and share your thoughts about the current improvements or add your own ideas that could help us to make This week in Orchard better! Orchard Dojo Newsletter Now we have 112 subscribers of the Lombiq's Orchard Dojo Newsletter! We have started this newsletter to inform the community around Orchard with the latest news about the platform. By subscribing to this newsletter, you will get an e-mail whenever a new post published to Orchard Dojo, including This week in Orchard of course. Do you know of other Orchard enthusiasts who you think would like to read our weekly articles? Tell them to subscribe here!

Diving into the Orchard API - Dojo Course

UPDATE (2017-11-22): Dojo Course 2 is released with new, updated videos! This week on Dojo Course we dive into the Orchard API, use some of the build-in services and extending the capabilities of our module to make it even better! Using LazyField<T> to load data lazily so they are only loaded when we really need them. Using Work<T> to load dependencies lazily so they are only resolved when we really need them. Applying the [Admin] attribute for admin-related Getting to know an other Orchard service: IAuthorizer. Creating our own permissions by implementing the IPermissionProvider. Using the ContentManager so we can finally work with content items! Generating ad-hoc shapes and matching them to an actual template. Implementing the IResourceManifestProvider interface for managing static resources. Remember: if you have any questions don't hesitate to ask them by creating a new issue in the Orchard issue tracker with the "discussion" label. Make sure to prefix your thread's title with "Dojo Course - "! We keep an eye on these issues. Also follow us on Twitter to get notified about the latest Dojo Course news, including when a new tutorial is posted. Do you have some feedback about the course? Please send it in. Haven't you enrolled yet? Why not do it some time in the near future like right now?

Content Part development continued - Dojo Course

UPDATE (2017-11-22): Dojo Course 2 is released with new, updated videos! This week on Dojo Course we are giving life to our content part by adding several Orchard-y code pieces to it, though the result is far from being Frankenstein-like. While doing that, we also discover some interesting and useful pieces of the Orchard API. Creating a migration for our Contents feature. Difference between ContentPartRecord and ContentPartVersionRecord: versioning content parts. Making your content part attachable to content types (on the Admin UI). Creating a content type using migrations and attaching parts to it. Creating a handler for our content part to do some plumbing (e.g. StorageFilter). Creating a driver for our content part to cover server-side part of the the user interface interaction. How displaying a shape works, what is DisplayType? Shape templates (also editors) and using Placement. Using InfosetPart to store a part's data in the content item's XML infoset document. This eliminates content part record lazy loading, providing a significant performance gain. The importance of driver shape factories. How to make your content part support importing and exporting? Remember: if you have any questions don't hesitate to ask them by creating a new issue in the Orchard issue tracker with the "discussion" label. Make sure to prefix your thread's title with "Dojo Course - "! We keep an eye on these issues. Also follow us on Twitter to get notified about the latest Dojo Course news, including when a new tutorial is posted. Do you have some feedback about the course? Please send it in. Haven't you enrolled yet? Why not do it some time in the near future like right now?

Diving into theme development and starting with module development - Dojo Course

UPDATE (2017-11-22): Dojo Course 2 is released with new, updated videos! Our fourth Dojo Course tutorial wraps up theme development by explaining shapes and alternates. We also start with module development and write some interesting code that actually works. Shapes are the dynamic objects organized into a tree that defines the layout Exploring this tree of shapes using the Shape Tracer module, a bigger building block is a zone Explaining the relation between the Razor templates and shapes, view engines Overriding active templates: alternates Localizing templates: T-Strings (please ignore the ASPX format :) ) and how they work Exploring the naming conventions of templates for targeting the override The resulting output is affected by OutputCache for unauthenticated users Editing the settings for the Orchard.OutputCache module Adding styles and scripts to your templates, difference between AtHead and AtFoot for scripts Taking a look at the Layout shape template, which is the spine of the final layout Generating a module skeleton with the command line tool and adding it to our custom solution folder Introducing the Orchard Training Demo module, specifically developed to aid you in learning about Orchard development Looking at the basic settings of your module: Module.txt Diving modules into subsets of functionality: features Modules are strongly depending on the MVC paradigm Let's see C: writing our first Controller with an action for a start Let's see V: writing a view that represents the result of our controller actions The first and most basic element of the Orchard API: the [Themed] attribute Getting to know Dependency Injection Using our first Orchard service: IWorkContextAccessor How to debug an Orchard application running with IIS Express Remember: if you have any questions don't hesitate to ask them by creating a new issue in the Orchard issue tracker with the "discussion" label. Make sure to prefix your thread's title with "Dojo Course - "! We keep an eye on these issues. Do you have some feedback about the course? Please send it in. Haven't you enrolled yet? Why not do it some time in the near future like right now?

Advanced content management and starting with theme development - Dojo Course

UPDATE (2017-11-22): Dojo Course 2 is released with new, updated videos! Forms, tokens, projections? Command line scaffolding for themes and shapes? This is what the third Dojo Course tutorial is about. Continuously updated source code for the Course (you can upload the latest source in a zip from here) Using Custom Forms: Creating a content type for using as a form, with fields Creating a custom form with the newly created content type Using Workflows to run custom activities like sending an e-mail when a form is submitted Using tokens to create dynamic texts Using the Projector module to list content items: Creating queries to define which content items to list, in what order and how to display them Creating Projection Pages or Projection Widgets to display the result of the query Using Query Links in Navigation Starting with developing extensions: themes Using the command line tool, help Command line scaffolding: generating a theme with a separate project and adding it to our custom solution Basic settings for your theme with Theme.txt: Name, BaseTheme (inheritance) Using the Shape Tracing feature to reveal how the layout is built up, notion of shapes Remember: if you have any questions don't hesitate to ask them by creating a new issue in the Orchard issue tracker with the "discussion" label. Make sure to prefix your thread's title with "Dojo Course - "! We keep an eye on these issues. Haven't you enrolled yet? Why not do it some time in the near future like right now?

Forum favourites: model editors with shapes, accessing a shape's generated html and accessing content fields programmatically

Forum topics from the Orchard discussion board that we found interesting: "Passing my own data types to a view": using form field html helpers with dynamic models and in alternates defined with the shape attribute "Dynamically built html with Clay": capturing the generated html coming from a shape "How to access fields of a content item again?": ways of accessing a content field's value by using dynamic or statically typed extension methods