Anders Hattestad
Sep 3, 2010
  8070
(1 votes)

PageTypeBuilder with Dynamic properties (updated)

I’m currently working on a project where we started using PageTypeBuilder after a refactoring process. We had some dynamic properties we needed to make available. I therefore made a hack around PTB that includes support for dynamic properties.

The concept is easy. In your top PageType base class you add an attribute. Then you tag up your properties but use Dynamic Property instead of PageTypeProperty

[DynamicPropertyContainer]
public class BasePageData : TypedPageData 
{
    [DynamicProperty]
    public string JavaScript { get; set; }
}

The code will find all class's tagged with DynamicPropertyContainer and find all properties in those classes tagged with DynamicProperty. If it finds 2 properties with the same name it will skip the last one :)

In front code you can of course use

<%=CurrentPage.JavaScript%>

I’,m using the version of PTB that is compailed for CMS 5, so it could maybe be some change in the CMS 6 version. But I needed to copy some code to my own project cause use of internal and private… (sorry couldn’t resist:) ). 

The code is available as 4 cs files, and 1 dll.

Quick Tip

Some times you need to access the property instead of the underline object that PageTypeBuilder returns. So if you make a class like this

public static class ClassInfo<T>
{
    public static string GetName<R>(Expression<Func<T, R>> expr)
    {
        var node = expr.Body as MemberExpression;
        if (object.ReferenceEquals(null, node))
            throw new InvalidOperationException("Expression must be of member access");
        return node.Member.Name;
    }
}

Then you can access the property like this

CurrentPage.Property[ClassInfo<BasePageData>(p=>p.JavaScript)]
Sep 03, 2010

Comments

Joel Abrahamsson
Joel Abrahamsson Sep 21, 2010 10:33 AM

Hi Anders!

You could use the GetPropertyName extension method that ships with PTB to accomplish what you do with the ClassInfo class.

It should also be added that while PTB doesn't support creating dynamic properties you can use it to access their values in a strongly typed way.

For more about why PTB doesn't support adding dynamic properties and how to use it to access their values see http://joelabrahamsson.com/entry/working-with-dynamic-properties-and-page-type-builder.

Sep 21, 2010 10:33 AM

Hi Joel

Thanks for the tip on GetPropertyName

The reason for this code is to ensure that the dynamic properties are created. That’s one of the huge benefits of PTB also. That’s way I used the same concept to create the properties.

If PTB should support dynamic properties is totally up to you, but I see benefit of automatically created dynamic properties. I have to say that I also like dynamic properties as a concept, and are not a huge fan of inherit properties thou the page tree.


/ Anders Hattestad

Please login to comment.
Latest blogs
Opti ID overview

Opti ID allows you to log in once and switch between Optimizely products using Okta, Entra ID, or a local account. You can also manage all your use...

K Khan | Jul 26, 2024

Getting Started with Optimizely SaaS using Next.js Starter App - Extend a component - Part 3

This is the final part of our Optimizely SaaS CMS proof-of-concept (POC) blog series. In this post, we'll dive into extending a component within th...

Raghavendra Murthy | Jul 23, 2024 | Syndicated blog

Optimizely Graph – Faceting with Geta Categories

Overview As Optimizely Graph (and Content Cloud SaaS) makes its global debut, it is known that there are going to be some bugs and quirks. One of t...

Eric Markson | Jul 22, 2024 | Syndicated blog

Integration Bynder (DAM) with Optimizely

Bynder is a comprehensive digital asset management (DAM) platform that enables businesses to efficiently manage, store, organize, and share their...

Sanjay Kumar | Jul 22, 2024

Frontend Hosting for SaaS CMS Solutions

Introduction Now that CMS SaaS Core has gone into general availability, it is a good time to start discussing where to host the head. SaaS Core is...

Minesh Shah (Netcel) | Jul 20, 2024

Optimizely London Dev Meetup 11th July 2024

On 11th July 2024 in London Niteco and Netcel along with Optimizely ran the London Developer meetup. There was an great agenda of talks that we put...

Scott Reed | Jul 19, 2024