Rectangle 27 3

You probably attached the fields directly to the custom "Zadosti" content type? What Orchard in that case does is attaching the fields to a part named exactly the same as the type, it doesnt ever attach the fields to the content type itself (dont let the dashboard fool you!)

Therefore you can access the field as following:

var item = this._services.ContentManager.New("Zadosti"); 

// 'Zadosti' in here is the name of your part, which is 
// the same as your content type name
item.Zadosti.Name.Value = "Some dummy usage of this product"; 
this._services.ContentManager.Create(item);

orchardcms - Orchard - Insert content item to Content Type programmati...

orchardcms
Rectangle 27 5

You can achieve that with the built-in Content Item Permissions feature. This enables you to attach the Content Permissions content part to your content types, which will add a set of checkboxes to the editor to customize the accessibility of each content item of that type.

Is the content item permissions feature documented anywhere? Having trouble finding it.

Not that I know of. Do you have any trouble using it?

@bingles could you please post where you found the documentation on the Content Item Permissions? I am looking for the same thing.

The only documentation I can find is at the end of this page docs.orchardproject.net/Documentation/ which doesn't really provide any details, but the answer really is as simple as mentioned by Benedek. I went ahead and answered the question with some screenshots for a little more detail.

orchardcms - Orchard CMS - Can Permissions Be Set for a Single Content...

orchardcms orchardcms-1.7
Rectangle 27 7

Well, what you are doing in the admin is creating a content type. I'm not sure you really need to be storing subscription in such a way. But maybe I don't understand your scenario so if this is how you wish to proceed, you may want to check out Orchard Custom Forms. I admit, it is initially unclear how to create content types from the front end. You can look at this tutorial on how to use Orchard Custom Forms. http://devdirective.com/post/160/how-to-create-custom-forms-in-orchard-cms-with-email-and-recaptcha The example they are creating there is a contact form. It is pretty simple actually, and very powerful. I believe it is included in the core. For 1.7 at least.

However, for your situation with a newsletter subscription I would say you may want a different approach, and simply store a list of emails that are subscribed to your newsletter in their own table.

For this you will need to create your own widget, with a part that displays a form linking to your own custom controller that submits their email and then saves it. This would all be done using simple MVC and you would want to check out tutorials on that.

If your users have to be logged in to subscribe to your newsletter you could be even more clever and attach a part to the user and update this when they say they want to subscribe to your newsletter. But now I am babbling.

I have sort of just thrown very vague ideas on how to go about creating your own widget to display a form. I'd be happy to provide some more detail if you think this is a route you may want to go down. Else...I'm too lazy ^_^

Okay, so I see Nick has given you some pointers on how to go about this. I started reading but got bored, think it sounds pretty much fine though. Thought I'd just add my two pennies worth. I'm no expert in Orchard but this is how it all seems to me. Corrections to my nonsense much appreciated.

  • The driver: this is basically a controller. It displays the view people will see on the front end and the editor that will be shown when you create the content item. It also handles the postback when a content item is created, validation etc.
  • The model: this is where you will store data about your part. So if you have any settings related to the part. This inherits from something that gives it an id connecting it to the content item. Cant remember the name.
  • The handler: this basically "handles" the creation of your content item. It will chuck your data into a repository and can do other clever stuff. You can drop custom logic into the services it provides. But don't worry about it, just leave it to do its stuff.
  • The views: Content parts have several views associated with them. Editor views and display views. These are stored in separate folders. EditorTemplates/Parts/... is where your editor will be stored (shown when you create the content item). Parts/... is where you store your views that show front end stuff.
  • The placement: this file contains information about where your part will be displayed within the content item. It is pretty cool.

So the first thing we need is to create the part itself. You can write it all yourself. But it is tedious and easy to forget something when you are new. I always forget something important. There are vs templates available from... somewhere. I usually just use a cool little code generation module. So go to the gallery and download and enable Code Generation Extensions by piotr szmyd. You can now run the command line application Orchard.exe. This is stored in the bin folder within Orchard.Web. Check this blog post for details on how to use this module. http://www.szmyd.com.pl/blog/generating-orchard-content-parts-via-command-line

