グループ化された製品属性の処理


9

私は新しいMagentoショップの構築に取り組んでいます(これはMagentoでの初めての作業です)。

私は、少なくともレイアウトの点で、私の製品ページの既存のショップの外観を複製したいと思っています。

http://www.panamericantool.com/cobalt-drills/drill-stops.html

http://www.panamericantool.com/screw-driver-bits/paint-cutters.html

私は、グループ化された製品を使用する必要があることを理解しました。単純な製品で、私が求めているようなものを作成します。

上記の例では、各製品に個別の属性があります。これらはMagentoの異なる属性セットを介して行われると想定しています。

ただし、テーマでこれらのさまざまなテーブルの見出し/値をどのように表示するのでしょうか。

できること、->getAttributeName()またはファイルでできることはわかっ->getAttribute('attribute_code')ていgrouped.phtmlますが、これは膨大な量にif (->getAttributeName() != '')...なり、さらに追加する場合はテンプレートを変更する必要があります。

すべての属性を取得してループする方法は確かにありますが、meta_description属性($_product->getData()メソッドによっても返されます)と表にリストしたい属性をどのように区別しますか?

彼らが持っているものに似たものをどのようにして達成できますか?

私はまた、ショップが発売時に5k製品を持ち、残りの在庫を追加するとおそらく25k-30kに成長するパフォーマンスについても心配しています。これらの多くは異なる属性を必要としますが、あまりパフォーマンスの問題を起こさずに属性セット間で属性を共有できると思いますか?


更新:

私はこれをいじり続けましたが、すべての製品属性を取得するためにこれを見つけましたが、グループ化された製品テーブルの特定の値を表示する簡単な方法がまだわかりませんか?

$attributes = Mage::getModel('catalog/product_attribute_api')->items($_product->getAttributeSetId());
foreach($attributes as $_attribute){
    print_r($_attribute);
}

属性の「フロントエンドの製品ビューページに表示」プロパティを使用して、製品ページに表示するかどうかを決定しませんか?
BlueC、2016年

回答:


2

これはあなたが必要とするものでなければなりません:

$product->getResource()->getAttribute('attribute_code')->getStoreLabel();

しかし、これは単一の属性を取得するだけです。異なる製品の異なる属性を表示する方法が必要です-OPに含めたリンクに従って?
トムグリーン

2

表示する属性を指示する属性を作成しませんか?

最終的に、属性コード文字列であるグループ化された製品の2つのテキスト属性の値をロードするモジュールを作成しました。基本的に、その属性リスト文字列を分解し、ループして関連する製品属性データをロードするヘルパー。

私が私の属性を作成します。

grouped_attr_array

グループ化された製品の設計属性セットに属性を追加し、次にそれらを製品データのセミコロン区切りフィールドとして追加します。

torque_range;torque_increments;torque_accuracy

このコードを自分のモジュールからプルしました。これは、属性値に基づいてデフォルト属性のロードまたは非表示をさらに実行しており、モジュールはもう少し複雑です。しかし、表に示されているデータを取得するために、これらはコア関数の一部です。うまくいけば、上に構築するためのアイデアを提供します。これはmagento 1.9.2を使用しています

モジュールのヘルパー:

public function findAttributes($product, $attributes)
{
    //determined by attribute with id to add additional attributes to the table
    //string needs to be ; separated in ADMIN
    $strattributes = $product->getResource()->getAttribute('grouped_attr_array')->getFrontend()->getValue($product);
    if ($strattributes) {
        $strattributes = explode(';', $strattributes, 5);
        foreach ($strattributes as $additionAttribute) {
            //make sure these are valid attributes
            if ($product->getResource()->getAttribute($additionAttribute)) {
                array_push($attributes, $additionAttribute);
            }
        }
    }
}

public function groupedAttrDump($groupedProduct, $attributes)
{
    $cells = [];
    foreach ($attributes as $attrCode) {
        $attrText = $groupedProduct->getResource()->getAttribute($attrCode);
        if($attrText){
            array_push($cells, $attrText->getFrontend()->getValue($groupedProduct));
        }
    }
    return $cells;
}

public function groupedAttrHeaders($currentProduct, $attributes)
{
    $theads = [];
    foreach ($attributes as $attrCode) {
        $headerText = $currentProduct->getResource()->getAttribute($attrCode);
        if($headerText){
            $headerText = $headerText->getStoreLabel();
            array_push($theads,$headerText);
        }

    }
    return $theads;
}

groupedproduct.phtmlのヘルパーからデータを取得する

$attrrSetName = Mage::getModel("eav/entity_attribute_set")->load($_product->getAttributeSetId())->getAttributeSetName();
$tableAttributes = Mage::helper('groupedtable')->findAttributes($_product, $attrrSetName);

THの

     <?php foreach (Mage::helper('groupedtable')->groupedAttrHeaders($_product, $tableAttributes) as $attrLabel ): ?>
        <th><?php echo $attrLabel ?> </th>
     <?php endforeach; ?>

TDはテーブルです

<?php foreach (Mage::helper('groupedtable')->groupedAttrDump($_associatedProduct, $tableAttributes) as $attr ):?>
        <td><?php if($attr != 'No'){ echo $attr; } ?></td>
   <?php endforeach; ?>

ストアで使用可能な属性に基づいてその属性を選択する方法を構築したいと思います。多分これを行うにはもっと良い方法があるでしょう。まだそれに達していません。

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