Magento-기존 구성 가능 제품에 속성 추가 / 제거


18

제품을 삭제하고 기존의 구성 가능한 제품에 속성을 추가 또는 제거하기 위해 다시 시작하는 대신 올바른 절차는 무엇입니까?

구성 가능한 제품을 작성할 때 제품에 사용할 속성을 선택하라는 메시지가 표시됩니다.

처음에 선택된 일부 속성을 제거해야하는 제품과 초기에 선택되지 않은 속성 추가가 필요한 제품이 많이 있습니다.

제품을 삭제하는 것이 이것에 대한 최선의 접근 방식처럼 보이지 않기 때문에 이에 대한 도움을 주시면 감사하겠습니다. 특히 다른 많은 것들이 제품과 관련되어 있습니다.


제품을 삭제하고 새로 만들 수 있지만이 문제에 대한 솔루션은 (내가 모듈을 생각)이있다하지만 난 염두에 대한 해결책이없는, 자신을 구글 수 있다고 생각 : 여기에 정답은
파비안 Blechschmidt

이에 대한 해결책을 찾았습니까? 아래에 해결책이 있습니까? 업데이트하십시오.
philwinkle

아직 시도하지 않았습니다. 그러나 나는 이것을 곧 테스트 할 것입니다. 답변 해 주셔서 감사합니다. 제대로 작동하면 답변으로 표시합니다.
11

내가 색상 속성을 가지고 있고 구성 가능한 모든 제품과 연결 된 것처럼. 해당 속성이 삭제 된 경우. 링크 된 속성을 찾지 못하고 "주의 : 정의되지 않은 오프셋 : 0으로 /home/not1son/public_html/vendor/magento/module-configure-product/model/Product/Type/VariationMatrix.php 오류가 표시됩니다. 43 ". 이 상황을 처리하는 데 도움이 필요합니다.
Bhagyashree

답변:


14

다음은 구성 가능한 제품에서 속성을 제거하기 위해 작동하는 이음새입니다.
이것이 시나리오입니다. 약 200 개의 간단한 관련 제품을 가진 약 50 개의 구성 가능한 제품에 대한 구성 가능한 속성으로서의
속성 brand으로 모든 구성 가능한 제품이 잘못 작성 되었습니다.
구성 가능한 속성과 관련된 모든 단순 제품의 브랜드는 동일합니다. 아이디어는 brand구성 가능한 속성에서 제거 하고 간단한 제품 중 하나의 값을 사용하여 구성 가능한 제품에 간단한 속성으로 지정하는 것입니다.
이를 수행하는 코드는 다음과 같습니다. 코드는 한 번만 실행됩니다. 업그레이드 스크립트 나 간단한 PHP 파일로 추가 할 수 있습니다.

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

위에 나열된 숫자의 경우 로컬 컴퓨터 (강력한 컴퓨터가 아님)에서 실행하는 데 약 15 초가 걸렸습니다. 이것이 최적화 될 수 있다고 확신합니다. 아마도 brand가치 를 얻기 위해 구성 가능한 제품의 모든 간단한 제품을 얻을 필요 는 없지만 귀찮게하지 않았습니다.


2
나는 이것이 이런 식으로 수행되어야한다는 것을 싫어하고 동일한 것을 달성 할 수있는 방법이 없지만 정보에 감사드립니다.
webnoob

@Marius, 1.9에서 작동합니까?
Magento Learner

@MagentoLearner. 나는 확실하지 않지만 그것이 작동하는 직감이 있습니다.
Marius

@Marius, 매우 빠른 답변 !!! 대단히 감사합니다
Magento Learner

@Marius, 하나의 슈퍼 속성을 추가하고 싶다고 가정 해보십시오. product_id 및 attribute_id가있는 행을 테이블에 추가 catalog_product_super_attribute하면 작동합니까? 아니면 다른 테이블을 수정해야합니까? 에서와 마찬가지로 stackoverflow.com/a/13381381/1749007
젠토 학습자

5

이를 위해서는 데이터베이스를 직접 편집해야하며 Magento의 제 1 법칙은 데이터베이스를 직접 편집하지 않습니다 .

그러나 진행하기에 충분히 미쳤다면 몇 개월 전에 StackOverflow에서 다루었습니다.