This will generate all the necessary bits and bobs, drivers etc. Your part shouldn't really need any settings. Maybe in the future when it needs to be simple so for now we will leave the models blank. We will store your list of newsletter subscribers in a different table. In a bit. First lets get it to display your part. There should be a NewsletterPart.cshtml file in your Views/Parts/ folder. Write some random words in here so we know it is displaying. Then go to the Placement.info file and make sure it has a line in there that tells your part to be displayed. eg:

Now we actually need to create your part and make a widget that you can display your part in. This is done with the migrations file.

using System;
using Orchard.ContentManagement;
using Orchard.ContentManagement.MetaData;
using Orchard.Core.Contents.Extensions;
using Orchard.Data.Migration;
using Orchard.Environment.Extensions;

namespace MyModule {
    public class Migrations : DataMigrationImpl {

        public Migrations() {

        }

        public int Create() {
        // Create Newsletter part table
            SchemaBuilder.CreateTable("NewsletterPartRecord", table => table
                .ContentPartRecord()
            );

        // Create the part and make it attachable to content items
            ContentDefinitionManager.AlterPartDefinition("NewsletterPart", builder => builder.Attachable());

        return 1;
    }

    public int UpdateFrom1() {
        // Create Widget
        ContentDefinitionManager.AlterTypeDefinition("NewsletterWidget", cfg => cfg
                .WithPart("NewsletterPart")
                .WithPart("WidgetPart")
                .WithPart("CommonPart")
                .WithSetting("Stereotype", "Widget"));

            return 2;   
    }
    }

    }

You should now be able to create a widget on the dashboard and it will appear in footer.

Now we need to create a little form to display some stuff. The form will look something like this. Chuck it into the parts display view instead of whatever you wrote before.

@model dynamic

@using (Html.BeginForm("Subscribe", "Subscription", FormMethod.Post))
{
    <fieldset>
        @Html.AntiForgeryTokenOrchard()    

        <label >
            Email:</label>
        @Html.TextBox("Email")<br />


        <button class="primaryAction" type="submit">@T("Submit")</button>
    </fieldset>
}

Now lets make the model for this form to work. Create a file in the models folder called Subscription Model with something like the following:

using System;

namespace MyModule.Models
{
    public class SubscriptionModel
    {
        public SubscriptionModel() 
        {

        }

        public virtual int Id { get; set; }

        public virtual string Email { get; set; }


    }
}

This will store your email subscribers. Now you need to actually do something with this. We can create the controller that will handle everything. Create a folder called Controllers and then add a file called SubscriptionController.cs. Add a method called Subscribe that can look something like this:

public class SubscriptionController : Controller {

   private readonly IRepository<EmailModel> emailRepository;

   public SubscriptionController(IRepository<EmailModel> emailRepository) {


    this.emailRepository = emailRepository;

        [HttpPost]
        public ActionResult Subscribe(string email)
        {
            var record = new EmailRecord() {
        Email = email
        };

        this.emailRepository.Create(record);


            //return to return url
        }
   }
}

All that is left to do is to create your emailrecord table in the db. Back to migrations and add a new method.

public int UpdateFrom2() {
   SchemaBuilder.CreateTable("EmailModel", table => table
                .Column<string>("Email")
                .Column<int>("Id", column => column.PrimaryKey()));

   return 3;
}

Just samples I wrote in notepad so probably will not compile. Got a bit longer than I expected...my blunderings.

Thanks for the answer - i have updated my Q a little. I want to steer clear of the custom forms. Your paragraph on parts/controllers/simple MVC is pretty much what I need to do - i can't seem to find anything that demonstrates the code needed to be called in order to store data in Orchard though. I.E how to create a record in orchard etc.... any clue? Also how to display a part on the front-end without using all that override Display nonsense.. :)

Thanks Hazza - thats perfect! whether it compiles or not isn't too much of an issue it's more that you have shown me the steps i need to take :D thank you again. i changed answers to this one as the code will really help me. thanks again

