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

Featured tags

IIS
API
SMS
SEO
All tags >

This week in Orchard - 09/27/2019

The first release candidate of Orchard Core has been shipped! Read our post about the latest improvements of the new release and everything you need to know about where you can download the release and how you can work with an application that uses .NET Core 3.0! On Orchard Core Add contentitem tag helper and liquid tag Now we have a new contentitem tag helper and a Liquid tag. By using this tag helper we can render a content item directly and can also use caching. We still need to use the menu shape, because it has custom alternates that are specific to it, so we can't remove that. But at least now we have a contentitem helper that also do it for anything. Handle standard Startup class Until now if you add the Startup.cs to your module, you need to inherit the Startup class from StartupBase and you need to have to override the ConfigureServices(IServiceCollection services) or the Configure(IApplicationBuilder builder, IRouteBuilder routes, IServiceProvider serviceProvider) method. Now you can define a Startup class and don't have to inherit from anything like in ASP.NET Core. Of course, you can include the ConfigureServices or the Configure method to configure the app's services if you want, but you don't have to override anything. Fallback to Detail display type for bag parts If you create a BagPart and in the settings, if you remove the display type of the content types that you want in the BagPart, then it will be null in BagPart.cshtml and will fallback to Summary. Because they are widgets if you haven't implemented the Summary view of the widget that you are rendering, it will fallback to template Widget__Summary. But this thing doesn't exist. So the result will be a shape not found error. The solution is to fall back to the Detail, which is the default display type that we use for widgets when we render them. Configure ContentParts and ContentFields with IOptions<ContentPartOptions> or IOptions<ContentFieldOptions> We don't inject a ContentPart in the DI directly. We add the type of the ContentPart to an option, which is IOption<ContentOptions>. In this case, we don't have to resolve the ContentPart to get instances of ContentParts to know what are the ContentParts that are available. We do the same for ContentFields. Content items: Bulk actions and Filters UX Here you can see a concept to redesign the content items page for the bulk actions and the other filters: As you may see, Antoine has been mainly inspired by the GitHub issues UX. The new features are: Select all aligned vertically with the other checkboxes. Smaller left and right padding in the items list. All filters and actions on only one line. Dropdown actions with a light background (correctly displayed on a small screen). Even the Culture filter could appear. Display the number of items and the number of selected items when checked. It is just a POC. To make it work completely, we will need to find a way to select and display the state of the different filters like GitHub does it. For example: type:Article status:published sort:created Just to have a big picture of the two different screens, the current UI looks like this: This feature hasn't been available in Orchard Core yet but will be added in the next version of Orchard, because it was too risky to change the content items page before the RC in this huge way. Add translation metapackage to Cms.Targets As expected we added the OrchardCore.Translations.All to the Cms.Targets. If you use the Cms.Core.Targets you won't have it, but if you use the Cms.Targets you will get the themes and all the localization in your solution. But it didn't work, because there were some missing MSBuild Targets. Now it has been fixed. Orchard Core first release candidate has just shipped The community proudly presents the first release candidate of Orchard Core! RC means that the software is almost ready for the final release. No feature development or enhancement of the software is undertaken; tightly scoped bug fixes are the only code you're allowed to write in this phase, and even then only for the most heinous and debilitating of bugs. Let's see the list of changes for this release. As you can see from the list, Orchard Core is now on ASP.NET Core 3.0. That means now if you would like to contribute to Orchard Core you will need to install Visual Studio 2019 16.3. By updating to this version you will automatically get .NET Core 3.0 too because it is included in this version, but from here you can download both the SDK and the Runtime. The NuGet packages in NuGet.org are also updated and have the version number 1.0.0-rc1-10004. Don't forget that from now you can also download the translation packages from NuGet.org. There is an OrchardCore.Translations.All package that contains all the languages, but you can find the packages for every language separately too. Oh, and don't forget the Docker images of Orchard Core! You can also try the new version on Try Orchard Core. So don't hesitate, upgrade your Orchard Core site from Beta 3 to RC now! Building modular, multi-tenant ASP.NET Core apps with Orchard Core framework There was the .NET Conf this week, which was a 3-day virtual developer event co-organized by the .NET community and Microsoft. Sébastien submitted a talk about Orchard Core modularity and multitenancy and he was able to speak! At September 24 at 00:00 (UTC), he made a great talk about building modular, multi-tenant ASP.NET Core apps with Orchard Core framework. If you haven't seen his section yet, you can watch the recording in Twitch. On Lombiq Silent improvements in the background in DotNest As you may now DotNest is a SaaS provider that gives hosted Orchard CMS web applications hosted by Lombiq Technologies. We are thrilled to develop and maintain a provider like that and improved our services for time to time to make a better DotNest for you! Now we have just added some infrastructure improvements and making payments safer with PSD 2. Orchard Dojo Newsletter Now we have 94 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! 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!

