SharePoint. Получение URL-адреса иконки для документа

docicon.xml

Все иконки для файлов в SharePoint регистрируются в файле, расположенном по адресу {SharePointRoot}\14\TEMPLATE\XML\DOCICON.XML. Вот его небольшой кусок:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DocIcons>
  3.     <ByProgID>
  4.         <Mapping Key="Excel.Sheet" Value="ichtmxls.gif" EditText="Microsoft Excel" />
  5.     <!-- ... -->
  6.     </ByProgID>
  7.     <ByExtension>
  8.         <Mapping Key="zip" Value="iczip.gif" OpenControl=""/>
  9.         <!-- ... -->
  10.     </ByExtension>
  11.     <Default>
  12.         <Mapping Value="icgen.gif"/>
  13.     </Default>
  14. </DocIcons>

Для чтения данных я использую вот такой статичный класс:

  1. /// <summary>
  2. /// Иконки для документов из файла DOCICON.XML
  3. /// </summary>
  4. public static class DocumentIcons
  5. {
  6.     private static NameValueCollection ExtensionImages { getset; }
  7.  
  8.     static DocumentIcons()
  9.     {
  10.         ExtensionImages = new NameValueCollection();
  11.         // Путь к файлу docicon.xml
  12.         var dociconPath = SPUtility.GetGenericSetupPath(@"template\xml") + @"\docicon.xml";
  13.         var fi = new FileInfo(dociconPath);
  14.         using (var stream = fi.OpenText())
  15.         {
  16.             var doc = XDocument.Load(stream);
  17.             var icons = doc.Element("DocIcons");
  18.             var byExt = icons.Element("ByExtension");
  19.             foreach (var ext in byExt.Elements())
  20.             {
  21.                 var key = ext.Attribute("Key").Value;
  22.                 var val = ext.Attribute("Value").Value;
  23.                 ExtensionImages.Add(key, "/_layouts/images/" + val);
  24.             }
  25.         }
  26.     }
  27.  
  28.     /// <summary>
  29.     /// Получение иконки для расширения файла
  30.     /// </summary>
  31.     /// <param name="extension">Расширение без '.'</param>
  32.     /// <returns>URL-адрес картинки</returns>
  33.     public static string GetIconUrl(string extension)
  34.     {
  35.         return ExtensionImages[extension] ?? "/_layouts/images/ICGEN.GIF";
  36.     }
  37. }

Использовать его можно, например, создав свойство в базовом классе модели данных Linq to SharePoint:

  1. /// <summary>
  2. /// URL-адрес иконки для файла
  3. /// </summary>
  4. public string IconUrl
  5. {
  6.     get
  7.     {
  8.         // Получаем расширение файла
  9.         var ext = System.IO.Path.GetExtension(ServerUrl);
  10.         if (ext.Length > 0)
  11.         {
  12.             // Обрезаем лидирующую точку
  13.             ext = ext.Substring(1);
  14.             // Возвращаем иконку
  15.             return DocumentIcons.GetIconUrl(ext);
  16.         }
  17.         // Возвращаем иконку по умолчанию
  18.         return DocumentIcons.GetIconUrl(string.Empty);
  19.     }
  20. }

Иконка для pdf-файлов

Чтобы SharePoint отображал иконку для pdf-файлов, её достаточно зарегистрировать в файле docicon.xml в разделе ByExtension:

  1. <Mapping Key="pdf" Value="icpdf.png"/>

И разместить сам файл-иконку в папке {SharePointRoot}\14\TEMPLATE\IMAGES. Можно даже вот такую: .


Поделиться

Коментарии