構成可能な製品選択から単純な製品IDを取得します


7

フロントエンドに2つのドロップダウンがある構成可能な製品があるとします。

サイズ

ユーザーが選択した後、どうすれば最終的なシンプルな製品IDを取得できますか?

言い換えると、すべてのスーパー属性からの選択を知ったら、これを使用してシンプルな製品を取得する方法を教えてください。

回答:


8

参照:$ product-> getTypeInstance()-> getProductByAttributes($ attributesInfo、$ product); からMage_Catalog_Model_Product_Type_Configurable

編集:

これは就職の面接でキャッチーなもののような質問です。フロントエンドの設定可能な製品ページでこれが必要ですか?

app/code/base/default/template/catalog/product/type/options/configurable.phtml あります。

var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);

このオブジェクトを拡張する必要があります。クラスに関数を追加するか、必要な既存の関数を拡張します。http://prototypejs.org/learn/class-inheritance

デフォルトでspConfigに渡されるJSON設定には、optionsキーとより深いproductsキーがあります。JS関数でこの構成を使用できます。構成可能な製品ページにJSONオブジェクトをコピーして貼り付け、理解しやすいようにツールでフォーマットします。JSONは組み込みですMage_Catalog_Block_Product_View_Type_Configurable::getJsonConfig()

JSクラスには次のものがあります。

this.settings.each(function(element){
    Event.observe(element, 'change', this.configure.bind(this))
}.bind(this));

configureElement関数呼び出しがあります:

this.reloadPrice();

関数reloadPriceでは、ドロップダウンの反復が行われます。コードはこの反復を模倣して、使用可能なすべてのドロップダウンが選択されているかどうかを確認する必要があります。成功すると、カスタムコードが登場します。

動的コンテンツをフェッチするためのAjax呼び出しですか?私はそれをお勧めしません。代わりに、カスタムJSクラスによって処理されるJSONオブジェクトのレンダリングされたページで、関連製品の動的コンテンツ/データを利用できるようにしてください。


それがまさに私が探しているものですが、$ childProductはgetFinalPrice()でnullを返します。最終的な割引価格を取得するにはどうすればよいですか?
Gianluigi Zane Zanettini博士2017年

4

カートに追加した製品は、次のコードで簡単な製品を入手できます

$_item is instance of Mage_Sales_Model_Quote_Item

$simpleProduct =  $_item->getOptionByCode('simple_product')->getProduct()



$simpleProductId = $simpleProduct->getId()

それが役に立てば幸い!


1
これはカートでのみ機能し、それがpzirkindが求めていたものではないと思います。ただし、それでも知っておくと便利です。
タイラーV。

3

ユーザーが選択したら、これを試して最終的なシンプルな製品IDを取得します。

カスタムモジュールのphtmlファイルではproductId、次のコードを使用して、サイズや色などの構成およびスーパー属性の値を取得できます

<?php
    $_product = $this->getProduct();
    $productId = $_product->getId();
    $AllowAttributes=$_product->getTypeInstance(true)->getConfigurableAttributes($_product);
    $attr1 = 0;
    foreach($AllowAttributes as $attribute) {
        $productAttribute = $attribute->getProductAttribute();
        $attr2 = $productAttribute->getId();
        if($attr1 == 0){
            $attr1 = $attr2;
        }
    }
?>

使用することによりproductIdcolorおよびsizeカスタムモジュールAPI関数(例への呼び出しgetProductInfo()あなたのPHTMLファイルから)のjQueryを使用して、あなたのAPIの場所にコードを

function getProductInfo($productId,$color,$size){
    $nextarr = array();
    $productData = array();
    $product = Mage::getModel('catalog/product')->load($productId);
    $configurable= Mage::getModel('catalog/product_type_configurable')->setProduct($product);
    $simpleCollection = $configurable->getUsedProductCollection()
                ->addAttributeToSelect('*')
                ->addAttributeToFilter('color',$color)
                ->addAttributeToFilter('size',$size)
                ->addFilterByRequiredOptions();
    if(!empty($simpleCollection)){
        $data = array();
        foreach($simpleCollection as $simple){

            $simpleProductId = $simple->getId();

        }
    }

    return $simpleProductId;
}

2

スーパー属性が配列としてあり、キーがオプション(例:color、size)IDであり、値が選択したオプション(例:red、xl)の場合:

$superAttributes = array(
    140 => 3310
);

その後、次のようなシンプルな製品を簡単に入手できます。

/* @var $configurable Mage_Catalog_Model_Product_Type_Configurable */
$childProduct = $configurable->getProductByAttributes($superAttribute);

1

簡単な製品の詳細が必要な場合は、以下のコードを試してください

$order=Mage::getModel("sales/order")->load(5);

    foreach ($order->getAllItems() as $item) {
         if (!$item->isDeleted() && !$item->getParentItemId()) {
        echo $item->getName()."-".$item->getSku()."<br/>";

            $Options=$item->getData('product_options');
           echo "<pre>";
           print_r(unserialize($Options));
           echo "</pre>";
           }}

説明:$オプションを提供しますsimple product super_attribute valuevariance text value etc、あなたが取得したい.IF simple product id その後、ロードする必要がproduct by $item->getSku(); SKUはギブですsimple product sku

$product=Mage::getModel("catalog/product")->loadByAttribute('sku',$item->getSku());

ここに画像の説明を入力してください

引用したい場合は、変更してください

$quote = Mage::getSingleton('checkout/session')->getQuote();
        $cartItems = $quote->getAllVisibleItems();
        foreach ($cartItems as $item)

0

Magento 2の次のコードを使用

$superAttribute = [$size_id => $sel_propduct_size, $touch_id => $sel_propduct_touch, $color_id => $sel_propduct_color];

$childProduct   = $product->getTypeInstance()->getProductByAttributes($superAttribute, $product);

$child_product_id = $childProduct->getID();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.