Take the 2-minute tour ×
Magento Stack Exchange is a question and answer site for users of the Magento e-Commerce platform. It's 100% free, no registration required.

I'm creating an extension that exposes an API to another web site. My extension will create an API key, and then you'll copy this API key into the other web site, which will let Magento and the other site exchange data.

I've created a system.xml entry for my API key. I'd like for the default value for this config item to be populated by a call to a generateApiKey method defined in PHP code.

In pseudocode, config.xml:

<config>
    <default>
       <my_extension>
            <api_connection>
                <apikey><?php echo $obj->generateApiKey(); ?></apikey>
            </api_connection>
        </my_extension>
    </default>
</config>

I know that that's not possible, but hopefully that conveys what I want to do.

How can I programmatically generate (and save) a default value for something defined in system.xml?

share|improve this question
add comment

2 Answers 2

up vote 2 down vote accepted

I'd suggest populating the value via a data migration script. Create a resource in your module's config.xml:

<config>
    <modules>
        <my_namespace_my_extension>
            <version>1.0.0</version>
        </my_namespace_my_extension>
    </modules>
    <global>
        <resources>
            <my_namespace_my_extension>
                <setup>
                    <module>MyNamespace_MyModule</module>
                    <class>Mage_Core_Model_Resource_Setup</class>
                </setup>
            </my_namespace_my_extension>
        </resources>
    </global>

Create a the migration script: MyNamespace/MyExtension/data/my_namespace_my_extension/data-install-1.0.0.php

/* @var $this Mage_Core_Model_Resource_Setup */
$generatedKey = Mage::helper('my_extension')->generateApiKey();
$this->setConfigData('my_extension/api_connection/apikey', $generatedKey);

NOTE: the cache would most likely need to be cleared after installation. This should be made clear in your module's installation instructions. It should also be possible to flag the cache as invalidated.

Mage::app()->getCacheInstance()->invalidateType('config');
share|improve this answer
    
Is that going to work? The setConfigData method will set the node value, but it won't persist the value to a database anywhere. –  Alan Storm Mar 10 at 18:59
1  
It should, checkout the source here. Are you referring to Mage::getConfig()->setNode() perhaps? –  beeplogic Mar 10 at 19:02
    
Should this install script have the usual $installer->startSetup() and $installer->endSetup() calls? –  skyler Mar 10 at 19:11
    
It's not necessary, the "data" scripts are meant for populating data. The start/end setup methods concern themselves with how the database behaves (e.g. turning off foreign key constraints). –  beeplogic Mar 10 at 19:19
add comment

You can just save it into core_config_data.

So either in $setup->setConfigData($path, $value) or Mage::app()->getConfig()->saveConfig($path, $value) but be careful, the second one doesn't clean the cache.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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