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

Content Tree Module, Orchard Core Admin UI experience renewal survey - This week in Orchard (06/06/2025)

This time, you can see a fascinating demo of the Content Tree Module! But first, let's look at our other topics, like adding GraphQL support for querying content items by status from the Content Picker Field, fixing binding form input in the Coming Soon theme, and improving the Register User Task. Don't forget to fill out our Orchard Core Admin UI experience renewal survey to help shape the future of Orchard Core!

Featured tags

IIS
API
SMS
SEO
MCP
All tags >

Preserve browser Autofill for Bag, Flow, and WidgetList Parts, Lombiq UI Testing Toolbox - This week in Orchard (06/10/2021)

Preserve browser Autofill for Bag, Flow, and WidgetList Parts, remove unnecessary role attributes, Lombiq UI Testing Toolbox demo, and many more coming this week! Do you want to know more? Then don't forget to check out our current post! Orchard Core updates Preserve browser Autofill for Bag, Flow, and WidgetList Parts Currently, while editing a Flow/Bag/WidgetList Part, the HTML input IDs are based on the related embedded item IDs that always have different values. So we lose the browser autofill based on these HTML input IDs when editing another parent. So, here the idea is to generate IDs that are still unique while editing in the context of a given parent item, but that is the same while editing another parent content item of the same type. This is by generating IDs using a prefix composed of the part name of a given unique/named part, a delimiter, then a number equals the number of the current item. For the WidgetList Part, we also use the related zone name in the prefix. If you set up a site using the Agency recipe, you can check out the content of the Agency Landing Page content item, that has Bag Parts attached with prefilled data. Remove unnecessary role attributes Some HTML5 elements have implied WAI-ARIA roles so setting the implied roles on them explicitly is invalid HTML. Check out this link for more information: https://html-validate.org/rules/no-redundant-role.html. In the following screen, you can see some removals of the role attribute. Demos Lombiq UI Testing Toolbox The Lombiq UI Testing Toolbox is a web UI testing toolbox mostly for Orchard Core applications. Everything you need to do UI testing with Selenium for an Orchard app is here. UI Testing here is an automation that clicks through the web application in a browser. One of the most popular frameworks for that is Selenium, which does exactly that. You get an API to instruct a browser, and every major browser is supported. This UI Testing Toolbox providing a lot of features on top of Selenium for Orchard Core. Basically allowing you to UI test an Orchard Core application in a safe and parallelized way providing a lot of helpers, a lot of higher-level APIs allowing you to test your application with SQLite, with SQL Server with local media storage, or with Azure Blob Storage. And you can have a test e-mail sending with a local SMTP server too. Everything just works. Check out the highlights of the Readme.md file of this repository to see all of the features! How it works is also demonstrated in an example project which is part of our Open-Source Orchard Core Extensions full Orchard Core solution. Just clone that repository and find the solution folder called test in it. There is a Lombiq.Tests.UI.Samples project that contains several sample UI tests where you can see how to test your application. Let's check out the LoginShouldWork test in the BasicTests.cs file! As you can see, here we say that first, let's navigate to the /Login relative URL. Then find the UserName and Password form fields by their IDs and fill their content with the default username and password. After the test will find the submit button of the form and click on it. And if the retrieved user name of the currently authenticated user is the default user name, our test will pass! If you check the BrowserConfiguration file, you can see it can be used to provide some useful configuration values that can be used by the browser. For example, the value of the Headless property indicating whether the test will use the given browser in headless mode, provided that there's support for it. If you set it to false and run a given UI test by using the Test Explorer of Visual Studio, for example, you will see that the test will open up a browser where you can see the given test running. And we are just stretching the surface of the several features that you can have using the Lombiq UI Toolbox module! Don't forget to check out this recording on YouTube to see what else the toolbox can provide! News from the community Orchard Core Facebook Page Did you know that Orchard Core has its own Facebook Page? By following the Facebook Page, you can meet with new posts when a new Orchard Podcast or Orchard Demo has been uploaded to YouTube or when there is a new This week in Orchard post or any other important news or happenings around Orchard Core. The posts created on this page will also be shared in the Orchard Core User Group. Don't forget to follow the Orchard Core Page and join the Orchard Core User Group to be notified about the latest news around Orchard Core! New Lombiq team member: Viktória Magyar Viktória Magyar, our newest team member arrived! She is a developer but not Orchard Core this time, rather of our business! You can check out her full bio here! Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 227 subscribers! 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 is 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! If you are interested in more news around Orchard and the details of the topics above, don't forget to check out the recording of this week's Orchard meeting!

Migrate INotifier to support async implementations, Lombiq Hosting - Tenants - This week in Orchard (28/09/2021)