Hi Hazza - Sorry to be a pain in the arse.. this one is doing my head in.... So far so good - everything is displaying beautifully. however - i can't seem to figure WHY i get a null entry in my Newsletter table everytime I load the front end. it seems to be just the one null entry, though if i start a new browser i get one for that too. Is this normal??

asp.net mvc - Creating a module for Orchard that stores data from the ...

asp.net-mvc orchardcms orchardcms-1.6
Rectangle 27 15

I was never really able to find any detailed documentation on this so here is a summary of what is involved:

2) Under "Content Definition" find the content type you want to add permissions to and click "Edit"

4) After adding the part you can manage the permission settings

Thank you VERY much @bingles! I was completely lost with this. Have a great day :)

orchardcms - Orchard CMS - Can Permissions Be Set for a Single Content...

orchardcms orchardcms-1.7
Rectangle 27 4

What is the difference & relationship between layers, content types, 
modules & widgets. And why are there no pages?!

Layers control which widgets appear in which zones (designated by the theme) on a particular page. They have rules, so for example, I could have a layer called NotHomePage and give it the rule not url("~/") and any widgets added to zones on that layer would appear everywhere but the home page.

Content types are just that--types of the content you create on the site. A Page is a content type you get out of the box with Orchard. It contains a part called Route so one of the first properties you have the option of creating is the slug e.g. mydomain.com/sweet-page.

Modules are basically MVC areas that create specific functionality for a website. A module may contain some custom parts, some script, some styling, etc. There are a couple contact form modules out there, but you'd probably learn more if you used the Custom Forms module that is already cooked in the default Orchard recipe (I think you have to enable it, but it's there.)

Widgets are like code snippets you add to zones (designated by the theme) on a layer where you can have as many widgets as you like. Maybe your home page has a "MainContent" zone where your customer would like to have their tagLine and a small form to sign up for a newsletter. You could add an HTML widget for the tagline (which contains basic information like a WYSIWYG editor for the HTML) and a Custom Form widget (which will handle creating s sign up request.)

Why is TripelFirst a layer for example - not a widget?

TripelFirst should not be a layer, it should be a zone in the TheThemeMachine theme i.e. an area on the page that may or may not contain widgets.

Why can't I just make a 'contact' page and add a widget 
to it called 'Contact Form'?!

You can, but you would need to define a couple things first.

  • Create a content type called ContactFormRequest (you might need to enable 'Content Types' module)
  • Add fields (first name, last name, etc) like you would add properties to a class definition
  • Create a page called Contact with the slug /contact
  • Add a Custom Form widget to ContactLayer and be sure to select ContactFormRequest as the content type

This should give you the basic behavior you're looking for. You can, of course, customize this further.

What would be the best practice way to add a Contact Us page - 
as a layer or a Content Type?

Personally, I prefer the flexibility of using my own content type e.g. ContactFormRequest. If, in the future, my customer wants to add height, weight and age as properties to the contact form, I have only to add these fields to the content type and Orchard handles the rest.

Thanks - that's helped a bit - I think it's just a lot to learn. Having some inline help in the back end would be really helpful for remembering this (maybe have a 'learning mode' or something).

interesting idea--we could technically write a module for that!

orchardcms - Orchard CMS - Difference between Layer & Content Type - S...

orchardcms orchardcms-1.6
Rectangle 27 3

To enabled the Content Item Permissions module

Layers are only for widgets. In order to restrict access to a content item such as a page, what you need is content item permissions. That's a separate feature that is not enabled by default.

This will reload the page and you should see a message at the top saying Content Item Permissions was enabled

Orchard CMS uses a concept where you can glue components together however you want them to be composed in order for them to support the features you want. The concept of a page is just a collection of parts like a page title, a url, text, setting a publish date and things like that.

By default simply enabling the module doesn't make any difference. You will need to add the feature to the Page content. To do this you just need to:

If you want to add it to other content types such as blog posts then you can repeat this process and add it to any content type you want to.

Now that the feature is enabled and attached to your Page content type you can create a new private page by following these steps:

I've added a little guide that explains how you can take advantage of this feature

Excellent stuff - thanks Bertrand and Harry ! Works like a charm now. Great help

