dynamic/silverstripe-foxy-discounts

为您的Foxy产品提供购买条件折扣。

安装: 557

依赖: 1

建议: 0

安全: 0

星标: 0

关注者: 3

分支: 2

开放问题: 2

类型:silverstripe-vendormodule

1.2.3 2021-03-22 02:18 UTC

This package is auto-updated.

Last update: 2024-08-30 01:20:21 UTC


README

为您的Foxy产品提供购买条件折扣。

Build Status Scrutinizer Code Quality Build Status codecov

Latest Stable Version Total Downloads Latest Unstable Version License

要求

  • SilverStripe ^4.0
  • SilverStripe Foxy ^1.0

安装

composer require dynamic/silverstripe-foxy-discounts

许可证

请参阅 许可证

示例配置

将以下扩展添加到您的产品类中

Dynamic\Products\Page\Product:
  extensions:
    - Dynamic\Foxy\Discounts\Extension\ProductDataExtension

PageController:
  extensions:
    - Dynamic\Foxy\Discounts\Extension\PageControllerExtension
  

高级用法

您可以根据产品限制来限制折扣。以下示例将添加“仅对这些产品进行折扣”和“这些产品应排除在折扣之外”类型的逻辑

注意:此示例需要额外的要求,例如安装GridFieldExtension

<?

namespace {
    use SilverStripe\ORM\DataExtension;
    use Dynamic\Products\Page\Product;
    
	class DiscountDataExtension extends DataExtension
	{
	    /**
	     * @var array
	     */
	    private static $many_many = [
	        'Products' => Product::class,
	        'ExcludeProducts' => Product::class,
	    ];
	
	    /**
	     * @param FieldList $fields
	     */
	    public function updateCMSFields(FieldList $fields)
	    {
	        if ($this->owner->ID) {
	            // Products
	            $field = $fields->dataFieldByName('Products');
	            $fields->removeByName('Products');
	            $fields->addFieldToTab('Root.Included', $field);
	            $field->setDescription('Limit the discount to these products. If no products specified, all products will receive the discount');
	            $config = $field->getConfig();
	            $config
	                ->removeComponentsByType([
	                    GridFieldAddExistingAutocompleter::class,
	                    GridFieldAddNewButton::class,
	                    GridFieldArchiveAction::class,
	                ])
	                ->addComponents([
	                    new GridFieldAddExistingSearchButton(),
	                ]);
	
	            $exclusions = $fields->dataFieldByName('ExcludeProducts');
	            $fields->removeByName('ExcludeProducts');
	            $fields->addFieldToTab('Root.Excluded', $exclusions);
	            $exclusions->setDescription('Products in this list will ALWAYS be excluded from the discount, even if added to the "Included" tab.');
	            $excludeConfig = $exclusions->getConfig();
	            $excludeConfig
	                ->removeComponentsByType([
	                    GridFieldAddExistingAutocompleter::class,
	                    GridFieldAddNewButton::class,
	                    GridFieldArchiveAction::class,
	                ])
	                ->addComponents([
	                    new GridFieldAddExistingSearchButton(),
	                ]);
	        }
	    }
	
	    /**
	     * @return array
	     */
	    public function getRestrictions()
	    {
	        if ($this->owner->Products()->count() == 0) {
	            $products = Product::get()->column();
	        } else {
	            $products = $this->owner->Products()->column();
	        }
	
	        foreach ($this->owner->ExcludeProducts()->column() as $id) {
	            if (in_array($id, $products)) {
	                $key = array_search($id, $products);
	                unset($products[$key]);
	            }
	        }
	
	        return $products;
	    }
	}
}       

并在foxy.yml中将它应用于Discount

Dynamic\Foxy\Discounts\Model\Discount:
  extensions:
    - DiscountDataExtension

维护者

错误跟踪器

错误在此存储库的问题部分中跟踪。在提交问题之前,请阅读现有问题以确保您的独特性。

如果问题看起来像是一个新的错误

  • 创建一个新的问题
  • 描述重现您的问题所需的步骤和预期的结果。单元测试、截图和屏幕录像在这里可能有所帮助。
  • 尽可能详细地描述您的环境:SilverStripe版本、浏览器、PHP版本、操作系统、安装的任何SilverStripe模块。

请直接向模块维护者报告安全问题。请勿在错误跟踪器中提交安全问题。

开发和贡献

如果您想为此模块做出贡献,请确保您提出拉取请求并与模块维护者进行讨论。