This week in Orchard - 09/20/2019

Now we are in the finish line of releasing the RC version of Orchard Core! Read our post for the most important things you should now about the new release and for a quick demo about the Cypress e2e testing suite for Orchard Core! On Orchard Core Some performance tweaks Marko Lahma, the author of Quartz.NET made a lot of performance tweaks to make Orchard Core much faster. Let's see some of those! In the RunningShellTable.cs use host.IndexOf(':') != -1 instead of host.Contains(':'). And a same performance tweak here: instead of extensions.Contains(Path.GetExtensions(content.Name)) use Array.IndexOf(extensions, Path.GetExtension(content.Name)) != 1). Also, do not use dynamic typing when it's not necessary. Instead of context.AmbientValues.TryGetValue("LiquidPage", out dynamic page)) use context.AmbientValues.TryGetValue("LiquidPage", out var page));. He also created a project called OrchardCore.Benchmarks, where you can run some microbenchmark. Migrate all Content Type / Part / Field Settings to Settings<T> There were some places in the recipe where settings were not under the Settings property. Check the blog recipe for an example. Here you can see that everything is in its namespace. You can find a Settings property and inside that, there is a ContentTypeSettings property. By organizing all the settings in their correct path we get a cleaner recipe file. Add default paging to GraphQL queries We have three different new properties: DefaultNumberOfResults: if you don't say first or last in your queries, we will limit the results to 100. MaxNumberOfResults: if you define first of last (give me the last 2000 content items) we will block you and limit to 1000. If you didn't provide a first or last, and if you have so many results, it will slow down your system considerably. You should always page your queries, otherwise, you could load everything on the memory of the server and if you have multiple clients you will get out of memory or the performance will be slow. MaxNumberOfResultsValiadtionMode: specify the validation behavior if the max number of results is exceeded in a pager parameter.* Default: in production info will be logged and only the max number of results will be returned. In development, a GraphQL validation error will be raised.* Enabled: a GraphQL validation error will be raised.* Disabled: info will be logged and only the max number of results will be returned. Migration to .NET Core 3.0 RC Now Orchard Core using .NET Core 3.0 RC, which means you need to install the new SDK (v3.0.100-rc1) to work with Orchard from here. Sebastien pinned the 1.0.0-beta3-72452 version on MyGet, so it won't be deleted, and it is the last one targeting .NET Core 2.2. Don't forget: to work with Orchard Core, you will need Visual Studio 2019! Orchard Core RC release The plan is to ship Orchard Core RC next Monday, maybe on Tuesday, after .NET 3.0 is released, so we can update the dependencies and build the things. It will be on NuGet.org as well. This release will be followed with the 1.0 (RTM) version. The number of the new package will have the following convention: OrchardCore 1.0.0-rc1-10000. The build number will be reset to 10000 and will be increased by one with every build of the dev branch. We need to update the documentation and the ASP.NET package references. There will be blog announcements: they could be in the Asp.net site right after the .NET Conf. Try Orchard Core will be updated to use the new version too. Demos Cypress e2e testing suite for Orchard Core Cypress is a next-generation front end testing tool built for the modern web. Cypress is most often compared to Selenium; however, Cypress is both fundamentally and architecturally different. Cypress is not constrained by the same restrictions as Selenium. This enables you to write faster, easier and more reliable tests. To use Cypress in Orchard Core first you have to run npm install in the test/cypress folder. Then followed by npm run test to build and host Orchard and run Cypress test on it. This will execute the content of the test.js file. First builds the solution, starts the application and starts the different Cypress tests. The test cases are in the integration folder, where now you can find three different cases: Setup SaaS Blog Agency Let's check the content of the Blog one. You can find a file called 01-setup-blog-tenant.js. Here you can find different test methods, like cy.login(), or cy.gotoTenantSetup(blog). These functions are defined in the commands.js file within the support folder. Let's check quickly what are these methods for! As you can see, using some predefined command, you can easily navigate to a given URL using visit. You can target the different HTML elements using get and submit a form easily as you can see in the screen above. The Cypress testing suite for Orchard Core is in its early stage, but you can find the current state and follow the development in this branch. On Lombiq Orchard Dojo Newsletter Now we have 90 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! 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!

This week in Orchard - 09/13/2019

Lots of PRs merged to Orchard Core this week again coming with new fixes, and features. You could also read about the new way how you could use the localization packages in Orchard Core soon. Check out our current post for more! On Orchard Core Editor direction should respect the Localization Part culture Everything that is editable (like TextField, TitlePart, etc.) will now be configured whatever the content item's culture is. There is a new helper method, called GetContentCultureAsync that gets the CultureAspect of a content item, that will provide the CultureInfo of the content item. If you have the Localization module enabled, it will set it using the LocalizationPart of the content item (otherwise it will use the default culture of the site). Add Properties Dictionary to IShape interface We decided to provide a Properties bag on the IShape interface where you can put anything on a shape. You can do it in Orchard 1.x and in Orchard Core too, but only if the shape is a dynamic object. The readme file is updated about how can you do that using Liquid. Clean double encoding Use the tag helper instead of the ActionLink when working with localized strings. Every time when you have an ActionLink with a localized string it will be double encoded because the ActionLink only accepts a string. OrchardCore.Translations Repository In this repository, you can see a Localization folder that contains the localization for each culture for each module. Crowdin sends pull request to this repository whenever is a new translation is available. It creates new commits with every change and then AppVeyor will build the changes and this will build NuGet packages for every language. Each NuGet package will only contain the localization files for the given language. We publish the NuGet packages to MyGet prefixed with beta3. Once the dev will be merged to master it will move to nuget.org. There is also a meta-package called OrchardCore.Translations.All, that contains all the other languages. If you just point this package, you can translate your admin in any language automatically. Of course, you need to add the given language as a supported one. .NET Conf 2019 There will be the .NET Conf soon, which is a 3-day virtual developer event co-organized by the .NET community and Microsoft. Sébastien submitted a talk about Orchard Core modularity and multitenancy and he is able to speak! At September 24 at 00:00 (UTC) he will be speaking about building modular, multi-tenant ASP.NET Core apps with Orchard Core framework. Don't forget to join! Starting a new project with Orchard Core Garry Woodfine, an experienced full-stack developer has just started to work with Orchard Core. In this blog post, he writes about how you can build new Web Applications with Orchard Core, install Orchard CLI and start your CMS Website. On Lombiq Orchard Dojo Newsletter Now we have 90 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! 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!

This week in Orchard - 09/06/2019

