Magento Indexer Không thêm thuộc tính vào bảng phẳng trong thuộc tính tùy chỉnh


9

Magento Không thêm Thuộc tính tùy chỉnh vào bảng phẳng ..... Tôi có tiện ích mở rộng thị trường ... có một số thuộc tính nhưng một số thuộc tính không thêm vào bảng phẳng ... do tiện ích mở rộng của tôi không hoạt động ....

cài đặt thuộc tính là ...

$catalogEavSetup->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'approval', array(
    'group' => 'General',
    'sort_order' => 21,
    'type' => 'int',
    'backend' => '',
    'frontend' => '',
    'label' => 'Approval',
    'note' => '',
    'input' => 'select',
    'class' => '',
    'source' => 'vendorsproduct/source_approval',
    'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
    'visible' => true,
    'required' => false,
    'user_defined' => false,
    'default' => '1',
    'visible_on_front' => false,
    'unique' => false,
    'is_configurable' => false,
    'used_for_promo_rules' => false,
    'used_in_product_listing'  => true,
));

toàn bộ cài đặt là chính xác..nhưng do giới hạn mysql 65536 ... một số thuộc tính không thêm vào bảng phẳng ... Tôi cần biết rằng làm thế nào để thêm các thuộc tính này trong bảng phẳng ...

Câu trả lời:


19

Bạn cần kích hoạt visible_on_frontđể đẩy vào các bảng Danh mục phẳng. Bàn phẳng loại bị ảnh hưởng bởi used_in_product_listing.

Đối với giới hạn trong MySQL tôi tin rằng đó là một câu hỏi riêng biệt và nên được chuyển ra dưới dạng Hỏi & Đáp riêng.


nó không xuất hiện trong bảng phẳng .... có cách nào tốt để lập chỉ mục hoặc nhận giá trị của thuộc tính
Deepak Rai

7
Hoàn toàn sai. Bạn chỉ cần kích hoạt "used_in_product_listing" để làm cho nó xuất hiện trên bảng catalog_product_flat.
Kingshuk Deb

Đồng ý với @KingshukDeb tôi vừa thử nghiệm và kích hoạt "used_in_product_listing" sẽ làm cho thuộc tính hiển thị trong bảng catalog_product_flat
Long MK Nguyễn

Tôi vẫn có cùng một vấn đề. Các thuộc tính đang hoạt động tốt, sản phẩm có giá trị, thực sự rất nhiều. Nhưng mặc dù, không có dữ liệu trong danh mục phẳng :(
Keenora Fluffball

Nếu bạn ở trong cùng trường hợp với @DeepakRai, bạn đã xác định mô hình nguồn của riêng mình. Nếu vậy, bạn cần thực hiện 2 phương thức để thêm thuộc tính là bảng phẳng. Tôi đã thêm một câu trả lời để giải thích làm thế nào.
Cladiuss

5

Một cách khác để thêm thuộc tính vào các bảng phẳng là đặt chúng trong config.xmlphần lối vào của bạn ...

<product>
    <collection>
        <attributes>
            <attribute_code/>
        </attributes>
    </collection>
</product>

2

Đối với tôi nó là đủ để chỉ đặt "used_in_product_listing" => true

'attribute_code' => array(
    'type'                          => 'int',
    'input'                         => 'select',
    'global'                        => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
    'required'                      => 0,
    'is_configurable'               => 0,
    'visible_in_advanced_search'    => 0,
    'comparable'                    => 0,
    'is_html_allowed_on_front'      => 0,
    'user_defined'                  => 1,
    'used_in_product_listing'       => 1,
    'source'                        => 'eav/entity_attribute_source_boolean',
)

và chạy catalog_product_flat reindex để lấy thuộc tính sản phẩm trong bảng phẳng:

php shell/indexer.php --reindex catalog_product_flat

Nó cũng hoạt động trên các thuộc tính Magento cốt lõi ( quantity_and_stock_statuscụ thể)?
Mateusz Serotiuk

Không. Stock là một thực thể riêng biệt trong Magento và nó không được bao gồm trong các bảng phẳng của catalog_product_flat. Vì vậy, bạn cần sử dụng mô hình Magento riêng biệt để có được qty.
vpodorozh

1

Như đã nói trong các câu trả lời khác, bạn cần used_in_product_listingphải được đặt thành 1.

Nhưng khi bạn đã xác định một mô hình nguồn ( 'source' => 'vendorsproduct/source_approval',), bạn có thể cần thêm một bước:

Trong mô hình nguồn của bạn, rất có thể bạn đã mở rộng Mage_Eav_Model_Entity_Attribute_Source_Abstractvà đã triển khai getAllOptions.

Nhưng bạn cũng cần thực hiện hai phương pháp nữa:

  • getFlatColums (đây không phải là một lỗi đánh máy, không có "n")
  • getFlatUpdateSelect

Để thực hiện chúng, lấy ví dụ từ mô hình nguồn gốc Magento Mage_Eav_Model_Entity_Attribute_Source_Boolean.

Dưới đây là một ví dụ về những gì bạn nên kết thúc với:

class Vendor_Products_Model_Source_Approval
    extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
{
    /**
     * Option values
     */
    const VALUE_APPROVED = 1;
    const VALUE_NOT_APPROVED = 0;


    /**
     * Retrieve all options array
     *
     * @return array
     */
    public function getAllOptions()
    {
        if (is_null($this->_options)) {
            $this->_options = array(
                array(
                    'label' => Mage::helper('vendorsproduct')->__('Yes'),
                    'value' => self::VALUE_APPROVED
                ),
                array(
                    'label' => Mage::helper('vendorsproduct')->__('No'),
                    'value' => self::VALUE_NOT_APPROVED
                ),
            );
        }
        return $this->_options;
    }

    /**
     * Retrieve option array
     *
     * @return array
     */
    public function getOptionArray()
    {
        $_options = array();
        foreach ($this->getAllOptions() as $option) {
            $_options[$option['value']] = $option['label'];
        }
        return $_options;
    }

    /**
     * Get a text for option value
     *
     * @param string|integer $value
     * @return string
     */
    public function getOptionText($value)
    {
        $options = $this->getAllOptions();
        foreach ($options as $option) {
            if ($option['value'] == $value) {
                return $option['label'];
            }
        }
        return false;
    }

    /**
     * Retrieve flat column definition
     *
     * @return array
     */
    public function getFlatColums()
    {
        $attributeCode = $this->getAttribute()->getAttributeCode();
        $column = array(
            'unsigned'  => false,
            'default'   => null,
            'extra'     => null
        );

        if (Mage::helper('core')->useDbCompatibleMode()) {
            $column['type']     = 'tinyint(1)';
            $column['is_null']  = true;
        } else {
            $column['type']     = Varien_Db_Ddl_Table::TYPE_SMALLINT;
            $column['length']   = 1;
            $column['nullable'] = true;
            $column['comment']  = $attributeCode . ' column';
        }

        return array($attributeCode => $column);
    }

    /**
     * Retrieve Select For Flat Attribute update
     *
     * @param int $store
     * @return Varien_Db_Select|null
     */
    public function getFlatUpdateSelect($store)
    {
        return Mage::getResourceModel('eav/entity_attribute')
            ->getFlatUpdateSelect($this->getAttribute(), $store);
    }
}
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.