A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More

bpedwards
Nov 18, 2008
  5433
(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
Beginner's Guide for Optimizely Backend Developers

Developing with Optimizely (formerly Episerver) requires more than just technical know‑how. It’s about respecting the editor’s perspective, ensurin...

MilosR | Dec 10, 2025

Optimizely PaaS Administrator Certification : Free for Everyone

Optimizely has recently launched a free PaaS Administrator Certification. https://academy.optimizely.com/student/activity/2958208-paas-cms-administ...

Madhu | Dec 9, 2025 |

Fixing TinyMCE Initialization Failures in Optimizely CMS: A Hidden Pipeline Issue with .NET SDK Versions

Over the past few weeks, several Optimizely CMS projects began experiencing a puzzling failure: XHtmlString fields stopped initializing TinyMCE in...

Francisco Quintanilla | Dec 9, 2025 |

Jhoose Security Modules v2.6.0 — Added support for Permissions Policy and .NET 10

Version 2.6.0 adds Permissions Policy header support, updates to .NET 10, improved policy management, configurable security settings, and enhanced...

Andrew Markham | Dec 6, 2025 |

Building a 360° Customer Profile With AI: How Opal + Optimizely Unlock Predictive Personalization

Creating truly relevant customer experiences requires more than collecting data—it requires understanding it. Most organizations already have rich...

Sujit Senapati | Dec 4, 2025

Building a Lightweight Optimizely SaaS CMS Solution with 11ty

Modern web development often requires striking a difficult balance between site performance and the flexibility needed by content editors. To addre...

Minesh Shah (Netcel) | Dec 3, 2025