Как получить уменьшенное изображение с помощью 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}}

Author: Freejoy, 2016-07-07

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();
}

Если вы используете плоские таблицы, вам, вероятно, потребуется убедиться, что код поставщика находится в плоских таблицах

 4
Author: Richard, 2016-07-08 08:31:27

Попробуйте это.

Эхо-маг::getModel ('каталог/product_media_config') ->getmediaurl($продукт ->getthumbnail());

 2
Author: Bill Murray, 2016-07-07 18:43:44