Migrate INotifier to support async implementations, messaging when getting Part InvalidCastException, Lombiq Hosting - Tenants demo, and many more coming this week! Do you want to know more? Then don't forget to check out our current post! Orchard Core updates Migrate INotifier to support async implementations This new feature is about replacing the INotifier on the front end with a SignalR version, which works asynchronously. INotifier has been updated to use ValueTask when adding notifications. Prefer not to do a custom implementation, as using INotifier allows the front end to also receive messaging notifications from code in the Orchard Core codebase, which is very convenient for us. If you check out the INotifier interface, you will notice that the Add method is now marked as obsolete, and the new one that you can use from now is the AddAsync one. And of course the Information, Warning, Error, Success extension methods are also marked as obsolete and have their async methods, which are used across the whole solution of Orchard Core. Messaging when getting Part InvalidCastException Sometimes if you forget to register your part, you might have some cast errors, and you don't know why. This addition is just about displaying an error message saying you are trying to cast to this part, but please do a double check to make sure you registered this part. So, don't forget: every time you create a new content part from your module, you have to register it in the ConfigureServices method of your Startup class by using the AddContentPart extension method. You can find several examples about how to do that like, here you can find the registration of the FlowPart and the BagPart. DisplayText value of a cloned item is set before calling CreateAsync When cloning a content item, two audit log events are recorded: An initial create event for the newly cloned item. A subsequent save event updating the new item with the cloned content data. The create event in the audit log does not show the DisplayText of the original item but instead repeats the content type. The save event in the audit log displays correctly. Steps to reproduce the behavior: Set up a Blog site. Ensure the Audit Trail feature is enabled and configured to log all content items. Go to the Manage Content page and clone the About article. View the Audit Trail and see that the Create event states that Version 1 of the Article Article was created. The audit log for the created event should state that Version 1 of Article About was created. The fix was pretty straightforward for this one. As you can see here, the solution was to set the DisplayText of the cloned content item before calling the CreateAsync method of the DefaultContentManager, because the CreateAsync invokes the event handlers used by the Audit Trail module. Demos Lombiq Hosting - Tenants The Lombiq Hosting - Tenants repository contains various features that help you build a multi-tenant web application in Orchard Core. With the help of the Tenants Management module, you can set restrictions on tenant creation, while using the Tenants Admin Login module you can log in from the Default tenant's admin dashboard to any other tenants as an administrator user. In this demo, we will go with the quicker way and use our Open-Source Orchard Core Extensions full Orchard Core solution that contains both of these modules. If you clone that repository and set up your site using any setup recipe, let's just navigate to the admin UI of Orchard Core, and under Configuration -> Features, enable the Lombiq Hosting - Tenants Admin Login module that adds the ability to log in as a tenant's admin user. Make sure that you have also enabled the Tenants module to be able to test the tenant management. :) Now create a new tenant and enable the Lombiq Hosting - Tenants Admin Login - Sub-tenant feature there that adds the ability to log in to the tenant from the Default tenant. That will mean that admin users from the Default tenant can log in to this tenant as an admin user. In our example, we have created a tenant called Blog, and if you Edit that tenant, you will see a new Login as an admin user button, which can be used to login to this tenant as an admin user. Now let's see what you can do by using the other module of the Lombiq Hosting - Tenants repository, called Lombiq Hosting - Tenants Management which manages restrictions on tenant creation. The Readme.md file of the Tenants Management module shows how you can specify a list of hostnames that cannot be used to create a tenant. You can write the list of forbidden hostnames as a JSON array in the appsettings.json as follows. Now let's go back to the Tenants page of the admin UI and try to create a tenant with a forbidden hostname like forbidden.hostname1.net. If you hit Create, you will get a validation error: forbidden.hostname1.net is a forbidden hostname. And of course, changing the hostname of an already running tenant to a forbidden one will also cause a validation error. And as always, if you would like to see more, don't forget to check out this recording on YouTube! News from the community A new website using Orchard Core: ICAgile ICAgile envision a world in which organizations enable and inspire everyone in them to create a better future for those around them. Check out this brand new Orchard Core site here! If you are interested in more websites using Orchard and Orchard Core, don't forget to visit Show Orchard. Show Orchard is a website for showing representative Orchard CMS (and now Orchard Core) websites all around the internet. It was started by Ryan Drew Burnett, but since he doesn't work with Orchard anymore, as announced earlier it is now maintained by our team at Lombiq Technologies. Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 226 subscribers! 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 is 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! If you are interested in more news around Orchard and the details of the topics above, don't forget to check out the recording of this week's Orchard meeting!

New Content-Language HTTP header feature, LINQ to DB - This week in Orchard (21/09/2021)

