2015-10-23 1 views
2

Для пункта в Sitecore «Медиа-библиотека»:Sitecore быстрый способ проверить mediaItem в библиотеке мультимедиа является изображение или изображение

MediaItem mediaItem = Sitecore.Context.Database.GetItem("{E47591D0-48D2-4543-80E4-3836B02AA1A8}"); 

выше пункт картина «Tulips.jpg».

Как я могу проверить код за тем, что вышеуказанный элемент на самом деле является Picture/Image?

ответ

7

После того, как у вас есть MediaItem объект, вы можете сделать это:

MediaItem mediaItem = ... 

bool isPicture = mediaItem.MimeType.StartsWith("image/"); 

Это работает, потому что MIME types изображения формируются так: image/.... Например:

  • изображения/BMP
  • изображение/GIF
  • изображение/JPEG
+1

Умное решение +1 –

1

Sitecore имеет помощника на Sitecore класса Item IsMediaItem

Sitecore.Context.Item.Paths.IsMediaItem 

Этот код проверяет, имеет ли элемент путь, содержащий «sitecore/Media library»

Вы можете проверить элемент перед его преобразованием в элемент мультимедиа.

+1

Я думаю, что Ками хочет узнать, является ли элемент мультимедиа изображением. Дело в том, что можно загружать другие типы медиафайлов, таких как видео, PDF-файлы и аудиофайлы. –

+0

Ах, да, верно, если это так, тогда ваш ответ будет работать. Mine проверяет только, содержит ли его путь медиа-библиотеку. –

2

Альтернатива предложению Дмитрия Шевченко - использовать API Sitecore для проверки TemplateMediaItem, содержащего изображение, противоположное сравнению сравнения строк.

Когда изображение загружается в MediaLibrary она хранится в versioned или unversioned шаблон и либо Image или jpeg.

Чтобы проверить, есть ли изображение mediaItem, вы можете сделать следующее;

public ID ImageUnversioned = new ID("{F1828A2C-7E5D-4BBD-98CA-320474871548}"); 
public ID JpegUnversioned = new ID("{DAF085E8-602E-43A6-8299-038FF171349F}"); 
public ID ImageVersioned = new ID("{C97BA923-8009-4858-BDD5-D8BE5FCCECF7}"); 
public ID JpegVersioned = new ID("{EB3FB96C-D56B-4AC9-97F8-F07B24BB9BF7}"); 

public bool IsImage(Item mediaItem) 
{ 
    return mediaItem.TemplateID.Equals(ImageUnversioned) 
      || mediaItem.TemplateID.Equals(JpegUnversioned) 
      || mediaItem.TemplateID.Equals(ImageVersioned) 
      || mediaItem.TemplateID.Equals(JpegVersioned); 
} 

Тогда просто передать в mediaItem, как показано ниже;

bool isImageOrPicture = IsImage(mediaItem); 

Update

Dmytro Shevchenko сделал большую точку рекурсивно проверять все базовые шаблоны элемента, как Jpeg шаблона происходит от Image шаблона. Внедрение как таковое:

using Sitecore; 
using Sitecore.Data.Items; 

... 

public static bool IsImage(Item item) 
{ 
    if (item.TemplateID == TemplateIDs.VersionedImage 
     || item.TemplateID == TemplateIDs.UnversionedImage) 
    { 
     return true; 
    } 

    foreach (TemplateItem baseTemplate in item.Template.BaseTemplates) 
    { 
     if (IsImage(baseTemplate)) 
     { 
      return true; 
     } 
    } 

    return false; 
} 
+1

Это хороший подход! Кстати, шаблоны jpeg происходят из шаблонов изображений. Помня о том, что в будущем могут быть другие шаблоны с изображением, я бы предложил эту (более универсальную) реализацию: http: // pastebin.com/tnREpgGb Если вы хотите, вы можете повторно использовать этот код для своего ответа. –

+1

Мне это очень нравится! +1 –

+0

Включите этот код в свой ответ? Я думаю, что было бы разумно это сделать. В противном случае я могу включить его в свою. Кстати, этот фиксированный код действительно компилируется и работает :) http://pastebin.com/B31BpWSC –