2011-02-10 39 views
13

Tôi không thể tìm ra điều này!nhận được một mảng của tất cả các thuộc tính sản phẩm trong magento

Tôi đang cố gắng lấy danh sách thuộc tính sản phẩm vào một mảng trên trang list.phtml. Tôi đã thử mọi thứ. Tôi đã thấy rất nhiều giải pháp sử dụng

$attributes = $product->getAttributes(); 

nhưng tôi không thể làm việc này, nó chỉ hiển thị một trang trống. Bất kỳ trợ giúp sẽ được đánh giá rất nhiều, tôi đã dành hàng giờ đồng hồ về vấn đề này cho đến nay ...

Tôi đang sử dụng phiên bản Magento 1.4.2.0

UPDATE: Đây là chính xác những gì tôi đang cố gắng để làm:

$neededAttributes = Mage::helper('mymodule')->getNeededAttributes(); 
$attributes = $product->getAttributes(); 
foreach ($attributes as $attribute) { 
    if(in_array($attribute->getAttributeCode(), $neededAttributes)) { 
     $attributename = $attribute->getAttributeCode(); 
    echo $attributename; 
    } 
} 

này nằm ở cùng gallery.phtml tập tin trong thiết kế/adminhtml/default/default/Danh mục hàng/sản phẩm/helper/

Đối với một số lý do, tôi không thể có được chức năng getAttributeCode trở lại bất cứ điều gì.

+0

bạn đã thử lấy bộ sưu tập sản phẩm trước chưa? – kjy112

+1

Bạn đã sử dụng gỡ lỗi từng bước với trình gỡ lỗi như XDebug chưa? – greg0ire

+1

Bạn có hỏi giá trị của các thuộc tính cho sản phẩm cụ thể đó hoặc danh sách tất cả các mã thuộc tính có thể không? –

Trả lời

23

Tôi đoán bạn cần danh sách chỉ các giá trị hiển thị. Tôi nói "giá trị" bởi vì các thuộc tính không phải là giá trị thực, chúng là các bộ mô tả. Sau đây là những phần nổi bật từ Mage_Mage_Catalog_Block_Product_View_Attributes:

$attributes = $product->getAttributes(); 
foreach ($attributes as $attribute) { 
    if ($attribute->getIsVisibleOnFront()) { 
     $value = $attribute->getFrontend()->getValue($product); 
     // do something with $value here 
    } 
} 

Bạn không thực sự cần phải lặp lại mặc dù điều này vì bạn có thể thay đổi/sử dụng mẫu catalog/product/view/attributes.phtml mà đã được công bố trên trang xem sản phẩm như attributes khối.

+0

điều này thật tuyệt vời và hoạt động trên giao diện người dùng, nhưng tôi đang cố gắng sử dụng điều này trong thư viện tập tin html trong thiết kế/adminhtml/default/default/catalog/product/helper/- bất kỳ ý tưởng nào? Dường như không thể lấy biến sản phẩm theo cùng cách – Chad

+0

Tôi đã đăng chính xác những gì tôi đang cố gắng thực hiện trong bài đăng gốc của mình. Hy vọng bạn có thể giúp! – Chad

+0

Vì bạn không thực sự cần các giá trị của sản phẩm, nó có hoạt động không nếu bạn tạo một sản phẩm trống với 'Mage :: getModel ('catalogue/product')'? Điều này có thể không tôn trọng các thuộc tính khác nhau, tôi không chắc chắn làm thế nào để tìm ra điều đó. – clockworkgeek

6

Đó là khá dễ dàng và mang đến cho bạn một loạt các sản phẩm có sẵn thuộc tính tên

$product = Mage::getModel('catalog/product')->load('product_id'); 
$attributeNames = array_keys($product->getData()); 
print_r($attributeNames); 

Nếu bạn cần một bộ sưu tập đối tượng thuộc tính bạn có thể gọi

$product->getAttributes(); 

Nếu bạn cần một bộ sưu tập sản phẩm và sau đó bạn có thể thực hiện các cách được đề cập trước đây trên từng thành viên trong bộ sưu tập

Mage::getModel('catalog/product')->getCollection(); 
+0

Cũng có thể lưu ý rằng bạn cần đặt "Được sử dụng trong Danh sách sản phẩm"> Có trong cài đặt Thuộc tính –

+0

Tôi nhận mảng này [0] => Mảng ( [entity_id] => 12 [entity_type_id] => 4 [attribute_set_id] => 4 [type_id] => đơn giản [sku] => 20.707 [has_options] => 1 [required_options] => 1 [created_at] => 2016/01/06 21:15 : 31 [updated_at] => 2016-10-03 00:49:21 ) Làm cách nào để có được các thuộc tính bổ sung như tên, hình ảnh sản phẩm, mô tả, v.v. –

14

Theo câu hỏi của bạn, bạn nên sử dụng Mage::getResourceModel('catalog/product_attribute_collection') thay vì:

$productAttrs = Mage::getResourceModel('catalog/product_attribute_collection'); 

foreach ($productAttrs as $productAttr) { /** @var Mage_Catalog_Model_Resource_Eav_Attribute $productAttr */ 
    var_dump($productAttr->getAttributeCode()); 
} 

Bạn không luôn luôn có các thuộc tính trong _data (getData()) lưu trữ và bạn không luôn luôn cần phải tải một sản phẩm để có được thuộc tính của nó.

+1

Gist với mảng thân thiện cho chọn. https://gist.github.com/jruzafa/8776453a13717ff7b5a1 – jruzafa

+0

Cảm ơn bạn đã trả lời! –

Các vấn đề liên quan