2010-01-19 37 views
29

Tôi đang cố gắng lấy tên thuộc tính trong mẫu xem sản phẩm Magento. Tôi có thể nhận giá trị thuộc tính theo số $_product->getAttributeText('attribute'), nhưng làm cách nào để có được tên thuộc tính?Làm cách nào để có tên thuộc tính?

Tôi muốn hiển thị thuộc tính chỉ khi thuộc tính thuộc một tập hợp thuộc tính nhất định.

Trả lời

66

Bất cứ khi nào bạn có một đối tượng sản phẩm, bạn có thể truy cập vào thuộc tính của nó thiết lập như thế này:

$attributeSetModel = Mage::getModel("eav/entity_attribute_set"); 
$attributeSetModel->load($product->getAttributeSetId()); 
$attributeSetName = $attributeSetModel->getAttributeSetName(); 

này sẽ cung cấp cho bạn tên của thuộc tính được thiết lập, sau đó bạn có thể so sánh sử dụng strcmp:

if(0 == strcmp($attributeSetName, 'My Attribute Set')) { 
    print $product->getAttributeText('attribute'); 
} 

Hy vọng điều đó sẽ hữu ích!

+0

Một người dùng ẩn danh cung cấp đề xuất chỉnh sửa, sửa '$ attributeSet' thành' # attributeSetName'. Nó có vẻ hợp lý, và vì vậy tôi đã chấp thuận nó. Tuy nhiên, tôi không biết ngôn ngữ này, vì vậy hãy kiểm tra xem nó có đúng không. – abcd

+0

Dòng cuối cùng nên đọc: '$ attributeSetName = $ attributeSetModel-> getAttributeSetName();' không có ')' ở cuối – Yeroon

+0

Lựa chọn kỳ lạ của hàm strcmp? Tại sao không sử dụng so sánh trực tiếp với ===? –

1

Câu trả lời của Joe yêu cầu một vài thay đổi để nó hoạt động.

Trước tiên, nó phải là $ _product chứ không phải là $ sản phẩm và thứ hai có lỗi ')' ở dòng cuối cùng.

Các mã sau đây nên chính xác:

$attributeSetModel = Mage::getModel("eav/entity_attribute_set"); 
$attributeSetModel->load($_product->getAttributeSetId()); 
$attributeSetName = $attributeSetModel->getAttributeSetName(); 
24

Đối sexyness hơn bạn có thể rút ngắn nó để:

$attributeSetName = Mage::getModel('eav/entity_attribute_set')->load($_product->getAttributeSetId())->getAttributeSetName(); 
13

Hãy thử đoạn mã sau:

$entityTypeId = Mage::getModel('eav/entity') 
                ->setType('catalog_product') 
                ->getTypeId(); 
$attributeSetName   = 'Default'; 
$attributeSetId     = Mage::getModel('eav/entity_attribute_set') 
                    ->getCollection() 
                    ->setEntityTypeFilter($entityTypeId) 
                    ->addFieldToFilter('attribute_set_name', $attributeSetName) 
                    ->getFirstItem() 
                    ->getAttributeSetId(); 
echo $attributeSetId; 

Tìm thêm thông tin về Bộ thuộc tính trong số following article.

Cảm ơn

0

So với một giá trị văn bản có thể có vấn đề nếu người dùng quyết định sau này thay đổi điều đó văn bản - đó là dễ dàng để làm trong Magento cho bộ thuộc tính. Một lựa chọn khác là sử dụng id cơ bản thay vào đó sẽ không bao giờ thay đổi.

Bạn có thể có được điều này bằng cách tìm giá trị của cột attribute_set_id trong cơ sở dữ liệu sử dụng

select * from eav_attribute_set; 

Con số này cũng nằm trong liên kết chỉnh sửa trong admin, cái này được in đậm dưới đây

http://.../index.php/admin/catalog_product_set/edit/id//key/6fe89fe2221cf2f80b82ac2ae457909ce04c92c51716b3e474ecad672a2ae2f3/

Mã của bạn sau đó sẽ chỉ sử dụng thuộc tính đó của sản phẩm. Căn cứ vào id của 10 trong liên kết trên đây sẽ chỉ là

if (10 == $_product->getAttributeSetId()) { 
    //Do work 
} 
Các vấn đề liên quan