Add Content-Language HTTP header feature, new Health Check option, LINQ to DB demo, and many more coming this week! Do you want to know more? Then don't forget to check out our current post! Orchard Core updates Add Content-Language HTTP header feature While the Accept-Language header is useful for the request, Content-Language is very useful too for the response, there's no support for this yet. But that was the past! Now if you head to the admin UI of your Orchard Core and navigate to Configuration -> Features, you will find a new feature called Content-Language header that adds the Content-Language HTTP header, which describes the language(s) intended for the audience. Let's enable this module and see it in action! In this case, we just open up the DevTools of Google Chrome, click on the Network tab and check the content of the Headers tab after loading a page with a content item. In our case, we opened the home page of the tenant called blog1. As you can see, the Content-Language header is there containing the language of the given content, which is en-US in our case. Add Health Check options The option here is to be able to change the default URL of the Health Check. The health/live is the default one provided by ASP.NET. If you enable the Health Check feature and navigate to an URL like https://localhost:44300/health/live you will see the status of your site. And now, you can easily change the value of this URL by just updating the value of the URL of the OrchardCore_HealthChecks section in the appsettings.json file. Allow custom editors for Bag/Flow/WidgetsList Parts If you checked the drivers of the BagPart, FlowPart, or the WidgetsListPart, you would notice that these drivers were using hard-coded shapes, and now you can have custom editors based on the editor name, and you can select it. The default editor for these drivers is called Standard. Demos LINQ to DB - Lombiq Helpful Libraries for Orchard Core The LINQ to DB subproject is part of our Helpful Libraries project that contains various libraries that can be handy when developing for Orchard Core CMS, to be used from your Orchard modules. The use-case is that sometimes you just have to go to SQL. Although we have YesSql, we have all the abstractions, but of course, the SQL connection is still there if you want to go low level. Sometimes you have to write some funky query there, or otherwise, you just want to store something in the database which is not a content item, not necessarily an entity, just a simple table with some simple rows. And in that case, you may not want to write like SQL queries as strings. But still, you don't want to use a full-blown ORM like Entity Framework because that would be a bit of an overkill for use-cases where you don't need a full-blown application built on it. And for such cases, there is a library called LINQ to DB, which is a third-party library. LINQ to DB is the fastest LINQ database access library offering a simple, light, fast, and type-safe layer between your POCO objects and your database. What we have implemented in our project is that by just hooking into ISession (which is the standard YesSql ISession), you will get to write queries like this: There is a helper method, and in there you can pretty much write LINQ against tables. In this case, we are using the AutoroutePartIndex as the example, and as you can see it's LINQ as usual but since you are wrapped into this LingQueryAsync, the inside of it is executed as SQL directly. And as always, if you would like to know more about the LINQ to DB subproject, head to YouTube for a recording! News from the community A new website using Orchard Core: Planters Products Inc Planters Products, Inc. was established in 1963 as one of the leading Agricultural Chemical Companies in the Philippines. In 1970 it was purchased by the Sugar Producers Cooperative Marketing Association, the country's largest cooperative of sugar planters, and renamed Planters Products, Incorporated (PPI). Check out this brand new Orchard Core site here! If you are interested in more websites using Orchard and Orchard Core, don't forget to visit Show Orchard. Show Orchard is a website for showing representative Orchard CMS (and now Orchard Core) websites all around the internet. It was started by Ryan Drew Burnett, but since he doesn't work with Orchard anymore, as announced earlier it is now maintained by our team at Lombiq Technologies. Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 224 subscribers! 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 is 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! If you are interested in more news around Orchard and the details of the topics above, don't forget to check out the recording of this week's Orchard meeting!

URI components Liquid accessors, Lombiq JSON Editor - This week in Orchard (15/09/2021)

Add Cc and Bcc to Workflow Email Task, URI components Liquid accessors, Lombiq JSON editor, and many more coming this week! Do you want to know more? Then it's time to check out our current post! Orchard Core updates Add Cc and Bcc to Workflow Email Task If you would like to send an email using Workflows, you can use the Email Task to achieve your goal. Simply navigate to the admin UI of Orchard Core and go to Workflows (don't forget to enable the Workflows and the Email features) to create a new workflow. If you add a new Email Task to your workflow, you will see that this task has now two new fields: the Cc and the Bcc. RegisterUserTask: Subject & Template for confirmation email should not be required if Send Email is unchecked And while we are talking about the workflows, let's check out another workflow task, the Register User Task which registers users from form fields. When adding this task to your workflow, you can easily say that I want to send a confirmation email to the newly registered user with this subject and template. The issue was that the subject and the template for the confirmation email were required even if Send Confirmation Email is not checked. URI components Liquid accessors By default, the Liquid templates have access to a common set of objects. You can easily access the properties of the content item that is currently being rendered, the authenticated user for the current request, the current site settings, and the current request itself of course. Check out this page of the Orchard Core documentation to see all of the available properties on the Request object. If you use the Request object quite often, you will notice that this table now has new properties, like the QueryString, UriQueryString, Path, UriPath, PathBase, UriPathBase, Host, and UriHost. Generate Rule Condition TargetUrl in a correct location The rules module was designed with extensibility in mind; however, there is one line that is in the view for it, setting the TargetUrl property of the modal picker to the layers controller. It needs to be moved out of the view, and into the Layers controller so that the view can be used by other modules, pointing to different controllers. Demos Lombiq JSON Editor The Lombiq JSON Editor is our Orchard Core module for displaying a JSON Editor like on jsoneditoronline.org. You can easily clone or download the module from this GitHub repository. If you want to quickly try out this project and see it in action, check it out in our Open-Source Orchard Core Extensions full Orchard Core solution and also see our other useful Orchard Core-related open-source projects! In this demo, we will go with the quicker way and use our Open-Source Orchard Core Extensions full Orchard Core solution. If you clone that repository and set up your site using any setup recipe, let's just navigate to the admin UI of Orchard Core, and under Configuration -> Recipes, you will find one called Lombiq Open Source Orchard Core Extensions - JSON Editor Sample that is about demoing the Lombiq JSON Editor module. Let's run the recipe! Now let's see the list of the content items where you will find a new one called JSON Example Page. This page has a JSON Field which comes from the Lombiq JSON Editor module. It's using a tree editor by default that you can use to manipulate the content of the JSON inside. But of course, you can have other types of editor for your JSON if you want, like you can have a code editor with numbered lines with syntax highlighting or you can just use a pure text editor and so on. Using a simple json-editor tag helper you can easily render the JSON editor. You can pass a string value to the editor that will contain the JSON itself, pass the JsonEditorOptions class that contains several configuration values like EscapeUnicode, SortObjectKeys, and so on. And you have several other options and use-cases for this JSON field. The JSON Example Page, which comes from the recipe, has a Liquid Part too that reads the values from the JSON field and prints the values in a simple list by using Liquid and JavaScript. Here is the display view of the JSON Example Page. If you would like to know more about this new field, head to YouTube for a recording! News from the community New GraphQL sample in the Lombiq Training Demo for Orchard Core The Lombiq Training Demo for Orchard Core is a demo Orchard Core CMS module for training purposes guiding you to become an Orchard developer. You can use this module as part of a vanilla Orchard Core source that includes the full source code - which is the recommended way. You can also use it as part of a solution that uses Orchard Core NuGet packages; however, it's harder to look under the hood of Orchard Core features. And the module just got a new little GraphQL sample! Check it out if you would like to know more about Orchard Core's GraphQL module and learn how to extend the Orchard GraphQL APIs! Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 226 subscribers! 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 is 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! If you are interested in more news around Orchard and the details of the topics above, don't forget to check out the recording of this week's Orchard meeting!

