2012-06-13 3 views
3

Кто-нибудь знает, как сделать entity_id видимым в интерфейсе как сортируемый атрибут? Я пошел, чтобы управлять атрибутами и я не могу добавить entity_id как атрибут, как он говоритСортировка Magento по entity_id

«Код атрибута„ENTITY_ID“зарезервировано системой. Пожалуйста, попробуйте другой код атрибута»

Так что я пытался сделать поиск в всей базе данных у меня был Magento на использование следующего SQL CMD:

select attribute_id from eav_attribute where attribute_code = 'updated_at'; 

и он вернулся нулевой результата, я пробовал другие атрибуты, и те показали ...

кто-нибудь знают, как я могу добавить entity_id как атрибут, поскольку я даже не могу сделать его видимым, потому что я понятия не имею, что такое атрибут_id # даже при поиске всей базы данных для этого значения.

Вот код, я использую, чтобы сделать атрибут видимым в разделе админки Magento:

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

Я попытался найти высоко и низко в течение нескольких дней, и пробовать разные варианты - так застрял в этой точке , любая помощь будет большой.

Я использую Magento Enterprise 12.2, если это помогает, но, честно говоря, БД не сильно отличается от версии сообщества, единственными отличиями являются добавленные модули, но когда дело доходит до продуктов, это почти то же самое.

+0

Я не думаю, что это легко достижимо.Может быть, вы должны создать атрибут теневого идентификатора и использовать его для сортировки? –

+0

Можете ли вы уточнить, как это сделать или указать мне ссылку, которая может помочь? Благодарю. Не знаком с затенением – rrrcode

ответ

3

Это удивительно противно - я не вижу способа сделать это просто в БД, поскольку entity_id не является стандартным атрибутом (это действительно просто поле ключа), а основной код повторяет ту же логику в трех место (urgh).

Это также сильно изменилось со времен более старых версий Magento, поэтому многие из уроков и сообщений на этом форуме больше не применяются.

Что вы можете сделать, это добавить «entity_id» в качестве новой опции сортировки, аналогичной способу «Наилучшее значение» в качестве опции сортировки. В следующем примере я назвал его «Новейшим»

Обычные оговорки применяются: вы должны сделать это в расширении (или, по крайней мере, в/local/overrides), но в трех основных файловых методах, которые необходимо переопределить в Community выпуск 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; 
} 

С тех на месте, очистить кэш и обновить, а затем вы можете выбрать сортировку по новизне/ENTITY_ID в конфигурации и на странице категории, так и на внешнем интерфейсе.

Примечание: даже если вы отключили кеширование, по-прежнему рекомендуется сбросить кеш - части администратора кэшируются, даже когда кеширование отключено.

Смежные вопросы