I want to create images uploader like this one on product page, when i add new product.
I’ve create a custom extension in which i can upload one image. It save in /tmp folder, i can get this image on frontend, but i dont know how to upload more images?
Here is my category_form.xml
< ?xml version="1.0" encoding="UTF-8"?>
InstallData.php:
< ?php
namespace VendorModuleSetup;
use MagentoFrameworkSetupInstallDataInterface;
use MagentoFrameworkSetupModuleContextInterface;
use MagentoFrameworkSetupModuleDataSetupInterface;
class InstallData implements InstallDataInterface
{
/**
* @var MagentoEavSetupEavSetupFactory
*/
protected $eavSetupFactory;
/**
* InstallData constructor.
* @param MagentoEavSetupEavSetupFactory $eavSetupFactory
*/
public function __construct(MagentoEavSetupEavSetupFactory $eavSetupFactory)
{
$this->eavSetupFactory = $eavSetupFactory;
}
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
$setup->startSetup();
if (version_compare($context->getVersion(), '0.0.1', '< =')) {
$eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
$eavSetup->addAttribute(
MagentoCatalogModelCategory::ENTITY,
'thumbnail', [
'type' => 'varchar',
'label' => 'Thumbnail',
'input' => 'image',
'backend' => 'MagentoCatalogModelCategoryAttributeBackendImage',
'required' => false,
'sort_order' => 6,
'global' => MagentoEavModelEntityAttributeScopedAttributeInterface::SCOPE_STORE,
'group' => 'General Information',
]
);
}
$setup->endSetup();
}
}
model file :
< ?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace VendorModuleModelCategory;
use MagentoCatalogModelCategory;
use MagentoCatalogModelResourceModelEavAttribute as EavAttribute;
use MagentoEavApiDataAttributeInterface;
use MagentoEavModelConfig;
use MagentoEavModelEntityType;
use MagentoCatalogModelResourceModelCategoryCollectionFactory as CategoryCollectionFactory;
use MagentoStoreModelStore;
use MagentoStoreModelStoreManagerInterface;
use MagentoUiComponentFormField;
use MagentoUiDataProviderEavValidationRules;
use MagentoCatalogModelCategoryFactory;
use MagentoFrameworkExceptionNoSuchEntityException;
/**
* Class DataProvider
*
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class DataProvider extends MagentoCatalogModelCategoryDataProvider
{
private $categoryHelper;
/**
* DataProvider constructor
*
* @param string $name
* @param string $primaryFieldName
* @param string $requestFieldName
* @param EavValidationRules $eavValidationRules
* @param CategoryCollectionFactory $categoryCollectionFactory
* @param StoreManagerInterface $storeManager
* @param MagentoFrameworkRegistry $registry
* @param Config $eavConfig
* @param MagentoFrameworkAppRequestInterface $request
* @param CategoryFactory $categoryFactory
* $param JudaicaCatalogHelperCategory $categoryHelper
* @param array $meta
* @param array $data
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
$name,
$primaryFieldName,
$requestFieldName,
EavValidationRules $eavValidationRules,
CategoryCollectionFactory $categoryCollectionFactory,
StoreManagerInterface $storeManager,
MagentoFrameworkRegistry $registry,
Config $eavConfig,
MagentoFrameworkAppRequestInterface $request,
CategoryFactory $categoryFactory,
VendorModuleHelperCategory $categoryHelper,
array $meta = [],
array $data = []
) {
$this->categoryHelper = $categoryHelper;
parent::__construct($name,
$primaryFieldName,
$requestFieldName,
$eavValidationRules,
$categoryCollectionFactory,
$storeManager,
$registry,
$eavConfig,
$request,
$categoryFactory,
$meta,
$data);
}
/**
* Get data
*
* @return array
*/
public function getData()
{
if (isset($this->loadedData)) {
return $this->loadedData;
}
$category = $this->getCurrentCategory();
if ($category) {
parent::getData();
$categoryData = $this->loadedData[$category->getId()];
foreach ($this->categoryHelper->getAdditionalImageTypes() as $imageType) {
if (isset($categoryData[$imageType])) {
unset($categoryData[$imageType]);
$categoryData[$imageType][0]['name'] = $category->getData($imageType);
$categoryData[$imageType][0]['url'] = $this->categoryHelper->getImageUrl($category->getData($imageType));
}
}
$this->loadedData[$category->getId()] = $categoryData;
}
return $this->loadedData;
}
}
controller files:
< ?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace VendorModuleControllerAdminhtmlCategoryThumbnail;
use MagentoFrameworkControllerResultFactory;
/**
* Class Upload
*/
class Upload extends MagentoCatalogControllerAdminhtmlCategoryImageUpload
{
/**
* Upload file controller action
*
* @return MagentoFrameworkControllerResultInterface
*/
public function execute()
{
try {
$result = $this->imageUploader->saveFileToTmpDir('thumbnail');
$result['cookie'] = [
'name' => $this->_getSession()->getName(),
'value' => $this->_getSession()->getSessionId(),
'lifetime' => $this->_getSession()->getCookieLifetime(),
'path' => $this->_getSession()->getCookiePath(),
'domain' => $this->_getSession()->getCookieDomain(),
];
} catch (Exception $e) {
$result = ['error' => $e->getMessage(), 'errorcode' => $e->getCode()];
}
return $this->resultFactory->create(ResultFactory::TYPE_JSON)->setData($result);
}
}
< ?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace VendorModuleControllerAdminhtmlCategory;
class Save extends MagentoCatalogControllerAdminhtmlCategorySave
{
/**
* @return array
*/
protected function getAdditionalImages() {
return array('thumbnail');
}
/**
* Image data preprocessing
*
* @param array $data
*
* @return array
*/
public function imagePreprocessing($data)
{
foreach ($this->getAdditionalImages() as $imageType) {
if (empty($data[$imageType])) {
unset($data[$imageType]);
$data[$imageType]['delete'] = true;
}
}
return parent::imagePreprocessing($data);
}
/**
* Filter category data
*
* @param array $rawData
* @return array
*/
protected function _filterCategoryPostData(array $rawData)
{
$data = $rawData;
/**
* a workaround for adding extra image fields to category form
*/
foreach ($this->getAdditionalImages() as $imageType) {
if (isset($data[$imageType]) && is_array($data[$imageType])) {
if (!empty($data[$imageType]['delete'])) {
$data[$imageType] = null;
} else {
if (isset($data[$imageType][0]['name']) && isset($data[$imageType][0]['tmp_name'])) {
$data[$imageType] = $data[$imageType][0]['name'];
} else {
unset($data[$imageType]);
}
}
}
}
return parent::_filterCategoryPostData($data);
}
}
Thanks in advance for any help!