8

I have a system config field of type multiselect which will be populated using the catalog/product_attribute_collection. This is a part of the system.xml that defines it.

  <attributes>
       <label>Choose Attributes to JSONize</label>
       <frontend_type>multiselect</frontend_type>
       <sort_order>3</sort_order>
       <show_in_default>1</show_in_default>
       <show_in_website>1</show_in_website>
       <show_in_store>1</show_in_store>

<source_model>package_module/system_config_attributes</source_model>
  </attributes>

Now I want all of the values in the multiselect to be selected by default. Since the default values for system config are defined in the config.xml, I'm not sure how to choose all as default.

This is the section of config.xml which is relevant to the question

<default>
    <mytab>
        <mysection>
            <attributes><!-- ***WHAT SHOULD I WRITE HERE*** --></attributes>
        </mysection>
    </mytab>
</default>
6
+50

Use DataScript to store data in config module.

How to create data script

http://inchoo.net/magento/magento-install-install-upgrade-data-and-data-upgrade-scripts/

In datascript simply call the core config module and save your data

$myDynamicValue = '1,2,3';
Mage::getConfig()->saveConfig('section/group/field', $myDynamicValue, 'default', 0);
  • This was a really clever workaround, and it worked! – Jay Ghosh May 18 '17 at 9:24
3

I give multiselect example.

<fields>
    <view_style translate="label">
        <label>Display Settings</label>
        <frontend_type>multiselect</frontend_type>
        <source_model>yourmodule/system_config_source_view</source_model>
        <sort_order>40</sort_order>
        <show_in_default>1</show_in_default>
    </view_style>
</fields>

create one file for multiselect option in your module in this path

your_namespace/yourmodel/Model/System/Config/Source/View.php

Add below code in your View.php

class YourNamespace_YourModule_Model_System_Config_Source_View 
{
    /**
     * Options getter
     *
     * @return array
     */
    public function toOptionArray()
    {
        return array(
            array('value' => 0, 'label' => Mage::helper('adminhtml')->__('Data1')),
            array('value' => 1, 'label' => Mage::helper('adminhtml')->__('Data2')),
            array('value' => 2, 'label' => Mage::helper('adminhtml')->__('Data3')),
        );
    }

    /**
     * Get options in "key-value" format
     *
     * @return array
     */
    public function toArray()
    {
        return array(
            0 => Mage::helper('adminhtml')->__('Data1'),
            1 => Mage::helper('adminhtml')->__('Data2'),
            3 => Mage::helper('adminhtml')->__('Data3'),
        );
    }
}
  • Your answer tells how to define a source model. I have done that already. I want all values from the source model to be selected by default – Jay Ghosh Mar 16 '17 at 5:24
3
<default>
     <mytab>
        <mysection>
            <attributes><!-- ***WHAT SHOULD I WRITE HERE*** --></attributes>
        </mysection>
    </mytab>
</default>

You should use the comma separated keys of your options array.

eg

<default>
     <mytab>
        <mysection>
            <attributes>0,1,3</attributes>
        </mysection>
    </mytab>
</default>

Selects all three options by default.

  • Yes but like I said. I don't know the values beforehand to write in a comma-separated string. It's dynamic – Jay Ghosh Mar 16 '17 at 23:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.