orchardcms - Orchard CMS - limiting pages to only a specific layer - h...

orchardcms orchardcms-1.9
Rectangle 27 5

In Orchard.Users, look for Controllers/AccountController.cs. In there, there is a LogOn action. It creates a LogOn shape that it then puts in a shape result. This then gets resolved as the Views/LogOn.cshtml template (which you can override in your theme by just dropping a file with the same name in there, for example a copy of the original that you can tweak). The LogOn template will be rendered within the theme's layout, in the Content zone. Does this answer your question?

I think the mistake you made was to name your Content zone content (notice the casing).

Yes, that was the problem... I was convinced the Minty theme had content with a lower case c, but no. Many thanks.

orchardcms - Orchard CMS: Logon Page doesn't work with my custom layou...

orchardcms
Rectangle 27 3

OK, a more careful debugging session with a clear mind and I found the issue:

An error is caused when building the viewmodel in my driver:

private CorporateEmailEditorViewModel BuildEditorViewModel(CorporateEmailPart part)
        {
            return new CorporateEmailEditorViewModel
            {
                Alias = part.Alias,
                EmailAddress = part.EmailAddress,
                DisplayOrder = part.DisplayOrder,
                DisplayTitle = part.DisplayTitle,
                IsDefault = part.IsDefault,
                EmailMessageSummaries = part.EmailMessages.Select(ue => ue.Summary).ToList()
            };
        }

The offending line is:

EmailMessageSummaries = part.EmailMessages.Select(ue => ue.Summary).ToList()

The reason is that there is some problem with retrieving data from the EmailMessageRecord table using the CorporateEmailPartRecord_Id foreign key. I still haven't figured out what (have never used nHibernate which is what orchard uses), but the existence of this error answers the current question.

What doesn'twork is the code in your module.

So be more careful with your debugging.

Kevin Kuebler's videos are a great orchard learning resource.

When you refactor the name of something, double check to make sure they have ALL been changed.

I have found what was causing the hHibernate error: shoddy refactoring.

I originally called the project CompanyEmails, but then refactored everything to call it CorporateEmails. The only problem being, I didn't refactor everything, did I? There was still a CompanyEmailPartRecord_Id field on the EmailMessageRecord model class, whereas in the database, I had changed it to CorporateEmailRecordPart_Id. So, just another bug, just a failure to refactor properly.

orchardcms - Orchard CMS 1.4.2 - Edit view for my custom content type ...

orchardcms
Rectangle 27 2

The standard way of doing that is placement to move things around and alternate templates for the different parts and fields. You can specialize placement and alternates with the display type, which is Summary when rendering in a list such as what a projection returns, and Detail for the detail view. More info on placement can be found here: http://docs.orchardproject.net/Documentation/Understanding-placement-info and on alternates here: http://docs.orchardproject.net/Documentation/Alternates

Now if you prefer to completely take over the rendering and do without placement, here are a few posts that may help:

Thanks for the reply. Been away for the weekend. Will have a look through these links (i hace already scanned these before). Are there any theme example projects anywhere for reference using the projections and alternatives. I would of thought what i am doing is common place and simple.

It is common place and simple, which is why I was able to give you those links.

ok thanks. I think your blog links of not using the placement file look easier to follow as i tried the placement file with no success. Are there no downloadable examples you know of. ie other themes in orchard that do the above i can play around with. Thanks for you help and comments they are much appreciated.

thanks, i was hoping for too much i guess. It would be good, when tutorial/ information screencasts etc are added to orchard that the code is made available, this would make things far easier for new people using orchard.

orchardcms - Orchard CMS create theme view for my content type - Stack...

orchardcms
Rectangle 27 1

A widget is not routable, so it can't appear in search results.

Don't you know, how can I pass this constraint ?

What do you mean constraint? Index content types that have the route part and they will appear in search results.

orchardcms - Searching content in custom module of Orchard CMS doesn't...

orchardcms
Rectangle 27 5

You should take a look at MediaPickerFieldDriver.cs and MediaPicker.Edit.cshtml. They are both in Orchard.Fields. That should give you everything you need. Then again it's not entirely clear what you are trying to do. If you are just trying to add a media picker field to your content type from code, then you should do it from the migration, like this:

