Как добавлять отзывы о товарах прогматически


Я хочу добавить обзоры продуктов программно с некоторыми пользовательскими полями, определенными в моем коде ниже

$review = Mage::getModel('review/review')
->setEntityPkValue(intval($pressquote->product_id)) //product id
->setStatusId(intval($pressquote->status))
->setDetail($pressquote->text)
->setTitle('')
->setEntityId(1)                     
->setStatusId(intval($pressquote->status))          //approved
->setCustomerId(null)                       //null is for administrator
->setNickname($pressquote->source)
->setLink($pressquote->link)                            //custom field
->setLinktext($pressquote->linktext)                   //custom field
->setYear($pressquote->year)                            //custom field
->setStoreId(1)                                          
->setStores(array('base'))                              
->save();

Но это не работает для меня.. Я проверил свой код, и он останавливается на save(). Что пошло не так? Я уже пытался удалить пользовательские поля, но ничего не произошло

 1
Author: Netorica, 2014-01-21

3 answers

//Вызов среды Magento

require_once 'app/Mage.php';
Mage::app();

// Настройте свой собственный цикл, чтобы просматривать отзывы из исходной корзины.

//Логика поиска клиента, который уже был перенесен в magento. //Итак, у вас есть $_customer, содержащий Mage_Customer_Model_Customer

//ВАЖНО: Настройте сеанс клиента. //ресурс модели оценки/опции проверяет сеанс клиента, чтобы получить идентификатор клиента.

$_session = Mage::getSingleton('customer/session')->setCustomer($_customer)->setCustomerAsLoggedIn($_customer);

//Добавить отзыв

$_review = Mage::getModel('review/review');
->setEntityPkValue($_product->getId())
->setStatusId($sc_to_mage_review_status[$row_source_review['Status']])
->setTitle($row_source_review['Title'])
->setDetail($row_source_review['Review'])
->setEntityId(1)
->setStoreId($store)
->setStores(array($store))
->setCustomerId($_customer->getId())
->setNickname($_customer->getFirstname())
->save();

//Сопоставьте свой присвоение идентификатора вашему параметру_id с помощью массива или чего-то еще

$rating_options = array(
1 => array(1,2,3,4,5), // <== Look at your database table `rating_option` for these vals
2 => array(6,7,8,9,10),
3 => array(11,12,13,14,15)
);

//Теперь сохраните рейтинги

foreach($rating_options as $rating_id => $option_ids):
try {
    $_rating = Mage::getModel('rating/rating')
        ->setRatingId($rating_id)
        ->setReviewId($_review->getId())
        ->addOptionVote($option_ids[$rating_value-1],$_product->getId());
} catch (Exception $e) {
    die($e->getMessage());
}
endforeach;
 9
Author: Keyul Shah, 2014-01-21 09:12:29
$review = Mage::getModel('review/review');
$review->setEntityPkValue(147);//product id
$review->setStatusId(1); // approved
$review->setTitle("title");
$review->setDetail("detail");
$review->setEntityId(1);                                      
$review->setStoreId(Mage::app()->getStore()->getId());                    
$review->setCustomerId(273);//null is for administrator
$review->setNickname("Me");
$review->setReviewId($review->getId());
$review->setStores(array(Mage::app()->getStore()->getId()));                    
$review->save();

$review->aggregate();

Ссылка::

Http://www.magentocommerce.com/boards/viewthread/199171/

 3
Author: Matrix Infologics, 2014-12-19 03:53:54

Чтобы немного расширить это для тех, кому нужна помощь в понимании модели здесь

$rating_options = array(
1 => array(1,2,3,4,5), // <== Look at your database table `rating_option` for these vals
2 => array(6,7,8,9,10),
3 => array(11,12,13,14,15)
);

Эти "Параметры оценки" взяты из модели mage_rating_model_rating. Коллекция из них даст все, что у вас есть в Каталоге > Отзывы и рейтинги > Управление рейтингами.

При этом мы можем запросить коллекцию этих моделей и создать что-то более программное...

/** @var $readConnection Varien_Db_Adapter_Pdo_Mysql */
$readConnection = Mage::getModel('core/resource')->getConnection('core/read');
$ratingOptions  = Mage::getModel('rating/rating')->getCollection();

foreach ($ratingOptions as $ratingOption) {
    $select = new Zend_Db_Select($readConnection);
    $select->from('rating_option');
    $select->columns('option_id');
    $select->where('code=?', $VALUE_FROM_ONE_TO_FIVE);
    $select->where('rating_id=?', $ratingOption->getRatingId());

    $optionId = $readConnection->fetchOne($select);

    $rating = Mage::getModel('rating/rating')
        ->setRatingId($ratingOption->getRatingId())
        ->setReviewId($newReview->getId())
        ->addOptionVote($optionId, $_product->getId());
}

$review->aggregate();

Выше будут указаны все параметры рейтинга, затем выберите соответствующий "идентификатор опции" с параметром $VALUE_FROM_ONE_TO_FIVE, который вы указываете для каждой "категории" обзора (также известной как голосование).

Вы могли бы создать массив или что-то заменить для $VALUE_FROM_ONE_TO_FIVE, но вам нужно знать, какую "категорию" вы ищете. Для этого вы могли бы использовать

$ratingType = $ratingOption->getRatingCode();

, который вернет Производительность, Цена или любое другое "Название рейтинга", которое вы установили в Каталоге > Отзывы и рейтинги > Управление рейтингами

Что-то вроде:

$ratingType = $ratingOption->getRatingCode();
switch($ratingType) {
    case 'Price':
        $VALUE_FROM_ONE_TO_FIVE = 3;
        break;
    case 'Performance':
        $VALUE_FROM_ONE_TO_FIVE = 1;
        break;
    ...
}
 0
Author: ActionJackson, 2020-02-05 15:51:47