7.0 Two dynamic modules, related data, depending dropdowns s

Posted by Community Admin on 04-Aug-2018 10:02

7.0 Two dynamic modules, related data, depending dropdowns solution

All Replies

Posted by Community Admin on 26-Jun-2014 00:00

Hi all
I want to share something Atanas helped me with achieving. I hope this could help someone someday somewhere :-)

Here is the video that shows best what I wanted to achieve: www.marktold.com/screencast/sf_related_data_solution.swf

I wanted two modules

Module 1 would give categories (hauptkategorie)  and subcategories (unterkateforie)
Module 2 would use 1:n subcategories

In my module I wanted 

Dropdown 1 to display categories (hauptkategorie) and on change 
Dropdown 2 would display the corresponding subcategories (unterkategorie)

Dropdown 2 onSelectedIndexChange would pull the corresponding stuff from Module 2.

Here is what seems to work for me :

my ascx part:

 

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="panoramas_gallery.ascx.cs" Inherits="SitefinityWebApp.Controls.panoramas_gallery" %>
<%@ Register Assembly="Telerik.Sitefinity.ContentModules" Namespace="Telerik.Sitefinity.Modules.News.Web.UI" TagPrefix="sf" %>
<%@ Register TagPrefix="sf" Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.PublicControls" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.ContentUI" TagPrefix="sf" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.RelatedData" TagPrefix="sf" %>
 
 
<sf:sitefinityupdatepanel id="SUP" runat="server"><ContentTemplate>
    <telerik:RadComboBox ID="RadComboBox1" runat="server" AutoPostBack="True" DataTextField="Hauptkategorie" DataValueField="Hauptkategorie" OnDataBound="RadComboBox1_DataBound" OnSelectedIndexChanged="RadComboBox1_SelectedIndexChanged"
        Skin="MetroTouch" Width="250">
    </telerik:RadComboBox>
    <div>
        <telerik:RadComboBox ID="RadComboBox2" runat="server" AutoPostBack="True" DataTextField="Unterkategorie" DataValueField="ID" OnDataBound="RadComboBox2_DataBound" OnSelectedIndexChanged="RadComboBox2_SelectedIndexChanged"
            Skin="MetroTouch" Width="250px">
        </telerik:RadComboBox>
        <br />
        <br />
    </div>
    <asp:Label ID="Label1" runat="server" Text="Grid is comming" Visible="False"></asp:Label>
    <div class="pano_gallery">
        <asp:Repeater ID="Repeater1" runat="server" Visible="false">
            <ItemTemplate>
                <div class="sf_2cols_2_50" style="height: 140px;">
                    <div class="pano_title">
                        <h3>
                        <a href="http://www.marktold.ch/panoramas/galerie/html5/output/<;%# Eval("HMTL5") %>" target="_blank">
                            <%# Eval("Title") %>,
                            <%# Eval("Ort") %></h3>
                            </a>
                    </div>
                    <div class="pano_tech">
                            <a href="http://www.marktold.ch/panoramas/galerie/html5/output/<;%# Eval("HMTL5") %>" target="_blank">
                          Panorama laden</a>
                    </div>
                   
                </div>
                <div class="sf_2cols_1_50" style="height: 140px;">
                    <asp:Repeater ID="Repeater2" runat="server" DataSource='<%# Container.DataItem.GetRelatedItems("PanoramaThumb") %>'>
                        <ItemTemplate>
                              
                            <img height="125" src="<%# Eval("ThumbnailUrl")%>" alt="<%# Eval("AlternativeText")%>" id="<%# Eval("Id") %>" title="<%# Eval("Title") %>">
                            
                        </ItemTemplate>
                    </asp:Repeater>
                </div>
            </ItemTemplate>
            
        </asp:Repeater>
 
      
        
    </div>
    </ContentTemplate>
</sf:sitefinityupdatepanel>

And the codebehind (sorry -> not cleaned up yet)

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Sitefinity;
using Telerik.Sitefinity.Model;
using Telerik.Sitefinity.DynamicModules;
using Telerik.Sitefinity.Data.Linq.Dynamic;
using Telerik.Sitefinity.DynamicModules.Model;
using Telerik.Sitefinity.GenericContent.Model;
using Telerik.Sitefinity.Modules.Libraries;
using Telerik.Sitefinity.Utilities.TypeConverters;
using Telerik.Sitefinity.Security;
using Telerik.Sitefinity.Lifecycle;
using System.Globalization;
using System.Threading;
using Telerik.Web.UI;
using Telerik.OpenAccess;
using Telerik.Sitefinity.RelatedData;
using System.Collections;
using Telerik.Sitefinity.Model.ContentLinks;
using Telerik.Sitefinity.DynamicTypes;
using Telerik.Sitefinity.RecurrentRules;
using Telerik.Sitefinity.Libraries.Model;
using Telerik.Sitefinity.Utilities.TypeConverters;
using Telerik.Sitefinity.RelatedData;
using Telerik.Sitefinity.Pages.Model;
using Telerik.Sitefinity.Web.UI.ControlDesign;
 
