Skip to main content

Sitefinity - Custom Image selector - Azure Player Dynamic Image selector.

Well,

I am writing this post after a really long gap of time, I was away from my blog due to some personal reason and aggressive deadlines for my project, so today I thought of writing a blog about my experience with sitefinity, (http://www.sitefinity.com/) which is Content Management System aka CMS from a very famous IT firm Telerik.

The CMS is purely on HTML and has its own pros and cons, it doesn't have any custom widgets available and you have to design most of them.

So while developing my client website for it I found issues about the CMS shortcoming and lack of documentation, basically lack of documentation is the major problem with this CMS.

So we had a requirement, we need to show the AES encrypted adaptive bit rate video to the user, we were using azure services for this, but the major requirement is that we were using a CMS and we need to make everything dynamic i.e. Business User editable and a drag and drop widget, which includes:
  1. Video URL.
  2. Video Title.
  3. Video Description.
  4. Video Poster Image.
The top three are easily doable and we did it in a record week time including testing, but the last point  almost took our life away from us.

So below is a what we did, have a look at it and it may help you to create a custom image selector as well.
Enjoy.

Public properties in our .cs file:

              public string Title { get; set; }
              public string VideoURL { get; set; }
              public string Description { get; set; }
              public string ImageSelector { get; set; }


CS code in our Designer File for implementation:

/// <summary>
        /// Gets a collection of script descriptors that represent ECMAScript (JavaScript) client components.
        /// </summary>
        public override System.Collections.Generic.IEnumerable<System.Web.UI.ScriptDescriptor> GetScriptDescriptors()
        {
            var scriptDescriptors = new List<ScriptDescriptor>(base.GetScriptDescriptors());
            var descriptor = (ScriptControlDescriptor)scriptDescriptors.Last();
            descriptor.AddElementProperty("title", Title.ClientID);
            descriptor.AddElementProperty("description", Description.ClientID);
            descriptor.AddElementProperty("videoURL", VideoURL.ClientID);
            descriptor.AddComponentProperty("ImageSelector", ImageSelector.ClientID);
            return scriptDescriptors;
        }


ASCX Code for our Designer (widget) image selector:

        <li class="sfFormCtrl">
            <asp:Label runat="server" AssociatedControlID="ImageSelector" CssClass="sfTxtLbl">Poster</asp:Label>
            <sitefinity:ImageField ID="ImageSelector" runat="server" DisplayMode="Write" UploadMode="Dialog" DataFieldName="Image" />
            <div class="sfExample">Poster Image URL of video</div>
        </li>

JS Code for our Designer file:

Add this line of code in initialization block created in widget:
       this._ImageSelector = null;

Add this line of code in refresh UI block:
this.get_ImageSelector()._imageElement.src = controlData.ImageSelector;

Add this line of code in apply changes block:
              controlData.ImageSelector = this.get_ImageSelector()._selectedImageItem ? this.get_ImageSelector()._selectedImageItem.Url : controlData.ImageSelector;

And the following changes at last part of JS below changes.

       /*ImageSelector Properties*/
       get_ImageSelector: function () { return this._ImageSelector; },
       set_ImageSelector: function (value) { this._ImageSelector = value; },


Enjoy the dynamic Image selector like below:
























I will also write next about how to consume the URLS in it in front end using the JS and .Net capabilities.


Thanks
Harshit aka parshii


Comments

Popular posts from this blog

Convert your datatable into generic poco object in c# using linq, ado and reflections.

Follow @harshit_parshii The most common problem that we face these days is to create a common class and method that can be used across all the projects and codes. So today I will be sharing my code where you can see how to make and create a generic function without using entity framework for ado. net. The scenario is like you have an old software that uses stored procedure to return set of entities as a data-table, you do not want to re-write the back-end code as you are creating a web API in c# which needs to be delivered asap. You need to map these data tables to models as you might be using MV* pattern. So here we will be doing one to one mapping of model to data- table, and in similar fashion insert or update can also be done. So basically we are converting a data-table to list of strongly typed object model to do CRUD operations. So we have following things before hand. A helper class is referenced as the database(dbFactory) which executes ado. ne...

With new experiences comes great responsibility

Hello Everyone, I am an ordinary person with some highly looked after skills, not boasting about myself. But after coding in this IT industry for almost 5 years for the first time I am thinking:- Is delivering the code my only responsibility or is there anything else I need to look into as well? From last few month's I was highly involved in some entirely new domain which is financial, and when you play with the number you need to be highly focused, so unable to update my blog as well. When I was working on the urgent deadlines and tight estimates and being from a healthy UI background like css3, html5, responsive design, knockout js, less etc. I was put on the SQL server and asp.net with grid views and some freaked out Telerik controls. I know it's a learning for me and I can see why UX matters to every person in this entire world but not UI and you can write it on stamp paper. User Experience, with logical and functionally correct code, is the need of the hour to...

Run CSS specific to Internet Explorer - Browser Hack

Run CSS specific to Internet Explorer - Browser Hack Referencing to the following blog post, we are going to make CSS targeting exclusively to IE browser, to make it work first we should know what are media queries. A media query consists of a media type and at least one expression that limits the style sheets' scope by using media features, such as width, height, and color. Media queries, added in CSS3, let the presentation of content be tailored to a specific range of output devices without having to change the content itself. For Ex: < style > @media (max-width : 600px) { .facet_sidebar { display : none ; } } So below we will wrap the IE specific CSS rules in @media blocks and trick IE into rendering @media blocks that use media queries. Targeting only IE browsers Style rules defined in the following blocks will only be applied in IE, other browsers will ignore them. IE 6 and 7  @media screen\9 {     body { background: red; ...