Magento按entity_id排序

时间:2012-06-13 09:41:51

标签: magento

是否有人知道如何在前端显示entity_id作为可排序属性?我去管理属性,我不能添加entity_id作为属性,因为它说

“属性代码'entity_id'由系统保留。请尝试其他属性代码”

所以我尝试使用以下SQL CMD在Magento的整个数据库中进行搜索:

select attribute_id from eav_attribute where attribute_code = 'updated_at';

它返回零结果,我尝试了其他属性,那些显示......

有没有人知道如何添加entity_id作为属性,因为我甚至无法将其显示为可见因为我不知道在搜索整个数据库时该attribute_id#是什么。

以下是我用来在magento的管理部分显示属性的代码:

UPDATE `catalog_eav_attribute` 
SET `is_visible` = '1' 
WHERE `catalog_eav_attribute`.`attribute_id` = 105;

我已经尝试过几天寻找高低,尝试不同的变化 - 所以坚持到这一点,任何帮助都会很棒。

我正在使用Magento Enterprise 12.2,如果这有帮助,但说实话,数据库与社区版本没什么不同,唯一的区别是添加的模块,但是当涉及到产品时,它几乎是相同的。

1 个答案:

答案 0 :(得分:3)

这是令人惊讶的讨厌 - 我无法在DB中看到这样做的方法,因为entity_id不是标准属性(它实际上只是一个关键字段),核心代码在三个地方重复相同的逻辑(urgh)。

自Magento的旧版本以来,它也发生了很大的变化,因此很多教程和论坛帖子都不再适用。

您可以做的是将“entity_id”添加为新的排序选项,类似于“Best Value”作为排序选项的方式。在下面的示例中,我将其标记为“最新”

通常的警告适用:您应该在扩展中(或至少在/ local / overrides中)执行此操作,但在Community Edition 1.7中需要覆盖的三个核心文件方法是:

Mage_Adminhtml_Model_System_Config_Source_Catalog_ListSort

public function toOptionArray()
{
    $options = array();
    $options[] = array(//benz001
            'label' => Mage::helper('catalog')->__('Newest'),
            'value' => 'entity_id'
        );  //end benz001       
    $options[] = array(
        'label' => Mage::helper('catalog')->__('Best Value'),
        'value' => 'position'
    );
    foreach ($this->_getCatalogConfig()->getAttributesUsedForSortBy() as $attribute) {
        $options[] = array(
            'label' => Mage::helper('catalog')->__($attribute['frontend_label']),
            'value' => $attribute['attribute_code']
        );
    }
    return $options;
}

然后Mage_Catalog_Model_Category_Attribute_Source_Sortby

    /**
 * Retrieve All options
 *
 * @return array
 */
public function getAllOptions()
{
    if (is_null($this->_options)) {
        $this->_options = array(
        array(//benz001
            'label' => Mage::helper('catalog')->__('Newest'),
            'value' => 'entity_id'
        ),  //end benz001
        array(
            'label' => Mage::helper('catalog')->__('Best Value'),
            'value' => 'position'
        ));
        foreach ($this->_getCatalogConfig()->getAttributesUsedForSortBy() as $attribute) {
            $this->_options[] = array(
                'label' => Mage::helper('catalog')->__($attribute['frontend_label']),
                'value' => $attribute['attribute_code']
            );
        }
    }
    return $this->_options;
}

然后是Mage_Catalog_Model_Config

    public function getAttributeUsedForSortByArray()
{
    $options = array(
        'entity_id' => Mage::helper('catalog')->__('Newest'),   //benz001   
        'position'  => Mage::helper('catalog')->__('Position'),             
    );
    foreach ($this->getAttributesUsedForSortBy() as $attribute) {
        /* @var $attribute Mage_Eav_Model_Entity_Attribute_Abstract */
        $options[$attribute->getAttributeCode()] = $attribute->getStoreLabel();
    }

    return $options;
}

有了这些,刷新缓存并刷新,然后您可以选择在配置,类别页面和前端按Newest / entity_id排序。

注意:即使您关闭了缓存,刷新缓存仍然是个好主意 - 即使禁用缓存,部分管理员也会被缓存。