Я хотел бы знать надежный способ циклически просматривать изображения галереи продукта и извлекать базовое изображение, проверяя, совпадают ли они.
Я настраиваю шаблон мультимедиа на странице продукта (catalog/product/view/media.phtml
) и хочу поместить все изображения галереи вместе с базовым изображением в селектор изображений, без отображения базового изображения дважды (что произойдет, если это не было «исключено» в бэкэнде).
Из исходного шаблона я узнал, что изображения галереи отображаются следующим образом:
<?php foreach ($this->getMediaGallery() as $_image): ?>
<img src="<?php echo $this->helper('catalog/image')->init($this->getProduct(), 'thumbnail', $_image->getFile()) ?>" />
<?php endforeach; ?>
, а базовое изображение товара отображается следующим образом:
<img src="<?php echo $this->helper('catalog/image')->init($_product, 'image') ?>" />
Я исследовал происхождение медиа-галереи и обнаружил, что это массив Varien_Object
s, у каждого из которых есть так называемый «идентификатор значения», который идентифицирует изображения галереи. Я не знаю, какова область действия этого идентификатора, и с этим его полезность. Базовое изображение продукта возвращается как Mage_Product_Helper_Image
, благодаря которому я не могу получить какой-либо идентификатор или свойство, похожее на идентификатор (даже через модель изображения продукта, которую я раскрыл, переписав класс помощника).
Я также пытался сопоставить их по имени файла. Это работало в течение нескольких дней, потому что изображения галереи хранятся в атрибуте Varien_Object (file
), который выдает что-то вроде этого:
/8/2/8280.jpg
Метод __toString()
вспомогательного класса сначала возвращал имя файла в указанном выше формате, но через некоторое время начал возвращать URL-адрес кэшированного изображения:
http://domain.com/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/8/2/8280.jpg
Не надежно.
Если кто-то знает способ получения изображений продукта намного лучше, зная, какое из них является базовым изображением, и не может отображать одно и то же изображение дважды, то, пожалуйста, сообщите мне.
РЕДАКТИРОВАТЬ:
Пояснение:
Допустим, у продукта X есть 5 связанных изображений, которые удобно называть:
- B (базовое изображение, без проверки);
- S (маленькое изображение, исключено ПРОВЕРЕНО);
- T (большой палец, без проверки);
- N (универсальный, исключен UNchecked);
- P (универсальный, не проверяется).
Коллекция изображений галереи будет включать все изображения, которые явно не "исключены" из галереи. В нашем примере коллекция изображений галереи будет включать: B, T, N и P. Это изображения, которые я хочу отобразить в селекторе изображений, , но I всегда хочу Базовое изображение включено, независимо от того, что оно может быть исключено из галереи.
Если я не могу сравнить изображения галереи с базовым изображением, я получу что-то вроде этого: B, T, N, P, B. Базовое изображение отображается дважды.
Есть два способа предотвратить это:
- Установите флажок «Исключить» для базового изображения, но я не могу этого сделать, потому что я создаю тему, поэтому пользователь темы должен будет это сделать, но я не хочу, чтобы это было необходимо .
- Проверьте, находится ли базовое изображение среди изображений галереи, и извлеките его или не отображайте вручную после того, как я переберу изображения галереи.
Полагаю, решение заключается в сравнении изображений друг с другом с помощью идентификатора или некоторого идентичного идентификатору свойства.