bpedwards
Nov 18, 2008
visibility 5597
star star star star star
(0 votes)

PropertyVPPDirectorySelector

After noticing that the Folder Browser Property had been release on EPiCode. I though I would share my alternative property type for rendering the list in a drop down menu, that I initially developed when CMS 5 was released.

Custom property:

public class PropertyVPPDirectorySelector : PropertyString
{
    #region Methods
    public override IPropertyControl CreatePropertyControl()
    {
    return new PropertyVPPDirectorySelectorControl();
    }
    #endregion
}

Property control:

The code below reflect amendments I made after the release of R2. R2 brought with it VPP entries for ‘Themes’, ‘UI’, ‘Util’ and ‘WebServices’ so I amended the control to only display those VPPs marked to show in the File Manager by default. setting ‘DisplayAll’ to true will return all VPP entries from the web.config. settings ‘DisplayPageFolders’ to true will include the page folders VPP as this is set to not display in the File Manager by default

public class PropertyVPPDirectorySelectorControl : PropertySelectControlBase
{
    #region Member Variables
    private List<VirtualDirectory> _directories;
    #endregion

    #region Properties
    public List<VirtualDirectory> Directories
    {
        get
        {
            if (_directories == null)
            {
                _directories = new List<VirtualDirectory>();

                VirtualPathElement element = 
EPiServerSection.Instance.VirtualPathSettings; foreach (ProviderSettings provider in element.Providers) { bool visible = false; if (provider.Name.Equals(
Settings.Instance.PageFolderVirtualPathProviderName, StringComparison.InvariantCultureIgnoreCase)) { visible = DisplayPageFolders; } else { if (DisplayAll) { visible = true; } else { bool.TryParse(
provider.Parameters["showInFileManager"],
out visible); } } if (visible) { string path = provider.Parameters["virtualPath"]; VirtualDirectory directory =
HostingEnvironment.VirtualPathProvider.GetDirectory(path); GetDirectories(_directories, directory); } } _directories.Sort(delegate(VirtualDirectory v1,
VirtualDirectory v2) {
return v1.VirtualPath.CompareTo(v2.VirtualPath); }); } return _directories; } } public bool DisplayAll { get; set; } public bool DisplayPageFolders { get; set; } #endregion #region Constructors public PropertyVPPDirectorySelectorControl() { DisplayAll = false; DisplayPageFolders = false; } public PropertyVPPDirectorySelectorControl(bool displayPageFolders) { DisplayAll = false; DisplayPageFolders = displayPageFolders; } public PropertyVPPDirectorySelectorControl(bool displayAll,
bool displayPageFolders) { DisplayAll = displayAll; DisplayPageFolders = displayPageFolders; } #endregion #region Methods protected void GetDirectories(List<VirtualDirectory> directories,
VirtualDirectory directory) { if (!directories.Contains(directory)) { directories.Add(directory); foreach (VirtualDirectory subdirectory in directory.Directories) { GetDirectories(directories, subdirectory); } } } protected override void SetupEditControls() { DropDownList dropDownListDirectories = EditControl; dropDownListDirectories.Items.Add(string.Empty); foreach (VirtualDirectory directory in Directories) { dropDownListDirectories.Items.Add(directory.VirtualPath); } if (PropertyData != null && !PropertyData.IsNull) { try { dropDownListDirectories.SelectedValue = dropDownListDirectories.Items.FindByValue(
PropertyData.Value.ToString()).Value; }
            catch { /* Do nothing */ }
        }
    }
    #endregion
}
Nov 18, 2008

Comments

Sep 21, 2010 10:32 AM

Nice one Ben. This was just what I was looking for. Skills

error Please login to comment.
Latest blogs
Parallel Development in Optimizely CMS SaaS: Shifting to a Schema Migration Mindset

  Part 3 of the Parallel Development series. The branch-scoped push script from Part 1 works. Run it on a feature branch where you've touched a...

Vipin Banka | Jul 25, 2026

From AI Agents to AI Workflow with Opal

Introduction In the first article in this series , we talked about AI agents in Optimizely Opal and walked through the process of creating a...

Igor Safonov | Jul 23, 2026

Building Your First Optimizely Opal AI Agent: a Hands-On Walkthrough

Introduction There's a common assumption that building an AI agent is something only engineers or developers can do. It isn't. At the Optimizely AN...

Igor Safonov | Jul 23, 2026

Advanced Task Manager Gets a Big Update

One of the things I keep coming back to with Optimizely's content approval workflow is that it's solid at the individual level - you know a piece o...

Adnan Zameer | Jul 21, 2026 |