Lots of PRs merged to Orchard Core this week that adds new improvements, fixes, and features. You could also read a demo about the Content Fields Indexing, that is a very useful feature for the developers: they can now query content items based on the value of the fields! Oh, and we will have a meetup soon in Budapest, where Lombiq will giving a talk on Orchard. Get ready for a longer post about these amazing features! We promise: you won't regret reading it! On Orchard Core Add ORCHARD_APP_DATA Environment Variable section If you want to change where the App_Data folder is, you can define an environment variable called ORCHARD_APP_DATA. Paths can be relative to the application path (./App_Data), absolute (/path/from/root), or fully qualified (D:\Path\To\App_Data). If the folder does not exist the application will attempt to create it. Localization files publishing When we deploy the app it will also publish the Localization folder, which is where the localization files go. Instead of the App_Data/Localization, they go into the Localization folder of the content root. Content Culture Picker improvements There is a new Liquid helper called switch_culture_url, that is responsible to return the URL of the Action that switches cultures. The ContentCulturePickerContainer is the template of the culture picker, that you can add in your front end themes to display a customized drop-down or a list of options to change the culture of the website. There was no example about how to override this using Liquid, now the documentation has an example using the new switch_culture_url helper. Workflows Internationalization Now every Task and Event have a LocalizedString property called DisplayText. With this change, you can localize the title of every activity. Make setting the page title format accessible to site administrators When you navigate to the general settings page you can find a new option called Page title format. Here you can now provide a Liquid expression to customize the way how you would like to render the title of your page. In the screen, you can see that we set the Page title format to {% page_title Site.SiteName, position: "before", separator: " -.-.-.- " %} By providing before as the position, we will show the name of the site first, then the title of the page with a custom separator. Check the second tab in the screenshot above to see the result of the expression. Handle UnauthorizedResult When trying to access an unauthorized ContentItem in the front end, the ItemController returns an UnauthorizedResult. Until there, it's correct. However, UnauthorizedResult is treated like any other error and an error message is returned: "An error occurred while executing this request." leaving us thinking there is a bug. The solution is we need to return the Forbid or Challange results, not just Unauthorized. If you are authenticated, we can just return Forbid to say you don't have access to this page. If you are not authenticated, we return a challenge, that will be redirecting you to the login page to give you a chance to authenticate yourself. In the future in most of the controllers, we should use this logic. Add documentation to health check The HealthChecks module is just enabling the middleware and the new documentation now mentions that the default endpoint is 'health/live'. Add support for typed shape tag helper properties There is a shape tag helper with the following syntax: <shape type="Foo" /> This will render the shape typed Foo. The Razor syntax to do the same is: @await DisplayAsync(await New.Foo()); You can pass parameters inside your page: @await DisplayAsync(await New.Foo(Age: 18, Color: "Green")); You can do the same using the shape tag helper: <shape type="Foo" age="18" color="Green" /> Let's say you create a file Foo.cshtm, that is the default template for the Foo shape. Inside that you can do the following: @Model.Age. What happens here is that you don't have IntelliSense for Age, because it's not typed. When you write the following in your template, what you get for the @age is the string 18. @{ var age = 18;}<shape type="Foo" age="@age" color="Green" /> In Razor, if the property doesn't exist on the type (which is the case here, because it's dynamic) it will be assigned as a string. It will evaluate that doing a .ToHtmlString(). If you really want to get integers, you have a new option in Razor tag helpers to bind a custom property with a prefix. <shape type="Foo" prop-age="@age" prop-color="Green" /> Using the prop- prefix the value will be converted to a property on the shape with the type of the variable that is passed. The @age will be the variable itself, in this case, it will keep the type of that we passed here directly to the property age, which is assigned to the shape. So the shape will keep the properties with the variable type instead of converting them to IHtmlContent. With this new improvement, you can pass complex objects to your shape types. For example, you can pass your object directly to a shape without needing a ViewModel. Demos Content fields indexing Now we have a new module which is Content Fields Indexing (SQL), that adds database indexing for content fields. You can also find documentation about the available tables for the database indexing and the usage of these index tables from a class, from a Razor template and from Liquid too. First, enable the Content Fields Indexing (SQL) module from the admin. If you are using the Blog recipe, you will have a Blog Post content type, thas has a Subtitle Text Field. Let's create some new Blog Posts. Let's create two published and one draft posts. Now head to the database, where you will see the new tables, like DateFieldIndex, BooleanFieldIndex, TextFieldIndex, etc. Because the Subtitle is a Text Field, let's check the content of that table. You can see the three blog posts here, where you can also notice that one of them hasn't published yet. If you enable the SQL Queries module, you can add a new SQL query to list the Blog Posts from the TextFieldIndex table. Hit Save and then Run the query. At the bottom of the screen, you will get the result of the query: the three BlogPost content types. Do you know developers from your company who'd love this feature? Show them that now they can query content items based on the value of the content fields! On Lombiq Talentera.Net meetup This one is for our friends in Budapest: we've partnered with the agile carrier building agency Talentera to bring you .Net meetups! The first one will be in three weeks, us giving a talk on Orchard. Join if you're in the city! Orchard Dojo Newsletter Now we have 91 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! 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!

This week in Orchard - 08/30/2019

