<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Orchard Hungary: Recent Posts</title><link>/</link><description></description><item><title>Orchard Harvest conference again: register for this year's conference in Europe!</title><link>/blog/orchard-harvest-conference-again-register-for-this-year-s-conference-in-europe</link><description>&lt;p&gt;Within a month we'll again have an&amp;nbsp;&lt;a href="http://orchardharvest.org/"&gt;Orchard Harvest&lt;/a&gt; conference in Europe, this time in Spain. &lt;a href="https://www.eventbrite.com/e/orchard-harvest-2015-alicante-spain-tickets-18119461798?ref=ecount"&gt;Register for the conference &lt;/a&gt;now to meet all the active members of the Orchard community!&lt;/p&gt;</description><pubDate>Tue, 08 Sep 2015 16:13:28 GMT</pubDate><guid isPermaLink="true">/blog/orchard-harvest-conference-again-register-for-this-year-s-conference-in-europe</guid></item><item><title>How to create a minisite inside your Orchard website</title><link>/blog/how-to-create-a-minisite-inside-your-orchard-website</link><description>&lt;p&gt;Suppose you'd like to have a minisite for something like a one-page little website or even a simpler single page app. You want to do something simple but you still want your administrators to be able to edit the minisite's content. Let's see how to do this in Orchard, the simple way.&lt;/p&gt;
&lt;p&gt;First of all, we won't create a new tenant because that would be a huge overkill. What we'll do is that we'll simply employ a convention of placing every content under a specific URL and map our minisite to that URL pattern.&lt;/p&gt;
&lt;p&gt;Let's call our minisite Orchard Lulz, because we do it &lt;a href="http://a51.idata.over-blog.com/2/87/79/27/zit/the_lulz_family.jpg"&gt;for the lulz&lt;/a&gt;. Now what do we have to do?&lt;/p&gt;
&lt;h2&gt;1. Add some content&lt;/h2&gt;
&lt;p&gt;We'll need some content to display naturally, so let's add the front page of the minisite and set its URL to "lulz/". Notice the trailing slash: normally we don't add trailing slashed like this but here it will be needed (and nobody will see the item under a URL with a trailing slash).&lt;/p&gt;
&lt;p&gt;You can also add some further content, just prefix their URLs with "lulz/", e.g. "lulz/blog".&lt;/p&gt;
&lt;p&gt;If you'd like to display a menu or other widget on the minisite you have to configure widget layers accordingly, they'll match for the URL "lulz" too. Correspondingly you have to adjust any existing widget layer rule not to be active on your minisite if the rules were too forgiving (like "true" for being active on every page).&lt;/p&gt;
&lt;h2&gt;2. Set up routing&lt;/h2&gt;
&lt;p&gt;Such minisites deserve at least a subdomain but probably also an own domain. Set up your domain's DNS config to point the minisite's address to the domain of your site. E.g. if the Orchard site that we create a minisite under is &lt;a href="http://lombiq.com/"&gt;lombiq.com&lt;/a&gt;, we set up a CNAME record to point lulz.lombiq.com to lombiq.com.&lt;/p&gt;
&lt;p&gt;We also have to set up that every request to the subdomain is caught and re-routed to our minisite's URL accordingly. For this we'll need to add some URL rewrite rules (using the IIS Rewrite Rules module). Add the following block under your Web.config's &amp;lt;system.webServer&amp;gt; tag, or even better, using &lt;a href="http://msdn.microsoft.com/en-us/library/dd465326%28v=vs.110%29.aspx"&gt;Web.config transforms&lt;/a&gt; to your Web.Release.config (so your custom configs won't mix with Orchard's defaults).&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;rewrite&amp;gt;
  &amp;lt;rewriteMaps&amp;gt;
    &amp;lt;rewriteMap name="MapSSL" defaultValue="OFF"&amp;gt;
      &amp;lt;add key="ON" value="https://" /&amp;gt;
      &amp;lt;add key="OFF" value="http://" /&amp;gt;
    &amp;lt;/rewriteMap&amp;gt;
  &amp;lt;/rewriteMaps&amp;gt;
  &amp;lt;rules&amp;gt;
    &amp;lt;rule name="Lulz redirect" enabled="true"&amp;gt;
      &amp;lt;match url="^lulz($|(/.*))" /&amp;gt;
      &amp;lt;conditions&amp;gt;
        &amp;lt;add input="{HTTP_HOST}" pattern="^lulz.lombiq.com$" negate="true" /&amp;gt;
      &amp;lt;/conditions&amp;gt;
      &amp;lt;action type="Redirect" url="{MapSSL:{HTTPS}}lulz.lombiq.com{R:1}" /&amp;gt;
    &amp;lt;/rule&amp;gt;
    &amp;lt;rule name="Lulz rewrite" enabled="true" stopProcessing="true"&amp;gt;
      &amp;lt;match url="^(Media|Themes|Modules|Core)" negate="true" /&amp;gt;
      &amp;lt;conditions&amp;gt;
        &amp;lt;add input="{HTTP_HOST}" pattern="^lulz.lombiq.com$" /&amp;gt;
      &amp;lt;/conditions&amp;gt;
      &amp;lt;action type="Rewrite" url="lulz{REQUEST_URI}" appendQueryString="false" /&amp;gt;
    &amp;lt;/rule&amp;gt;
  &amp;lt;/rules&amp;gt;
