Don't miss out Virtual Happy Hour this Friday (April 26).

Try our conversational search powered by Generative AI!

Anders Hattestad
Sep 3, 2010
  8047
(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
Solving the mystery of high memory usage

Sometimes, my work is easy, the problem could be resolved with one look (when I’m lucky enough to look at where it needs to be looked, just like th...

Quan Mai | Apr 22, 2024 | Syndicated blog

Search & Navigation reporting improvements

From version 16.1.0 there are some updates on the statistics pages: Add pagination to search phrase list Allows choosing a custom date range to get...

Phong | Apr 22, 2024

Optimizely and the never-ending story of the missing globe!

I've worked with Optimizely CMS for 14 years, and there are two things I'm obsessed with: Link validation and the globe that keeps disappearing on...

Tomas Hensrud Gulla | Apr 18, 2024 | Syndicated blog

Visitor Groups Usage Report For Optimizely CMS 12

This add-on offers detailed information on how visitor groups are used and how effective they are within Optimizely CMS. Editors can monitor and...

Adnan Zameer | Apr 18, 2024 | Syndicated blog