namespace SitefinityWebApp.Controls
    public partial class panoramas_gallery : System.Web.UI.UserControl
    
        protected void Page_Load(object sender, EventArgs e)
        
            if (!IsPostBack)
            
                RadComboBox2.Visible = false;
                RadComboBox1.DataSource = RetrieveCollectionOfHauptkategories();
                RadComboBox1.DataBind();
            
 
               
         
   
 
 
        public IQueryable<DynamicContent> RetrieveCollectionOfHauptkategories()
        
            // Set the provider name for the DynamicModuleManager here. All available providers are listed in
            // Administration -> Settings -> Advanced -> DynamicModules -> Providers
            var providerName = String.Empty;
            DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager(providerName);
            Type hauptkategorieType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.PanorambilderNavigation.Hauptkategorie");
           
            // This is how we get the collection of Hauptkategorie items
            var myCollection = dynamicModuleManager.GetDataItems(hauptkategorieType).Where(item => item.Status == ContentLifecycleStatus.Live).OrderBy(i => i.FieldValue<string>("Hauptkategorie"));
            // At this point myCollection contains the items from type hauptkategorieType
            return myCollection;
        
 
        public List<DynamicContent> RetrieveCollectionOfUnterkategories()
        
            var hauptkat = RadComboBox1.SelectedValue;
            // Set the provider name for the DynamicModuleManager here. All available providers are listed in
            // Administration -> Settings -> Advanced -> DynamicModules -> Providers
            var providerName = String.Empty;
            DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager(providerName);
            Type unterkategoireType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.PanorambilderNavigation.Unterkategoire");
            Type hauptkategorieType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.PanorambilderNavigation.Hauptkategorie");
            var parentitem = dynamicModuleManager.GetDataItems(hauptkategorieType).Where(item => item.Status == ContentLifecycleStatus.Live && item.UrlName == hauptkat).FirstOrDefault();
            // This is how we get the collection of Unterkategorie items
 
            var myCollection = dynamicModuleManager.GetChildItemsHierarchy(parentitem).OrderBy(i => i.FieldValue<string>("Unterkategorie")).ToList();
            //var myCollection = dynamicModuleManager.GetDataItems(unterkategoireType).Where(item => item.Status == ContentLifecycleStatus.Live && item.SystemParentItem);
            // At this point myCollection contains the items from type unterkategoireType
            
            return myCollection;
             
        
 
        protected void RadComboBox1_SelectedIndexChanged(object sender, Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs e)
        
            RadComboBox2.Visible = true;
           RadComboBox2.DataSource = RetrieveCollectionOfUnterkategories();
            RadComboBox2.DataBind();
            Repeater1.Visible = false;
        
 
        protected void RadComboBox2_SelectedIndexChanged(object sender, Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs e)
        
            var hauptkat = RadComboBox1.SelectedValue;
            hauptkat = hauptkat.Replace(" ", "-");
 
            var unterkat = RadComboBox2.SelectedValue;
            unterkat = unterkat.Replace(" ", "-");
 
            var providerName = String.Empty;
            Type hauptkategorieType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.PanorambilderNavigation.Hauptkategorie");
            Type unterkategoireType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.PanorambilderNavigation.Unterkategoire");
            Type panorama = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Panoramabilder.Panorama");
 
            DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager(providerName);
 
          var myCollection = dynamicModuleManager.GetDataItems(hauptkategorieType).Where(i => i.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Master && i.UrlName == hauptkat).FirstOrDefault();
                       
                        
            DynamicContent item = dynamicModuleManager.GetDataItems(unterkategoireType).Where(i => i.Status == ContentLifecycleStatus.Live && i.Id.ToString()  == unterkat && i.SystemParentId == myCollection.Id).FirstOrDefault();
            var relatedParents = RelatedDataExtensions.GetRelatedParentItems(item, "Telerik.Sitefinity.DynamicTypes.Model.Panoramabilder.Panorama").ToList();
            Repeater1.Visible = true;
            Repeater1.DataSource = relatedParents;
            Repeater1.DataBind();
        
      
 
        protected void RadComboBox1_DataBound(object sender, EventArgs e)
        
            RadComboBox1.Items.Insert(0, new RadComboBoxItem("Wählen Sie ein Thema", string.Empty));
        
 
        protected void RadComboBox2_DataBound(object sender, EventArgs e)
        
            RadComboBox2.Items.Insert(0, new RadComboBoxItem("Wählen Sie ein Unterthema", string.Empty));
        
 
 
      
        protected string GetFlashUrl(object item)
        
            var FlashURL = string.Empty;
 
            var FlashFile = item.GetRelatedItems<MediaContent>("Flash").FirstOrDefault();
            if (FlashFile != null)
            
                FlashURL = FlashFile.Url.ToString();
             
            
      
            return FlashURL;
        
 
        protected string GetQtUrl(object item)
        
            var QtURL = string.Empty;
 
            var QtFile = item.GetRelatedItems<MediaContent>("QuicktimeFile").FirstOrDefault();
            if (QtFile != null)
            
                QtURL = QtFile.AutoGenerateUniqueUrl.ToString();
 
            
 
                       
            return QtURL;
        
 
        protected string GetJPGUrl(object item)
        
            var JpgURL = string.Empty;
 
            var JpgFile = item.GetRelatedItems<MediaContent>("JPG").FirstOrDefault();
            if (JpgFile != null)
            
                JpgURL =JpgFile.ItemDefaultUrl.ToString();
 
            
 
                       
            return JpgURL;
        
    

Markus

Posted by Community Admin on 27-Jun-2014 00:00

Hello Markus,

Thank you for sharing the solution with the community. As a token of appreciation I have increased your Telerik points accordingly.

Regards,
Pavel Benov
Telerik

 
Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Sitefinity CMS Ideas&Feedback Portal and vote to affect the priority of the items
 

This thread is closed