SharePoint. Получение URL-адреса иконки для документа
docicon.xml
Все иконки для файлов в SharePoint регистрируются в файле, расположенном по адресу {SharePointRoot}\14\TEMPLATE\XML\DOCICON.XML. Вот его небольшой кусок:
- <?xml version="1.0" encoding="utf-8"?>
- <DocIcons>
- <ByProgID>
- <Mapping Key="Excel.Sheet" Value="ichtmxls.gif" EditText="Microsoft Excel" />
- <!-- ... -->
- </ByProgID>
- <ByExtension>
- <Mapping Key="zip" Value="iczip.gif" OpenControl=""/>
- <!-- ... -->
- </ByExtension>
- <Default>
- <Mapping Value="icgen.gif"/>
- </Default>
- </DocIcons>
Для чтения данных я использую вот такой статичный класс:
- /// <summary>
- /// Иконки для документов из файла DOCICON.XML
- /// </summary>
- public static class DocumentIcons
- {
- private static NameValueCollection ExtensionImages { get; set; }
-
- static DocumentIcons()
- {
- ExtensionImages = new NameValueCollection();
- // Путь к файлу docicon.xml
- var dociconPath = SPUtility.GetGenericSetupPath(@"template\xml") + @"\docicon.xml";
- var fi = new FileInfo(dociconPath);
- using (var stream = fi.OpenText())
- {
- var doc = XDocument.Load(stream);
- var icons = doc.Element("DocIcons");
- var byExt = icons.Element("ByExtension");
- foreach (var ext in byExt.Elements())
- {
- var key = ext.Attribute("Key").Value;
- var val = ext.Attribute("Value").Value;
- ExtensionImages.Add(key, "/_layouts/images/" + val);
- }
- }
- }
-
- /// <summary>
- /// Получение иконки для расширения файла
- /// </summary>
- /// <param name="extension">Расширение без '.'</param>
- /// <returns>URL-адрес картинки</returns>
- public static string GetIconUrl(string extension)
- {
- return ExtensionImages[extension] ?? "/_layouts/images/ICGEN.GIF";
- }
- }
Использовать его можно, например, создав свойство в базовом классе модели данных Linq to SharePoint:
- /// <summary>
- /// URL-адрес иконки для файла
- /// </summary>
- public string IconUrl
- {
- get
- {
- // Получаем расширение файла
- var ext = System.IO.Path.GetExtension(ServerUrl);
- if (ext.Length > 0)
- {
- // Обрезаем лидирующую точку
- ext = ext.Substring(1);
- // Возвращаем иконку
- return DocumentIcons.GetIconUrl(ext);
- }
- // Возвращаем иконку по умолчанию
- return DocumentIcons.GetIconUrl(string.Empty);
- }
- }
Иконка для pdf-файлов
Чтобы SharePoint отображал иконку для pdf-файлов, её достаточно зарегистрировать в файле docicon.xml в разделе ByExtension:
- <Mapping Key="pdf" Value="icpdf.png"/>
И разместить сам файл-иконку в папке {SharePointRoot}\14\TEMPLATE\IMAGES. Можно даже вот такую: .