Как получить код купона на странице успеха в 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();
        }
    }
}
?>

И это не работает, то, что нужно добавить/исправить здесь.. любая помощь должна быть высоко оценена.

Author: Ajwad Syed, 2018-09-03

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();
    }
 }

Ссылка

 2
Author: Qaisar Satti, 2018-09-05 17:45:32

TL; ДР

Получите коллекцию заказов на странице успеха и отфильтруйте ее по идентификатору последнего увеличения заказа и получите код купона заказа, например

$order->getCouponCode();

Удачи!

 3
Author: PROGOSTECH, 2018-09-05 15:28:45

Создать файл 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'];
}
 2
Author: Ansar Husain, 2018-09-04 07:56:54

Если вы хотите получить коллекцию купонов, созданную администратором, попробуйте следующее решение:

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();
    }

}

Только этому решению предоставляется код купона

 1
Author: Amit Bera, 2018-09-04 07:43:10