Magento - Thêm / Xóa các thuộc tính cho các sản phẩm có thể cấu hình hiện có


18

Quy trình đúng là gì - thay vì xóa sản phẩm và bắt đầu lại để thêm hoặc xóa thuộc tính cho các sản phẩm có thể định cấu hình hiện có.

Khi tạo một sản phẩm có thể định cấu hình, bạn được yêu cầu chọn thuộc tính nào sẽ sử dụng cho sản phẩm.

Tôi có rất nhiều sản phẩm bây giờ tôi cần loại bỏ một số thuộc tính đã được chọn ban đầu và một số thuộc tính cũng cần thêm thuộc tính không được chọn ban đầu.

Bất kỳ trợ giúp nào về điều này đều được đánh giá cao - vì việc xóa các sản phẩm dường như không phải là cách tiếp cận tốt nhất cho việc này. Đặc biệt là rất nhiều thứ khác liên quan đến các sản phẩm.


Câu trả lời đúng ở đây là: xóa sản phẩm và tạo một sản phẩm mới, nhưng có giải pháp cho vấn đề này (và tôi nghĩ rằng các mô-đun) nhưng tôi nghĩ bạn có thể tự google, tôi không có giải pháp nào cho vấn đề này
Fabian Blechschmidt

Bạn đã tìm thấy một giải pháp cho điều này? Là câu trả lời dưới đây là giải pháp? Vui lòng cập nhật.
philwinkle

Tôi chưa thử nó. Nhưng tôi sẽ sớm thử nghiệm điều này. Cảm ơn rất nhiều vì đã trả lời - Tôi sẽ đánh dấu là đã trả lời nếu nó hoạt động
eleven11

Giống như tôi có một thuộc tính màu và nó được liên kết với tất cả các sản phẩm có thể định cấu hình. Trong trường hợp thuộc tính đó đã bị xóa. Vì vậy, nó không tìm thấy thuộc tính được liên kết ở đó và hiển thị lỗi là "Thông báo: Không xác định offset: 0 in /home/not1son/public_html/vendor/magento/module-configure-product/model/ Productt / Type / VariationMatrix.php trên dòng 43 ". Cần giúp đỡ để xử lý tình huống này. Cảm ơn trước.
Bhagyashree

Câu trả lời:


14

Đây là những đường nối hoạt động với tôi để loại bỏ một thuộc tính khỏi sản phẩm có thể định cấu hình.
Đây là kịch bản.
Tất cả các sản phẩm có thể định cấu hình được tạo sai với thuộc tính brandlà thuộc tính có thể định cấu hình cho khoảng 50 sản phẩm có thể định cấu hình có khoảng 200 sản phẩm được liên kết đơn giản.
Tất cả các sản phẩm đơn giản liên quan đến một thuộc tính cấu hình có cùng một thương hiệu. Ý tưởng là loại bỏ brandkhỏi các thuộc tính có thể cấu hình và gán nó như một thuộc tính đơn giản cho sản phẩm có thể định cấu hình với giá trị của một trong những sản phẩm đơn giản.
Đây là mã làm điều này. Mã chỉ được chạy một lần. Nó có thể được thêm vào trong một kịch bản nâng cấp hoặc một tệp php đơn giản.

<?php
//==>this is required only if you use a simple php file
error_reporting(E_ALL | E_STRICT);
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
umask(0);
Mage::app();
//<==

$brand = 'brand';
//get the attribute instance
$brandAttribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $brand);
//if this attribute exists
if ($brandAttribute->getId()){
    //make the attribute apply to al types of products in case it's not
    $brandAttribute->setApplyTo(null);
    $brandAttribute->save();
    $resource = Mage::getSingleton('core/resource');
    //get an object with access to direct queries
    $connection = $resource->getConnection('core_write');
    //get all configurable products - you can specify additional filters here
    $collection = Mage::getModel('catalog/product')->getCollection()
        ->addAttributeToFilter('type_id', 'configurable');
    foreach ($collection as $product){
        //the configurable attributes are stored in the table 'catalog_product_super_attribute'
        //remove the attribute references from that table. 
        //The constraints will take care of the cleanup.
        $q = "DELETE FROM {$resource->getTableName('catalog_product_super_attribute')}
            WHERE attribute_id = {$brandAttribute->getId()} AND product_id = {$product->getId()}";
        $connection->query($q);
        //get the simple products in the configurable product
        $usedProducts =  $product->getTypeInstance(true)->getUsedProducts(null, $product);
        foreach ($usedProducts as $p){
            //identify the first simple product that has a value for brand 
            //set that value to the configurable product.
            if ($brandValue = $p->getData($brand)){
                Mage::getSingleton('catalog/product_action')
                    ->updateAttributes(array($product->getId()), array($brand=>$brandValue), 0);
                break;
            }
        }
    }
}

