Media Control
Please note that this code is taken directly from Microsoft's website: http://msdn2.microsoft.com/en-us/library/aa981226.aspx I modified the render output for streaming and cross-browser compatibility
The Media Class File should look something like this:
using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Microsoft.SharePoint; using Microsoft.SharePoint.Utilities; using Microsoft.SharePoint.WebControls; using Microsoft.SharePoint.Publishing.WebControls; using Microsoft.SharePoint.Publishing.Fields; namespace VZ.Controls.CustomFieldControls /// A Field control that binds to fields of type LinkField and is /// specialized to select and render embedded media files. /// The RenderFieldForDisplay function generates the HTML markup to /// display the media file. The MediaSelector control is /// used at edit time to allow authors to select a media file in /// the Asset Picker dialog box. { public { private public MediaPlayerFieldControl() { } /// Gets and sets the value in the edit controls public { get { LinkFieldValue mediaUrlValue = new mediaUrlValue.NavigateUrl = this.mediaSelector.MediaUrl; mediaUrlValue.Text = LinkFieldValue.GetDefaultDisplayText(mediaUrlValue.NavigateUrl); return mediaUrlValue; } set { LinkFieldValue mediaLinkFieldValue = value if (null != mediaLinkFieldValue) { this.mediaSelector.MediaUrl = mediaLinkFieldValue.NavigateUrl; } else { this.mediaSelector.MediaUrl = String.Empty; } } } /// Get the default name used to find the template and /// control for the MediaPlayerSelector in the control /// template ASCX files. protected { get { return } private /// A flag that determines whether to allow saving of external /// media URLs. public { get { // Return true by default if not already in view state. if (ViewState[AllowExternalUrlsViewStateKey] == null) { return } return (bool)ViewState[AllowExternalUrlsViewStateKey]; } set { ViewState[AllowExternalUrlsViewStateKey] = value; } } /// Creates the edit control when not in display mode. protected { base.CreateChildControls(); if (this.ControlMode != SPControlMode.Display) { MediaSelector mediaSelectorInTemplate = this.TemplateContainer.FindControl(this.TemplateName) as if (null == mediaSelectorInTemplate) { // No media selector was found in the control // template ASCX files. Add the default selector. this.Controls.Add(this.mediaSelector); } else { // Get the media selector from the control // template ASCX file. mediaSelectorInTemplate.MediaUrl = this.mediaSelector.MediaUrl; this.mediaSelector = mediaSelectorInTemplate; } } } /// Gets the current value for the media URL as stored /// in the list item. private { get { LinkFieldValue currentLinkValue = this.ItemFieldValue as if (null != currentLinkValue) { return currentLinkValue.NavigateUrl; } else { return } } } /// Renders the current list item value for the media URL /// with embedded media player markup. /// protected RenderFieldForDisplay(System.Web.UI.HtmlTextWriter output) { if (!String.IsNullOrEmpty(this.itemFieldValueMediaUrl)) { output.Write(MediaRenderingUtilities.GetMediaPlayerHtmlMarkup(this.itemFieldValueMediaUrl)); } } /// Verifies that the MediaUrl is valid. public { base.Validate(); if (this.IsValid) { LinkFieldValue currentMediaUrlValue = this.Value as if (currentMediaUrlValue == null || String.IsNullOrEmpty(currentMediaUrlValue.NavigateUrl)) { // Ensure the field is not required. if (this.Field != null && this.Field.Required) { this.IsValid = false; this.ErrorMessage = "This field is required and must contain a media file URL."; return; } else { // The field is empty and not required. // The data is valid. return; } } // Perform validation on the media file URL. HtmlValidationContext validationContext = new if (!this.AllowExternalUrls) { // Restrict URLs to be either from the current site // collection or server-relative. validationContext.RestrictUrlsToSiteCollection = true; validationContext.GuidOfThisSiteCollection = SPContext.Current.Site.ID; } bool droppedTags; bool droppedUrls; LinkFieldValue validatedValue = validationContext.ValidateLinkValue( currentMediaUrlValue, out droppedTags, out droppedUrls); if (droppedUrls || String.IsNullOrEmpty(validatedValue.NavigateUrl)) { // The media file URL in the link field value was // not valid so report the error message. // Setting IsValid to false stops saving the page. this.IsValid = false; this.ErrorMessage = "The URL for the media file was invalid."; if (!this.AllowExternalUrls) { this.ErrorMessage += " You must select a URL within the current site collection."; } } } } } /// This edit control for the MediaPlayerFieldControl has /// a toolbar and text box for selecting a media file URL. /// This example intentionally uses a separate toolbar button /// and text box for the AssetUrlSelctor to show a more complex /// example. You can use an AssetUrlSelector control instead of /// a TextBox child control, which displays its own browse button. public { private public MediaSelector() { } /// This is the media URL value that you can edit in the text /// box or Asset Picker dialog box. public { get { return set { this.mediaUrlTextBox.Text = value; } } protected { base.OnInit(e); // This ensures that the TextBox child control receives // its postback. EnsureChildControls(); } /// Gets JavaScript required to launch an Asset Picker dialog /// box for choosing a media file URL. private { AssetUrlSelector mediaAssetSelector = new // When the AssetUrlSelector control is not added to the // page control tree, the Page and ID properties are // required because // AssetUrlSelector.GetClientLaunchPickerReference() // needs register script in the page. mediaAssetSelector.Page = this.Page; mediaAssetSelector.ID = "MediaUrlAssetSelector"; // Uses the TextBox client ID to connect the Asset Picker // dialog box to the text box. mediaAssetSelector.AssetUrlClientID = this.mediaUrlTextBox.ClientID; // Autopostback to see the new media file rendered after // clicking OK on the Asset Picker dialog box. mediaAssetSelector.AutoPostBack = true; mediaAssetSelector.OverrideDialogTitle = "Select a media file"; mediaAssetSelector.OverrideDialogDescription = "Select a media file to embed in this page"; mediaAssetSelector.UseImageAssetPicker = false; return mediaAssetSelector.GetClientLaunchPickerReference(); } private protected { SimpleToolbar mediaSelectorToolbar = new mediaSelectorToolbar.ID = "ToolBar"; this.Controls.Add(mediaSelectorToolbar); Label mediaUrlLabel = new mediaUrlLabel.Text = "Selected media file URL: "; mediaUrlLabel.AssociatedControlID = "MediaUrlTextBox"; this.Controls.Add(mediaUrlLabel); this.mediaUrlTextBox.ID = "MediaUrlTextBox"; this.mediaUrlTextBox.CssClass = "ms-input ms-lactiontable sample-mediaselector-urltextbox"; this.Controls.Add(this.mediaUrlTextBox); // Add the button after the rest so that the text box // ClientID is already determined and can be connected // in the Asset Picker dialog box client script. mediaSelectorToolbar.AddToolbarButton( "SelectMediaFile", "Select a media file", this.GetAssetPickerButtonScript(), "Open a picker to select a media file URL"); // Add a refresh button to perform a basic postback to // to update the MediaUrl rendering. mediaSelectorToolbar.AddToolbarButton( "RefreshMediaFile", "Refresh", this.Page.ClientScript.GetPostBackEventReference(this, String.Empty), "Refresh the page to reload the current media file URL", "/_layouts/IMAGES/refresh.gif"); // If there is a media file URL, this code creates // the media player markup. this.Controls.Add(this.mediaPlayerOutput); } protected { string mediaFileOutputHtml = MediaRenderingUtilities.GetMediaPlayerHtmlMarkup(this.MediaUrl); if (String.IsNullOrEmpty(mediaFileOutputHtml)) { this.mediaPlayerOutput.Text = "<BR>{There is no valid media file URL to display}<BR>"; } else { this.mediaPlayerOutput.Text = "<BR>" + mediaFileOutputHtml + "<BR>"; } base.OnPreRender(e); } } /// A simple toolbar class that matches the styles of the /// publishing field control toolbars. public { public SimpleToolbar() { this.HeaderHtml = "<div class=\"ms-toolbarContainer\" width=\"100%\">"; this.FooterHtml = "</div>"; this.SeparatorHtml = ""; } public string buttonId, string buttonText, string clientOnClick, string tooltipText) { Literal buttonMarkupLiteral = new buttonMarkupLiteral.Text = String.Format( SimpleToolbarButtonHtmlFormat, SPHttpUtility.HtmlEncode(buttonText), SPHttpUtility.HtmlEncode(clientOnClick), SPHttpUtility.HtmlEncode(tooltipText)); buttonMarkupLiteral.ID = buttonId; this.Controls.Add(buttonMarkupLiteral); } public string buttonId, string buttonText, string clientOnClick, string tooltipText, string buttonImageSrc) { Literal buttonMarkupLiteral = new buttonMarkupLiteral.Text = String.Format( SimpleToolbarButtonImageHtmlFormat, SPHttpUtility.HtmlEncode(buttonText), SPHttpUtility.HtmlEncode(clientOnClick), SPHttpUtility.HtmlEncode(tooltipText), SPHttpUtility.HtmlUrlAttributeEncode(buttonImageSrc)); buttonMarkupLiteral.ID = buttonId; this.Controls.Add(buttonMarkupLiteral); } // {0} = Button text // {1} = onclick script // {2} = Tooltip text private <DIV class=""ms-toolbarItem ms-selectorlink""> <A href=""#"" onclick=""{1}"" title=""{2}""> {0}</A> </DIV>"; // {0} = Button text // {1} = onclick script // {2} = Tooltip text // {3} = Button image markup private <DIV class=""ms-toolbarItem ms-selectorlink""> <A href=""#"" onclick=""{1}"" title=""{2}""> <IMG alt=""{2}"" src=""{3}"" border=""0"">{0}</A> </DIV>"; } public { /// Take a media file URL and generate HTML markup /// for playing the file. /// public { // HtmlUrlAttributeEncode returns an empty string if the // URL protocol is not allowed (e.g., JavaScript:) string encodedUrl = SPHttpUtility.HtmlUrlAttributeEncode(mediaUrl); if (String.IsNullOrEmpty(encodedUrl)) { return } else { return } } // Currently, this code includes only a parameter for the media // file URL, but it could also include parameters for the // width, height, and other rendering properties from field // control properties or authored data value properties. private @"<object id=""MediaPlayer"" width=400 height=300 classid=""CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95"" standby=""Loading Windows Media Player components..."" type=""application/x-oleobject"" codebase=""http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,7,1112""> <param name=""filename"" value=""{0}""> <param name=""Showcontrols"" value=""True""> <param name=""autoStart"" value=""True""> <embed type=""application/x-mplayer2"" src=""{0}"" name=""MediaPlayer"" width=400 height=300></embed> </object>";} } |
Flash Control
I took the liberty to slightly modify the Media Control "mainly HTML markup" to Support Flash
using System; using Microsoft.SharePoint; namespace VZ.Controls.CustomFieldControls /// A Field control that binds to fields of type LinkField and is public FlashFieldControl() /// Gets and sets the value in the edit controls return flashUrlValue; /// Get the default name used to find the template and private const string AllowExternalUrlsViewStateKey = "AllowExternalUrls"; /// Creates the edit control when not in display mode. base.CreateChildControls(); if (this.ControlMode != SPControlMode.Display) if (null == flashSelectorInTemplate) /// Gets the current value for the flash URL as stored /// Renders the current list item value for the flash URL /// Verifies that the FlashUrl is valid. if (currentFlashUrlValue == // Perform validation on the flash file URL. if (!this.AllowExternalUrls) bool droppedTags; if (droppedUrls || String.IsNullOrEmpty(validatedValue.NavigateUrl)) /// This edit control for the FlashFieldControl has public FlashSelector() /// This is the flash URL value that you can edit in the text protected override void OnInit(EventArgs e) // This ensures that the TextBox child control receives /// Gets JavaScript required to launch an Asset Picker dialog // When the AssetUrlSelector control is not added to the // Uses the TextBox client ID to connect the Asset Picker // Autopostback to see the new flash file rendered after flashAssetSelector.OverrideDialogTitle = "Select a flash file"; return flashAssetSelector.GetClientLaunchPickerReference(); private Literal flashOutput = new Literal(); this.Controls.Add(flashSelectorToolbar); Label flashUrlLabel = new Label(); this.flashUrlTextBox.ID = "FlashUrlTextBox"; // Add the button after the rest so that the text box // Add a refresh button to perform a basic postback to // If there is a flash file URL, this code creates protected override void OnPreRender(EventArgs e) base.OnPreRender(e); public static class FlashRenderingUtilities if (String.IsNullOrEmpty(encodedUrl)) // Currently, this code includes only a parameter for the flash |
No comments:
Post a Comment