4

私は現在、最初のmagentoビルドに表示される製品オプションの画像の取得に取り組んでいます。私はこれをバンドル製品について次のように理解しました:

スクリーンショット

選択のオプションが作成されたときに、関連する画像(たとえば、見本)のURLを取得しています。今、私は構成可能な製品で同じことをしようとしていますが、それはそれほど単純ではないようです。

構成可能な製品は、利用可能なオプションの各反復を表す単純な製品から構築されます。素晴らしい。単純な製品ごとに画像をアップロードできることは明らかです。これは、これに対する解決策の良いスタートになります。

例:椅子には3つの張りと2つのアームレストの選択肢があります(6つのシンプルな製品)。椅子2/bの場合、張り見本2と肘掛け見本bをアップロードし、それに応じてラベルを付けます。オプションが作成されると、各シンプルな製品に関連付けられている画像のURLをラベルで取得します(おそらく、そのラベルのすべての画像を取得して、重複や何かを削除しますか?)...

Magentoでは、次のように表示されます。

theme / catalog / product / view / type / option/configurable.phtml内

<?php foreach($_attributes as $_attribute): ?>
    ..// 
    <select name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="required-entry super-attribute-select">
        <option><?php echo $this->__('Choose an Option...') ?></option>
    </select>
    ..//
</div>
<?php endforeach; ?>
<script type="text/javascript">
    var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);
</script>

バンドルとは異なり、構成可能な製品の選択/オプションは、javascript(in)を介してページに挿入されますjs/varien/configurable.jsgetJsonConfig()その後、このクラスはすべての情報を提供することに依存します。

この時点で、そのオブジェクトから単純な製品の画像URL情報を取得できるはずです。configuration.jsには、画像を処理するロジックがまったくありません。 これらのURLを取得し、それらを関連するオプション選択に関連付けるにはどうすればよいですか?

私がこれをどのように進めるべきかについてのアドバイスは素晴らしいでしょう。

乾杯


...また:これは本当に非常に簡単な絶対に必要な機能のようです。なぜmagentoはこのようなものを箱から出してサポートしないのですか?


アップデート

似たようなことに興味を持っている人たちのために、私はついにこれを理解しました。

これに対処する私の最初の方法-子製品から画像を取得することはある程度機能しましたが、複数の属性セットの一意の画像URLを取得しようとすると複雑になりました。また、シンプルな製品でオプションごとに画像を提供する必要があるため、多くの不要な労力が必要になります。

@Greg Demetrickが提案した無料のプラグイン(いくつかの変更を加えたもの)を使用することになりました。画像のURLを任意の属性オプションに関連付けることができる非常に堅実な小さなモジュール/およびそれらを取得するためのいくつかのメソッド。

私の最終的な解決策は次のようになります。

catalog / product / view / type / options / configureurable.phtml

<?php foreach($_attributes as $_attribute): ?>

  // markup for the attribute

    <script type="text/javascript">
        //<![CDATA[
        var attribute_data_<?php echo $_attribute->getAttributeId() ?> = {};
            attribute_data_<?php echo $_attribute->getAttributeId() ?>.id = '<?php echo $_attribute->getAttributeId() ?>';
            attribute_data_<?php echo $_attribute->getAttributeId() ?>.title = '<?php echo $_attribute->getLabel() ?>';
            attribute_data_<?php echo $_attribute->getAttributeId() ?>.data = {};
        <?php 
        $a = Mage::getModel('eav/config')->getAttribute('catalog_product', $_attribute->getAttributeId() );
        $helper = Mage::helper('attributeoptionimage');
        foreach ( $a->getSource()->getAllOptions(true) as $option): ?>
            attribute_data_<?php echo $_attribute->getAttributeId() ?>.data.option_<?php echo $option['value'] ?> = {};
            attribute_data_<?php echo $_attribute->getAttributeId() ?>.data.option_<?php echo $option['value'] ?>.val = '<?php echo $option['value'] ?>';
            attribute_data_<?php echo $_attribute->getAttributeId() ?>.data.option_<?php echo $option['value'] ?>.imageurl = '<?php echo $helper->getAttributeOptionImage($option['value']); ?>';
            attribute_data_<?php echo $_attribute->getAttributeId() ?>.data.option_<?php echo $option['value'] ?>.imgtitle = '<?php echo $option['label']; ?>';
        <?php endforeach; ?>
        //]]>
    </script>

    <?php endforeach; ?>

