im looking to add an additional image upload field into my categories. I have had a look around but can't find a solution that works.
I'm running version 2.1
Any ideas on how I would achieve this ?
Cheers
Hello matthans0n,
We think you need create the simple module.
In order to add an attribute to a category in Magento 2.1 - it should be created in InstallData and also described with the help of UI Component:
app/code/YOUR/MODULE/Setup/InstallData.php
$eavSetup->addAttribute(
\Magento\Catalog\Model\Category::ENTITY,
'attribute_name',
[
'type' => 'text',
'input' => 'fileUploader',
'label' => 'Image Field',
'backend' => '',
'frontend' => '',
'group' => 'Group Name',
'class' => '',
'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
'visible' => true,
'required' => false,
'user_defined' => '',
'default' => '',
'searchable' => false,
'filterable' => false,
'comparable' => false,
'visible_on_front' => false,
'used_in_product_listing' => false,
'unique' => false,
'apply_to' => '',
'position' => 250
]
);app/code/YOUR/MODULE/view/adminhtml/ui_component/category_form.xml
<field name="attribute_name">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="dataType" xsi:type="string">string</item>
<item name="source" xsi:type="string">category</item>
<item name="label" xsi:type="string" translate="true">Image Field</item>
<item name="visible" xsi:type="boolean">true</item>
<item name="formElement" xsi:type="string">fileUploader</item>
<item name="elementTmpl" xsi:type="string">ui/form/element/uploader/uploader</item>
<item name="previewTmpl" xsi:type="string">Magento_Catalog/image-preview</item>
<item name="required" xsi:type="boolean">false</item>
<item name="sortOrder" xsi:type="number">100</item>
<item name="uploaderConfig" xsi:type="array">
<item name="url" xsi:type="url" path="catalog/category_image/upload"/>
</item>
</item>
</argument>
</field>Hope it will help.
Regards,
Plumrocket Team
I want to do the same thing. Add an option for another image upload within the Category section. I have followed the above directions making a basic module. However, after running
bin/magento setup:upgrade
and
bin/magento setup:static-content:deploy
I do not see anything added on the admin page. When I ran the upgrade command, I did not see the module listed either. Is there more to do?
I made a module shell with the code provided above. When I enable and update, I get these errors on the Category page. I do not understand what is happening. Any suggestions?
1 exception(s):
Exception #0 (Exception): Warning: DOMDocument::loadXML(): Namespace prefix xsi for type on argument is not defined in Entity, line: 2 in /home/swimmers/public_html/vendor/magento/framework/View/Element/UiComponent/Config/DomMerger.php on line 324
Exception #0 (Exception): Warning: DOMDocument::loadXML(): Namespace prefix xsi for type on argument is not defined in Entity, line: 2 in /home/swimmers/public_html/vendor/magento/framework/View/Element/UiComponent/Config/DomMerger.php on line 324
#0 [internal function]: Magento\Framework\App\ErrorHandler->handler(2, 'DOMDocument::lo...', '/home/swimmers/...', 324, Array)
#1 /home/swimmers/public_html/vendor/magento/framework/View/Element/UiComponent/Config/DomMerger.php(324): DOMDocument->loadXML('<field name="at...')
#2 /home/swimmers/public_html/vendor/magento/framework/View/Element/UiComponent/Config/DomMerger.php(395): Magento\Framework\View\Element\UiComponent\Config\DomMerger->createDomDocument('<field name="at...')
#3 /home/swimmers/public_html/vendor/magento/framework/View/Element/UiComponent/Config/Reader.php(60): Magento\Framework\View\Element\UiComponent\Config\DomMerger->merge('<field name="at...')
#4 /home/swimmers/public_html/vendor/magento/framework/View/Element/UiComponent/Config/Reader.php(47): Magento\Framework\View\Element\UiComponent\Config\Reader->readFiles(Array)
#5 /home/swimmers/public_html/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(93): Magento\Framework\View\Element\UiComponent\Config\Reader->__construct(Object(Magento\Framework\View\Element\UiComponent\Config\FileCollector\AggregatedFileCollector), Object(Magento\Framework\View\Element\UiComponent\Config\Converter), Object(Magento\Framework\View\Element\UiComponent\Config\DomMerger))
#6 /home/swimmers/public_html/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(89): Magento\Framework\ObjectManager\Factory\AbstractFactory->createObject('Magento\\Framewo...', Array)
#7 /home/swimmers/public_html/vendor/magento/framework/ObjectManager/ObjectManager.php(57): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Magento\\Framewo...', Array)
#8 /home/swimmers/public_html/vendor/magento/framework/View/Element/UiComponent/Config/ReaderFactory.php(40): Magento\Framework\ObjectManager\ObjectManager->create('Magento\\Framewo...', Array)
#9 /home/swimmers/public_html/vendor/magento/module-ui/Model/Manager.php(244): Magento\Framework\View\Element\UiComponent\Config\ReaderFactory->create(Array)
#10 /home/swimmers/public_html/vendor/magento/module-ui/Model/Manager.php(258): Magento\Ui\Model\Manager->getReader('category_form')
#11 /home/swimmers/public_html/vendor/magento/module-ui/Model/Manager.php(166): Magento\Ui\Model\Manager->prepare('category_form')
#12 /home/swimmers/public_html/vendor/magento/framework/View/Element/UiComponentFactory.php(144): Magento\Ui\Model\Manager->prepareData('category_form')
#13 /home/swimmers/public_html/vendor/magento/framework/View/Layout/Generator/UiComponent.php(125): Magento\Framework\View\Element\UiComponentFactory->create('category_form', NULL, Array)
#14 /home/swimmers/public_html/vendor/magento/framework/View/Layout/Generator/UiComponent.php(93): Magento\Framework\View\Layout\Generator\UiComponent->generateComponent(Object(Magento\Framework\View\Layout\Data\Structure), 'category_form', Array, Object(Magento\Framework\View\Layout\Interceptor))
#15 /home/swimmers/public_html/vendor/magento/framework/View/Layout/GeneratorPool.php(86): Magento\Framework\View\Layout\Generator\UiComponent->process(Object(Magento\Framework\View\Layout\Reader\Context), Object(Magento\Framework\View\Layout\Generator\Context))
#16 /home/swimmers/public_html/vendor/magento/framework/View/Layout.php(327): Magento\Framework\View\Layout\GeneratorPool->process(Object(Magento\Framework\View\Layout\Reader\Context), Object(Magento\Framework\View\Layout\Generator\Context))
#17 /home/swimmers/public_html/var/generation/Magento/Framework/View/Layout/Interceptor.php(89): Magento\Framework\View\Layout->generateElements()
#18 /home/swimmers/public_html/vendor/magento/framework/View/Layout/Builder.php(129): Magento\Framework\View\Layout\Interceptor->generateElements()
#19 /home/swimmers/public_html/vendor/magento/framework/View/Page/Builder.php(55): Magento\Framework\View\Layout\Builder->generateLayoutBlocks()
#20 /home/swimmers/public_html/vendor/magento/framework/View/Layout/Builder.php(65): Magento\Framework\View\Page\Builder->generateLayoutBlocks()
#21 /home/swimmers/public_html/vendor/magento/framework/View/Layout.php(244): Magento\Framework\View\Layout\Builder->build()
#22 /home/swimmers/public_html/vendor/magento/framework/View/Layout.php(859): Magento\Framework\View\Layout->build()
#23 /home/swimmers/public_html/var/generation/Magento/Framework/View/Layout/Interceptor.php(414): Magento\Framework\View\Layout->getBlock('menu')
#24 /home/swimmers/public_html/vendor/magento/module-backend/Model/View/Result/Page.php(59): Magento\Framework\View\Layout\Interceptor->getBlock('menu')
#25 /home/swimmers/public_html/var/generation/Magento/Backend/Model/View/Result/Page/Interceptor.php(24): Magento\Backend\Model\View\Result\Page->setActiveMenu('Magento_Catalog...')
#26 /home/swimmers/public_html/vendor/magento/module-catalog/Controller/Adminhtml/Category/Edit.php(102): Magento\Backend\Model\View\Result\Page\Interceptor->setActiveMenu('Magento_Catalog...')
#27 /home/swimmers/public_html/vendor/magento/framework/Interception/Interceptor.php(146): Magento\Catalog\Controller\Adminhtml\Category\Edit->execute()
#28 /home/swimmers/public_html/var/generation/Magento/Catalog/Controller/Adminhtml/Category/Edit/Interceptor.php(26): Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor->___callPlugins('execute', Array, Array)
#29 /home/swimmers/public_html/vendor/magento/framework/App/Action/Action.php(102): Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor->execute()
#30 /home/swimmers/public_html/vendor/magento/module-backend/App/AbstractAction.php(226): Magento\Framework\App\Action\Action->dispatch(Object(Magento\Framework\App\Request\Http))
#31 /home/swimmers/public_html/vendor/magento/framework/Interception/Interceptor.php(74): Magento\Backend\App\AbstractAction->dispatch(Object(Magento\Framework\App\Request\Http))
#32 /home/swimmers/public_html/vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor->___callParent('dispatch', Array)
#33 /home/swimmers/public_html/vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Catalog...', 'dispatch', Object(Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor), Array, 'adminAuthentica...')
#34 /home/swimmers/public_html/vendor/magento/module-backend/App/Action/Plugin/Authentication.php(143): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#35 /home/swimmers/public_html/vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch(Object(Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#36 /home/swimmers/public_html/vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Catalog...', 'dispatch', Object(Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor), Array, 'log')
#37 /home/swimmers/public_html/vendor/magento/module-logging/App/Action/Plugin/Log.php(69): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#38 /home/swimmers/public_html/vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\Logging\App\Action\Plugin\Log->aroundDispatch(Object(Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#39 /home/swimmers/public_html/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Catalog...', 'dispatch', Object(Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor), Array, 'adminMassaction...')
#40 /home/swimmers/public_html/vendor/magento/module-backend/App/Action/Plugin/MassactionKey.php(33): Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#41 /home/swimmers/public_html/vendor/magento/framework/Interception/Interceptor.php(142): Magento\Backend\App\Action\Plugin\MassactionKey->aroundDispatch(Object(Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#42 /home/swimmers/public_html/var/generation/Magento/Catalog/Controller/Adminhtml/Category/Edit/Interceptor.php(39): Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor->___callPlugins('dispatch', Array, Array)
#43 /home/swimmers/public_html/vendor/magento/framework/App/FrontController.php(55): Magento\Catalog\Controller\Adminhtml\Category\Edit\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#44 /home/swimmers/public_html/vendor/magento/framework/Interception/Interceptor.php(74): Magento\Framework\App\FrontController->dispatch(Object(Magento\Framework\App\Request\Http))
#45 /home/swimmers/public_html/vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', Array)
#46 /home/swimmers/public_html/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'install')
#47 /home/swimmers/public_html/vendor/magento/framework/Module/Plugin/DbStatusValidator.php(69): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#48 /home/swimmers/public_html/vendor/magento/framework/Interception/Interceptor.php(142): Magento\Framework\Module\Plugin\DbStatusValidator->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#49 /home/swimmers/public_html/var/generation/Magento/Framework/App/FrontController/Interceptor.php(26): Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', Array, Array)
#50 /home/swimmers/public_html/vendor/magento/framework/App/Http.php(135): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#51 /home/swimmers/public_html/vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()
#52 /home/swimmers/public_html/index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
#53 {main}
Module Download: https://drive.google.com/open?id=0B7Wz9s91WvqDcno3Q19YQldXT1k