Let's start our post with a new contribution from Lombiq about back-porting Orchard Core's Live Preview feature to Orchard 1.x. Then read about two demos of Orchard Core's upcoming huge features: the Azure Blob Storage as CDN and about supporting custom Lucene analyzers! We also have other updates around our house as well. Check out our current post for more! On Orchard 1.x Demos Live preview feature A new Orchard module is available in Orchard 1.x, called Content Preview. This is the back-port of the Live Content Preview feature that you can meet within Orchard Core. To use the Content Preview feature, head to the Modules menu from the admin and enable the module. The main concept is the user wants to see the changes of a content item immediately somehow without needing to save the changes. Here you can see a Page content type with several parts attached. Here you can update the TitlePart, the BodyPart, and the LayoutPart too with a TextField and a NumericField. You can also have more than one TinyMCE editor in the editor of the content item, it will work without issues. If you edit a content item with invalid data (for example typing some text in the editor of a NumericField), you will see the error notification immediately in the preview window. In the live preview window, you can find a warning message: "The Content Preview feature doesn't support properties where there are relationships to ContentPartRecord (e.g. Taxonomies, Tags). These won't update in the preview windows but otherwise, keep working." You can see this message because this feature hasn't been implemented yet, but feel free to have a contribution and add this feature to the Content Preview in Orchard 1.x! Thank you for the contribution to Milán Keszthelyi from Lombiq Technologies! On Orchard Core Add more detail step on README.md of OpenId In the documentation, there are more steps about how to add the relevant identity of OpenId when using MMC.exe. New Orchard Core collaborators & teams in GitHub There is a new OrchardCore Devs team in the GitHub repository of Orchard Core. The members of this team now have wright access to the repository, they can merge PRs, create and delete branches, but can't merge to master. They contributed enough and with good quality that we can trust them now. They learned how to contribute to Orchard. :) Demos Azure Blob Storage as CDN We don't want to serve the Azure Blobs directly by rendering their own URLs that points to their Blobs. So, the clients load the Azure Blob directly and not us. We want Orchard to load the Blob, save it locally on the server and we serve the file directly. This file, which is copied locally from the Blob Storage is what we call the Media Cache. We do that because if we want an actual cache, that the clients don't ask us to serve a file, we will use a CDN which Azure Blob Storage is not and by doing that we can process the files to resize them if they are to be resized by ImageSharp. So, there are two things to solve here. For example, if you would like to show an image on your page with three different sizes, there are three requests coming for the same image with different sizes. But there is only one Blob on Azure. You just send one request to Azure to get the file, store it locally and then resize it to the three different pipelines and serve the three different files, which are cached by ImageSharp also. There is a cache of the Blob file in the Media Cache, and there is three cached, resized images from ImageSharp. This Purge Media Cache button under the Configuration -> Media Cache section is responsible for delete the Media Cache, not the ImageSharp cache. This feature is still under development. Supporting custom Lucene analyzers and additional Lucene indexes settings In the Lucene Indices settings page, you can now have an Edit button for each index. If you click on Edit, you can set the content types and also have an option to index a draft version of the content item. Before - by default - it was indexing everything, not just the ones we want. And - by default -, it was only indexing the published versions, without an option to index draft. If it's checked, it will still index one content item, but the latest version. When we index and tokenize the text, we need to tokenize based on the language. Using the Analyzer Name select list you can provide different language analyzers for each index. If the text of these items will be French, then you can use a French analyzer. This feature is still under development. On Lombiq Improving your employment security with Orchard Did you know that the Employment Security Department of Washington State also uses Orchard? Well, they do and thanks to them we've back-ported the Orchard Core live content preview feature to 1.x! See our post about it: https://lombiq.com/blog/improving-your-employment-security-with-orchard Migrate from Bitbucket Mercurial repositories to Git - we can help! Do you need help after Bitbucket dropping Mercurial support? If you want to move to Git, check out this page in our website about what are your options now. We've been doing hg-git conversion for six years! Orchard Dojo Newsletter Now we have 92 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! 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!

This week in Orchard - 08/16/2019

