Вопрос

Я добавил столбец в review_detail Таблица т.е. view_type через PhpMyAdmin и назначил значение по умолчанию 0 ко всем обзорам.

Я пытаюсь добавить тот же столб для фильтрация в All reviews сетка, которую можно посетить из Catalog -> Reviews and Ratings -> Customer Reviews -> All Reviews.

Для простого тестирования я изменяю core/Mage файлы в Mage/Adminhtml/Block/Review/Grid.php --- line ~ 130:

    $this->addColumn('view_type', array(
        'header'        => Mage::helper('review')->__('View type'),
        'align'         => 'left',
        'width'         => '100px',
        'filter_index'  => 'rdt.view_type',
        'index'         => 'view_type',
        'type'          => 'text',
        'truncate'      => 50,
        'escape'        => true,
    ));

Добавив приведенный выше код, я вижу свое недавно добавленное имя столбца фильтрации в All reviews Сетка панели администратора, но я не могу отфильтровать или увидеть присвоенные значения по умолчанию для любого просмотра.

enter image description here

Это было полезно?

Решение

Значение вашего столбца не соединяется автоматически к коллекции, перечисленной в сетке.
Коллекция, перечисленная в сетке, является экземпляром Mage_Review_Model_Resource_Review_Product_Collection.
Вам нужно изменить метод _joinFields в этом классе. (Для целей тестирования, конечно. Когда вы уверены, что это работает, сделайте это правильным путем, переписывая класс.).

По умолчанию поля соединены таким образом:

$this->getSelect()
        ->join(array('rt' => $reviewTable),
            'rt.entity_pk_value = e.entity_id',
            array('rt.review_id', 'review_created_at'=> 'rt.created_at', 'rt.entity_pk_value', 'rt.status_id'))
        ->join(array('rdt' => $reviewDetailTable),
            'rdt.review_id = rt.review_id',
            array('rdt.title','rdt.nickname', 'rdt.detail', 'rdt.customer_id', 'rdt.store_id'));

Если вы добавили свой столбец в review_detail Таблица, которую вам нужно добавить во второй join. Анкет Сделайте код выше, выглядящим следующим образом:

$this->getSelect()
        ->join(array('rt' => $reviewTable),
            'rt.entity_pk_value = e.entity_id',
            array('rt.review_id', 'review_created_at'=> 'rt.created_at', 'rt.entity_pk_value', 'rt.status_id'))
        ->join(array('rdt' => $reviewDetailTable),
            'rdt.review_id = rt.review_id',
            array('rdt.title','rdt.nickname', 'rdt.detail', 'rdt.customer_id', 'rdt.store_id', 'rdt.view_type'));

Приведенный выше код позволит вам увидеть значения в вашем пользовательском столбце.

Чтобы сделать сортировку на работу, вам нужно изменить метод setOrder в том же классе Mage_Review_Model_Resource_Review_Product_Collection.

Измените это:

        case 'rt.review_id':
        case 'rt.created_at':
        case 'rt.status_id':
        case 'rdt.title':
        case 'rdt.nickname':
        case 'rdt.detail':
            $this->getSelect()->order($attribute . ' ' . $dir);
            break;

к этому:

        case 'rt.review_id':
        case 'rt.created_at':
        case 'rt.status_id':
        case 'rdt.title':
        case 'rdt.nickname':
        case 'rdt.detail':
        case 'rdt.view_type': //you need to add this 'case'
            $this->getSelect()->order($attribute . ' ' . $dir);
            break;

Для фильтрации модифицируется addAttributeToFilter в том же классе. Изменить это

        case 'rt.review_id':
        case 'rt.created_at':
        case 'rt.status_id':
        case 'rdt.title':
        case 'rdt.nickname':
        case 'rdt.detail':
            $conditionSql = $this->_getConditionSql($attribute, $condition);
            $this->getSelect()->where($conditionSql);
            break;

К этому:

        case 'rt.review_id':
        case 'rt.created_at':
        case 'rt.status_id':
        case 'rdt.title':
        case 'rdt.nickname':
        case 'rdt.detail':
        case 'rdt.view_type': //you need to add this 'case'
            $conditionSql = $this->_getConditionSql($attribute, $condition);
            $this->getSelect()->where($conditionSql);
            break;

Черт ... много работы для простой колонки. Я надеюсь, что это будет повторно фактическое в 2.0.

РЕДАКТИРОВАТЬ

Чтобы добавить свой новый столбец в качестве столбца параметров, объявляйте это так:

$this->addColumn('view_type', array(
    'header'        => Mage::helper('review')->__('View type'),
    'align'         => 'left',
    'width'         => '100px',
    'filter_index'  => 'rdt.view_type',
    'index'         => 'view_type',
    'type'      => 'options',
    'options'   => array(
        0 => Mage::helper('review')->__('Show in home page'),
        1 => Mage::helper('review')->__('Show in product details page')
    ),
));

Другие советы

Удалять

Фатальная ошибка: вызовите функцию члена getbackend () на некомъекте в C: xampp htdocs efk app code core mage eav model entity abst‌ ract.php в строке 816

Добавлять

'filter_index'  => 'rdt.view_type'  // (your newly added column)

в addColumn

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top