Magento-既存の構成可能な製品への属性の追加/削除


18

製品を削除して、既存の構成可能な製品に属性を追加または削除し直すよりも、正しい手順は何ですか。

構成可能製品を作成するとき、製品に使用する属性を選択するように求められます。

最初に選択された属性の一部を削除する必要がある製品がたくさんあります。また、最初に選択されなかった属性の追加が必要な製品もあります。

製品の削除は、これに対する最善のアプローチとは思えないため、これに関するヘルプは大歓迎です。特に他の多くのものが製品に関連付けられているため。


ここでの正しい答えは、製品を削除して新しい製品を作成することですが、この問題(およびモジュール)には解決策がありますが、自分でグーグルで
検索

これに対する解決策を見つけましたか?以下は答えですか?更新してください。
-philwinkle

まだ試していません。しかし、私はこれをすぐにテストします。答えてくれてありがとう
うまくいけ

私には色属性があり、すべての設定可能な製品とリンクされていたように、その属性は削除されました。そのリンクされた属性が見つからず、「Notice:Undefined offset:0 in /home/not1son/public_html/vendor/magento/module-configure-product/model/Product/Type/VariationMatrix.php on line 43 "。この状況に対処するには、助けが必要です。事前に感謝します。
バガシュリー

回答:


14

以下は、構成可能な製品から属性を削除するために私が使用する継ぎ目です。
これがシナリオです。
すべての構成可能製品は、brand約200の単純な関連製品を持つ約50の構成可能製品の構成可能属性としての属性で誤って作成されました。
構成可能な属性に関連付けられているすべての単純な製品は同じブランドを持っています。構想はbrand、構成可能な属性から削除し、構成可能な製品の1つの値を持つ構成可能な製品にそれを単純な属性として割り当てることです。
これを行うコードを次に示します。コードは1回だけ実行されます。アップグレードスクリプトまたは単純な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 14

@Marius、これは1.9で動作しますか?
Magentoの学習

@MagentoLearner。確かなことはわかりませんが、うまく機能する予感があります。
マリウス

@Marius、非常に迅速な返信!!! おかげで非常に多くの
Magentoの学習

@ Marius、1つのスーパー属性を追加するとします。product_idとattribute_idを持つ行をテーブルに追加するcatalog_product_super_attributeことで機能しますか?または、他のテーブルを変更する必要がありますか?以下のようstackoverflow.com/a/13381381/1749007
Magentoの学習

5

これにはデータベースを直接編集する必要があり、Magentoの最初の法則はデータベースを直接編集しないことです。

しかし、あなたが先に進むのに夢中なら、これは数ヶ月前に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」などの新しい属性の値を持つ新しいレコードを挿入します
  • 管理者に戻り、構成可能な製品をクリックすると、子製品が構成可能な製品に関連付けられていないことがわかります。
  • 子製品の1つをクリックし、適切な属性値を選択します。SKUを変更することもできます。
  • すべての子製品をエクスポートして、新しい属性とsku値を追加し、インポートし直します。または、データフローを使用せずに管理者ですべてを手動で変更する必要があります。

クレジット:https : //stackoverflow.com/questions/5658197/add-new-attribute-to-existing-configurable-product-magento

未テスト-YMMV。


2

すべての構成可能な製品から1つのスーパー製品属性(呼び出されたときに)を削除するには、データベースで次のSQLクエリを実行できます。

DELETE FROM catalog_product_super_attribute
WHERE attribute_id = <id>;

ここに、attribute_codeに関してeav_attributeテーブルに保存されている属性のidがあります。catalog_product_super_attributeテーブルは、製品をスーパー製品属性にリンクします。属性を追加および削除して、構成可能な製品を作成できます。


1
唯一のあなたは、製品IDにもフィルタに上記のSQLクエリを拡張することができ、特定の単一の製品からスーパー製品の属性を削除するには DELETE FROM catalog_product_super_attribute WHERE attribute_id = <attribute_id> AND product_id = <product_id>;
ジャダー

0

構成可能な製品を開き、複製を選択し、古い属性と新しい属性を選択し、SKUなしで複製を作成し、元の構成可能な製品と単純な製品を削除するダーティハックがあります。その後、同じSKUを複製に与えることができます。次に、新しい単純な製品を作成するだけです。

単純な製品がそれほど多くない場合は、迅速な回避策です。


適切な答えではない
ディーパックライ

0

更新モードで無料のMagmiインポートエクスポートツールを使用して、これをよりきれいに行うことができました。(理解版)

キーフィールドをエクスポートし、configurable_attributes列の設定を変更して、シンプルで構成可能なSKUSの構成可能な属性を指定し、Magmiを使用して再インポートします

元Oracleコンサルタントとして、データベース、特にMagentoのデータ構造と同じくらい複雑なデータベースを混乱させないことに同意します-これを行うには十分にテストされたツールを使用する方が良いです。


0

構成可能製品の「構成可能」属性の1つである属性を削除する必要がありました。

  • 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.