More Razor helpers, advanced Liquid support in GraphQL, a new OrchardCore.Application.Cms.Targets meta package, Full-Text-Indexing and updated milestones for Orchard Core. Want more? Then check out our current post! On Orchard Core Added Liquid support to Markdown GraphQL query We have a property in GraphQL for instance called Html on Markdown and HTML body. The new thing is that this Html property on the Markdown body was evaluating the Markdown of the content item. On the client you can directly have the Markdown evaluated, but not the source Markdown. But what was missing is that this Markdown in this body could also have Liquid. It would not interpret the Liquid syntax. Now the method first evaluates the Liquid and then convert the Markdown. Added Liquid Razor Extension Method & Markdown Helper parses Liquid Two extensions, one just to render Liquid as IHtmlContent and the other to render Liquid as a raw string that can be passed to another extension method like the markdown helper. LiquidToHtmlAsync: parses a Liquid string to HTML as IHtmlContent. MarkdownToHtmlAsync: converts Markdown string to HTML. See the updated documentation about the LiquidToHtmlAsync, and MarkdownToHtmlAsync helpers. Documentation to explain how to generate PO files Documentation to explain how to generate PO files has been merged with the tool called PoExtractor. That tool will analyze all the source code and extract all the strings that are used in the localizer. A new OrchardCore.Application.Cms.Core.Targets core CMS meta package There is an OrchardCore.Application.Cms.Targets already that you can point to. If you reference this NuGet package in your project, the CMS will just run and all the dependent Nuget packages will be downloaded. It's also linking all the themes that we have in Orchard Core and there is no way to remove them. Let us introduce a new package, called OrchardCore.Application.Cms.Core.Targets, that just contains the modules and only the TheAdmin theme. In this way you can just reference your own themes and not the other ones, that will make your deployment smaller. So, OrchardCore.Application.Cms.Targets contains every theme that we have in the solution and OrchardCore.Application.Cms.Core.Targets is just the TheAdmin theme. Full-Text-Indexing in Orchard Core This is the settings page of a Content Picker field. Here you can see the following settings: include this field in the index: be able to include the value of this element in the index. stored: when you want the value of the field to stored with the Lucene index. analyzed: when you want the content of the field to split into different words. It means you can search by word and not as a whole. Also, simplify every word, so you can find the root of the word like depends, depending will be converted to depend. sanitized: when you want to remove any HTML from a field. So HTML tags will be not available when you search. tokenized: when you want to convert the value of the field with some custom Liquid logic. Here you can take the content of the field and you can convert it using a Liquid filter and do some computation and so on. If you go to a created content item, you can see there is an option for Full-Text-Indexing in Liquid, that determines if this content type can use a customizable full-text index field by using Liquid. The Liquid template here is accessible in queries with Content.ContentItem.FullText. You can use the Model helper to reference the current element. This feature is still under development and hasn't available in the dev branch yet. Orchard Core updated milestones and Roadmap The milestones have been updated in GitHub of Orchard Core. There are more of them now: rc: we still have the rc for September 23. 1.0: now we have a 1.0 milestone for late October. 1.1: which means the next major release. 1.0.x: some bugs we need to fix that not blocking 1.0, but have to be fixed before a major release. backlog: good idea, will see when we can do that. Let's have a look at our Roadmap! On Lombiq Orchard Dojo Newsletter Now we have 91 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! 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! There will be no 'This week in Orchard' post next week because of vacation, so see you in two weeks!

This week in Orchard - 08/09/2019

Getting closer and closer to the release of .NET Core 3.0 and Orchard Core RC! What do we need to ship the new version and what are the newest features of Orchard Core? Find out now! On Orchard Core Updating YesSql In SQL server it was not working correctly if you pass the parameter as the limit value. You can do SELECT * FROM FOO @limit, where the @limit is the parameter. That will be converted to SELECT TOP @limit FROM FOO in SQL server, but that doesn't work. When you use a variable like this it needs parenthesis. Now every time when we render it in YesSQL, it's in parenthesis: SELECT TOP (@limit) FROM FOO.You can also find a xUnit test in the SqlParserTests.cs file, where the parameters of the InlineData attributes are also using parenthesis. Ability to extend/clear ContainedContentTypes Now if you want to update the ContainedContentTypes of the Container Part then you can do that. Before that, if you add a type it removes the old one. Now you can choose to merge it with the existing one. And by using the ClearContainedContentTypes extension method, you can also clear the ContainedContentTypes. Remove JSON specifier from GraphQL MD code blocks The documentation used the JSON highlighting for the GraphQL queries, which is the closest to a GraphQL query, but it's wrong. It could show some wrong colors, so now it's just doing nothing. A GraphQL query is not a JSON payload, just the result of the query. .NET Conf 2019 There will be the .NET Conf next month, which is a 3-day virtual developer event co-organized by the .NET community and Microsoft. Sébastien is submitting a talk about Orchard Core modularity and multitenancy. We hope that he will able to get a talk! On these days they launch .NET Core 3.0, which is the 23rd of September. A plan is to ship Orchard Core RC on the day after the .NET Core 3.0 and the builds are available. Upgrading an Orchard Core site that using .NET Core 2.2: it's non-breaking in terms of database or recipes and everything. We are just upgrading the APIs from 2.2 to 3.0. So, in theory, if we take a site that has been built with 2.2 and we just upgrade to the branch that using 3.0, then it should not change anything. The only thing it should change hopefully is the performance of the site because .NET Core 3.0 is much faster and use less memory than 2.2. The image of .NET 3.0 will also be available on Docker. To ship Orchard Core RC, we only need to have finalized all the things for localization. We have most everything we need, instead of the field syncing. Let's have a look at our Roadmap! You can see that everything is implemented from the backlog. Adding more localization packages will not be that hard, the repositories are already done for these packages. And we have PRs for almost every bonus features that listed in the roadmap. We also need to focus on every issue in GitHub that marked for RC and has a priority tag on it. A new website using Orchard Core Patient Access connects you to healthcare services when you need them most. Book GP appointments, order repeat prescriptions and explore your local pharmacy services. This site is running on Docker for Linux on Azure as an Azure Docker Service on Linux. It's based on GraphQL. For example, when you navigate to Pharmacy services and searching for healthcare services, then it's GraphQL. If you search for Hay fever treatments and using S66 as the postcode, the results that you got is returned by GraphQL. 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. On Lombiq Orchard Dojo Newsletter Now we have 88 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! 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!

