3

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を使用していますが、正直なところ、DBはコミュニティバージョンと大差ありません。唯一の違いは追加されたモジュールですが、製品に関してはほとんど同じです.

4

1 に答える 1

3

これは驚くほど厄介です - entity_id は標準属性ではなく (実際には単なるキー フィールドです)、コア コードが同じロジックを 3 か所で繰り返しているため、DB でこれを単純に行う方法がわかりません (urgh) .

また、Magento の古いバージョンから大幅に変更されたため、これに関するチュートリアルやフォーラムの投稿の多くは適用されなくなりました。

できることは、「entity_id」を新しい並べ替えオプションとして追加することです。これは、「Best Value」が並べ替えオプションとして存在するのと同様です。次の例では、「最新」というラベルを付けています。

通常の警告が適用されます: これは拡張機能 (または少なくとも /local/ オーバーライド) で行う必要がありますが、Community Edition 1.7 でオーバーライドする必要がある 3 つのコア ファイル メソッドは次のとおりです。

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 による並べ替えを選択できます。

注: キャッシュをオフにしても、キャッシュをフラッシュすることをお勧めします。キャッシュが無効になっている場合でも、管理者の一部はキャッシュされます。

于 2012-06-14T12:47:29.487 に答える