dynamic / silverstripe-foxy-discounts
为您的Foxy产品提供购买条件折扣。
1.2.3
2021-03-22 02:18 UTC
Requires
- dynamic/silverstripe-foxy: ^1.3.2
Requires (Dev)
- pdepend/pdepend: ^2.5
- phploc/phploc: ^4.0
- phpmd/phpmd: ^2.6
- phpunit/phpunit: ^5.7
- sebastian/phpcpd: ^3.0
- squizlabs/php_codesniffer: ^3.0
- theseer/phpdox: ^0.11.0
README
为您的Foxy产品提供购买条件折扣。
要求
- 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模块。
请直接向模块维护者报告安全问题。请勿在错误跟踪器中提交安全问题。
开发和贡献
如果您想为此模块做出贡献,请确保您提出拉取请求并与模块维护者进行讨论。