Include or exclude tenant features and/or themes, allow editing Time Field seconds and milliseconds - This week in Orchard (07/09/2021)

Allow to edit Time Field seconds and milliseconds, document dependency version selection in ResourceManagementOptionsConfiguration class, demo about a feature to include or exclude tenant features and/or themes, and many more coming this week! Check out our post for more! Orchard Core updates Document dependency version selection in ResourceManagementOptionsConfiguration class Let's say that in the theme layout, you want to enforce Bootstrap 4.6 and added this <script asp-name="bootstrap" version="4" at="Foot"></script> which includes Bootstrap 4 as desired. Now let's have a custom module that allows converting a select-menu to a searchable-menu. This module depends on Bootstrap and jQuery to be able to function. So in the ResourceManagementOptionsConfiguration class, we need to define the dependencies like this: _manifest.DefineScript("SearchableDropdown") .SetUrl("~/SearchableDropdowns/bootstrap-select.min.js", "~/SearchableDropdowns/bootstrap-select.js") .SetDependencies("jquery", "bootstrap") .SetVersion("1.0.0"); _manifest.DefineStyle("SearchableDropdown") .SetUrl("~/SearchableDropdowns/bootstrap-select.min.css", "~/SearchableDropdowns/bootstrap-select.css") .SetDependencies("bootstrap") .SetVersion("1.0.0"); Unfortunately, the SetDependencies("bootstrap") call here forces to include Bootstrap 5, which will cause Bootstrap 4 and 5 to be included! Obviously, this is a problem. But you can easily solve this problem. You can use the SetDependencies method to ensure the script or style is loaded after their dependency, where you can set a specific version of your choice or the latest version available. Check out this new section in the Orchard Core documentation where we used SetDependencies("bootstrap:4") to say that we would like to define a style that depends on Bootstrap version 4. Allow editing Time Field seconds and milliseconds Let's take a quick look at the improvements of the Time Field. In our example, we have set up our Orchard Core site using the Blog recipe and modified the content definition of the Blog Post content type by adding a new Time Field to it. When you navigate to the settings of the Time Field, you will see a new setting here, called Step. This is just about manipulating the value of the step attribute of the time input type. You can read a lot about the step attribute here, now we just want to show you a small example of how you can use this new option. Let's say we want to allow to be able to edit the seconds for the Time Field too, but not the milliseconds. If we type 15 for the Step here, users can choose from the following values when setting the seconds: 0, 15, 30, and 45. It means, setting the value of this field to 03:39:15 PM would be suitable. If the user would like to create a new blog post and enter an invalid value for the Time Field, they would see the following message by showing some suggestions about the nearest valid values. Do not enable OrchardCore.Feeds by default in standard recipes By default by enabling the OrcardCore.Feeds module your lists will have feeds capabilities but for the Blank and the Agency recipe. This doesn't make any sense because we don't have any lists defined by default in these recipes. The change here is the Blank and the Agency recipes now will not enable the Feeds module by default. Demos Include or exclude tenant features and/or themes This upcoming feature is about through app settings/configuration adds the ability to restrict the features and/or themes that are available to either a tenant and/or all tenants or a mix of both. If you checkout to the deanmarcussen/excludefeatures branch, you will see a new OrchardCore_Features section in the appsettings.json file where you can see rules that you can apply to the various features. The idea here is that you can have the rule to either exclude or include a given expression based on the feature name. By default, the OrchardCore.Templates feature and the TheAgencyTheme are excluded for all tenants, but the default tenant has an include rule with a "*" expression which means that tenant gets everything. Now let's see this in practice! Let's set up a site using the Software as a Service recipe to get the Tenants feature enabled by default. If you navigate to Configuration -> Features on the admin UI, you will see that the Templates feature is available with the TheAgencyTheme as well (Design -> Themes). But if you have a tenant called blog1 and search for templates on the Features page, you will only find the Shortcode Templates one because the Templates feature is excluded for this tenant. And the same will apply if you navigate to Design -> Themes and try to find The Agency Theme. A nice additional feature would be to have a UI, where you can specify what kind of features and/or themes would like to exclude or include for the given tenant. But we are just scratching the surface of this upcoming feature. If you would like to know more, don't forget to head to YouTube for a recording to learn more! News from the community Helping the City of Santa Monica with Orchard Core consulting A few weeks ago we mentioned a new website using Orchard Core: the site of the City of Santa Monica, which you can find on Show Orchard as well! Show Orchard is a website for showing representative Orchard CMS (and now Orchard Core) websites all around the internet. It was started by Ryan Drew Burnett, but since he doesn't work with Orchard anymore, as announced earlier, it is now maintained by our team at Lombiq Technologies. Santa Monica is a beachside city of 8.3 square miles on the westside of Los Angeles County. Offering an environment of unparalleled natural beauty, the city is home to a mix of residential communities, commercial districts, and recreational venues. And we actually had a small part in this by helping the creation of this site with some Orchard Core consulting. If you would like to know more, check out the case study on our site here. Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 224 subscribers! 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 is 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! If you are interested in more news around Orchard and the details of the topics above, don't forget to check out the recording of this week's Orchard meeting!

