2012-07-03 16 views
5

私は最初のmagento展開に取り組んできました。標準化されていないカスタマイズに取り組んでいます。Magento - バンドルされたオプションイメージを取得する方法

私の主な製品タイプの1つは、バンドル製品としてセットアップしたオフィスチェアです。この製品タイプ(約100種類のファブリックオプション、アームスタイル、腰椎、ヘッドレストなど)には多くのオプションがあり、カタログ/製品/ビューページでそれぞれの画像を表示する必要があります。

バンドルされた製品である(これは、適切な製品タイプであるかどうかについての議論を控えます。構成可能なバンドルとバンドルされたバンドの間で議論を交わしました) - 各製品は、 (オプションとして)。これらのシンプルな製品には、画像がアップロードされている可能性があります。 私は今、いくつかの狩猟後

...メディアフォルダからそれらへのURLを取得する - これらは重要な要素であるように見える:

テーマ/../テンプレート/カタログ/製品/ビュー/ options.phtml

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

テーマ/../テンプレート/バンドル/カタログ/製品/ビュー/タイプ/バンドル/オプション/ select.phtml

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

私は最終的にgetSelections()を見つけた:そう

...我々は selection_idproduct_idprice_typeなどを持つ配列を取り戻す...しかし、何もその選択のために画像のURLを参照しない

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

私は府にしようとしている

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

:ことを考えると

ILD テーマで一種のようにのように、各選択の画像URLへのレフリーとのjsオブジェクト/../テンプレート/バンドル/カタログ/製品/ビュー/タイプ/バンドル/オプション/ 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は、ちょうど私がプレースホルダーのグラフィックに私をバウンスするので、明らかに正しくタイプされていません。

これらのオプションを製品として入力することができます(またはselection_idからシンプルな製品を入手すると仮定すると、それはうまくいくような感じです)この機能を管理する方法はわかりませんしかし、私はちょうどURLのスタックを取得することができます - 私はビジネスになるでしょう

奇妙なことに、interwebsは、このテーマでは基本的にサイレントです。ソリューションは有料の拡張機能で、最後の手段となります)

どうすればわかりますか?

イエス・タップダンス・キリスト。メイジはもっと複雑になりますか?


更新

ように動作するために、このガット:誰もがこの修正プログラムを必要とする場合、私は選択した答えはまた、正常に動作します

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

を。

答えて

3

$ _selections内のproduct_idは、選択したシンプルな製品のIDを表します。 は、そうするためのすべてがある:

  1. は$ _selectionsのproduct_idが、これによって製品は
  2. がMage_Catalog_Helper_Product :: getImageUrlに得られた生成物を与えたproduct_id
  3. 負荷がかかります。
+0

は、私は私が(更新を参照してください)この投稿を数時間後にこれを考え出しました。あなたの答えにはかなり近いですが、product_idを取得することは禁じられています。これも機能します。乾杯 – Bosworth99

関連する問題