Xử lý các thuộc tính sản phẩm được nhóm


9

Tôi đang làm việc để xây dựng một cửa hàng Magento mới (đây là lần đầu tiên của tôi với Magento).

Tôi đang tìm cách tái tạo diện mạo của một cửa hàng hiện có cho các trang sản phẩm của mình, ít nhất là về mặt bố cục:

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

http://www.panamericantool.com/screw-do-bits/paint-cutter.html

Tôi đã nhận ra rằng tôi cần sử dụng các sản phẩm được nhóm lại, với các sản phẩm đơn giản để tạo ra thứ mà tôi đang theo đuổi.

Trong các ví dụ trên, mỗi sản phẩm có các thuộc tính riêng biệt, tôi giả sử chúng được thực hiện thông qua các bộ thuộc tính khác nhau trong Magento.

Tuy nhiên, làm thế nào để họ hiển thị các tiêu đề / giá trị bảng khác nhau trong chủ đề?

Tôi biết tôi có thể làm ->getAttributeName()hoặc ->getAttribute('attribute_code')trong grouped.phtmltệp, nhưng điều này sẽ dẫn đến một lượng lớn if (->getAttributeName() != '')...và tôi cần thay đổi mẫu khi thêm nhiều hơn.

Tôi chắc chắn có một cách để có được tất cả các thuộc tính và lặp qua chúng, nhưng sau đó bạn sẽ phân biệt giữa meta_descriptionthuộc tính nói như thế nào (cũng được trả về bởi $_product->getData()phương thức) và một thuộc tính tôi muốn liệt kê trong bảng?

Làm thế nào tôi có thể đạt được một cái gì đó giống với những gì họ có?

Tôi cũng lo ngại về hiệu suất cửa hàng sẽ có 5k sản phẩm khi ra mắt, tăng lên khoảng 25k-30k khi chúng tôi thêm cổ phiếu còn lại của chúng tôi. Nhiều trong số này sẽ cần các thuộc tính khác nhau, nhưng tôi đoán tôi có thể chia sẻ các thuộc tính giữa các bộ thuộc tính mà không có quá nhiều vấn đề về hiệu suất?


Cập nhật:

Tôi đã tiếp tục chơi với điều này, tôi đã tìm thấy điều này để có được tất cả các thuộc tính sản phẩm, tuy nhiên tôi vẫn không biết một cách đơn giản để hiển thị trên các giá trị nhất định trên bảng sản phẩm được nhóm?

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

Tại sao không sử dụng thuộc tính "Hiển thị trên trang xem sản phẩm trên giao diện người dùng" của thuộc tính để xác định xem có hiển thị nó trên trang sản phẩm không?
BlueC

Câu trả lời:


2

Đây phải là những gì bạn cần:

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

Nhưng điều này sẽ chỉ có một thuộc tính duy nhất, tôi cần một cách hiển thị các thuộc tính khác nhau cho các sản phẩm khác nhau - theo các liên kết tôi có trong OP?
Tom Green

2

Tại sao không tạo một thuộc tính cho nó biết những thuộc tính nào sẽ hiển thị?

Cuối cùng tôi đã tạo ra một mô-đun tải giá trị của hai thuộc tính văn bản cho các sản phẩm được nhóm là các chuỗi mã thuộc tính. Về cơ bản, một trình trợ giúp Phát nổ chuỗi danh sách thuộc tính đó và vòng qua nó để tải dữ liệu thuộc tính của sản phẩm được liên kết.

Tạo một thuộc tính tôi gọi là của tôi:

grouped_attr_array

Thêm thuộc tính vào thuộc tính thiết kế của sản phẩm được nhóm trong quản trị viên và sau đó chúng là trường phân tách dấu chấm phẩy trong dữ liệu sản phẩm

torque_range;torque_increments;torque_accuracy

Tôi lấy mã này từ mô-đun của tôi. Đó là thực hiện thêm một số tải hoặc ẩn các thuộc tính mặc định dựa trên một giá trị thuộc tính và mô-đun phức tạp hơn một chút. Nhưng để có được dữ liệu hiển thị trong bảng, đây là một số chức năng cốt lõi. Hy vọng nó cung cấp cho bạn một ý tưởng để xây dựng trên. Đây là sử dụng magento 1.9.2

Người trợ giúp của Mô-đun:

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

Lấy dữ liệu từ người trợ giúp trong 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; ?>

Bàn của TD

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

Tôi muốn xây dựng cách chọn thuộc tính đó dựa trên các thuộc tính có sẵn của cửa hàng. Có lẽ có nhiều cách tốt hơn để làm điều này quá. Chưa nhận được điều đó.

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.