Как добавлять отзывы о товарах прогматически
Я хочу добавить обзоры продуктов программно с некоторыми пользовательскими полями, определенными в моем коде ниже
$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()
. Что пошло не так?
Я уже пытался удалить пользовательские поля, но ничего не произошло
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;
$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();
Ссылка::
Чтобы немного расширить это для тех, кому нужна помощь в понимании модели здесь
$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;
...
}