как получить код купона по идентификатору правила на странице успешного оформления заказа?


У меня есть коллекция правил купонов, созданная на стороне администратора и отображающая имена правил в конфигурации системы пользовательского модуля. На самом деле, я хотел получить код купона правила корзины, который был выбран администратором в конфигурации системы, и отобразить его на странице успеха, чтобы клиент мог использовать его в следующем заказе. Получение правил Сбора кода купона с помощью этого:

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

}

И в шаблоне:

$coupons=$block->getCouponsList();
foreach($coupons as $coupon){
echo $coupon['code'];
}

Коллекция правил на стороне администратора (Конфигурация системы) является извлекается следующим образом:

<?php
namespace Vendor\Module\Model\Config;

class CouponCode implements \Magento\Framework\Option\ArrayInterface
{
/**
 * @return array
 */
public function toOptionArray()
{

    $om = \Magento\Framework\App\ObjectManager::getInstance();

    $arr = [];

    $couponCollection = $om->create('Magento\SalesRule\Model\Rule')->getCollection();

    foreach ($couponCollection as $rule) {
    $arr[] = ["value" => $rule->getId(), "label" => __( $rule->getName() ) ];
}

return $arr;

}
}

Вызывая его в исходной модели как:

<field id="coupon_code" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Use Coupon Code Rule</label>

<source_model>Vendor\Module\Model\Config\CouponCode</source_model>
<depends>
         <field id="display">1</field>
</depends> 
</field>

Когда я извлекаю значение конфигурации выбранного правила в пользовательском модуле, оно отображает его идентификатор, как в таблице Правил цены корзины в бэкэнде. Все, что мне нужно, это получить коды купонов через идентификатор Правил цены в корзине и отобразить в конфигурации системы только те правила, у которых есть коды купонов, и отобразить код купона выбранного правила из конфигурации системы на странице успеха.

Любая помощь - это крайне необходим и будет положительно оценен!

Author: Qaisar Satti, 2018-09-05

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

Ссылка

 1
Author: Qaisar Satti, 2018-09-05 17:34:10