Đối với các số được liệt kê ở trên, việc này mất khoảng 15 giây để chạy trên máy cục bộ của tôi (không phải là số mạnh). Tôi chắc chắn rằng điều này có thể được tối ưu hóa. Hầu hết có lẽ không cần phải lấy tất cả các sản phẩm đơn giản của một sản phẩm có thể định cấu hình để nhận được brandgiá trị, nhưng tôi không bận tâm.


2
Tôi ghét rằng nó phải được thực hiện theo cách này và không có phương pháp để đạt được điều tương tự nhưng cảm ơn thông tin.
webnoob

@Marius, cái này có hoạt động cho 1.9 không?
Học viên Magento

@MagentoLearner. Tôi không biết chắc chắn nhưng tôi có linh cảm nó hoạt động.
Marius

@Marius, trả lời rất nhanh !!! cảm ơn rất nhiều
Học viên Magento

@Marius, Giả sử tôi muốn thêm một siêu thuộc tính. Bằng cách thêm một hàng với product_id và property_id vào bảng catalog_product_super_attributesẽ hoạt động? Hoặc nếu không tôi cần phải sửa đổi các bảng khác? Giống như trong stackoverflow.com/a/13381381/1749007
Người học Magento

5

Điều này yêu cầu chỉnh sửa trực tiếp cơ sở dữ liệu và luật đầu tiên của Magento là không trực tiếp chỉnh sửa cơ sở dữ liệu .

Nhưng nếu bạn đủ điên rồ để tiếp tục, điều này đã được trình bày trên StackOverflow vài tháng trước:

thuốc bổ. Tôi đã thử nghiệm cách khắc phục DB bên dưới trên CE 1.6.2 và có vẻ như nó đang hoạt động:

  • Tạo thuộc tính
  • Kéo nó vào tập thuộc tính thích hợp
  • Đi tới trình soạn thảo db hoặc phpmyadmin, bảng 'catalog_eav_attribution' và xem cái cuối cùng, lưu ý 'id thuộc tính', cũng lưu ý id sản phẩm -> đi tới catalog_product_entity và tìm sản phẩm có thể định cấu hình mà bạn muốn và ghi chú thực thể có thể định cấu hình -> là sản phẩm
  • Truy cập catalog_product_super_attribution và chèn bản ghi mới với sản phẩm_id và property_id, lưu ý về sản phẩm_super_attribution_id
  • Truy cập catalog_product_super_attribution_label và chèn bản ghi mới với sản phẩm_super_attribution_id và giá trị của thuộc tính mới của bạn, như 'Màu' hoặc 'Kích thước' mà bạn đã sử dụng khi thêm thuộc tính trong quản trị viên
  • Quay trở lại quản trị viên và nhấp vào sản phẩm có thể định cấu hình, bạn sẽ thấy không có sản phẩm con nào được liên kết với sản phẩm có thể định cấu hình của bạn.
  • Nhấp vào một trong các sản phẩm con và chọn giá trị thuộc tính phù hợp, bạn cũng có thể thay đổi sku.
  • Xuất tất cả các sản phẩm con và thêm thuộc tính mới và giá trị sku vào nó, nhập lại và bạn đã hoàn tất hoặc bạn có thể phải thay đổi thủ công tất cả trong quản trị viên mà không cần sử dụng dataflow.

Tín dụng: /programming/5658197/add-new-attribution-to-ex hiện-configurable-products-magento

Chưa được kiểm tra - YMMV.


2

