Как получить уменьшенное изображение с помощью getAttributeRawValue
У меня есть скрипт для отображения сопутствующих товаров в электронных письмах с подтверждением заказа, но он получает большое основное изображение, а не миниатюру. В некоторых клиентах электронной почты это разбрызгивает эти гигантские изображения и портит макет электронной почты. Вот код, который я использую, который говорит, чтобы получить миниатюру, но не делает этого:
<?php
$_order = $this->getOrder();
$_items = $_order->getAllItems();
$categories = array();
$relatedProducts = array();
$storeId = NULL;
?>
<?php foreach ($_items as $item): ?>
<?php $itemId = $item->getProductId(); ?>
<?php $_product = Mage::getModel('catalog/product')->load($item->getProductId()); ?>
<?php $cats = $_product->getCategoryIds(); ?>
<?php $relatedProductIds = $_product->getRelatedProductIds(); ?>
<!-- add related ids to array -->
<?php foreach ($relatedProductIds as $id): ?>
<?php $relatedProducts[] = $id; ?>
<?php endforeach; ?>
<!-- related could be already purchased - remove it -->
<?php if(($key = array_search($itemId, $relatedProducts)) !== false): ?>
<?php unset($relatedProducts[$key]); ?>
<?php endif; ?>
<!-- set store id -->
<?php if ($storeId == NULL): ?>
<?php $storeId = $item->getStoreId(); ?>
<?php endif; ?>
<?php endforeach; ?>
<!-- get three related products (after the shuffling) -->
<?php if (count($relatedProducts) >= 3): ?>
<?php shuffle($relatedProducts); ?>
<div style="width:100%;float:left">
<h2>You may also like these...</h2>
<ul style="padding:0;list-style:none;display:inline-block;width:100%;">
<?php for ($i=0; $i < 3; $i++): ?>
<?php $relatedProductId = $relatedProducts[$i]; ?>
<li style="list-style:none;display:table-cell;padding:5px;width:16.666666667%;text-align:center;background:#f3dce7;border-right:1px solid #fff;">
<?php $thumbnail = Mage::getResourceModel('catalog/product')->getAttributeRawValue($relatedProductId, 'thumbnail', $storeId); ?>
<?php echo "<img src='" . Mage::getModel('catalog/product_media_config')->getMediaUrl($thumbnail) . "' alt='" . $name . "' style='width:150px;height:220px;margin:10px' />"; ?>
<div>
<span>
<?php $url = Mage::getResourceModel('catalog/product')->getAttributeRawValue($relatedProductId, 'url_key', $storeId); ?>
<?php $name = Mage::getResourceModel('catalog/product')->getAttributeRawValue($relatedProductId, 'name', $storeId); ?>
<b><a href="<?php echo Mage::getBaseUrl(); ?><?php echo $url; ?>.html"><?php echo $name;?></a></b>
</span>
</div>
<div>
<?php $this->__('SKU'); ?>
<?php echo Mage::getResourceModel('catalog/product')->getAttributeRawValue($relatedProductId, 'supplier_code', $storeId); ?>-<?php echo Mage::getResourceModel('catalog/product')->getAttributeRawValue($relatedProductId, 'sku', $storeId); ?>
</div>
<div>
<span><?php echo Mage::helper('core')->formatPrice(Mage::getResourceModel('catalog/product')->getAttributeRawValue($relatedProductId, 'price', $storeId), false); ?></span>
</div>
</li>
<?php endfor; ?>
</ul>
</div>
<?php else: ?>
<?php
$visibility = array(
Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
);
$storeId = Mage::app()->getStore()->getId();
$_productCollection = Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('*')
->addOrderedQty()
->addAttributeToFilter('visibility', $visibility)
->setOrder('ordered_qty', 'desc'); ?>
<?php foreach($_productCollection as $bs_product): ?> <?php if($i++ == 3) break; ?>
<?php echo '<a href="'.Mage::getBaseUrl().''.$bs_product->getUrl_key().'.html">'.$bs_product->Name.'</a><br />'; ?>
<?php echo '<img src="'.$bs_product->getImageurl().'" />'; ?>
<?php endforeach; ?>
<?php endif; ?>
Как я могу получить реальный эскиз или небольшое изображение?
Спасибо
--Обновление
Вот мой обновленный код:
<?php
$_order = $this->getOrder();
$_items = $_order->getAllItems();
$categories = array();
$relatedProducts = array();
$storeId = NULL;
?>
<?php foreach ($_items as $item): ?>
<?php $itemId = $item->getProductId(); ?>
<?php $_product = Mage::getModel('catalog/product')->load($item->getProductId()); ?>
<?php $cats = $_product->getCategoryIds(); ?>
<?php $relatedProductIds = $_product->getRelatedProductIds(); ?>
<!-- add related ids to array -->
<?php foreach ($relatedProductIds as $id): ?>
<?php $relatedProducts[] = $id; ?>
<?php endforeach; ?>
<!-- related could be already purchased - remove it -->
<?php if(($key = array_search($itemId, $relatedProducts)) !== false): ?>
<?php unset($relatedProducts[$key]); ?>
<?php endif; ?>
<!-- set store id -->
<?php if ($storeId == NULL): ?>
<?php $storeId = $item->getStoreId(); ?>
<?php endif; ?>
<?php endforeach; ?>
<!-- get three related products (after the shuffling) -->
<?php if (count($relatedProducts) >= 3): ?>
<?php shuffle($relatedProducts); ?>
<?php $productIds = array_slice($relatedProducts, 0, 3);
$products = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect(array('name', 'url_key', 'thumbnail', 'sku', 'supplier_code'))
->addAttributeToFilter('status', 1)
->addFinalPrice()
->addIdFilter($productIds);
$imageHelper = Mage::helper('catalog/image'); ?>
<tr>
<td>
<div style="width:100%;float:left">
<h2 style="font-size:16px">You may also like these...</h2>
<ul style="margin-left:0;padding:0;list-style:none;display:inline-block;width:100%;">
<?php foreach ($products as $product): ?>
<li style="list-style:none;display:table-cell;padding:5px;width:16.666666667%;text-align:center;background:#f3dce7;border-right:1px solid #fff;">
<a href="<?php echo $url = $product->getProductUrl(); ?>">
<img src="<?php echo $thumbail_src = $imageHelper->init($product, 'thumbnail')->resize(150,220); ?>" style="width:150px;height:220px;margin:10px" /></a>
<div>
<span>
<b><a href="<?php echo $url = $product->getProductUrl(); ?>"><?php echo $name = $product->getName(); ?></a></b>
</span>
</div>
<div>
<?php echo $this->__('SKU'); ?>
<?php echo $supplierCode = $product->getSupplierCode(); ?>-<?php echo $sku = $product->getSku(); ?>
</div>
<div>
<span><?php echo $price = $product->getFinalPrice(); ?></span>
</div>
</li>
<?php endforeach; ?>
</ul>
</div>
</td>
</tr>
<?php else: ?>
<?php
$visibility = array(
Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
);
$storeId = Mage::app()->getStore()->getId();
$_productCollection = Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('*')
->addOrderedQty()
->addAttributeToFilter('visibility', $visibility)
->setOrder('ordered_qty', 'desc'); ?>
<?php foreach($_productCollection as $bs_product): ?> <?php if($i++ == 3) break; ?>
<?php echo '<a href="'.Mage::getBaseUrl().''.$bs_product->getUrl_key().'.html">'.$bs_product->Name.'</a><br />'; ?>
<?php echo '<img src="'.$bs_product->getImageurl().'" />'; ?>
<?php endforeach; ?>
<?php endif; ?>
В случае, если кто-то приходит и хочет его использовать вот код для добавления в транзакционное электронное письмо нового заказа: {{block type='core/template' area='frontend' template='mycmsblocks/email/related.phtml' order=$order}}
2 answers
Атрибут thumbnail
даст вам имя файла изображения для использования в качестве эскиза продукта. Однако нет никаких ограничений на размер этого изображения, и вы пытаетесь изменить размер изображения с помощью атрибута style.
Если вы просмотрите источник magento, вы увидите, что вам нужно использовать помощник по изображению, чтобы изменить его размер, например, в app/design/frontend/base/default/template/checkout/cart/crosssell.phtml
Ты увидишь $this->helper('catalog/image')->init($_item, 'thumbnail')->resize(75);
Параметр 1 является экземпляром Mage_Catalog_Model_Product, параметр 2 - это имя атрибут.
Для получения экземпляра Mage_Catalog_Model_Product вместо 3-кратного цикла $relatedProducts
вы можете использовать коллекцию продуктов и фильтровать по этим трем идентификаторам продуктов. Я бы попытался предложить еще несколько улучшений, но ваш код действительно трудно читать с постоянной
--редактировать
Ваш код становится необычным после того, как вы перетасовываете продукты. Вместо того, чтобы использовать цикл for, как вы это делаете, вы могли бы использовать коллекцию. Я опустил весь код форматирования и т.д.:
shuffle($relatedProducts);
$productIds = array_slice($relatedProducts, 0, 3);
$products = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect(array('name', 'url_key', 'thumbnail', 'sku', 'supplier_code'))
->addAttributeToFilter('status', 1)
->addFinalPrice()
->addIdFilter($productIds)
;
$imageHelper = Mage::helper('catalog/image');
foreach ($products as $product) {
$url = $product->getProductUrl();
$price = $product->getFinalPrice();
$name = $product->getName();
$thumbail_src = $imageHelper->init($product, 'thumbnail')->resize(150,220);
$supplierCode = $product->getSupplierCode();
$sku = $product->getSku();
}
Если вы используете плоские таблицы, вам, вероятно, потребуется убедиться, что код поставщика находится в плоских таблицах
Попробуйте это.
Эхо-маг::getModel ('каталог/product_media_config') ->getmediaurl($продукт ->getthumbnail());