Implementing Zone shape alternates, Lombiq UIKit for Orchard Core - This week in Orchard (25/08/2021)

We can write about several nice improvements this week! Adding missing deployment steps, new strongly typed example with update endpoint in the documentation, implementing Zone shape alternates, and many more! Orchard Core updates Implementing Zone shape alternates This feature is about adding Zone shape alternates like in Orchard 1. The Zone__[ZoneName] template is called when displaying a Layout zone. Which zones are available depends on the current theme. And now you can find a new section in the documentation of Orchard Core about what are the available properties of the Zone shape and how to display the content of a given zone using Liquid and Razor. Allow file attachments for deployment steps Let's say you need to create a custom deployment step that accepts an Excel file as an input with data to use for creating a custom deployment step. But the form posted does not accept attached files. The issue was that the OrchardCore.Deployment/Views/Step/Edit.cshtml file has no enctype="multipart/form-data" attribute. Expanded strongly typed example with update endpoint The Content Types page of the Orchard Core documentation is about showing you how to use migrations to create your new content type, how to change the metadata of your content type, or how to add content parts or content fields to your type. Now there is a new sample that shows how to update your strongly typed content item using an API in this case. The UpdateProductPriceAsync is just about getting the Product content item by an Id and updating the value of the Price Numeric Field of it, which can be found on the ProductPart. Add site settings deployment for Content Audit Trail Settings and Google features When you navigate to Configuration -> Features and enable the Audit Trail module, you will have a feature that provides a log for recording and viewing back-end changes. If you navigate to Configuration -> Settings -> Audit Trail and click on the Content tab, you will see a list that contains all of the content types of your installation. Here you can select the types of content whose events are recorded. And now you can export these settings using a deployment plan! To do that, just create a new deployment plan (Configuration -> Import/Export -> Deployment Plans) and add a new deployment step to it. You just need to find the Content Audit Trail settings one that exports the content audit trail settings. If you execute your deployment plan, you will see that the recipe file contains the list of the allowed content types. And the same goes for the Google Analytics and Google Tag Manager modules. If you enable those, you will find some settings under the same Configuration -> Settings option called Google Analytics and Google Tag Manager. Now you just need to add the Google Analytics Settings and Google Tag Manager Settings deployment steps to your plan, and after you execute that, you will get the following recipe file. Demos Lombiq UIKit for Orchard Core The Lombiq UIKit for Orchard Core module contains reusable shapes like text editors, custom-style checkboxes, dropdown editors, and in the future potentially more complex editors. Add the module to your solution and enable the Lombiq UI Kit - Showcase page feature if you want to check out the currently available shapes. You can see them under ~/UIKitShowcase after the feature is enabled. The example code for using these shapes can be seen in Views/Showcase/Showcase.cshtml. This module contains only those stylings which are needed for these shapes to work. During one of our client projects, we needed to standardize UI elements both on the front end and the admin area. Like text fields, drop-downs, and so on. Once you go beyond the very basics with styling and functionality this comes a bit more complex. Centralizing things is a good option in this case, and while we are doing that let's have an open-source module about it. And we have already added this module to our Open-Source Orchard Core Extensions solution! The only thing you need to do is to clone this repository and set up your Orchard Core site with any recipe you want. After head to the admin UI of Orchard Core and enable the Lombiq UI Kit - Showcase page and Lombiq UI Kit modules. Now you just need to navigate to the https://localhost:44335/UIKitShowcase URL, which showcases all the elements that are built-in into the module. But how can you use these? Especially they are just simple tag helpers. If you open the mentioned Showcase.cshtml in the Lombiq.UIKit module, you will see the content of the showcase page. Here you can see we have the editor tag helper that accepts several properties like the type, labelPosition, iconClasses, placeholder, and so on. By just providing these you can have nice, standardized UI elements that can be also used in Liquid as well. If you would like to know more about this feature don't forget to check out this recording on YouTube! News from the community DotNest Core DotNest Core is a complete redevelopment of the DotNest platform, all on the latest version of Orchard Core. We've been running it with a couple of select few customers for a while now, and it's time to open it up a bit more. While you can't yet simply create an Orchard Core-based DotNest site, you can sign up for our limited beta here. You'll soon be able to get a fully functional, reliably hosted Orchard Core site on DotNest where you can build your personal website or something to showcase your Orchard skills with. Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 219 subscribers! 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 is 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! If you are interested in more news around Orchard and the details of the topics above, don't forget to check out the recording of this week's Orchard meeting!