Để xóa một thuộc tính siêu sản phẩm (như chúng được gọi) khỏi tất cả các sản phẩm có thể định cấu hình, bạn có thể thực hiện truy vấn SQL này trong cơ sở dữ liệu:

DELETE FROM catalog_product_super_attribute
WHERE attribute_id = <id>;

Ở đây, là id của thuộc tính được lưu trữ trong bảng eav_attribution liên quan đến property_code. Bảng catalog_product_super_attribution liên kết các sản phẩm với các thuộc tính siêu sản phẩm. Bạn có thể thêm và xóa các thuộc tính để tạo các sản phẩm có thể cấu hình ở đó.


1
Để chỉ xóa thuộc tính siêu sản phẩm khỏi một sản phẩm cụ thể, bạn có thể mở rộng truy vấn SQL ở trên để lọc cũng trên ID sản phẩm DELETE FROM catalog_product_super_attribute WHERE attribute_id = <attribute_id> AND product_id = <product_id>;
Judder

0

Có hack bẩn để mở sản phẩm có thể cấu hình sau đó chọn trùng lặp, chọn thuộc tính cũ và mới, sao chép được tạo mà không có SKU, sau đó xóa sản phẩm có thể định cấu hình ban đầu và các sản phẩm đơn giản. Sau đó, bạn có thể cung cấp cùng một SKU để nhân đôi. Sau đó, bạn chỉ cần làm cho các sản phẩm đơn giản mới.

Đó là cách giải quyết nhanh nếu không có nhiều sản phẩm đơn giản.


Không phải là một câu trả lời thích hợp
Deepak Rai

0

Tôi vừa mới quản lý để làm điều này rõ ràng hơn bằng cách sử dụng công cụ xuất nhập khẩu miễn phí Magmi trong chế độ cập nhật. (phiên bản hiểu)

Xuất các trường khóa, thay đổi cài đặt cột configureable_attribution để chỉ định các thuộc tính có thể định cấu hình trên SKUS đơn giản và có thể định cấu hình sau đó nhập lại bằng Magmi

Là một cựu Tư vấn viên của Oracle, tôi đồng ý không gây rối với cơ sở dữ liệu, đặc biệt là cấu trúc dữ liệu Magento phức tạp - tốt hơn là sử dụng một công cụ đã được thử nghiệm tốt để thực hiện việc này.


0

Tôi cần xóa Thuộc tính khỏi một trong những thuộc tính "Có thể định cấu hình" cho Sản phẩm có thể định cấu hình.

  • Các tham chiếu ở trên về catalog_product_super_attribution đã đúng. Sử dụng công cụ cơ sở dữ liệu Navicat tôi đã làm tuần tự một vài điều.

    Để thử nghiệm đã thay đổi Attribution_Id, nó đã thay đổi nó thành một trường khác đang được sử dụng trong các sản phẩm khác. (Xác nhận đó là hồ sơ có vấn đề). Đã ghi xuống, chỉ trong trường hợp, toàn bộ dữ liệu bản ghi (sản phẩm_super_attribution_id, sản phẩm_id, thuộc tính_id, vị trí)

    Cuối cùng đã xóa tất cả các bản ghi lại với nhau.

Điều đó đã lừa Tôi cũng giữ một ghi chú về những gì tôi đã làm giả sử tôi sẽ cần phải làm điều này một lần nữa.

Một lần nữa: Xóa Bản ghi trong "catalog_product_super_attribution" đã giải quyết vấn đề của tôi có vẻ liên quan đến những người khác ở trên.

Thông tin bổ sung: để tương quan "property_id" với danh sách được đặt tên chính xác, điều quan trọng là phải xem: catalog_super_attribution_label -> và tương quan thông qua sản phẩm_super_attribution_id.
Tôi đã tìm kiếm một trường "property_id" liên quan (chưa tìm thấy).

"Product_super_attribution_id" thực hiện thủ thuật cho bạn biết "property_id" thực sự là gì. (Tôi vẫn muốn tìm tập dữ liệu "mặc định" cho "property_id" để xem thuộc tính được xác định đầu tiên trong cơ sở dữ liệu như thế nào).

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.