Hello,
I have a system.xml file as follows. Now i need same form in customer edit form. For that i created the following file , which is displaying form fields in tabs finely but with out any values in it. I tried the following code to add a category dropdown field.
System.XML
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"> <system> <section id="masspriceupdater_setup" translate="label" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1"> <class>separator-top</class> <label>AV MassPriceUpdater - Price Configuration</label> <tab>catalog</tab> <resource>AV_MassPriceUpdater::masspriceupdater_config</resource> <group id="general" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1"> <label>General Configuration</label> <field id="category_list" translate="label" type="multiselect" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1"> <label>Category / Categories</label> <comment> <![CDATA[Select category / categories for price updater <br> Selected category products price will be updated]]> </comment> <validate>required-entry</validate> <source_model>AV\MassPriceUpdater\Model\Config\Source\CategoryList</source_model> </field> <field id="price_attribute" translate="label" type="multiselect" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1"> <label>Price type(s)</label> <comment> <![CDATA[Select price type(s) <br> Selected price type(s) will be updated]]> </comment> <validate>required-entry</validate> <source_model>AV\MassPriceUpdater\Model\Config\Source\PriceAttribute</source_model> </field> <field id="updater_type" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1"> <label>Update type</label> <comment><![CDATA[Here you can select the update type <br> <strong>If you select 'fixed', please fill the field price</strong><br> <strong>If you select 'percentage', please fill the field percentage</strong>]]></comment> <validate>required-entry</validate> <source_model>AV\MassPriceUpdater\Model\Config\Source\PriceType</source_model> </field> <field id="price" translate="label" type="text" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1"> <label>Price</label> <comment> <![CDATA[Set amount, negative or positive]]></comment> </field> <field id="percentage" translate="label" type="text" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1"> <label>Percentage</label> <comment> <![CDATA[Set percentage, negative or positive <br> For example: -20% or 20%]]></comment> </field> </group> </section> </system> </config>
Form Fields Code I am Trying
public function _prepareForm(){ $form = $this->_formFactory->create( [ 'data' => [ 'id' => 'priceupdate_form', 'action' => $this->getData('action'), 'method' => 'post', 'enctype'=> 'multipart/form-data' ] ] ); $fieldset = $form->addFieldset( 'base_fieldset', ['legend' => __('General')] ); $fieldset->addField( 'category_list', 'multiselect', [ 'name' => 'category_list', 'label' => __('Category / Categories'), 'required' => false, 'renderer' => 'AV\MassPriceUpdater\Model\Config\Source\CategoryList' ] ); $fieldset->addField( 'price_attribute', 'multiselect', [ 'name' => 'price_attribute', 'label' => __('Price type(s)'), 'required' => false, 'renderer' => 'AV\MassPriceUpdater\Model\Config\Source\PriceAttribute' ] ); $fieldset->addField( 'job', 'text', [ 'name' => 'job', 'label' => __('Job'), 'required' => false ] ); $form->setUseContainer(true); $this->setForm($form); return parent::_prepareForm(); }
My Category List Modal file is like below
<?php namespace AV\MassPriceUpdater\Model\Config\Source; use Magento\Framework\Option\ArrayInterface; class CategoryList implements ArrayInterface { protected $_categoryHelper; public function __construct(\Magento\Catalog\Helper\Category $catalogCategory) { $this->_categoryHelper = $catalogCategory; } /* * Return categories helper */ public function getStoreCategories($sorted = false, $asCollection = false, $toLoad = true) { return $this->_categoryHelper->getStoreCategories($sorted, $asCollection, $toLoad); } /* * Option getter * @return array */ public function toOptionArray() { $arr = $this->toArray(); $ret = []; foreach ($arr as $key => $value) { $ret[] = [ 'value' => $key, 'label' => $value ]; } return $ret; } /* * Get options in "key-value" format * @return array */ public function toArray() { $categories = $this->getStoreCategories(true, false, true); $catagoryList = array(); foreach ($categories as $category) { $catagoryList[$category->getEntityId()] = __($category->getName()); } return $catagoryList; } }
When ever vendor saves the data of above form , I want to store the information in another table using Ajax method. Can you suggest me a solution for this?