これは、属性ごとに1セットずつ、マークアップに出力されます。これはうまく機能しますが、製品(getJsonConfig()オブジェクトが保存したデータ)に対して選択されたオプションだけでなく、属性のすべてのオプションを返します。したがって、attribute_data_xxxオブジェクトをに対してテストspConfigし、一意の一致オプションをコントローラースクリプトに送信します。

getJsonConfig属性URLを取得するために拡張すると、おそらく同様に機能します...

いずれにせよ、ここでの重要なポイントは、画像のURLを(製品ではなく)属性オプション自体に関連付けることでした。

乾杯

4

2 に答える 2

6

getUsedProducts()メソッドを使用して、構成可能変数で使用される単純な製品の配列を取得できます。このメソッドは標準製品モデルの一部ではありませんが、に含まれapp/code/core/Mage/Catalog/Model/Product/Type/Configurable.phpているため、最初に を使用して構成可能な製品モデルを取得する必要がありますgetTypeInstance()。そのメソッドは、型モデルをシングルトンとして返すかどうかを示す単一のパラメーターを受け入れます (私はそうしました)。

foreach ($_product->getTypeInstance(true)->getUsedProducts() as $simpleProduct) {
    // From this you should be able to get the image url
}

アップデート

spConfigas created byMage_Catalog_Block_Product_View_Type_Configurable::getJsonConfig()には、そのoptions構成可能なオプションに固有の product_ids を含む配列があります。

spConfig :
  attributes : {
    603 : {
      id      : 603,
      code    : part_state,
      label   : "Part State",
      options : [
        {
          id       : 648,
          label    : Harvested,
          price    : 0,
          products : [204379]   // <-- Simple Product ID
        },
        {
          id       : 647,
          label    : New,
          price    : 0,
          products : [224333]
        }]
    },
  ...

この時点で、次のいずれかを実行できます。

  1. getJsonConfigシンプルな商品画像の URL を含めるように拡張する、または
  2. 単純な製品 ID から画像 URL へのマッピングを作成する

#2 の例を示して、どの関数を使用できるかを確認します。

$spImages = array();
foreach ($this->getAllowProducts() as $_sp) {
    $spImages[$_sp->getId()] = 
        (string)$this->helper('catalog/image')
            ->init($_sp, 'small_image')
            ->resize(40,40);
}
// It is necessary to cast the URL to a `string` because the actual work done by
// Mage_Catalog_Helper_Image happens in the `__toString()` method... weird!

<script type="text/javascript">
    var spImages = <?php echo json_encode($spImages); ?>;
</script>

画像 URL を単純な製品 ID に関連付ける方法ができたので、現在選択されているオプションに基づいて画像を更新する必要があります。Magentoには、変更時にトリガーされるメソッドがあるProduct.Configので、それを利用します。これを行うのが苦手な場合でも、独自のイベント ハンドラーを作成するためのすべての情報を入手できます。configureElement()<select class="super-attribute-select">spConfig.configspImagesonChange

于 2012-07-24T16:38:44.910 に答える
3

ここで遭遇する最終的な問題は、属性のオプションに関連付けられた画像がないことだと思います。その機能を追加する GoMage の Advanced Navigation のようなものをインストールする必要があるかもしれません。基本の Magento では、画像は製品にのみ関連付けられているため、バンドル製品用に画像を抽出できます。

画像付きのオプションがあれば、Magento に追加されたテーブルから製品ごとにオプション画像を抽出し、ロード時に各オプションの基本画像を表示し、選択時に他の画像の JS スワップを配置できるはずです。 . 以下の無料の「オプション付き画像」モジュールをダウンロードしてインストールすることをお勧めします。これにより、画像を表示するための新しいヘルパー クラスが追加され、おそらくスワッピングに必要なコードも提供されます。

GoMage モジュール: http://www.gomage.com/extensions/searching-optimization/gomage-advanced-navigation.html/

同様の機能の無料版: http://www.johannreinke.com/en/2012/02/05/magento-add-images-to-product-attribute-options/

于 2012-07-23T18:05:41.087 に答える