Add UsersFolder for media assets, Liquid IntelliSense for Monaco editor - This week in Orchard (18/08/2021)

Updating Monaco editor to have Liquid IntelliSense, new UsersFolder for media assets, a brand new Orchard Core website, and many more in our upcoming post! Orchard Core updates Add UsersFolder for media assets Open up the admin UI of Orchard Core and head to Content -> Media Library. Here you will find a folder called _Users. Under this folder, you can find three different ones where each folder has the name by an ID of a given user. The reason for that is, we have three users in the system right now who have access to manage the content of the media folder and the content of their own media folder. If you check the permissions page for one of the roles you will see some new permissions come from the OrchardCore.Media feature: Manage All Media Folders Manage Media For Others Manage Own Media These permissions allow administrator users to be able to manage the content of other user's media folders but can restrict others to manage just their folders. Users with the Editor role can only see and manage their own media folder. Note that this is just about managing media assets not hiding the files of the folder. Every user can see the image served under the https://localhost:44300/media/_Users/4dsckq969tr2czhkskgg9nw3mj/image.jpg but they cannot delete this file and cannot modify the content of the 4dsckq969tr2czhkskgg9nw3mj folder. On the left window, the administrator user can see all of the folders, but on the right window, an editor user can only see their folder. If you don't like the naming _Users for the folder under AssetsPath, you can easily use another name for that just by using the appsettings.json file to configure media. If you navigate to Configuration -> Media -> Media Options you will find the name for the Assets user folder as well. Liquid IntelliSense for Monaco editor We have several custom Liquid filters and tags in Orchard Core and when you would like to use these from the admin UI of Orchard Core, (like editing a template or an Html Field using the Monaco editor) that would be nice to have some help with the registered filters and tags. This feature is about adding IntelliSense for Liquid in the Monaco editor. Let's see how we can try it out! Here we have a site installed with the Agency recipe. That recipe contains a Content__LandingPage template for the Landing Page content type by default. If we start to type the {% shape %} expression, we will see a list that contains all the registered filters with the word shape in it. Flow alignment icon always render as left aligned Let's say we have a content type with a Flow Part attached. If you are using Flow Part, you have the option to put several widgets to it. You can also set the alignments of the widgets and the width of the widgets meaning you can put two widgets near each other and you can say that I want to put this widget on the left side of the row and fill the 66% of the row with it and I want to put this widget on the right side of the row and fill the 33% of the row with it. You can do that using a nice UI but there was a minor bug which was about the little icon of the editor wasn't reflect the alignment of the given widget. You can see that now the icon here shows that the second Html widget inside the Container widget is right-aligned. News from the community A new website using Orchard Core: City of Santa Monica Santa Monica is a beachside city of 8.3 square miles on the westside of Los Angeles County. Offering an environment of unparalleled natural beauty, the city is home to a mix of residential communities, commercial districts, and recreational venues. And now the website of the City of Santa Monica is here, built by using Orchard Core! Check out this brand new, amazing-looking Orchard Core site here! If you are interested in more websites using Orchard and Orchard Core, don't forget to visit Show Orchard. Show Orchard is a website for showing representative Orchard CMS (and now Orchard Core) websites all around the internet. It was started by Ryan Drew Burnett, but since he doesn't work with Orchard anymore, as announced earlier it is now maintained by our team at Lombiq Technologies. DotNest Core DotNest Core is a complete redevelopment of the DotNest platform, all on the latest version of Orchard Core. We've been running it with a couple of select few customers for a while now, and it's time to open it up a bit more. While you can't yet just simply create an Orchard Core-based DotNest site, you can sign up for our limited beta here. You'll soon be able to get a fully functional, reliably hosted Orchard Core site on DotNest where you can build your personal website or something to showcase your Orchard skills with. Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 216 subscribers! 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 is 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! If you are interested in more news around Orchard and the details of the topics above, don't forget to check out the recording of this Orchard meeting!

Extension method for site setting deployments, optimize AddTokenToPath - This week in Orchard (11/08/2021)