This week in Orchard - 08/03/2019

Huge steps to make Orchard Core CDN ready and to support Azure Blob Storage provider and many more improvements and fixes in our upcoming post! On Orchard Core The plural extension should work with NullStringLocalizer There is a unit test that shows the issue. When the Localization module is not enabled we are using the NullStringLocalizer and this case the pluralization was not working correctly. Reload resource settings on update When changing the resource settings (CDN/debug mode etc) the current tenant is not reloaded, so the settings don't take effect. The solution here was to just reload the general site settings when they change so that resources will change to debug/CDN/minified, etc. You can find the changes in the UpdateAsync method of the DefaultSiteSettingsDisplayDriver. Show connection string hint for all data providers When adding a new tenant or set up a new site, for some providers you need to have a connection string. Now a little hint will help you to type the connection string in the required format. Make Orchard Core CDN ready There are two concerns here. One is the Azure Blob Storage provider support and CDN support. These are actually two different concerns. In Orchard 1.x, we used Azure Blob Storage as a CDN, meaning when we would render the media from Azure Blob Storage, we would render the URL from the Azure Blob Storage, so the client would directly download the media from Azure Blob Storage. The Orchard server will not serve the file, the Azure CDN will serve it. In Orchard Core, we are using ImageSharp as the first middleware that serves the media. Right now when we render a file from Azure Blob Storage, we still render the Azure Blob Storage URL, and in this case, the media resizing doesn't work. Based on some feedback from the ImageSharp developers they said we are doing it wrong, you should always serve all your media from your server, even if it's coming from Azure Blob Storage. This way the ImageSharp filter be able to convert the images using the given sizes.When we serve a media, first we load the blob from the server, transform it, cache it locally and finally serve it. The next time when somebody asks for this media, we have it in the cache, so serve it from the cache. In this case, the Azure Blob Storage is not used as a CDN, it is used just like some storage and we have to load it whenever we need to load it. Then we still have the issue of the CDN. How do we do a CDN then, because we can't use Azure Blob Storage as the solution for the CDN? The solution is just to be able to use ACDN for any media that we render either they are from the local disk or from Azure Blob Storage, they will be always served by the Orchard Core server, but when we generate the URL to the generated media (for instance the resized media) we don't generate our own local URL to access our local cache of the resized file, but we generate a URL to a CDN endpoint (that could be any CDN endpoint, like Cloudflare, Azure, Horizon), that itself is configured to ask our server for the media. So, our only job for the CDN support is to generate a CDN URL. It can be an Azure CDN URL, not an Azure Blob Storage URL. With this CDN solution, we could work with any storage provider. When the request comes to Orchard with the local URL, it will download the file from the Blob Storage if it hasn't done it yet. The client cache is active because when we generate these files we had a public cache tag, so the client won't reload the same image again, won't send the same request again. Even if we send a request, it's cached locally on the server, so we won't ask Azure again, just load the file locally. On Lombiq Orchard Dojo Newsletter Now we have 86 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! 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!

This week in Orchard - 07/26/2019

