How to cherrypick Page Templates to show the user - Front- & Back-End Development - Front- & Back-End Development - Progress Community
 Front- & Back-End Development

How to cherrypick Page Templates to show the user

  • How to cherrypick Page Templates to show the user
  • So you have the doc to limit the "Types" of templates to show the user by overriding the TemplateSelectorDialog.

    But from there how can I add rules for the templates themselves outside of rebuilding this whole control?... I've tried finding the control and tweaking it's datasource, but looks like from the source it's not possible?


    protected override void InitializeControls(Telerik.Sitefinity.Web.UI.GenericContainer container)
        this.TaxonomiesRepeater.DataBinding += TaxonomiesRepeater_DataBinding;
        this.TaxonomiesRepeater.ItemDataBound += TaxonomiesRepeater_ItemDataBound;
    private void TaxonomiesRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
        //Repeater for each Type, ex, Bootstrap, Foundation
        var item = ((System.Web.UI.WebControls.RepeaterItem)e.Item);
        var dataItem = item.DataItem as HierarchicalTaxon;
        var templateRepeater = item.FindControl("templatesRepeater") as Repeater;
        var datasource = templateRepeater.DataSource as List<PageTemplate>;
        templateRepeater.DataSource = datasource.Where(x => x.Name == "Medportal.Medportal.MVC.Core");
  • Ah nm, got it... can hook into PreRender

    this.TaxonomiesRepeater.PreRender += TaxonomiesRepeater_PreRender;

  • You know what, nm... issue back on the table.  While they stop showing up, there's now a script error that prevents items from being clickable.



    The only way this works is on the client, have to find the wrapper <li> and display:none it.  This sample is a little overblown as I wired up a config element to allow me to dynamically secure the list.

    private void TaxonomiesRepeater_PreRender(object sender, EventArgs e)
        var templates = Util.MpConfig.PageTemplates;
        var repeater = sender as Repeater;
        foreach (RepeaterItem typeRepeater in repeater.Items)
            var templatesRepeater = typeRepeater.FindControl("templatesRepeater") as Repeater;
            // The items are not "Databound"
            foreach (RepeaterItem template in templatesRepeater.Items)
                var wrapper = template.FindControl("templItem") as HtmlControl;
                var title = ((SitefinityLabel)template.FindControl("templateName")).Text;
                var match = templates[title];
                if (match == null)
                    //No match, no show
                    //template.Visible = false;
                    wrapper.Attributes.Add("style", "display: none");
                    //Found the match, check permissions
                    if (match.IsAdminTemplate)
                        var currentProfile = Util.GetCurrentProfile();
                        //Hide if the user is not an admin
                        if (!currentProfile.IsSysAdmin)
                            //template.Visible = true;
                            wrapper.Attributes.Add("style", "display: none");
                            //Okay we are a sys admin, but are you one of the allowed sysadmins?
                            if (!match.AdminsAllowedToView.ToLower().Contains(currentProfile.UserName.ToLower()))
                                //You are NOT in this list
                                //template.Visible = false;
                                wrapper.Attributes.Add("style", "display: none");
                        //Do nothing, just show it