magento использовать простое изображение продукта на странице списка - PullRequest
3 голосов
/ 24 июня 2011

У меня есть магазин с настраиваемыми и простыми продуктами (несколько цветов). В настоящее время мы выбираем один из простых изображений продукта и назначаем его настраиваемому продукту, и это то, что отображается на странице списка. проблема в том, что если этого конкретного цвета нет в наличии, мы застряли с изображением, представляющим продукт, который недоступен (и вынужден вручную обновить это изображение).

есть ли способ использовать простое изображение товара на странице списка, но при этом можно контролировать, какое изображение использовать? я знаю, как использовать простое изображение на странице списка, но я не могу понять, как указать, какое простое изображение (в настоящее время я просто беру простые продукты и вытаскиваю изображение из первого в списке).

если бы я мог найти способ сортировки простых продуктов в настраиваемых продуктах (т. Е. Убедиться, что для продукта A простые продукты отсортированы по черному, зеленому, синему цветам, а по продукту B - простые продукты отсортированы по зеленому, синему , черный), я думаю, я мог бы выяснить остальное.

есть идеи?

1 Ответ

1 голос
/ 27 июня 2011

разобрался. я добавил новый атрибут для простых продуктов, названный sort_order. затем я переопределил помощник по каталогу / продукту и добавил следующий метод:

  public function getSortedSimpleProducts($product) {
    $products = array();

    $allProducts = $product->getTypeInstance(true)->getUsedProducts(null, $product);

    foreach ($allProducts as $product) {
      if ($product->isSaleable()) {
        $products[] = $product;
      }
    }
    $sorted_products = array();
    $unsorted_products = array();

    foreach ($products as $simple_product) {
      $sort_order = $simple_product->getData('sort_order');
      if ($sort_order) {
        $sorted_products[$sort_order] = $simple_product;
      }
      else {
        $unsorted_products[] = $simple_product;
      }
    }

    $final_products = $sorted_products;
    if (count($unsorted_products) > 0) {
      $final_products = array_merge($sorted_products, $unsorted_products);
    }
    if (count($final_products) > 0) {
      sort($final_products);
    }

    return $final_products;

  }

затем в шаблоне list.phtml вокруг этой строки:

<?php $i=0; foreach ($_productCollection as $_product): ?>

я добавил следующий код:

$image_product = $_product;
$products = $this->helper('catalog/product')->getSortedSimpleProducts($_product);
if (count($products) > 0) {
  $image_product = $products[0];
}

и обновил мой тег изображения:

<img src="<?php echo $this->helper('catalog/image')->init($image_product, 'small_image')->resize(189,238); ?>" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" />

затем я переопределил Mage_Catalog_Block_Product_View_Type_Configurable для того, чтобы заставить getAllowProducts сортировать по новому порядку сортировки (который определяет сортировку цветов на странице представления):

  public function getAllowProducts() {
    if (!$this->hasAllowProducts()) {
      $products = array();
      $allProducts = Mage::helper('catalog/product')->getSortedSimpleProducts($this->getProduct());
      foreach ($allProducts as $product) {
        if ($product->isSaleable()) {
          $products[] = $product;
        }
      }
      $this->setAllowProducts($products);
    }
    return $this->getData('allow_products');
  }

, а затем обновил файл media.phtml:

$childProducts = $this->helper('catalog/product')->getSortedSimpleProducts($_product);

, чтобы изображение продукта также использовало тот же тип.

Я надеюсь, что это не окажет большого влияния на производительность (клиент вроде как указал, что это главное требование). он хорошо ухудшается, если клиент не устанавливает порядок сортировки для простых продуктов. и, если инвентарь исчезнет, ​​он покажет изображение следующего в порядке сортировки.

приветствуется любая критика!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...