处理分组的产品属性


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()方法返回)和我想要在表中列出的属性呢?

我怎样才能取得类似于他们所拥有的东西?

我还担心商店的性能会在发布时提供5,000种产品,随着我们增加剩余库存,可能会增加到25k-30k。其中许多将需要不同的属性,但是我想我可以在属性集之间共享属性而不会出现太多性能问题?


更新:

我一直在处理这个问题,发现它可以获取所有产品属性,但是我仍然不知道在分组的产品表上显示某些值的简单方法吗?

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

为什么不使用属性的“在前端的产品视图页面上可见”属性来确定是否在产品页面上显示它?
BlueC

Answers:


2

这应该是您需要的:

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

但这只会得到一个属性,我需要一种显示不同产品的不同属性的方法-根据我在OP中包含的链接吗?
汤姆·格林

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

我想建立一种根据商店的可用属性选择属性的方法。也许还有更好的方法可以做到这一点。还没有做到这一点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.