服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #
当前位置: 主页 > php教程 > magento教程 >

magento批量导入评论

时间:2016-02-17 01:25来源: 作者: 点击:
新建一个magento外贸网站时需要一些评论来撑下门面,后台一个个加又有些麻烦,咱还是自己动手写一个,目标是能批量导入,支持ratings. adminhtml部分 ?xml version=1.0 encoding=UTF-8? config men

新建一个magento外贸网站时需要一些评论来撑下门面,后台一个个加又有些麻烦,咱还是自己动手写一个,目标是能批量导入,支持ratings.

adminhtml部分
 
 
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <menu>
        <catalog>
            <children>
                <reviews_ratings>
                    <children>
                        <import translate="title" module="catalog">
                            <title>Import Reviews</title>
                            <action>adminhtml/catalog_product_review/import</action>
                        </import>
                    </children>
                </reviews_ratings>
            </children>
        </catalog>
    </menu>
</config>
入口我放在了Catalog->Reviews and Ratings下面,和现有的两个同级
 
后台的catalog.xml文件新加
 
 
<adminhtml_catalog_product_review_import>
    <reference name="content">
        <block type="adminhtml/template" name="review_import" template="review/import.phtml" />
    </reference>
</adminhtml_catalog_product_review_import>
控制器部分
 
 
require_once 'Mage/Adminhtml/controllers/Catalog/Product/ReviewController.php';
 
class SH_Catalog_Adminhtml_Catalog_Product_ReviewController extends Mage_Adminhtml_Catalog_Product_ReviewController
{
    public function exportCsvAction()
    {
        $fileName = 'reviews.csv';
        $grid = $this->getLayout()->createBlock('adminhtml/review_grid');
        $this->_prepareDownloadResponse($fileName, $grid->getCsvFile());
    }
 
    public function importAction()
    {
        $this->loadLayout();
        $this->renderLayout();
    }
 
    public function importPostAction()
    {
        $filePath = Mage::getConfig()->getVarDir('review/import');
        try {
            $uploader = new Varien_File_Uploader('file');
            $uploader->save($filePath);
            if($uploader->getUploadedFileName()){
                $csv = new Varien_File_Csv();
                $file = $filePath.DS.$uploader->getUploadedFileName();
                if(!file_exists($file) || !is_file($file)){
                    $this->_getSession()->addError('请上传csv格式文件');
                    $this->_redirect('*/*/import');
                    return;
                }
 
                $extension = pathinfo($file, PATHINFO_EXTENSION);
 
                if($extension != 'csv')
                {
                    $this->_getSession()->addError('请上传csv格式文件');
                    $this->_redirect('*/*/import');
                    return;
                }
 
                $csv->setLineLength(1024);
                $data = $csv->getData($file);
                array_shift($data);
 
                foreach ($data as $line) {
                    $review = Mage::getModel('review/review');
 
                    $review->setEntityPkValue($line[1]);
                    $review->setNickname($line[2]);
                    $review->setTitle($line[3]);
                    $review->setDetail($line[4]);
 
                    $review->setEntityId(1);
                    $review->setStatusId(Mage_Review_Model_Review::STATUS_PENDING);
                    $review->setStoreId($line[0]);
                    $review->setStores(array($line[0]));
                    $review->save();
 
                    $rating = array(1=>$line[5],2=>$line[6]+5,3=>$line[7]+10);
                    foreach ($rating as $ratingId => $optionId) {
                        Mage::getModel('rating/rating')
                            ->setRatingId($ratingId)
                            ->setReviewId($review->getId())
                            ->addOptionVote($optionId, $line[1]);
                    }
 
                    $review->aggregate();
                }
 
                $this->_getSession()->addSuccess('评论批量导入成功');
                $this->_redirect('*/*/index');
                return;
            }
        } catch (Exception $e) {
            $this->_getSession()->addException($e, 'An error occurred while saving the data.');
        }
    }
 
}
参考了下前台评论的处理流程,这里对ratings的处理我偷了点懒,为了调用rating模型的addOptionVote()方法,我通过$rating = array(1=>$line[5],2=>$line[6]+5,3=>$line[7]+10);,将上传时的值简单的转换成option id,目前看来这个关系是固定的。
 
review/import.phtml文件,上传的表单页面模板,在上面catalog.xml中指定的
 
 
<div class="content-header">
    <h3>Select review csv file and import</h3>
    <p class="form-buttons">
        <button onclick="editForm.submit()" class="scalable save" type="button">
            <span>Import</span>
        </button>
    </p>
</div>
 
<div class="entry-edit">
    <form id="edit_form" name="edit_form" method="post"
        action="<?php echo $this->getUrl('*/*/importPost')?>"
        enctype="multipart/form-data">
        <div>
            <input type="hidden" value="<?php echo $this->getFormKey() ?>" name="form_key">
        </div>
        <fieldset id="my-fieldset">
            <table cellspacing="0" class="form-list">
                <tr>
                    <td class="label" style="width: 60px;">选择文件<span class="required">*</span></td>
                    <td class="value"><input id="review_uploadfile" name="file" value="" title="file" type="file" class="input-file"></td>
                </tr>
            </table>
        </fieldset>
 
        <p>亲,请上传以下格式的csv文件,第一行为表头上传时将被去掉,状态自动为pending,时间为上传时的系统时间</p>
        <style type="text/css">
        th,td {
            padding: 3px 5px;
        }
        </style>
        <table border="0" cellpadding="0" cellspacing="1" bgcolor="#d6d6d6">
            <tr>
                <th scope="col" bgcolor="#FFFFFF">Store id</th>
                <th scope="col" bgcolor="#FFFFFF">Product_id</th>
                <th scope="col" bgcolor="#FFFFFF">Nickname</th>
                <th scope="col" bgcolor="#FFFFFF">Title</th>
                <th scope="col" bgcolor="#FFFFFF">Detail</th>
                <th scope="col" bgcolor="#FFFFFF">Quality</th>
                <th scope="col" bgcolor="#FFFFFF">Value</th>
                <th scope="col" bgcolor="#FFFFFF">Price</th>
            </tr>
            <tr>
                <td bgcolor="#FFFFFF">1</td>
                <td bgcolor="#FFFFFF">167</td>
                <td bgcolor="#FFFFFF">John Doe</td>
                <td bgcolor="#FFFFFF">Review title</td>
                <td bgcolor="#FFFFFF">Review details description</td>
                <td bgcolor="#FFFFFF">5</td>
                <td bgcolor="#FFFFFF">5</td>
                <td bgcolor="#FFFFFF">5</td>
            </tr>
            <tr>
                <td bgcolor="#FFFFFF">1</td>
                <td bgcolor="#FFFFFF">167</td>
                <td bgcolor="#FFFFFF">John Doe</td>
                <td bgcolor="#FFFFFF">Review title</td>
                <td bgcolor="#FFFFFF">Review details description</td>
                <td bgcolor="#FFFFFF">5</td>
                <td bgcolor="#FFFFFF">5</td>
                <td bgcolor="#FFFFFF">5</td>
            </tr>
        </table>
    </form>
</div>
 
<script type="text/javascript">
    editForm = new varienForm('edit_form', '');
</script>
上传的csv文件如下
Store id Product_id Nickname Title Detail Quality Value Price
1 167 John Doe Review title Review details description 1 2 3
1 167 John Doe Review title Review details description 1 2 3

来上两张效果图,有没有很高端大气 
image 
image

(责任编辑:最模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------