Nhận id sản phẩm đơn giản từ lựa chọn sản phẩm có thể cấu hình


7

Giả sử tôi có một sản phẩm có thể định cấu hình ở frontend với hai lần thả xuống:

Kích thước

Màu sắc

Làm cách nào tôi có thể nhận được id sản phẩm đơn giản cuối cùng sau khi người dùng đã thực hiện các lựa chọn của họ.

Nói cách khác: một khi tôi biết các lựa chọn từ tất cả các thuộc tính siêu, làm thế nào tôi có thể sử dụng điều này để có được sản phẩm đơn giản.

Câu trả lời:


8

Xem: $ sản phẩm-> getTypeInstance () -> get SẢNtByAttribut ($ PropertiesInfo, $ sản phẩm); từ Mage_Catalog_Model_Product_Type_Configurable.

Biên tập:

Đây là một câu hỏi giống như những câu hỏi hấp dẫn từ các cuộc phỏng vấn việc làm. Bạn có cần điều này trên trang sản phẩm cấu hình trên frontend?

Trong app/code/base/default/template/catalog/product/type/options/configurable.phtml đó có:

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

Bạn cần mở rộng đối tượng này. Hoặc thêm chức năng của bạn trong lớp hoặc mở rộng một chức năng hiện có mà bạn cần. http://prototypejs.org/learn/ class-inherribution

Trong cấu hình JSON được truyền cho spConfig theo mặc định, có optionskhóa và productskhóa sâu hơn . Bạn có thể sử dụng cấu hình này trong chức năng JS của bạn. Trên bất kỳ trang sản phẩm có thể định cấu hình nào, hãy dán đối tượng JSON và định dạng nó bằng một công cụ để dễ hiểu. JSON được xây dựng trong Mage_Catalog_Block_Product_View_Type_Configurable::getJsonConfig().

Trong lớp JS có:

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

Trong configureElementhàm có cuộc gọi:

this.reloadPrice();

Trong chức năng, reloadPriceviệc lặp lại trên danh sách thả xuống được thực hiện. Mã của bạn nên bắt chước lần lặp này để kiểm tra xem tất cả các danh sách thả xuống có sẵn đã được chọn chưa. Khi thành công, mã tùy chỉnh của bạn đi vào.

Đây có phải là một cuộc gọi Ajax để lấy nội dung động không? Tôi sẽ không khuyên bạn nên nó. Thay vào đó, hãy cố gắng có sẵn nội dung / dữ liệu động của các sản phẩm được liên kết trong trang được hiển thị trong một đối tượng JSON được xử lý bởi lớp JS tùy chỉnh của bạn.


đó chính xác là những gì tôi đang tìm kiếm, nhưng $ childSản phẩm trả về null trên getFinalprice ()! Làm thế nào tôi có thể nhận được giá cuối cùng, giảm giá?
Tiến sĩ Gianluigi Zane Zanettini

4

Sản phẩm mà bạn đã thêm vào giỏ hàng, bạn có thể nhận được sản phẩm đơn giản của nó bằng mã sau

$_item is instance of Mage_Sales_Model_Quote_Item

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



$simpleProductId = $simpleProduct->getId()

Hy vọng nó giúp!


1
Điều này chỉ hoạt động trong giỏ hàng, và tôi không nghĩ đó là những gì pzirkind đang yêu cầu. Tuy nhiên, vẫn còn tốt để biết.
Tyler V.

3

Hãy thử điều này để có được id sản phẩm đơn giản cuối cùng sau khi người dùng đã thực hiện các lựa chọn của họ.

Trong tệp phtml mô-đun tùy chỉnh của bạn, bạn có thể nhận cấu hình productIdvà giá trị siêu thuộc tính như Kích thước và Màu sắc bằng mã sau

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

Bằng việc sử dụng productId, colorsizecuộc gọi đến chức năng mô-đun tùy chỉnh Api (Ex. getProductInfo()) Từ file phtml bạn sử dụng jQuery và tại chỗ Api của bạn mã

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

nếu bạn có siêu thuộc tính dưới dạng một mảng, trong đó các khóa là ID tùy chọn (ví dụ: màu sắc, kích thước) và các giá trị tùy chọn đã chọn (ví dụ: đỏ, xl), ví dụ:

$superAttributes = array(
    140 => 3310
);

sau đó bạn có thể dễ dàng có được sản phẩm đơn giản như thế này:

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

1

Nếu bạn muốn các chi tiết Sản phẩm đơn giản, hãy thử mã dưới đây

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

Giải thích: $ Tùy chọn cho simple product super_attribute valuevariance text value etcnếu bạn muốn nhận simple product id thì cần tải product by $item->getSku(); Sku là chosimple product sku

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

nhập mô tả hình ảnh ở đây

Nếu muốn báo giá thì cứ thay đổi.

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

0

Mã sau được sử dụng cho 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();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.