разобрался. я добавил новый атрибут для простых продуктов, названный 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);
, чтобы изображение продукта также использовало тот же тип.
Я надеюсь, что это не окажет большого влияния на производительность (клиент вроде как указал, что это главное требование). он хорошо ухудшается, если клиент не устанавливает порядок сортировки для простых продуктов. и, если инвентарь исчезнет, он покажет изображение следующего в порядке сортировки.
приветствуется любая критика!