collection = $collectionFactory->create(); $this->storeRepository = $storeRepository; $this->arrayManager = $arrayManager; } /** * Get data * * @return array */ public function getData() { return []; } /** * Get meta information * * @return array */ public function getMeta() { $meta = parent::getMeta(); $meta = $this->customizeAttributeCode($meta); $meta = $this->customizeFrontendLabels($meta); $meta = $this->customizeOptions($meta); return $meta; } /** * Customize attribute_code field * * @param array $meta * @return array */ private function customizeAttributeCode($meta) { $meta['advanced_fieldset']['children'] = $this->arrayManager->set( 'attribute_code/arguments/data/config', [], [ 'notice' => __( 'This is used internally. Make sure you don\'t use spaces or more than %1 symbols.', EavAttribute::ATTRIBUTE_CODE_MAX_LENGTH ), 'validation' => [ 'max_text_length' => EavAttribute::ATTRIBUTE_CODE_MAX_LENGTH ] ] ); return $meta; } /** * Customize frontend labels * * @param array $meta * @return array */ private function customizeFrontendLabels($meta) { foreach ($this->storeRepository->getList() as $store) { $storeId = $store->getId(); if (!$storeId) { continue; } $meta['manage-titles']['children'] = [ 'frontend_label[' . $storeId . ']' => $this->arrayManager->set( 'arguments/data/config', [], [ 'formElement' => Input::NAME, 'componentType' => Field::NAME, 'label' => $store->getName(), 'dataType' => Text::NAME, 'dataScope' => 'frontend_label[' . $storeId . ']' ] ), ]; } return $meta; } /** * Customize options * * @param array $meta * @return array */ private function customizeOptions($meta) { $sortOrder = 1; foreach ($this->storeRepository->getList() as $store) { $storeId = $store->getId(); $meta['attribute_options_select_container']['children']['attribute_options_select']['children'] ['record']['children']['value_option_' . $storeId] = $this->arrayManager->set( 'arguments/data/config', [], [ 'dataType' => 'text', 'formElement' => 'input', 'component' => 'Magento_Catalog/js/form/element/input', 'template' => 'Magento_Catalog/form/element/input', 'prefixName' => 'option.value', 'prefixElementName' => 'option_', 'suffixName' => (string)$storeId, 'label' => $store->getName(), 'sortOrder' => $sortOrder, 'componentType' => Field::NAME, ] ); $meta['attribute_options_multiselect_container']['children']['attribute_options_multiselect']['children'] ['record']['children']['value_option_' . $storeId] = $this->arrayManager->set( 'arguments/data/config', [], [ 'dataType' => 'text', 'formElement' => 'input', 'component' => 'Magento_Catalog/js/form/element/input', 'template' => 'Magento_Catalog/form/element/input', 'prefixName' => 'option.value', 'prefixElementName' => 'option_', 'suffixName' => (string)$storeId, 'label' => $store->getName(), 'sortOrder' => $sortOrder, 'componentType' => Field::NAME, ] ); ++$sortOrder; } $meta['attribute_options_select_container']['children']['attribute_options_select']['children'] ['record']['children']['action_delete'] = $this->arrayManager->set( 'arguments/data/config', [], [ 'componentType' => 'actionDelete', 'dataType' => 'text', 'fit' => true, 'sortOrder' => $sortOrder, 'component' => 'Magento_Catalog/js/form/element/action-delete', 'elementTmpl' => 'Magento_Catalog/form/element/action-delete', 'template' => 'Magento_Catalog/form/element/action-delete', 'prefixName' => 'option.delete', 'prefixElementName' => 'option_', ] ); $meta['attribute_options_multiselect_container']['children']['attribute_options_multiselect']['children'] ['record']['children']['action_delete'] = $this->arrayManager->set( 'arguments/data/config', [], [ 'componentType' => 'actionDelete', 'dataType' => 'text', 'fit' => true, 'sortOrder' => $sortOrder, 'component' => 'Magento_Catalog/js/form/element/action-delete', 'elementTmpl' => 'Magento_Catalog/form/element/action-delete', 'template' => 'Magento_Catalog/form/element/action-delete', 'prefixName' => 'option.delete', 'prefixElementName' => 'option_', ] ); return $meta; } }