bpedwards
Nov 18, 2008
  5525
(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

Please login to comment.
Latest blogs
Creating an admin tool - unused assets

Let's make an admin tool to clean unused assets and see how to extend your favorite CMS with custom tools and menues! We will build a tool step by...

Daniel Ovaska | Apr 15, 2026

Running Optimizely CMS on .NET 11 Preview

Learn how to run Optimizely CMS on the .NET 11 preview with a single-line change. Explore performance gains, PGO improvements, and future-proofing...

Stuart | Apr 15, 2026 |

Your Optimizely Opal Is Probably Burning Carbon It Doesn't Need To

Four patterns Optimizely practitioners could be getting wrong with Opal agents: inference levels, oversized tool responses, missing output...

Andy Blyth | Apr 15, 2026 |

Optimizely CMS 13: A Strategic Reset for Content, AI, and Composable Marketing

Optimizely CMS 13 is not just another version upgrade—it represents a deliberate shift toward a connected, AI-enabled, and API-driven content...

Augusto Davalos | Apr 14, 2026

The 74% Problem: Why Most Companies Are Getting AI Wrong

I’ve seen this before… The pattern. The rush, the excitement, the scramble to adopt something new before anyone has stopped to ask what problem it...

Mark Welland | Apr 14, 2026

Scheduled jobs with parameters

Scheduled jobs is an integral part of most Optimizely solution but the UI has, in my opinon, always been lacking in usability and features. Earlier...

Per Nergård (MVP) | Apr 14, 2026