ContentDefinitionManager.AlterPartDefinition("Product",
    builder => builder.WithField("ProductImage",
        fieldBuilder => fieldBuilder
            .OfType("MediaPickerField")
            .WithDisplayName("Product Image")));

There is no such method called AlterPartDefinition in Orchard 1.8. What to do in this case?

Okey found it. it comes from an extension method!

orchardcms - orchard cms: how to add media picker field to anew module...

orchardcms asp.net-mvc
Rectangle 27 1

I think that you'll need to create a new content part, this content part should contain those fields (all of them). This part should be assigned to the new content type.

Create a field for the part (migrations)...

After adding all the desired fields you should attach the new part to the new content type...

ContentDefinitionManager.AlterTypeDefinition("YourContentTypeName", 
    builder => builder.WithPart("YourPartName"));

Tip: Always use migrations, they allow you to have control and if you're working on different environments you'll have the same structure without having to create again the same parts/content types.

Thanks. Creating a part that way is the same as adding the content type in the admin UI right? And I can do export/import if I'm working on different environments?

Yes, it's the same, but every time you need an update of the part/content type you'll have to export/import again.

orchardcms - Orchard CMS - How to implement fields in a custom form th...

orchardcms orchardcms-1.8 orchard-modules
Rectangle 27 5

For convenience, you could create the content type as part of one of the migrations in your module. This would only run when enabled. It would look something like this...

//Inside of your migration file... 
   public int UpdateFrom1(){
     ContentDefinitionManager.AlterTypeDefinition("Package", cfg=> cfg
        .Creatable()
        .WithPart("YourCustomPart")
        .WithPart("CommonPart")
        .WithPart("Whatever other parts you want..."));
        return 2;
   }

Removing this content type when you disable your module would be the tricky part because it might be kind of unexpected by the user. Maybe "Package" is a type they still want to use with different parts attached. Also, if they manually delete your module without disabling, you can't really write code to respond to that event. The only reliable thing I know of is the IFeatureEventHandler. This would allow you to remove your content type if they disable the module in the admin...

public PackageRemover : IFeatureEventHandler {
  private readonly IContentDefinitionManager _contentDefinitionManager;
  public PackageRemover(IContentDefinitionManager contentDefinitionManager){
    _contentDefinitionManager = contentDefinitionManager;
  }

  public void Installed(Feature feature){}
  public void Enabling(Feature feature){}
  public void Enabled(Feature feature){}
  public void Disabling(Feature feature){
    _contentDefinitionManager.DeleteTypeDefinition("Package");
  }
  public void Disabled(Feature feature){}
  public void Uninstalling(Feature feature){}
  public void Uninstalled(Feature feature){}
}

Thanks @Brandon. May I assume from your first code excerpt that AlterTypeDefinition will add the type if it doesn't exist?

orchardcms - How do I create a custom content type as part of an Orcha...

content-management-system orchardcms
Rectangle 27 13

You actually can't attach a field to a content type. When you attach it to a content type in the admin UI, Orchard does some magic behind the scenes to hide this fact from you -- it creates a content part inside that content type, with the same name as the content type, and then attaches the field(s) to that new content part.

You can verify this by attaching a field via the admin UI, and then going to Import/Export, and exporting the metadata for your content types.

To attach a field via a Migration, do the same thing. If you don't have a content part that is a good place to attach the field, the convention I use is tocreate one with the same name as the Content Type, bug suffixed with "Part". So let's say your content type is "VideoGame":

ContentDefinitionManager.AlterPartDefinition(
    "VideoGamePart"
    , b => b
        .Attachable()
        .WithField("ThumbnailImage", cfg => cfg.OfType("MediaPickerField").WithDisplayName("Video game box cover image"))
);
// Type: 
ContentDefinitionManager.AlterTypeDefinition(
    "VideoGame"
    , cfg =>
        cfg
            .WithPart("VideoGamePart")
            .WithPart("IdentityPart")
            .WithPart("TitlePart")
            .WithPart("CommonPart")
            .Creatable()
);