&amp;lt;/rewrite&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A couple of things to note here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Everything opened from lulz.lombiq.com/something is rewritten so it actually fetches lombiq.com/lulz/something (with query strings added, don't be mistaken by the appendQueryString being set to false; the query string is part of {REQUEST_URI}.&lt;/li&gt;
&lt;li&gt;Requests to files under the folder Media, Themes, Modules and Core are working as usual.&lt;/li&gt;
&lt;li&gt;If users try to open lombiq.com/lulz/something they will be redirected to lulz.lombiq.com/something. This redirection happens with keeping the original protocol (i.e. http or https).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. Style it&lt;/h2&gt;
&lt;p&gt;Since now your minisite's content should be reachable under its own (sub)domain with every content working as intended what's left is really just some styling.&lt;/p&gt;
&lt;p&gt;You can use the built-in URL Alternates feature in Orchard to override shape templates for your minisite (just turn it on). This will give you alternates for every &lt;a href="http://orcharddojo.net/orchard-resources/Library/Wiki/Shape"&gt;shape&lt;/a&gt; targeted at URLs (as the name suggests), e.g. the minisite will have alternates like Layout-url-lulz (for the Layout shape). Most possibly you'll want to override the Layout and/or the Document shape templates to include custom stylesheets and scripts for your minisite. But if you're using a base theme like &lt;a href="https://github.com/Lombiq/Pretty-Good-Bootstrap-Base-Theme"&gt;Pretty Good Bootstrap Base Theme&lt;/a&gt; you'll able to inject your resources by overriding less generic shapes (in the case of PGBBT these would be Resources and Insertions; URL Alternates work for ad-hoc shapes too). These alternates work for the subpages under /lulz too.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;That's it, some light-weight minisite we have here. Happy minisiting!&lt;/p&gt;</description><pubDate>Wed, 17 Dec 2014 10:28:00 GMT</pubDate><guid isPermaLink="true">/blog/how-to-create-a-minisite-inside-your-orchard-website</guid></item><item><title>Crowdin: Managing translations for Orchard</title><link>/blog/crowdin-managing-translations-for-orchard</link><description>&lt;p&gt;Earlier this year the decision was made to shut down the localization tool on &lt;a href="http://orchardproject.net/"&gt;orchardproject.net&lt;/a&gt; for technical reasons. We had a couple weeks of "downtime" in that state during which we could download the translations we had before, but there was no way to edit or update them (other than doing it manually, which is a tedious and error-prone task). Unfortunately writing a new tool that suits our requirements for managing translations was a no-go due to the lack of development resources in the community (time, most of all) - though it turned out that it was not a bad thing at all!&lt;/p&gt;
&lt;p&gt;A little later the idea emerged on the forums by a community member that an external tool may fit our needs to replace our translation tool: after examining the possible candidates along specific requirements (e.g. permissions, API for translation management, free for OSS) we came to the conclusion that Crowdin solves all our problems. Applying for a free, open-source licence was fast and easy, so we're enjoying the benefits of Crowdin for a couple of months now and we're happy to recommend Crowdin to manage translations for any project!&lt;/p&gt;
&lt;p&gt;Initially we launched the &lt;a href="https://crowdin.com/project/orchard-cms"&gt;Orchard CMS&lt;/a&gt; project (hosting the translations for the Orchard source) which has now over 100 contributors and 4 languages with 100% translation (a total of 39 languages with any translation). Not long ago the &lt;a href="https://crowdin.com/project/orchard-cms-gallery"&gt;Orchard CMS Gallery&lt;/a&gt; project was also launched, which is the home for 3rd-party modules and themes for Orchard.&lt;/p&gt;
&lt;p&gt;If you'd like to apply for translating in either project, please visit the relevant language page(s) of these projects. You can also submit your own open-source module for the Orchard CMS Gallery project by contacting Benedek (benedek [dot] farkas [at] lombiq [dot] com), the manager of the translation tools. You can download the translation packages for each language by visiting &lt;a href="http://orchardproject.net/localization"&gt;the corresponding page on the Orchard website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Happy translating!&lt;/p&gt;</description><pubDate>Fri, 14 Nov 2014 13:12:00 GMT</pubDate><guid isPermaLink="true">/blog/crowdin-managing-translations-for-orchard</guid></item><item><title>Orchard Hungary back online!</title><link>/blog/orchard-hungary-back-online</link><description>&lt;p&gt;We had some various issues but all are gone now: the Orchard Hungary website is back online! Did you miss us? :-)&lt;/p&gt;
&lt;p&gt;You'll see our new contents soon!&lt;/p&gt;
&lt;!--more--&gt;</description><pubDate>Fri, 14 Nov 2014 11:19:27 GMT</pubDate><guid isPermaLink="true">/blog/orchard-hungary-back-online</guid></item><item><title>Changing the content type of existing content items</title><link>/blog/changing-the-content-type-of-existing-content-items</link><description>&lt;p&gt;So you've got a bunch of Page content items in your Orchard instance, but nowadays Orchard is getting popular and everybody has Page content items. But you started to use Orchard before it got cool and Pages are now too mainstream. How can you make your existing Pages unique again? Well, you could change them to use you very own content type, BakelitePage!&lt;/p&gt;
&lt;p&gt;First, set up the BakelitePage content type and make sure that it has every content part attached that Page has. Then you have to morph all of the existing Page content items to BakelitePage with the following code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public class MarkdownPageMigrationController : Controller
{
    private readonly IContentManager _contentManager;
    private readonly IRepository&amp;lt;ContentTypeRecord&amp;gt; _contentTypeRepository;


    public MarkdownPageMigrationController(IContentManager contentManager, IRepository&amp;lt;ContentTypeRecord&amp;gt; contentTypeRepository)
    {
        _contentManager = contentManager;
        _contentTypeRepository = contentTypeRepository;
    }


    public string Index()
    {
        // Creating an item is needed to make sure that the content type record is properly saved.
        // You don't need this if you can be sure that there were already content itema with the new type created.
        var dummy = _contentManager.New("BakelitePage");
        _contentManager.Create(dummy);
        _contentManager.Remove(dummy);

        // Content types have corresponding records in the DB. We just have to swap out which content type record our content
        // items reference.
        var newContentTypeRecord = _contentTypeRepository.Table.SingleOrDefault(record =&amp;gt; record.Name == "BakelitePage");
        var pages = _contentManager.Query("Page").List();

        foreach (var page in pages)
        {
            // This is the line where our pages get cool again.
            page.Record.ContentType = newContentTypeRecord;
        }

        return "OK";
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Happy getting exciting again!&lt;/p&gt;</description><pubDate>Fri, 28 Feb 2014 11:37:00 GMT</pubDate><guid isPermaLink="true">/blog/changing-the-content-type-of-existing-content-items</guid></item><item><title>Features of Orchard you've never used: Reports</title><link>/blog/features-of-orchard-you-ve-never-used-reports</link><description>&lt;p&gt;Did you know that there is a module (and a &lt;a href="http://orcharddojo.net/orchard-resources/Library/Wiki/Core"&gt;Core module&lt;/a&gt;!) in Orchard called Reports? Probably you did because since it's always enabled, you always see its menu item on the admin site. But have you used it at all? Ah, so you haven't either! Let's change this by shortly looking at how it works.&lt;/p&gt;
&lt;p&gt;Reports are basically user-accessible logs: you, as a developer, can make your module create reports if it does something notable. For example you could create a report if the module has run something in a background task.&lt;/p&gt;
&lt;p&gt;There are two notions to understand regarding reports:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Report&lt;/li&gt;
&lt;li&gt;Report entry&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It's not very complicated: reports can be created and they represent a logical collection of report entries; thus report entries can only be added to existing reports. Reports, apart from containing report entries, can have some metadata (like a title), just as report entries (that include a message and timestamp).&lt;/p&gt;
&lt;p&gt;There are a couple of interfaces regarding reports but as a module developer you should most possibly only use one, IReportsCoordinator. There are several examples on how to use this in Orchard but let's see it quickly in action:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// _reportsCoordinator is an injected IReportsCoordinator instance and T() is the Localizer as usual.
// Note the usage of T-strings, although ReportsCoordinator accepts normal strings. You can use normal strings too but since these
// messages will be displayed to the user it's probably a good idea to try to localize them. However it would be better if they would
// be localized when being displayed...
_reportsCoordinator.Register("MyModule.Upgrade", T("Upgrade of MyModule").Text, T("Upgrade steps needed to make MyModule use of Orchard 1.8 infoset storage.").Text);
// ...
_reportsCoordinator.Information("MyModule.Upgrade", T("Executing upgrade step 1: initializing the Ultimate Problem Solver.").Text);
// ...
_reportsCoordinator.Warning("MyModule.Upgrade", T("The Ultimate Problem Solver was not found. Resorting to Very Specic Problem Solver.").Text);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You get the idea. BTW as of just now the interface of this service is fully documented, too :-) (check the latest source).&lt;/p&gt;
&lt;p&gt;Happy reporting!&lt;/p&gt;</description><pubDate>Fri, 14 Feb 2014 13:55:00 GMT</pubDate><guid isPermaLink="true">/blog/features-of-orchard-you-ve-never-used-reports</guid></item><item><title>Adding a custom model binder to Orchard</title><link>/blog/adding-a-custom-model-binder-to-orchard</link><description>&lt;p&gt;An undocumented extensiblity point of Orchard is that you can add custom MVC model binders in an Orchard-y way, with providers. We needed this for adding the ability of parsing floats with a decimal dot and comma equally well, and it works as following.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public class FloatModelBinderProvider : Orchard.Mvc.ModelBinders.IModelBinderProvider
{
    public IEnumerable&amp;lt;Orchard.Mvc.ModelBinders.ModelBinderDescriptor&amp;gt; GetModelBinders()
    {
        return new[]
        {
            new Orchard.Mvc.ModelBinders.ModelBinderDescriptor
            {
                Type = typeof(float),
                ModelBinder = new DecimalModelBinder()
            }
        };
    }


    // Mainly taken from http://stackoverflow.com/a/5117441/220230
    private class DecimalModelBinder : DefaultModelBinder
    {
        public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            object result = null;

            var modelName = bindingContext.ModelName;
            var attemptedValue = bindingContext.ValueProvider.GetValue(modelName).AttemptedValue;

            // Depending on cultureinfo the NumberDecimalSeparator can be "," or "."
            // Both "." and "," should be accepted, but aren't.
            var wantedSeperator = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
            var alternateSeperator = (wantedSeperator == "," ? "." : ",");

            if (attemptedValue.IndexOf(wantedSeperator) == -1
                &amp;amp;&amp;amp; attemptedValue.IndexOf(alternateSeperator) != -1)
            {
                attemptedValue = attemptedValue.Replace(alternateSeperator, wantedSeperator);
            }

            try
            {
                if (bindingContext.ModelMetadata.IsNullableValueType &amp;amp;&amp;amp; string.IsNullOrWhiteSpace(attemptedValue))
                    return null;

                result = float.Parse(attemptedValue, NumberStyles.Any);
            }
            catch (FormatException e)
            {
                bindingContext.ModelState.AddModelError(modelName, e);
            }

            return result;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see you only have to implement the pretty simple IModelBinderProvider interface and return instances of your custom model binders. Note that IModelBinderProvider comes from Orchard, not from under the System namespace (there is one there too).&lt;/p&gt;
&lt;p&gt;Happy model binding!&lt;/p&gt;</description><pubDate>Fri, 24 Jan 2014 16:30:00 GMT</pubDate><guid isPermaLink="true">/blog/adding-a-custom-model-binder-to-orchard</guid></item><item><title>Modifying another Orchard module's DB schema with SchemaBuilder</title><link>/blog/modifying-another-orchard-module-s-db-schema-with-schemabuilder</link><description>&lt;p&gt;The SchemaBuilder, the service you use in migrations to modify the database schema of your module is a convenient tool. However, you can't use it directly to modify the schema of tables defined by other modules (this is commonly the case when wanting to add indices to other modules' tables) because SchemaBuilder automatically appends you module's name to the manipulated table's name... But this is very simple to overcome!&lt;/p&gt;
&lt;p&gt;You can instantiate SchemaBuilder yourself (you just need a data migration interpreter instance) and parameterize it appropriately, like following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    public class LocalizationMigrations : DataMigrationImpl
    {
        private readonly IDataMigrationInterpreter _dataMigrationInterpreter;


        public LocalizationMigrations(IDataMigrationInterpreter dataMigrationInterpreter)
        {
            _dataMigrationInterpreter = dataMigrationInterpreter;
        }
        
		
        public int Create()
        {
            var builder = new SchemaBuilder(_dataMigrationInterpreter, "Orchard_Localization_");
            builder.AlterTable("LocalizationPartRecord", table =&amp;gt;
                table.CreateIndex("Localization", "MasterContentItemId", "CultureId"));

            return 1;
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here we have a migration class for adding an index to LocalizationPartRecord, but this migration is in our own custom module, not in Orchard.Localization. We instantiate SchemaBuilder by hand, together with defining "Orchard_Localization_" as the table prefix (since this is what the original table has).&lt;/p&gt;
&lt;p&gt;The above code is in a migration class for the sake of simplicity: this way it will behave like any other custom migration and we could make use of the versioning feature of migrations too. However this code could be anywhere else too.&lt;/p&gt;
&lt;p&gt;Happy migrations!&lt;/p&gt;</description><pubDate>Fri, 20 Dec 2013 15:59:04 GMT</pubDate><guid isPermaLink="true">/blog/modifying-another-orchard-module-s-db-schema-with-schemabuilder</guid></item><item><title>Migrating content part data to the infoset - upgrading your module to be Orchard 1.8 compatible part 2.</title><link>/blog/migrating-content-part-data-to-the-infoset-upgrading-your-module-to-be-orchard-1-8-compatible-part-2</link><description>&lt;p&gt;So you've already &lt;a href="http://english.orchardproject.hu/blog/upgrading-your-module-to-be-orchard-1-8-compatible"&gt;upgraded your Orchard module&lt;/a&gt; to be compatible with the upcoming 1.8 version. Since your parts now use the &lt;a href="http://orcharddojo.net/orchard-resources/Library/Wiki/InfosetPart"&gt;infoset&lt;/a&gt; to store data you also removed some records. But how to migrate data from the old database tables, that are otherwise not needed and should be removed? Let's see.&lt;/p&gt;
&lt;p&gt;First of all: you'll only need to worry about migrating data from the records to the infoset if you remove records: this is commonly the case with site settings and other content parts that shouldn't be queried on. If your content part records remain then there is no need to do an explicit migration (see &lt;a href="http://weblogs.asp.net/bleroy/archive/2013/11/04/the-shift-how-orchard-painlessly-shifted-to-document-storage-and-how-it-ll-affect-you.aspx"&gt;Bertrand's blogpost&lt;/a&gt; for details).&lt;/p&gt;
&lt;p&gt;If you have a large number of rows to migrate then use the technique employed in Orchard's built-in Upgrade module: it basically migrates content items in batches of 50 in a controller action, and you can start this migration with the press of a button. If a batch is done it reloads the page and processes the next batch. You should use this technique or something similar to process many items, because you have to do the work in batches not to be in the danger of a timeout. If you have a small number of records (and thus, rows in the database) or even only one with site settings then you can use the below pattern.&lt;/p&gt;
&lt;p&gt;For a small number of records or site settings the following solution is simpler and requires minimal user interaction:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a new feature in your module for the upgrade, e.g. ModuleName.Upgrade. The feature should depend on the built-in Upgrade module.&lt;/li&gt;
&lt;li&gt;Add a new migration class under that feature. This will handle the upgrade.&lt;/li&gt;
&lt;li&gt;In the migration class do the upgrade through the Upgrade module's UpgradeService, then finally remove the now obsolete table that previously was backing your record.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now what your users have to do is simply enable the upgrade feature of your module, let the data migration run, then disable the feature. Due to the nature of migrations it can be run only once, what is desired.&lt;/p&gt;
&lt;p&gt;You can also remove most of the import/export code you may have as data stored in the infoset is automatically imported and exported.&lt;/p&gt;
&lt;p&gt;Quite simple to implement. For an example on how to do the third step take a look at the Combinator module's &lt;a href="https://github.com/Lombiq/Combinator/blob/dev/UpgradeMigrations.cs"&gt;upgrade migrations class&lt;/a&gt;. The delegate in ExecuteReader() runs for each row in the table: so although this example is about migrating site settings, where there is only one row, it will work equally well for multiple rows.&lt;/p&gt;
&lt;p&gt;Happy upgrading!&lt;/p&gt;</description><pubDate>Fri, 29 Nov 2013 18:36:00 GMT</pubDate><guid isPermaLink="true">/blog/migrating-content-part-data-to-the-infoset-upgrading-your-module-to-be-orchard-1-8-compatible-part-2</guid></item><item><title>Upgrading your module to be Orchard 1.8 compatible</title><link>/blog/upgrading-your-module-to-be-orchard-1-8-compatible</link><description>&lt;p&gt;So what should I do with my module to make it 1.8 compatible? Although 1.8 is not yet here (1.7.2 just released) it's not too early to deal with this question, since without intervention your modules won't even compile with the latest (soon-to-be 1.8) Orchard source.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Since Orchard 1.8 targets the .NET framework 4.5 if your module runs on 4.0 it won't compile (given that it references any other project in the Orchard solution, what it most possibly does). Thus, you have to re-target your module to .NET 4.5 (or 4.5.1 even if you need it) from under its project properties/Target framework. This will possibly also create an App.config file what you need to remove (see &lt;a href="http://stackoverflow.com/a/10448613/220230"&gt;this SO post&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Remove the Web.config file from the Views folder as it is not needed.&lt;/li&gt;
&lt;li&gt;Overwrite the root Web.config of the module with the Web.config found in any of the built-in modules' root, contributed by&amp;nbsp;&lt;a href="https://github.com/Oppedijk"&gt;Erik Oppedijk&lt;/a&gt; (if you're reading this from the future where the fork is already incorporated into the main source, you can just use it instead - and BTW congrats, time traveller!). This will restore the broken IntelliSense for Razor templates.&lt;/li&gt;
&lt;li&gt;Remove the following sections from static folder Web.configs (e.g. Script, Styles, Content):
&lt;pre&gt;&lt;code&gt;&amp;lt;appSettings&amp;gt;
    &amp;lt;add key="webpages:Enabled" value="false" /&amp;gt;
&amp;lt;/appSettings&amp;gt;
&amp;lt;system.web&amp;gt;
    &amp;lt;httpHandlers&amp;gt;
        &amp;lt;!-- iis6 - for any request in this location, return via managed static file handler --&amp;gt;
        &amp;lt;add path="*" verb="*" type="System.Web.StaticFileHandler" /&amp;gt;
    &amp;lt;/httpHandlers&amp;gt;
&amp;lt;/system.web&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;If you're using VS 2012 IntelliSense in MVC 5 Razor templates won't work at all. To add IntelliSense support you should install &lt;a href="http://blogs.msdn.com/b/webdev/archive/2013/11/18/announcing-release-of-asp-net-and-web-tools-2013-1-for-visual-studio-2012.aspx"&gt;ASP.NET and Web Tools 2013.1 for Visual Studio 2012&lt;/a&gt;. With VS 2013 you won't experience any issues.&lt;/li&gt;
&lt;li&gt;Change OrchardVersion to 1.8 in the Module.txt file.&lt;/li&gt;
&lt;li&gt;Finally: make use of 1.8's awesome paradigm shift, The Shift: we now store every content part data in the &lt;a href="http://orcharddojo.net/orchard-resources/Library/Wiki/InfosetPart"&gt;InfosetPart&lt;/a&gt; too: this is a huge performance boost. Read &lt;a href="http://weblogs.asp.net/bleroy/archive/2013/11/04/the-shift-how-orchard-painlessly-shifted-to-document-storage-and-how-it-ll-affect-you.aspx"&gt;Bertrand's blogpost&lt;/a&gt; on how to shift your modules. Also the Orchard Dojo Library has some &lt;a href="http://orcharddojo.net/orchard-resources/Library/Utilities/VisualStudioSnippets/"&gt;snippets for the infoset Store()/Retrieve() calls&lt;/a&gt; (look for opropstoreretrieve and oproprecordstoreretrieve) so you don't have to write them.&lt;br /&gt;Remember that most of the time you can remove import/export implementations from content part drivers as infoset data is automatically imported/exported. This is not true for content parts that you not explicitly migrate but let migrate itself over by time.&lt;/li&gt;
&lt;li&gt;Also because of The Shift : there are no more site settings part records and after you migrate your site settings data with the Upgrade feature all of the site settings tables will be gone too. This means that if your module fetched site settings records (what it really shouldn't) or even the tables directly with SQL (what it REALLY shouldn"t) then you'll have to change to access the same data in the corresponding content parts instead.&lt;/li&gt;
&lt;li&gt;And BTW: carefully test your module. There are supposed to be no major breaking changes but a lot of work has been done, so who knows...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The very same steps are required for themes too.&lt;/p&gt;
&lt;p&gt;If you'd like to also read about how to migrate data from records to the infoset, read &lt;a href="/blog/migrating-content-part-data-to-the-infoset-upgrading-your-module-to-be-orchard-1-8-compatible-part-2"&gt;the follow-up post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So let's shift to fifth gear! (Ehe, get the pun, haha... Oh, OK.) Happy shifting!&lt;/p&gt;</description><pubDate>Mon, 25 Nov 2013 14:55:00 GMT</pubDate><guid isPermaLink="true">/blog/upgrading-your-module-to-be-orchard-1-8-compatible</guid></item><item><title>Free and open online Orchard course opened!</title><link>/blog/free-and-open-online-orchard-course-opened</link><description>&lt;p&gt;The Orchard learning site &lt;a href="http://orcharddojo.net/"&gt;Orchard Dojo&lt;/a&gt; just started a free and open online Orchard course for beginners, the &lt;a href="http://orcharddojo.net/orchard-training/online-courses/dojo-course"&gt;Dojo Course&lt;/a&gt;. The Course will feature video tutorials, notes and other supportive materials. Also you can &lt;a href="http://orcharddojo.net/orchard-training/online-courses/dojo-course/enrollment"&gt;enroll&lt;/a&gt; to be eligible for submitting a project work for periodic reviews (i.e. you can now get your project criticized) and even get a grade and a certification of accomplishment at the end. If you'd like to start learning Orchard, this is the time!&lt;/p&gt;</description><pubDate>Thu, 19 Sep 2013 23:22:00 GMT</pubDate><guid isPermaLink="true">/blog/free-and-open-online-orchard-course-opened</guid></item><item><title>A harsh reminder that you can't forget what's below the abstraction</title><link>/blog/a-harsh-reminder-that-you-can-t-forget-what-s-below-the-abstraction</link><description>&lt;p&gt;So you're a high-level programmer that much that you write software in Flash. &lt;a href="https://github.com/mozilla/shumway"&gt;Running in JavaScript&lt;/a&gt;. In a &lt;a href="http://lobobrowser.org/java-browser.jsp"&gt;browser that runs on a virtual machine&lt;/a&gt; that runs on an actual OS that... Or simply you write a module that runs in a framework running on a framework running on a framework running on a framework (Orchard - ASP.NET MVC - ASP.NET - .NET) that uses an abstraction of database tables (records) aided by a layer that abstracts a layer that abstracts a data storage (Content Query - NHibernate - SQL) - that BTW itself abstracts a whole lot of things - to wrap it up quickly. And you thought you don't have to think about all that below! Got ya!&lt;/p&gt;
&lt;p&gt;I've created a content part that had an innocent little property called Index (what, for the historical accuracy, was of type int), and below that there was a similarly named property in the part record. Guess what I got when I tried to use this?&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;This exception:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;System.Data.SqlServerCe.SqlCeException: There was an error parsing the query. &lt;br /&gt;[ Token line number = 1,Token line offset = 402,Token in error = Index ]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Also some other rather cryptic ones. Now what's the issue? "Index" is a keyword in SQL of course so it can't be used, or at least not in the way the generated query wanted it (because there was no issue running the migrations). See, SQL is haunting your high-level, pure-OO dreams!&lt;/p&gt;</description><pubDate>Tue, 09 Jul 2013 18:26:00 GMT</pubDate><guid isPermaLink="true">/blog/a-harsh-reminder-that-you-can-t-forget-what-s-below-the-abstraction</guid></item><item><title>Orchard Brotips: having a big menu perfoming well</title><link>/blog/orchard-brotips-having-a-big-menu-perfoming-well</link><description>&lt;p&gt;TL;DR: use custom links only.&lt;/p&gt;
&lt;p&gt;Why? Because custom links are the only type of menu links that have all their content parts pre-fetched, thus a menu consisting even of thousands of items will still issue a single DB request. On the other hand other types of links use other parts that are lazily loaded, resulting in an N+1 scenario: there's a query to begin with and for every item there's a subsequent query. Content item links let you link to a content item conveniently but this convenience comes with a great price: with them this "a subsequent query" is rather "6 subsequent queries" even if nothing special happens. And when this is the case with a menu having several hundreds of items then... ...then you're basically serving a menu to your visitors performance-wise as other parts of the site will take negligible amount of resources compared to the menu.&lt;/p&gt;
&lt;p&gt;FYI all this is valid for Orchard 1.6. Performance of navigation may have changed in the latest source.&lt;/p&gt;</description><pubDate>Mon, 17 Jun 2013 11:15:47 GMT</pubDate><guid isPermaLink="true">/blog/orchard-brotips-having-a-big-menu-perfoming-well</guid></item><item><title>Live from Orchard Harvest 2013 - Amsterdam (Part 4.)</title><link>/blog/live-from-orchard-harvest-2013---amsterdam-part-4</link><description>&lt;p&gt;Second half of the second day - close to the end of this year's Harvest. Let's see what we've got! See the previous post &lt;a href="http://english.orchardproject.hu/blog/live-from-orchard-harvest-2013---amsterdam-part-3"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Piotr from &lt;a href="http://www.proligence.pl/"&gt;Proligence&lt;/a&gt; started the after-lunch part with a company presentation, since Proligence is co-sponsoring Harvest (together with &lt;a href="http://www.windowsazure.com/en-us/"&gt;Azure&lt;/a&gt;, &lt;a href="http://www.onestop.com"&gt;Onestop&lt;/a&gt;, &lt;a href="http://nwazet.com/"&gt;[nwazet&lt;/a&gt; and of course &lt;a href="http://lombiq.com/"&gt;Lombiq&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Bertrand followed up with Orchard's best kept recipes: a parade of Orchard features, modules, techniques you may want to know about.&lt;/p&gt;
&lt;p&gt;Sebastien ended the series of sessions with an in-depth drive of &lt;a href="http://orcharddojo.net/orchard-resources/Library/Wiki/Shape"&gt;shapes&lt;/a&gt;: how to have statically-typed shapes (not the DisplayTemplate way), what about shape events, connection with templates, how shapes are placed and how their factories are built up and a lot of other advanced shape insights.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description><pubDate>Fri, 14 Jun 2013 14:32:00 GMT</pubDate><guid isPermaLink="true">/blog/live-from-orchard-harvest-2013---amsterdam-part-4</guid></item><item><title>Live from Orchard Harvest 2013 - Amsterdam (Part 3.)</title><link>/blog/live-from-orchard-harvest-2013---amsterdam-part-3</link><description>&lt;p&gt;Back to Harvest again, second day, first half! See the previous post &lt;a href="http://english.orchardproject.hu/blog/live-from-orchard-harvest-2013---amsterdam-part-2"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Our second day started with &lt;a href="http://sebastienros.com/"&gt;Sebastien&lt;/a&gt;'s keynote (or rather, stand-up show) about the latest additions to Orchard (what will be part of the upcoming 1.7 release), demoing, among others, the new killer Workflows and Media Library module as well as smaller but nevertheless important additions and fixes. BTW although 1.7 is not yet here, you can well test out the &lt;a href="https://github.com/OrchardCMS/Orchard"&gt;latest source&lt;/a&gt; from the 1.x branch and play with it, provide early feedback. The source is quite stable and usable in production (make sure though that there's no existing new bug that is blocking for you).&lt;/p&gt;
&lt;p&gt;Bertrand's and Brett's co-session following was about the quirks of e-commerce. It can seem as simple first, but it isn't... Bertrand shared experiences he had when building the e-commerce solution for &lt;a href="http://nwazet.com/"&gt;Nwazet&lt;/a&gt; purely on Orchard. Brett showed the slightly different approach used at &lt;a href="http://sebastienros.com/"&gt;Onestop&lt;/a&gt; of having customer and product data in an external data source and querying that from Orchard via web services.&lt;/p&gt;
&lt;p&gt;Zolt&amp;aacute;n from &lt;a href="http://lombiq.com/"&gt;Lombiq&lt;/a&gt; has spoken about the basics of localization inside Orchard and how to approach if you want to have the UI or content of your site localized.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.linkedin.com/pub/samuel-goldenbaum/39/b05/6a1"&gt;Samuel&lt;/a&gt; from &lt;a href="http://www.hellocomputer.net/"&gt;Hellocomputer&lt;/a&gt; talked about the various experiences his team had (and still has) with building the website for the South African Toyota dealership, tuning performance, building rich UIs and complex structures of content.&lt;/p&gt;</description><pubDate>Fri, 14 Jun 2013 10:58:00 GMT</pubDate><guid isPermaLink="true">/blog/live-from-orchard-harvest-2013---amsterdam-part-3</guid></item><item><title>Live from Orchard Harvest 2013 - Amsterdam (Part 2.)</title><link>/blog/live-from-orchard-harvest-2013---amsterdam-part-2</link><description>&lt;p&gt;Back to Orchard Harvest, afternoon! See the &lt;a href="http://english.orchardproject.hu/blog/live-from-orchard-harvest-2013---amsterdam-part-i"&gt;previous part&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The second part of the day started with &lt;a href="http://skywalkersoftwaredevelopment.net/"&gt;Sipke&lt;/a&gt;'s marathon double-session about Orchard module development, APIs and also some general development (best) practices. In the end Sipke also showed some action-packed live debugging around an issue with running a recipe.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.themayneissue.com/"&gt;Nick&lt;/a&gt; came next (after a short epic struggle with Windows Update) with a funny overview of his &lt;a href="https://github.com/Jetski5822/NGM.Forum"&gt;Forums&lt;/a&gt; module (which is - or now rather should be: was - the most desired feature missing from the Orchard): some background, design decisions and demos.&lt;/p&gt;
&lt;p&gt;And now to the panel with Sipke, Sebastien and Bertrand. The questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Why is dynamic compilation off in 1.6 by default? It's off because it's broken :-). But you can also turn off deliberately.&lt;/li&gt;
&lt;li&gt;Can you turn on dynamic compilation from the command line (dynamic compilation is a favourite)? No, just by a config file. Now by default dynamic compilation is on but file system monitoring is off.&lt;/li&gt;
&lt;li&gt;Any movement for better support of client-side libraries? In history, if you don't do anything, you're doing right. Just kidding :-). Too long didn't hear version: not really, because we don't want to vote for a single library for everything.&lt;/li&gt;
&lt;li&gt;What do we say to the 1.7 release? Not today. Migration? Will/already have, there shouldn't be any issues, just a few little ones so you don't get bored.&lt;/li&gt;
&lt;li&gt;What about caching? Uhm, you'll see the replies in the video because it can't be explained by words, neither by expressions consisting of multiple words :-).&lt;/li&gt;
&lt;li&gt;Is Orchard an application development platform? Yes. Use Orchard, because it's good for you. Or not, you decide.&lt;/li&gt;
&lt;li&gt;Can we have static resource bundles (css, js)? Yes. Use &lt;a href="https://github.com/Lombiq/Combinator"&gt;Combinator&lt;/a&gt; or have manually defined resource bundles.&lt;/li&gt;
&lt;li&gt;Please watch the video that will come for this one :-).&lt;/li&gt;
&lt;li&gt;How to have a non-content home page? Yes: add its route under the empty alias.&lt;/li&gt;
&lt;li&gt;Piotr is sorry for the command line and want it to be loved better. And we couldn't agree more.&lt;/li&gt;
&lt;li&gt;We have some setup where items belong to some other items. What to do? Use Taxonomies.&lt;/li&gt;
&lt;li&gt;What's sad that there are cool modules but not maintained. If you like it, take ownership. And also these modules are so cool that the community wants them to be in the core. What to do? Propose it, include it in a fork and submit a pull request. Core modules are the ones that are or should be used by the majority of the users. Downside: if something's in the core, then it should be maintained and supported too.&lt;/li&gt;
&lt;li&gt;Migrations are fragile. How to deal with that? Now migrations have their own transaction, so if anything goes wrong, the whole transaction is rolled back. And what about having an explicit rollback feature for migrations? Not a good idea.&lt;/li&gt;
&lt;li&gt;Because of soft delete, your DB can get polluted. What to do? We could have a module to clean up deleted items/versions, whatava. Sebastien loves the Data Pruning Drupal plugin.&lt;/li&gt;
&lt;li&gt;There's an issue with Windows authentication, but that's not and Orchard issue.&lt;/li&gt;
&lt;li&gt;Won't it be bad to have potentially a very big number of content items with Media Library? If this is an issue for you, don't use the feature, but files directly as today.&lt;/li&gt;
&lt;/ol&gt;</description><pubDate>Thu, 13 Jun 2013 15:42:00 GMT</pubDate><guid isPermaLink="true">/blog/live-from-orchard-harvest-2013---amsterdam-part-2</guid></item><item><title>Live from Orchard Harvest 2013 - Amsterdam (Part 1.)</title><link>/blog/live-from-orchard-harvest-2013---amsterdam-part-i</link><description>&lt;p&gt;The Orchard Hungary/&lt;a href="http://lombiq.com"&gt;Lombiq&lt;/a&gt; Team is in Amsterdam, attending &lt;a href="http://orchardharvest.org/"&gt;Orchard Harvest&lt;/a&gt;. Let's see what we've got this year, what we &lt;a href="http://english.orchardproject.hu/Tags/Orchard%20Harvest"&gt;waited for since last September&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;First day, first part!&lt;/p&gt;
&lt;p&gt;Registration went smooth and luckily it was not an issue that we arrived just in time with the &lt;a href="http://lombiq.com/blog/orchard-harvest-logo---a-sneak-peek"&gt;t-shirts&lt;/a&gt; since those we handled out after the lunch break. (Breakfast buffet was excellent BTW and a great way to re-unite with the fellows not seen for a long time!)&lt;/p&gt;
&lt;p&gt;Keynotes were well-prepared and also entertaining: &lt;a href="http://www.linkedin.com/in/ylankunstler"&gt;Ylan&lt;/a&gt; from &lt;a href="http://www.onestop.com/"&gt;Onestop&lt;/a&gt;, the main organizer of Harvest started with a speech about how Orchard's community starts to flourish. What we really enjoyed is how Ylan cares about the evolution of our community.&lt;/p&gt;
&lt;p&gt;Bertrand, the benevolent dictator of Orchard and co-founder of &lt;a href="http://nwazet.com/"&gt;Nwazet&lt;/a&gt; shared some interesting insights about the Orchard story: how the system evolved, what concepts lived through from 0.1 and which ones turned out to be sad mistakes.&lt;/p&gt;
&lt;p&gt;The day's first session was given by Beatriz from the Portuguese agency &lt;a href="http://bind.pt/"&gt;Bind&lt;/a&gt; about how to develop responsive themes for Orchard and why to care about being responsive and adaptive. Despite having difficulties with the internet connection (as we all did in Tobacco Theatre in the beginning of the day) Beatriz managed to fully finish up the online demo and show us how to enrich our sites with the help of Twitter's Bootstrap framework and some relatively simple techniques.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.stevetaylor.me.uk/"&gt;Steve&lt;/a&gt; was next speaking about using &lt;a href="http://backbonejs.org/"&gt;Backbone&lt;/a&gt; to enrich the UI of an Orchard application. In his demo Steve progressively enhanced an Orchard site first with some simple AJAX and in the end with a full Backbone-based rich listing.&lt;/p&gt;
&lt;p&gt;The last session before our beloved lunch break was given by &lt;a href="http://in.linkedin.com/pub/jai-prakash/7/533/516"&gt;Jai&lt;/a&gt; who presented and interesting approach to architect a high-traffic website: in their solution at &lt;a href="http://www.sapient.com/en-us/sapientnitro.html"&gt;Sapient Nitro&lt;/a&gt; they used Orchard as a content authoring tool for the backend, exposing content through web APIs. These APIs are then consumed by a standard ASP.NET MVC 4 application that is actually facing the outer world.&lt;/p&gt;
&lt;p&gt;And now &lt;a href="http://skywalkersoftwaredevelopment.net/"&gt;Sipke&lt;/a&gt; is having his in-depth session about module development, APIs and best practices. It looks that Sipke is well trained in ReSharper-fu, as he's using ReSharper's features extensively!&lt;/p&gt;</description><pubDate>Thu, 13 Jun 2013 13:11:00 GMT</pubDate><guid isPermaLink="true">/blog/live-from-orchard-harvest-2013---amsterdam-part-i</guid></item><item><title>Making sure your inline script is only included once when multiple content items are listed</title><link>/blog/making-sure-your-inline-script-is-only-incuded-once-when-multiple-content-items-are-listed</link><description>&lt;p&gt;It's a common scenario that you want to add a little piece of javascript to enrich your content part. You may find that putting it into a separate script file is an overkill or - because the script needs many parameters from the part's template - too complex. Thus, you go&amp;nbsp; with an inline script. Good choice! But did you know that if multiple content items having your part are displayed on the same page your script will be injected to the markup multiple times? That ain't good, but there's a simple workaround.&lt;/p&gt;
&lt;p&gt;Code first!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
    if (WorkContext.GetState&amp;lt;string&amp;gt;("OrchardHUN.Shoutbox.Includes") == null)
    {
        using (Script.Foot())
        {
            &amp;lt;script type="text/javascript"&amp;gt;
                // This is only included once
            &amp;lt;/script&amp;gt;
        }

        WorkContext.SetState&amp;lt;string&amp;gt;("OrchardHUN.Shoutbox.Includes", "set");
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The sample is from our &lt;a href="https://github.com/Lombiq/Orchard-Shoutbox"&gt;Shoutbox&lt;/a&gt; module in &lt;a href="https://github.com/Lombiq/Orchard-Shoutbox/blob/dev/Views/Parts.Common.Metadata.Summary-ShoutboxMessage.cshtml"&gt;Parts.Common.Metadata.Summary-ShoutboxMessage.cshtml&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So what happens here? The WorkContext can contain a "state", i.e. key-value pairs that are only valid for the current request: if a value is set it can be read back later in the same request. We use this to have a value that indicates whether our script was already included or not (think &lt;a href="http://en.wikipedia.org/wiki/Include_guard"&gt;include guards in C&lt;/a&gt;, yikes).&lt;/p&gt;
&lt;p&gt;Having the same script included in Shoutbox's case would be harmless (it's just a variable declaration) but e.g showing an alert is a use case where you definitely want to prevent the script running more than once!&lt;/p&gt;
&lt;p&gt;Happy not flooding the markup with repeated scripts!&lt;/p&gt;</description><pubDate>Mon, 10 Jun 2013 11:15:00 GMT</pubDate><guid isPermaLink="true">/blog/making-sure-your-inline-script-is-only-incuded-once-when-multiple-content-items-are-listed</guid></item><item><title>Creating a hidden content part</title><link>/blog/creating-a-hidden-content-part</link><description>&lt;p&gt;You might want to have a content part hidden: that is, you not only don't want users to be able to attach it to content types but you don't even want user to see - and thus know about - it. This is the case if the part is something very technical or if it's only interesting for a single content type.&lt;/p&gt;
&lt;p&gt;The latter case, if you only want a content part to be attached to a single content type and thus don't want it to show anywhere else is simple: it's a much-used and fully supported scenario. You just have to name your part exactly like the content type. E.g. if your content type is "Page", just name your part "Page" and problem solved: this content part will be not listed among the parts under Content Definition.&lt;/p&gt;
&lt;p&gt;The other case is slightly more complicated and although supported is somewhat hidden: so you don't want users to know about a content part because e.g. you only want to attach it from code to specific content types in certain scenarios. The key is that the content part definition's record in the DB has a column called Hidden. Nothing as far as I know actually uses it but if you set it to True for your part your part will be visually hidden. Setting it is simple but you need to access the table on the repository level, like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public class PartHider
    {
        private readonly IRepository&amp;lt;ContentPartDefinitionRecord&amp;gt; _partDefinitionRepository;


        public PartHider(IRepository&amp;lt;ContentPartDefinitionRecord&amp;gt; partDefinitionRepository)
        {
            _partDefinitionRepository = partDefinitionRepository;
        }


        public void HidePart(string name)
        {
            var partDefinition = _partDefinitionRepository.Fetch(p =&amp;gt; p.Name == name).FirstOrDefault();
            partDefinition.Hidden = true;
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This has no check on the existence of the part definition record but you get the idea.&lt;/p&gt;
&lt;p&gt;Happy hiding your content parts!&lt;/p&gt;</description><pubDate>Thu, 06 Jun 2013 17:46:00 GMT</pubDate><guid isPermaLink="true">/blog/creating-a-hidden-content-part</guid></item><item><title>Did you know that themes can have dependencies too?</title><link>/blog/did-you-know-that-themes-can-have-dependencies-too</link><description>&lt;p&gt;Of course themes can depend on another theme, by having the other theme specified in the BaseTheme directive in the Theme.txt file. What's more however, that themes can also have dependencies on modules: just use the Dependencies parameter like with modules in the Module.txt.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Dependencies: Orchard.jQuery&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Not too complicated, right? Still it's something not obvious. Actually since jQuery is an always-on core module you don't need this, but if you have any other JS library in a module that you use in your theme you have to declare the dependency. You get the idea :-).&lt;/p&gt;
&lt;!--more--&gt;</description><pubDate>Wed, 29 May 2013 11:00:00 GMT</pubDate><guid isPermaLink="true">/blog/did-you-know-that-themes-can-have-dependencies-too</guid></item></channel></rss>