Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Magento: set config values of just created website?

I'm programmtically creating websites/users etc ...

Here's the problem: When creating a website, I can't immediatly set the config values afterwards.

Code:

<?php
/* Website information */
$website_data = array(
            'name' => 'Company name',
            'code' => 'website_company_1',
            'sort_order' => '1',
            );

/* Save website */
$website = Mage::getModel('core/website'); 
$website->setData($website_data);
$website->save();

/* Get website code */
$web_code = $website->getCode();

/* R-int stores */
Mage::app()->reinitStores();

/* Config data array example */
$data = array('name' => 'Company 1', 'phone' => '056 22 33 61')

/* Set config values in array */
$groups = array();
 foreach($data as $key => $value){
 $groups['store_information']['fields'][$key]['value'] = $value;
 }


/* Save config values */
Mage::getModel('adminhtml/config_data')
      ->setSection('general')
      ->setWebsite($web_code)
      ->setStore(NULL)
      ->setGroups($groups)
      ->save();


/* Re-init again */
Mage::app()->reinitStores();

However, this doesn't work for some reason, but if I create a website first(with the same code), then execute this config-save function afterwards, it works fine. As if it needs a new page load first before it can set/update config values. I thought the re-init would solve this but it doesn't ...

Thoughts?

like image 930
Rakward Avatar asked Dec 17 '22 22:12

Rakward


1 Answers

You should use install/upgrade scripts for this purpose (these are the scripts inside modules' sql folders). You may even wish to create a setup-specific module with/in which to run these.

Simply declare a setup resource in your module's global/resources node and then create the file(s) you need to accomplish this. Use Mage_Core_Model_Resource_Setup or have your setup class extend from there.

See Mage_Core_Model_Resource_Setup::setConfigData() and Mage_Core_Model_Resource_Setup::deleteConfigData().

Mage_Core_Model_Resource_Setup::addConfigField() could also be used but is not implemented in the core from what I can tell.

<?xml version="1.0" ?>
<!-- module config.xml -->
<config>
    <modules>
        <Your_Module>
            <version>1.0</version>
            <!-- upgrade script #s evaluated with version_compare(), FYI -->
        </Your_Module>
    </modules>
    <global>
        <resources>
            <unique_node>
                <setup>
                    <!-- match node under <modules> -->
                    <module>Your_Module</module>
                    <class>Mage_Core_Model_Resource_Setup</class>
                </setup>
            </unique_node>
        </resources>
    </global>
</config>

Then in your install/upgrade scripts do this:

<?php

$installer = $this;
/* @var $installer Mage_Core_Model_Resource_Setup */ //or whatever you configured

$installer->startSetup();

$installer->setConfigData($path, $value, $scope='default', $scopeId=0) //inherit is not implemented

$installer->endSetup();
like image 199
benmarks Avatar answered Dec 26 '22 22:12

benmarks