The development of Orchard Core of course has been continued after the release of 1.0. Are you curious about the newest improvements of Orchard Core? Well, let's check them out! Orchard Core updates Optimize AddTokenToPath The community tries to make Orchard Core as optimized and as fast as it could be. C# and ASP.NET Core with other third-party libraries offer several tricks and techniques to achieve this goal. For example, you can use ZString instead of StringBuilder. ZString is a library that provides StringBuilder and StringWriter with zero allocation, meaning it's allocating an array on the stack for small buffers, instead of creating new StringBuilders and StringWriters every time. All ZString methods only allocate the final string. Also, ZString has enabled to access the inner buffer, so if the output target has stringless API, you can achieve completely zero allocation. Or another improvement could be to not use string.Split that causing array allocation, use sub-strings instead. Add extension method for site setting deployments Whenever you would like to add a deployment step that allows exporting your custom site settings, you need to register three services with the transient, scoped, and singleton lifetimes. It's not a huge issue though because you can easily open a Startup.cs file of a module that contains these kinds of registrations and see how you can do it in your module but having an extension method for site setting deployments could reduce the lines that you need to copy every time. The new AddSiteSettingsPropertyDeploymentStep allows you to register your custom site settings deployments just in one line! Check out the Startup.cs files of any module to see the new way of registering your site setting deployments. Not use a current culture when checking invalid Autoroute path If you enable the Localization module and set a default culture to a non en-US culture, e.g. th-TH, you will get a validation error when trying to save a content item with an Autoroute part. Here is the screenshot when trying to save a content item and a default culture is th-TH. This issue is from AutoroutePartExtensions.ValidatePathFieldValue method. Inside the method, there is a call of autoroute.Path?.IndexOf("//") which returns 0 instead of -1 when a current culture is th-TH. According to the MS document, IndexOf(String) searches a word by using culture and case sensitivity. Refer to Recommendations for string usage, we should use StringComparison.Ordinal or StringComparison.OrdinalIgnoreCase for the non-linguistic string search. There is no case in a space and //, so the fix here was to pick StringComparison.Ordinal and to match IndexOf which is case-sensitive. Cypress 8.2.0 and Trumbowyg 2.25.1 If you are a huge Orchard Core enthusiast and like to check out the recent changes of the CMS from time to time, you may notice that the community upgrades the different .NET/Client-side/Test libraries from time to time. The Orchard Core documentation has a Libraries page under the Resources one where you can see the versions of these libraries that are used across the main branch of Orchard Core. Antoine Griffard recently updated Cypress to 8.2.0 and Trumbowyg to 2.25.1! With these updates, you can make sure that if you would like to use the built-in libraries of Orchard Core you will always have the latest versions! News from the community Lombiq Technologies: new developer colleagues and new group photo We had a great company trip last week where almost all of the colleagues of Lombiq gathered together to spend the whole day together offline. This was a great opportunity to update our group photo on our official website, so head to the About us page where you can see the most, but not all of our team as of the summer of 2021. And we also have two new colleagues to introduce: Ádám Jakab and Szabolcs Deme. Don't forget to check out their bio too! DotNest Core DotNest Core is a complete redevelopment of the DotNest platform, all on the latest version of Orchard Core. We've been running it with a couple of select few customers for a while now, and it's time to open it up a bit more. While you can't yet just simply create an Orchard Core-based DotNest site, you can sign up for our limited beta here. You'll soon be able to get a fully functional, reliably hosted Orchard Core site on DotNest where you can build your personal website or something to showcase your Orchard skills with. Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 215 subscribers! 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 is 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!

Google Tag Manager, User Approval feature - This week in Orchard (06/08/2021)

We promised that we will continue showing you the newest features and additions of Orchard Core 1.0 this week too! Well, we still have a lot to write about, so without any further ado, let's get started! Orchard Core updates Add user approval feature The user registration process, whether from the Registration controller, or via an ExternalLoginProvider had no features to moderate a user. In Orchard 1 we could moderate users, through an approval process. A new user registering when moderation was required, would not be logged in to the site, but redirected to the registration pending page, (and workflows invoked, to start the moderation process). We already have the IsEnabled bool, but no way to control both local registration and external registration. This change adds a UsersAreModerated setting to the user registration feature. When set true all users, whether registering via an external provider, or direct through the registration controller, will require approval, i.e., their account set IsEnabled = true before they are logged into the site. It also prevents external users from being automatically logged in if they have not confirmed their email address (if the confirmation email setting is set to true). Register user workflow updated to support the feature as well. Let's see this one quickly in action! First of all, you need to enable the Users Registration feature that allows external users to sign up to the site and ask to confirm their email. Now you can head to Security -> Settings -> User Registration, where you will see a new option: Users must be approved before they can log in. Put a tick in this checkbox and, don't forget to select the AllowRegistration option from the select list. Now, let's register with a new user! If you create a new account and hit the Register button, you will find the following screen meaning that an admin needs to approve your account before it can be used. Let's see how you can use this one in workflows! Navigate to Workflows -> Create Workflow, and after you add a name to your workflow, hit the Add Task button. Find the Register User task from the list, and the editor of this task will contain a Users must be approved before they can log in checkbox. Now let's see how we can approve the newly registered users! If you navigate to Security -> Users on the admin UI, you will see a list that contains all the available users in the system, and you will also find a red badge with a Disabled text near the users who are not enabled yet. If you click on the Edit button near a disabled user, you can simply use the Is enabled? switch to enable the given user. After that, the user with the user name: newuser now can log in. OpenID Client parameters The OpenIdConnectOptions support an OnRedirectToIdentityProvider event feature which allows the setting of custom parameters on the protocol message when generating an OpenIdConnectMessage to an external provider. Sometimes you need to be able to send some custom parameters to some of your tenant's AzureB2C auth servers (but not all, and it varies per tenant). options.Events.OnRedirectToIdentityProvider = (context) =>{ context.ProtocolMessage.SetParameter("foo", "bar"); return Task.CompletedTask;}; The solution here would be to have editable parameter (kvp) options on the OpenIdConnectSettings so you can configure different tenants to use different custom parameters. To test this out, you need to enable the OpenID Client feature under Configuration -> Features. After, head to Security -> OpenID Connect -> Authentication client, where you will see the new table called Advanced Parameters. Google Tag Manager Google describes its Tag Manager product as a 'Tag Management System' (TMS). That’s an excellent way to think about it. It does for a website’s tags what a Content Management System (CMS) does for its content. The service provides an interface through which to create and track all the tags your site needs. You no longer have to code each tag manually. Instead, you can create all your tags through the interface. Tag Manager will then implement them for your site. That is if you’ve embedded a straightforward piece of Tag Manager code into each page of the website. The Google Tag Manager container snippet is a small piece of JavaScript and non-JavaScript code that you paste into your pages. It enables Tag Manager to fire tags by inserting gtm.js into the page (or through the use of an iframe when JavaScript isn't available). But how can we use Google Tag Manager in our Orchard Core site? Well, first of all, you have to navigate to the Google Tag Manager portal and create a Tag Manager account. This will give you a generated Container ID for you to use on your website. Copy this ID, we will need it later! Now, enable the Google Tag Manager feature on your Orchard Core site and head to Configuration -> Google Tag Manager. Paste the Container ID here and hit Save. This will mean that the required JavaScript code for Google Tag Manager will be registered for every page on the front-end. News from the community Updated Orchard Core sites OrchardCore.net is the official website for Orchard Core. Try Orchard Core is the place where you can easily set up an Orchard Core site within a few minutes and try out the features of Orchard Core. Both of these sites have been updated to Orchard Core 1.0! Head to Try Orchard Core to try out Orchard Core 1.0 now! The OrchardCore.Samples repository contains a sample Multi-tenant application and a Modular application demonstrating how to build a Modular and a Multi-Tenant ASP.NET Core application using the Orchard Core Framework. This solution is also using Orchard Core 1.0 now, you should check out this solution to see some nice code examples! DotNest Core DotNest Core is a complete redevelopment of the DotNest platform, all on the latest version of Orchard Core. We've been running it with a couple of select few customers for a while now, and it's time to open it up a bit more. While you can't yet just simply create an Orchard Core-based DotNest site, you can sign up for our limited beta here. You'll soon be able to get a fully functional, reliably hosted Orchard Core site on DotNest where you can build your personal website or something to showcase your Orchard skills with. Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 214 subscribers! 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 is 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!

