Monday, February 01, 2010

динамические баннеры

Недавно мне понадобилось, чтобы на странице нашего Sharepoint портала были сменяющие друг друга баннеры. Поскольку оказалось, что стандартными средствами MOSS 2007 этого достичь нельзя, я решил написать такую веб-часть сама. Оказалось несложно:)
Управляется она тремя свойствами: ссылкой, именем библиотеки с изображениями для показа, и ссылкой на узел (относительной или абсолютной), где оная библиотека находится.

using System;
using System.Runtime.InteropServices;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using System.Web.UI.WebControls;

namespace RotatingBanner
{
  [Guid("e93d7943-5503-4894-9ca8-1ad9368d1153")]
  public class RotatingBannerWebPart : Microsoft.SharePoint.WebPartPages.WebPart
  {
    public string strURL = "";
    public string strImgPath = "";
    public string strList = "";
    HyperLink link = new HyperLink();

    // Свойства веб-части
    [Personalizable(), WebBrowsable, WebDisplayName("Ссылка")]
    public string URL
    {
      get
      {
        return this.strURL;
      }
      set
      {
        this.strURL = value;
        if (link != null)
        {
          link.NavigateUrl = this.URL;
        }
      }
    }
    [Personalizable(), WebBrowsable, WebDisplayName("Узел с библиотекой баннеров")]
    public string SPListURL
    {
      get
      {
        return this.strList;
      }
      set
      {
        this.strList = value;
      }
    }
    [Personalizable(), WebBrowsable, WebDisplayName("Название библиотеки баннеров")]
    public string ImgPath
    {
      get
      {
        return this.strImgPath;
      }
      set
      {
        this.strImgPath = value;
      }
    }

    public void RotatingImage()
    {
      this.ExportMode = WebPartExportMode.All;
    }

    protected override void CreateChildControls()
    {
      base.CreateChildControls();

      // Пробуем считать картинки из библиотеки
      try
      {
        if (strList != "")
        {
          // Подключаемся к указанному узлу
          SPSite site = new SPSite(strList);
          SPWeb web = site.OpenWeb();

          if (strImgPath != "")
          {
            // Подключаемся к указанной библиотеке
            SPList list = web.Lists[strImgPath];
            SPListItem item;
            SPListItemCollection items = list.Items;

            int iCount = 0;

            Random r = new Random();
            iCount = r.Next(0, list.ItemCount);
            item = items[iCount];

            string imageUrl = "/" + list.RootFolder.Url + "/" + item.Name;

            // Вставляем картинку с ссылкой в веб-часть
            link.ImageUrl = imageUrl;
            this.Controls.Add(link);
          }
          // Закрыть используемый узел
          site.Close();
          site.Dispose();
          web.Close();
          web.Dispose();
        }
      }
      catch (Exception ex)
      {
        TextField text = new TextField();
        text.Value = ex.Message;
        this.Controls.Add(text);
      }
    }
  }
}

No comments:

Post a Comment