The .NET Core 3.0 Preview 7 is here! So from now, the community can start working on to update Orchard Core to .NET Core 3.0 Preview 7. That will be a huge change, but it is one of the most important updates of Orchard Core RC. Read our post for more! On Orchard Core Vue.js use proper CDN Now the Vue.js using the proper CDN, which is jsDelivr. jsDelivr provides mirrors for npm, GitHub, WordPress plugins, and custom endpoints for several other projects with special requirements. We think it is the fastest CDN and it works in China also. Note that most of the CDNs don't work in China. <script asp-src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js" debug-src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js" asp-name="vuejs" at="Foot"></script> .NET Core 3.0 Preview 7 .NET Core 3.0 Preview 7 released this week. You can think about this release as the RC (Release Candidate) version of .NET Core because this was the latest version where the developers added new features to the framework. From now only bug fixes and minor changes will come until the GA (General Availability) of .NET Core 3.0, that is scheduled for September 2019. Now, let's check out the newest release of .Net Core 3.0 here! You can see that the new version support Visual Studio 2019 and .NET Core 3.0 should be used with the latest previews of Visual Studio. So, don't forget: if you try out .NET Core 3.0, use the latest preview of Visual Studio 2019. Other versions of Visual Studio 2019 are not recommended, but you can enable .NET Core SDK previews in Visual Studio. This article explains how can you do that. If you may not have heard: the community might ship the RC version of Orchard Core when the .NET Core 3.0 is shipped because it will be faster and will contain more features. So from now, the community can start working on to update Orchard Core to .NET Core 3.0 preview. That will be a huge change, but it is one of the most important updates of Orchard Core RC. ByTutorial mentioned Orchard Core ByTutorial is a place where you can read great articles mainly about tips & trick about web development both about back end and front end. A few days ago they wrote an article, where they published a list about 7 available popular open source .NET CMS's you can choose from and Orchard Core is one of them. You can read the post here! Adding IShellConfiguration documentation Orchard Core extends ASP.NET Core IConfiguration with IShellConfiguration. Understanding IShellConfiguration maybe not so trivial for the first time, so it's very helpful to make a documentation about it. Thanks to Dean Marcussen for the docs! On Lombiq Orchard Core demo in Singapore There was a meetup at March 15, hosted by .NET Developers Community Singapore, about Hastlayer, Posits, and Orchard Core, where three members of Lombiq gave sessions about the mentioned topics. In Benedek Farkas's presentation, you heard the summarized history of the Orchard project and got an introduction to Orchard Core both from a user's and a developer's perspective. In this presentation, you'll hear the summarized history of the Orchard project and get an introduction to Orchard Core both from a user's and a developer's perspective. And now the recording is available on YouTube! Check it out now! Orchard Dojo Newsletter Now we have 84 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! 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!

This week in Orchard - 07/19/2019

New Media Library web search providers for Orchard 1.x, improved documentation, and demo about the ability to set localization cookie when using the Content Culture Picker in Orchard Core. Read our post for the latest news around Orchard! On Orchard 1.x Demos New Media Library web search providers If you navigate to the modules, you will see some new ones in the Media category: now you can have Bing, Google, and Pixabay web search providers! Let's enable them and see how you can use it. For any web search provider that you would like to use you need to have an API key and provide them to Orchard under Settings -> Media. Now head to the Media Library and hit Import. Then select Web Search from the list to get the Search text box and a select list near that. Here you can use those web search providers, that you have provided an API key for. For example, let's choose Pixabay. If you select one or multiple files and hit the Import button, the selected files will be downloaded and Orchard puts them in the folder you have previously selected. Thank you for the contribution to Milán Keszthelyi from Lombiq Technologies! On Orchard Core Role-based permissions to display admin menus In the following GIF, you can see two admin menus (admins only and contributors only). Their visibility is configured from the roles page. If you logged in as an administrator, you can see both, but if you are a contributor you can only see one of them. Being able to see an admin menu doesn't mean you can see everything inside it, of course, normal permissions still apply. For example, a contributor can see the link menu, but can't see the content types links if they don't have the right permissions for them. Consuming Content Parts and Fields using C# For a while now it's possible to get strongly typed versions of Content Parts and Fields using Orchard Core. Thank's to John Rom, he wrote great documentation about how you can do that! Demos Content Culture Picker - Add ability to set Localization Cookie Last week we wrote about the Content Culture Picker feature of Orchard Core. The Content Culture Picker module helps you to manage cultures for the frontend and now comes with two now options you can set. If you enable the Content Culture Picker module, you can head to Configuration -> Settings, where you will see a new option, called ContentCulturePicker. Here you can decide to set the localization cookie when switching between cultures (this is enabled by default) and to redirects to the homepage of the target culture if the ContentItem of the target culture does not exist. The documentation is also updated about how to set the cookie from the admin site of Orchard Core or by using a recipe step. On Lombiq Orchard Dojo Newsletter Now we have 80 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 every time when 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!