Orchard Core 1.0 release - This week in Orchard (27/07/2021)

We are thrilled to announce that Orchard Core 1.0 is now available! Check out this post to know everything about the latest release of Orchard Core. In the upcoming weeks, we will check out the newest features and additions of Orchard Core 1.0. Let's get started! Orchard Core updates Turn The Default Theme LoginMenu into a shape for easier overriding It was a partial view. While you can override this from a child theme, you can't override it from admin-edited Templates. So this is about changing it into a shape. Now the LoginMenu shape it's in the TheTheme theme, and it can be easily customized. Added more clarity about how migrations work When you are new to Orchard Core, you may be struggling with the concept of migrations while developing a module for the first time. That information on this very important topic is scattered, so brunoAltinet decided to propose a separate section for data migrations. Now you will find a new page on the Orchard Core documentation about: what are data migrations, how to add migrations to your custom module, and you will also find an example that showcases three different data migrations (recipe migration, creating a map index, creating content type and updating content type). Fix Connection String input styles When you set up a site or a tenant in Orchard Core, the first thing you will see is the Setup screen. The Setup screen contains a few questions that you need to answer to configure your site. And the connection string is one of them. We used the input-group-append class here but we should not be using a form-select and input-group-append, because that is deprecated in Bootstrap 5. Add signal_url description Many activities have settings that can contain either JavaScript or Liquid syntax. These types of fields allow you to enter Liquid markup, enabling access to system-wide variables and filters as well as variables from the workflow execution context. We have a table of the JavaScript functions that are available by default to any activity that supports scripts expressions. The signalUrl function was missing from this table, but now you can find that here too! News from the community Orchard Core 1.0 Orchard Core 1.0 is released! If you open up nuget.org and search for the OrchardCore.Application.Cms.Targets package, you will find the first released version of Orchard Core! The Releases page of the documentation is also updated that now contains version 1.0 with some breaking changes and the new features. Upgrade your solution to 1.0 now! Feel free to drop on the dedicated Gitter chat and ask questions! A new website using Orchard Core: Wings Over Water The Wings Over Water movie tells the story of the epic journeys of three amazing bird families – the Sandhill Crane, the Yellow Warbler, and the Mallard Duck – with extraordinary footage of their fascinating behaviors. Check out this brand new, amazing-looking Orchard Core site here! If you are interested in more websites using Orchard and Orchard Core, don't forget to visit Show Orchard. Show Orchard is a website for showing representative Orchard CMS (and now Orchard Core) websites all around the internet. It was started by Ryan Drew Burnett, but since he doesn't work with Orchard anymore, as announced earlier it is now maintained by our team at Lombiq Technologies. Lombiq's Open-Source Orchard Core Extensions now with Orchard Core 1.0 Looking for some useful Orchard Core extensions? Here's a bundle solution of all of Lombiq's open-source Orchard Core extensions (modules and themes). Clone and try them out now! This is an Orchard Core CMS Visual Studio solution that contains most of Lombiq's open-source Orchard modules and themes, as well as related utilities and libraries. And we have also updated the solution to use Orchard Core 1.0! And what are these modules? Well, you will find a nice Readme.MD file for all of them. And if you like to use code snippets, you will love that our super-useful Visual Studio code snippets of the Orchard Dojo Library are now updated to Orchard Core v1.0! Check them out here! Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 208 subscribers! 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 is 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!