All fields are attached to Parts, not Types, so you naturally can control placement with placement.info and templates using this migration method, as you can if you define the field through the UI.

Thanks, that helps it make sense. What would the placement.info look like for your above example and if there were two fields in VideoGamePart would you still be able to place them separately?

Discovered how to place them separately with help from this answer: stackoverflow.com/a/13809514/31569

You do not need to suffix it with "Part". The name of the part and content type have to be exactly the same.

Yes... you should use the same name or you will have problems in editing fields later if you want change something.

orchardcms - Adding a Field to a ContentType in a Orchard DataMigratio...

orchardcms
Rectangle 27 5

There is a feature in the works for 1.5 to make that easier, but in the meantime, you can already get this to work quite easily with just a little bit of code. You should first add the fields that you need to your content type. Then, you are going to send them to top-level layout zones using placement. Out of the box, placement only targets local content zones, but this is what we can work around with a bit of code by Pete Hurst, a.k.a. randompete. Here's the code:

ZoneProxyBehavior.cs:
=====================

using System;
using System.Collections.Generic;
using System.Linq;
using ClaySharp;
using ClaySharp.Behaviors;
using Orchard.Environment.Extensions;

namespace Downplay.Origami.ZoneProxy.Shapes {
    [OrchardFeature("Downplay.Origami.ZoneProxy")]
    public class ZoneProxyBehavior : ClayBehavior {

        public IDictionary<string, Func<dynamic>> Proxies { get; set; }

        public ZoneProxyBehavior(IDictionary<string, Func<dynamic>> proxies) {
            Proxies = proxies;
        }

        public override object GetMember(Func<object> proceed, object self, string name) {

            if (name == "Zones") {
                return ClayActivator.CreateInstance(new IClayBehavior[] {                
                    new InterfaceProxyBehavior(),
                    new ZonesProxyBehavior(()=>proceed(), Proxies, self)
                });
            }

            // Otherwise proceed to other behaviours, including the original ZoneHoldingBehavior
            return proceed();
        }

        public class ZonesProxyBehavior : ClayBehavior {
            private readonly Func<dynamic> _zonesActivator;
            private readonly IDictionary<string, Func<dynamic>> _proxies;
            private object _parent;

            public ZonesProxyBehavior(Func<dynamic> zonesActivator, IDictionary<string, Func<dynamic>> proxies, object self) {
                _zonesActivator = zonesActivator;
                _proxies = proxies;
                _parent = self;
            }

            public override object GetIndex(Func<object> proceed, object self, IEnumerable<object> keys) {
                var keyList = keys.ToList();
                var count = keyList.Count();
                if (count == 1) {

                    // Here's the new bit
                    var key = System.Convert.ToString(keyList.Single());

                    // Check for the proxy symbol
                    if (key.Contains("@")) {
                        // Find the proxy!
                        var split = key.Split('@');
                        // Access the proxy shape
                        return _proxies[split[0]]()
                            // Find the right zone on it
                            .Zones[split[1]];
                    }
                    // Otherwise, defer to the ZonesBehavior activator, which we made available
                    // This will always return a ZoneOnDemandBehavior for the local shape
                    return _zonesActivator()[key];
                }
                return proceed();
            }

            public override object GetMember(Func<object> proceed, object self, string name) {
                // This is rarely called (shape.Zones.ZoneName - normally you'd just use shape.ZoneName)
                // But we can handle it easily also by deference to the ZonesBehavior activator
                return _zonesActivator()[name];
            }
        }
    }
}
ZoneShapes.cs:
==============


using System;
using System.Collections.Generic;
using Orchard.DisplayManagement.Descriptors;
using Orchard;
using Orchard.Environment.Extensions;

namespace Downplay.Origami.ZoneProxy.Shapes {
    [OrchardFeature("Downplay.Origami.ZoneProxy")]
    public class ZoneShapes : IShapeTableProvider {
        private readonly IWorkContextAccessor _workContextAccessor;
        public ZoneShapes(IWorkContextAccessor workContextAccessor) {
            _workContextAccessor = workContextAccessor;
        }

