6

我一直在进行我的第一个 magento 部署。建立了一个非常定制的主题......现在处理一些非标准的定制:

我的主要产品类型之一是我将其设置为捆绑产品的办公椅。这种产品类型有很多选项(大约 100 种面料选项、手臂样式、腰部、头枕等),我需要能够在目录/产品/视图页面上显示每个选项的图像。

作为捆绑产品(我将避免讨论这是否是正确的产品类型 - 我们在可配置和捆绑之间进行了辩论) - 每个产品都由许多简单的产品组装而成(作为选项) . 这些简单的产品可以上传图片,我已经这样做了。我现在想从媒体文件夹中检索网址...

经过一番狩猎 - 这些似乎是基本要素:

主题/../template/catalog/product/view/options.phtml

<?php $_options = Mage::helper('core')->decorateArray($this->getOptions()) ?>
<dl>
    <?php foreach($_options as $_option): ?>
        <?php echo $this->getOptionHtml($_option) ?>
    <?php endforeach; ?>
</dl>

主题/../template/bundle/catalog/product/view/type/bundle/option/select.phtml

<?php /* @var $this Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option_Select */ ?>
<?php $_option      = $this->getOption(); ?>
<?php $_selections  = $_option->getSelections(); ?>

我终于找到getSelections()了:

class Mage_Bundle_Model_Resource_Price_Index extends Mage_Core_Model_Resource_Db_Abstract
{ ...


    /**
        * Retrieve bundle options with selections and prices by product
       *
        * @param int $productId
        * @return array
        */
       public function getSelections($productId)
       {
           $options = array();
           $read = $this->_getReadAdapter();
           $select = $read->select()
               ->from(
                   array('option_table' => $this->getTable('bundle/option')),
                   array('option_id', 'required', 'type')
               )
               ->join(
                   array('selection_table' => $this->getTable('bundle/selection')),
                   'selection_table.option_id=option_table.option_id',
                   array('selection_id', 'product_id', 'selection_price_type',
                       'selection_price_value', 'selection_qty', 'selection_can_change_qty')
               )
               ->join(
                   array('e' => $this->getTable('catalog/product')),
                   'e.entity_id=selection_table.product_id AND e.required_options=0',
                   array()
               )
               ->where('option_table.parent_id=:product_id');

           $query = $read->query($select, array('product_id' => $productId));
           while ($row = $query->fetch()) {
               if (!isset($options[$row['option_id']])) {
                   $options[$row['option_id']] = array(
                       'option_id'     => $row['option_id'],
                       'required'      => $row['required'],
                       'type'          => $row['type'],
                       'selections'    => array()
                   );
               }
               $options[$row['option_id']]['selections'][$row['selection_id']] = array(
                   'selection_id'      => $row['selection_id'],
                   'product_id'        => $row['product_id'],
                   'price_type'        => $row['selection_price_type'],
                   'price_value'       => $row['selection_price_value'],
                   'qty'               => $row['selection_qty'],
                   'can_change_qty'    => $row['selection_can_change_qty']
               );
           }

           return $options;
       }

所以我们用 , 等返回一个数组selection_id...product_idprice_type没有任何内容涉及该选择的图像 url...

鉴于:

class Mage_Catalog_Helper_Product extends Mage_Core_Helper_Url
{ ...
public function getImageUrl($product)
        {
            $url = false;
            if (!$product->getImage()) {
                $url = Mage::getDesign()->getSkinUrl('images/no_image.jpg');
            }
            elseif ($attribute = $product->getResource()->getAttribute('image')) {
               $url = $attribute->getFrontend()->getUrl($product);
           }
           return $url;
       }

我正在尝试使用对每个选择的图像 url 的引用构建一个 js 对象,就像在theme/../template/bundle/catalog/product/view/type/bundle/option/select.phtml

var option_set_<?php echo $_option->getId() ?> = {};
<?php foreach ($_selections as $_selection): ?>
    option_set_<?php echo $_option->getId() ?>._<?php echo $_selection->getSelectionId() ?> = '<?php echo $_selection->getImageUrl(); ?>';
<?php endforeach; ?>

$_selection显然没有正确输入,因为它只是让我跳到占位符图形。

假设这些选项可以输入为 Product (或者以某种方式从selection_id获取简单的产品,似乎这样的东西可以工作。我不确定这是否正是我想要管理此功能的方式,但如果我可以获取一堆网址 - 然后我会做生意

奇怪的是,互联网基本上对这个话题保持沉默。显然没有人需要为他们的产品选项显示图像(或者,唯一的解决方案是付费扩展 - 这将是最后的手段)。

我该如何解决这个问题?

耶稣踢踏舞基督。法师能再复杂点吗?


更新

让它这样工作:

<?php echo $this->helper('catalog/image')->init($_selection, 'small_image')->resize(40,40); ?>

如果有人需要此修复,我选择的答案也可以正常工作。

4

1 回答 1

4

$_selections 中的 product_id 表示选择的简单产品的 id。所以要做的就是:

  1. 取 $_selections 的 product_id,
  2. 按此 product_id 加载产品
  3. 将生成的产品对象提供给 Mage_Catalog_Helper_Product::getImageUrl。
于 2012-07-04T21:40:36.430 回答