ucts. CE 1.6.2에서 아래 DB 해결 방법 해킹을 테스트했으며 작동하는 것 같습니다.

  • 속성 만들기
  • 적절한 속성 세트로 드래그하십시오
  • db 편집기 또는 phpmyadmin으로 이동하여 테이블 'catalog_eav_attribute'를 확인하고 마지막 항목을보고 'attribute id'를 확인한 후 제품 ID를 확인하십시오.-> catalog_product_entity로 이동하여 원하는 구성 가능한 제품을 찾고 entity_id-> this product_id입니다
  • catalog_product_super_attribute로 이동하여 product_id 및 attribute_id를 사용하여 새 레코드를 삽입하십시오 (product_super_attribute_id 참고).
  • catalog_product_super_attribute_label로 이동하여 product_super_attribute_id와 함께 새 레코드를 삽입하고 관리자에서 속성을 추가 할 때 사용한 'Color'또는 'Size'와 같은 새 속성 값
  • 관리자로 돌아가 구성 가능한 제품을 클릭하면 구성 가능한 제품과 관련된 하위 제품이 없습니다.
  • 하위 제품 중 하나를 클릭하고 적절한 속성 값을 선택하면 SKU를 변경할 수도 있습니다.
  • 모든 하위 제품을 내보내고 새 속성 및 sku 값을 추가하고 다시 가져 오면 데이터 흐름을 사용하지 않고 관리자에서 모든 항목을 수동으로 변경해야합니다.

크레딧 : /programming/5658197/add-new-attribute-to-existing-configurable-product-magento

테스트되지 않음-YMMV.


2

구성 가능한 모든 제품에서 하나의 수퍼 제품 속성을 호출하려면 데이터베이스에서이 SQL 쿼리를 실행할 수 있습니다.

DELETE FROM catalog_product_super_attribute
WHERE attribute_id = <id>;

여기, attribute_code와 관련하여 eav_attribute 테이블에 저장된 속성의 ID입니다. catalog_product_super_attribute 테이블은 제품을 수퍼 제품 속성에 연결합니다. 속성을 추가 및 제거하여 구성 가능한 제품을 작성할 수 있습니다.


1
특정 단일 제품에서 수퍼 제품 속성 만 제거하려면 위의 SQL 쿼리를 확장하여 제품 ID로 필터링 할 수도 있습니다 DELETE FROM catalog_product_super_attribute WHERE attribute_id = <attribute_id> AND product_id = <product_id>;
Judder

0

구성 가능한 제품을 연 다음 중복을 선택하고 이전 및 새 속성을 선택하고 SKU없이 복제 한 다음 원래 구성 가능한 제품 및 간단한 제품을 삭제하는 더러운 해킹이 있습니다. 그런 다음 동일한 SKU에 복제 할 수 있습니다. 그런 다음 새로운 간단한 제품을 만들어야합니다.

간단한 제품이 많지 않으면 빠른 해결 방법입니다.


정답이 아님
Deepak Rai

0

방금 업데이트 모드에서 Free Magmi 가져 오기 내보내기 도구를 사용하여 더 깨끗하게 관리했습니다. (이해 버전)

키 필드를 내보내고 configurable_attributes 열 설정을 변경하여 간단하고 구성 가능한 SKUS에서 구성 가능한 속성을 지정한 다음 Magmi를 사용하여 다시 가져옵니다.

전 오라클 컨설턴트로서 데이터베이스, 특히 Magento 데이터 구조와 같은 복잡한 데이터베이스를 엉망으로 만들지 않는다는 데 동의합니다.


0

구성 가능 제품의 "구성 가능"속성 중 하나에서 속성을 제거해야했습니다.

  • catalog_product_super_attribute에 대한 위의 참조가 정확했습니다. Navicat 데이터베이스 도구를 사용하여 몇 가지 작업을 순차적으로 수행했습니다.

    테스트를 위해 Attribute_Id를 변경하여 다른 제품에서 사용중인 다른 필드로 변경했습니다. (문제가 된 기록임을 확인했습니다). 기록 데이터의 전체 세트 (product_super_attribute_id, product_id, attribute_id, position) 인 경우에 대비하여

    마지막으로 레코드를 모두 삭제했습니다.

그 트릭을했다. 또한이 작업을 다시 수행해야한다고 가정하면서 내가 한 일을 기록했습니다.

다시 : "catalog_product_super_attribute"에서 레코드를 삭제하면 위의 다른 문제와 관련된 것으로 보이는 내 문제가 해결되었습니다.

추가 정보 : "attribute_id"를 올바른 명명 된 목록과 연관 시키려면 catalog_super_attribute_label->을보고 product_super_attribute_id를 통해 상관시켜야합니다.
관련 "attribute_id"필드를 검색하고있었습니다 (아직 찾을 수 없음).

"product_super_attribute_id"는 "attribute_id"가 실제로 무엇인지 알려주기위한 트릭을 수행합니다. (데이터베이스에서 속성이 처음 어떻게 정의되는지 확인하기 위해 "attribute_id"에 대한 "기본"데이터 세트를 계속 찾고 싶습니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.