        public void Discover(ShapeTableBuilder builder) {

            builder.Describe("Content")
                .OnCreating(creating => creating.Behaviors.Add(
                    new ZoneProxyBehavior(
                        new Dictionary<string, Func<dynamic>> { { "Layout", () => _workContextAccessor.GetContext().Layout } })));
        }
    }

}

With this, you will be able to address top-level layout zones using Layout@ in front of the zone name you want to address, for example Layout@BeforeContent:1.

Make a module with both of those files, enable the module, then modify placement the way I explained.

Many thanks, the minute you say it, I can see the OrchardFeature attribute on the ZoneShapes class, which makes it all rather obvious.

Is there a feature in 1.5 that makes this easier?

Yes. You can use a leading slash before the zone in placement to send a shape into any top-level zone.

orchardcms - Orchard CMS: Do I have to add a new layer for each page w...

orchardcms
Rectangle 27 1

Content parts with the same name cannot appear multiple times in a single content type by design.

I don't quite get the benefits of adding namespacing functionality. The added value seems really small, but potential issues that would arise are substantial (problematic refactoring, troublesome overriding of existing parts etc.).

Just make sure to name them differently and you're good.

orchardcms - Orchard CMS - ContentPart Namespacing - Stack Overflow

orchardcms orchardcms-1.8 orchard-modules
Rectangle 27 1

You could create a content type called House with all the properties you described as fields. Then create projections (filtered to only show Houses) to display your Buy and Rent listings.

Yeah this. It's simpler and makes more sense than taxonomies in this instance (taxonomy with only two options: Buy/Rent doesn't make sense), and "Lists" are deprecated in Orchard. They are replaced by Projections.

Actually I'd still use taxonomies here. That there are only two terms doesn't seem like a compelling argument against it. And projections and taxonomies are really not exclusive of one another.

Bertrand Le Roy can you please expand to give me an idea of how to achieve it (i still create a content type for my houses but do i not now use projections, if so how to i manage to get the different house views i mention above {latest houses, features houses, etc}). i have just watched your video: youtube.com/watch?v=B3jhgTeiEtwAlso how can i have mulitple images against a content item then display them like ebay 1 big i with thumb nails, on clicking a thumb it replace the biig pic. Thanks for your help

Also using taxonomies i would have houses > buy / rent. But how would i show 2 menu items buy and rent. with taxonomies i can only show the top level of houses. i would also like to associate each houses with a location ie wales > pembrokeshire etc. and allow side bar nav like buy > england > london/ birmigham or vice versa go birmingham > buy / rent

orchardcms - Orchard CMS best options for list - Stack Overflow

orchardcms
Rectangle 27 3

It means that it appears under the "New" admin menu item and the Content management screen. That is all. That's what it means.

Non-creatable types are just as editable as any other type, but you need to provide your own admin link for them.

Actually it seems that content types that are not creatable are not visible in the ContentPicker field either. Odd.

No, that's by design. Otherwise, you'd see things like widgets and users appear there, which wouldn't make much sense in most case. The content picker is extensible however, and recently (in 1.x, not yet released) gained the ability to specify what content types you want to show there.

Any idea when this 1.x version will be released? And until then, in what way is the content picker extensible? I really need to be able to "lock it down" to a specific content type (that is not creatable)... I'm currently experimenting with a modified content picker that provides this option, but if it's going to be included in the standard picker soon, I'd rather use that of course.

No, we haven't set a date. Currently it already is extensible: you can add your own tabs.

orchardcms - What exactly does it mean that a content type is "creatab...

orchardcms
Rectangle 27 1

Appreciate the reply! On 1, no performance issues? On 2, I was pertaining to the part that carries the custom fields of a Content Item. When creating a Content Type through AlterTypeDefinition, I attach a part of the exact same name which has all the custom feelds needed. However, the problem is that it has no defined classes in the solution, it's all done in the migrations. So, I can't use it in the handler since it can't find it. Let me update the question with actual code.

handler - ContentHandler issues (circular reference) in Orchard - Stac...

handler orchardcms orchardcms-1.6 circular-reference