Как получить код купона на странице успеха в Magento 2
Я пытаюсь получить код купона, созданный в правиле цены корзины, из бэкенда на странице успеха. Я делаю это так: В файле блока
public function getCouponCollection() {
$om = \Magento\Framework\App\ObjectManager::getInstance();
$array = [];
$getRules = $om->create('Magento\SalesRule\Model\Rule')->getCollection();
foreach ($getRules as $rule) {
$array[] = ["value" => $rule->getId(), "label" => __( $rule->getName() ) ];
}
return $array;
}
И с помощью Magento\SalesRule\Model\Rulerepository, введенного в конструктор
/** @var \Magento\SalesRule\Model\RuleRepository $ruleRepository **/
public function getCouponByRuleId ($id) {
$rule = $this->ruleRepository->getById($id);
$rule->getDescription();
$rule->getCondition();
}
В файле шаблона у меня есть:
<?php $a=$block->getCouponCollection();
if (!empty($a)) {
foreach ($a as $v) {
$rule = $block->getCouponByRuleId($v["value"]);
if ($rule) {
echo $rule->getCouponCode();
}
}
}
?>
И это не работает, то, что нужно добавить/исправить здесь.. любая помощь должна быть высоко оценена.
4 answers
Неясен вопрос о коде купона. но после прочтения комментария становится ясно, что вы хотите получить код купона на основе идентификатора правила.
namespace QaisarSatti\Module\Block;
class CouponCode extends \Magento\Framework\View\Element\Template
{
protected $rule;
public function __construct(
\Magento\SalesRule\Model\RuleFactory $rule
) {
$this->rule = $rule;
}
public function getCouponCode()
{
$ruleId = 7;
$couponCodeData = $this->rule->create()->load($ruleId);
echo $couponCodeData->getCouponCode();
}
}
TL; ДР
Получите коллекцию заказов на странице успеха и отфильтруйте ее по идентификатору последнего увеличения заказа и получите код купона заказа, например
$order->getCouponCode();
Удачи!
Создать файл Coupon.php в приложении/коде/поставщике/модуле/блоке
<?php
namespace Vendor\Module\Block;
use Magento\Framework\View\Element\Template;
class Coupon extends Template
{
protected $_salesRuleCoupon;
public function __construct(
Context $context,
\Magento\SalesRule\Model\ResourceModel\Coupon\CollectionFactory $salesRuleCoupon,
)
{
$this->_salesRuleCoupon = $salesRuleCoupon;
}
public function getCouponsList()
{
$collection= $this->_salesRuleCoupon->create();
return $collection->getData();
}
}
2. Вызовите функцию блока выше в файле шаблона вашего модуля
$coupons=$block->getCouponsList();
foreach($coupons as $coupon){
echo $coupon['code'];
}
Если вы хотите получить коллекцию купонов, созданную администратором, попробуйте следующее решение:
protected $couponRepository;
protected $_searchCriteriaBuilder;
public function __construct(
\Magento\SalesRule\Api\CouponRepositoryInterface $couponRepository,
\Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
) {
$this->couponRepository = $couponRepository;
$this->_searchCriteriaBuilder = $searchCriteriaBuilder;
}
public function getCouponList()
{
$searchCriteria = $this->_searchCriteriaBuilder->create();
$searchResults = $this->couponRepository->getList($searchCriteria);
$salesrules = $searchResults->getItems();
foreach($salesrules as $eachCouponrules)
{
$coupon->getCode();
$coupon->getExpirationDate();
}
}
Только этому решению предоставляется код купона