Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.56 KB | None | 0 0
  1. <?php
  2.  
  3. namespace GoivvyCustomSetup;
  4.  
  5. use MagentoFrameworkSetup;
  6. use MagentoEavSetupEavSetup;
  7. use MagentoEavSetupEavSetupFactory;
  8. use MagentoCatalogModelProductType;
  9. use MagentoCatalogModelResourceModelEavAttribute as eavAttribute;
  10.  
  11. class InstallData implements SetupInstallDataInterface
  12. {
  13.  
  14. private $attrOptionCollectionFactory;
  15. private $eavSetupFactory;
  16. private $eavConfig;
  17.  
  18. protected $colorMap = [
  19. 'Black' => '#000000',
  20. 'Blue' => '#1857f7',
  21. 'Brown' => '#945454',
  22. 'Gray' => '#8f8f8f',
  23. 'Green' => '#53a828',
  24. 'Lavender' => '#ce64d4',
  25. 'Multi' => '#ffffff',
  26. 'Orange' => '#eb6703',
  27. 'Purple' => '#ef3dff',
  28. 'Red' => '#ff0000',
  29. 'White' => '#ffffff',
  30. 'Yellow' => '#ffd500',
  31. ];
  32.  
  33. public function __construct(EavSetupFactory $eavSetupFactory,
  34. MagentoEavModelConfig $eavConfig,
  35. MagentoEavModelResourceModelEntityAttributeOptionCollectionFactory $attrOptionCollectionFactory
  36. )
  37. {
  38. $this->eavConfig = $eavConfig;
  39. $this->eavSetupFactory = $eavSetupFactory;
  40. $this->attrOptionCollectionFactory = $attrOptionCollectionFactory;
  41. }
  42.  
  43. public function install(SetupModuleDataSetupInterface $setup, SetupModuleContextInterface $moduleContext)
  44. {
  45. $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
  46. if(version_compare($moduleContext->getVersion(),'1.0.0') < 0){
  47. $eavSetup->addAttribute(
  48. MagentoCatalogModelProduct::ENTITY,
  49. 'new_swatch_attribute',
  50. [
  51. 'type' => 'int',
  52. 'label' => 'New Swatch Attribute',
  53. 'input' => 'select',
  54. 'required' => false,
  55. 'user_defined' => true,
  56. 'searchable' => true,
  57. 'filterable' => true,
  58. 'comparable' => true,
  59. 'visible_in_advanced_search' => true,
  60. 'apply_to' => implode(',', [Type::TYPE_SIMPLE, Type::TYPE_VIRTUAL]),
  61. 'is_used_in_grid' => true,
  62. 'is_visible_in_grid' => false,
  63. 'option' => [
  64. 'values' => [
  65. 'Black',
  66. 'Blue',
  67. 'Brown',
  68. 'Gray',
  69. 'Green',
  70. 'Lavender',
  71. 'Multi',
  72. 'Orange',
  73. 'Purple',
  74. 'Red',
  75. 'White',
  76. 'Yellow'
  77. ]
  78. ]
  79. ]
  80. );
  81. $this->eavConfig->clear();
  82. $attribute = $this->eavConfig->getAttribute('catalog_product', 'new_swatch_attribute');
  83. if (!$attribute) {
  84. return;
  85. }
  86. $attributeData['option'] = $this->addExistingOptions($attribute);
  87. $attributeData['frontend_input'] = 'select';
  88. $attributeData['swatch_input_type'] = 'visual';
  89. $attributeData['update_product_preview_image'] = 1;
  90. $attributeData['use_product_image_for_swatch'] = 0;
  91. $attributeData['optionvisual'] = $this->getOptionSwatch($attributeData);
  92. $attributeData['defaultvisual'] = $this->getOptionDefaultVisual($attributeData);
  93. $attributeData['swatchvisual'] = $this->getOptionSwatchVisual($attributeData);
  94. $attribute->addData($attributeData);
  95. $attribute->save();
  96. }
  97. }
  98.  
  99. protected function getOptionSwatch(array $attributeData)
  100. {
  101. $optionSwatch = ['order' => [], 'value' => [], 'delete' => []];
  102. $i = 0;
  103. foreach ($attributeData['option'] as $optionKey => $optionValue) {
  104. $optionSwatch['delete'][$optionKey] = '';
  105. $optionSwatch['order'][$optionKey] = (string)$i++;
  106. $optionSwatch['value'][$optionKey] = [$optionValue, ''];
  107. }
  108. return $optionSwatch;
  109. }
  110.  
  111. private function getOptionSwatchVisual(array $attributeData)
  112. {
  113. $optionSwatch = ['value' => []];
  114. foreach ($attributeData['option'] as $optionKey => $optionValue) {
  115. if (substr($optionValue, 0, 1) == '#' && strlen($optionValue) == 7) {
  116. $optionSwatch['value'][$optionKey] = $optionValue;
  117. } else if ($this->colorMap[$optionValue]) {
  118. $optionSwatch['value'][$optionKey] = $this->colorMap[$optionValue];
  119. } else {
  120. $optionSwatch['value'][$optionKey] = $this->colorMap['White'];
  121. }
  122. }
  123. return $optionSwatch;
  124. }
  125.  
  126. private function getOptionDefaultVisual(array $attributeData)
  127. {
  128. $optionSwatch = $this->getOptionSwatchVisual($attributeData);
  129. if(isset(array_keys($optionSwatch['value'])[0]))
  130. return [array_keys($optionSwatch['value'])[0]];
  131. else
  132. return [''];
  133. }
  134.  
  135. private function addExistingOptions(eavAttribute $attribute)
  136. {
  137. $options = [];
  138. $attributeId = $attribute->getId();
  139. if ($attributeId) {
  140. $this->loadOptionCollection($attributeId);
  141. foreach ($this->optionCollection[$attributeId] as $option) {
  142. $options[$option->getId()] = $option->getValue();
  143. }
  144. }
  145. return $options;
  146. }
  147.  
  148. private function loadOptionCollection($attributeId)
  149. {
  150. if (empty($this->optionCollection[$attributeId])) {
  151. $this->optionCollection[$attributeId] = $this->attrOptionCollectionFactory->create()
  152. ->setAttributeFilter($attributeId)
  153. ->setPositionOrder('asc', true)
  154. ->load();
  155. }
  156. }
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement