Question

J'ajouté une colonne à la table de review_detail i.e. view_type par PhpMyAdmin et attribué une valeur par défaut 0 à tous les commentaires.

Je suis en train d'ajouter la même colonne pour la grille de filtrage All reviews qui peut être visité de Catalog -> Reviews and Ratings -> Customer Reviews -> All Reviews.

Pour tester tout but, je suis en train de modifier les fichiers core/Mage dans 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,
    ));

En ajoutant le code ci-dessus, je peux voir mon nouveau nom de colonne Filtrage supplémentaire dans la grille de All reviews du panneau d'administration, mais je ne peux pas filtrer ou voir les valeurs par défaut affectées à tout examen.

entrer image description ici

Était-ce utile?

La solution

The value of your column is not joined automatically to the collection listed in the grid.
The collection listed in the grid is an instance of Mage_Review_Model_Resource_Review_Product_Collection.
You need to modify the method _joinFields in that class. (For test purposes of course. When you are sure it works do it the proper Magento way by rewriting the class.).

By default the fields are joined this way:

$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'));

If you added your column in the review_detail table you need to add it in the second join. Make the code above look like this:

$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'));

The code above will let you see the values in your custom column.

In order to make sorting to work you need to modify the method setOrder in the same class Mage_Review_Model_Resource_Review_Product_Collection.

Change this:

        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;

to this:

        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;

For filtering modify addAttributeToFilter in the same class. Change this

        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;

To this:

        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;

Damn...a lot of work for a simple column. I hope this gets re-factored in 2.0.

[EDIT]

To add your new column as an options column declare it like this:

$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')
    ),
));

Autres conseils

To remove

Fatal error: Call to a member function getBackend() on a non-object in C:\xampp\htdocs\efk\app\code\core\Mage\Eav\Model\Entity\Abst‌​ract.php on line 816

Add

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

in addColumn

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top