I have created a module by which we can marked product review helpful or not
Create a table
CREATE TABLE IF NOT EXISTS `review_like` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_id` int(11) NOT NULL,
`review_id` int(11) NOT NULL,
`customer_id` int(11) NOT NULL,
`like` int(11) NOT NULL,
`notlike` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `product_id` (`product_id`,`review_id`,`customer_id`)
)
Modify review_detail add two field like, notlike
Add the below code in the app\code\core\Mage\Review\etc\config.xml
<review_like>
<table>review_like</table>
</review_like>
<table>review_like</table>
</review_like>
Add the following code in your review page after the review description
app\design\frontend\base\default\template\review\product\view\list.phtml
<?php
$like_url = $this->getUrl('review/product/list').'id/'.$_review->getEntityPkValue().'/rev/'.$_review->getReviewId().'/lik/';
?>
<p class="rev_h"> Was this review helpful?
<?php if(!Mage::getSingleton('customer/session')->isLoggedIn()):?> <a href="<?php echo $this->getSkinUrl(''); ?>customer/account/login/"><?php else: ?>
<a href="<?php echo $like_url; ?>1"><?php endif?>Yes</a>(<?php echo $this->htmlEscape($_review->getLike()) ?>) /
<?php if(!Mage::getSingleton('customer/session')->isLoggedIn()):?> <a href="<?php echo $this->getSkinUrl(''); ?>customer/account/login/"><?php else: ?>
<a href="<?php echo $like_url; ?>2"><?php endif?>No</a>(<?php echo $this->htmlEscape($_review->getNotlike()) ?>) </p>
After that go to app\code\core\Mage\Review\controllers\ProductController.php
Add
$customer_id = Mage::getSingleton('customer/session')->getCustomerId();
$rev_id = Mage::app()->getRequest()->getParam('rev');
$lik = Mage::app()->getRequest()->getParam('lik');
if($lik>0){
Mage::getModel('review/resource_review')->saveLikereview($product->getId(),$rev_id,$customer_id,$lik);
}
After
public function listAction() {
if ($product = $this->_initProduct()) {
Mage::register('productId', $product->getId());
Now open app\code\core\Mage\Review\Model\Resource\Review.php and past this
public function saveLikereview($product_id,$rev_id,$customer_id,$lik)
{
$adapter = $this->_getWriteAdapter();
if($lik==1){ $like=1; $notlike=0; }
elseif($lik==2){ $like=0; $notlike=1; }
$data = array(
'product_id' => $product_id,
'review_id' => $rev_id,
'customer_id' => $customer_id,
'like' => $like,
'notlike' => $notlike
);
try{
$res = $adapter->insert($this->_reviewLikeTable, $data);
if($res)
{
$adapter1 = $this->_getReadAdapter();
$select = $adapter->select()
->from($this->_reviewDetailTable, array('like','notlike'))
->where('review_id = :review_id');
$no_rev = $adapter1->fetchAll($select, array(':review_id' => $rev_id));
$condition = "review_id =".$rev_id;
$data = array(
'like' => ($like + $no_rev[0]['like']),
'notlike' => ($notlike + $no_rev[0]['notlike'])
);
$adapter->update($this->_reviewDetailTable, $data, $condition);
}
}
catch(Exception $e){ }
Also past $this->_reviewLikeTable = $this->getTable('review/review_like'); under protected function _construct()
Now open app\code\core\Mage\Review\Model\Resource\Review\Collection.php
And add $this->_reviewLikeTable = $this->getTable('review/review_like'); under protected function _construct()
And change array('detail_id', 'title', 'detail', 'nickname', 'customer_id')); in to
array('detail_id', 'title', 'detail', 'nickname', 'customer_id','like','notlike'));
No comments:
Post a Comment