Skip to content

<div style="display: none;" hidden="true" aria-hidden="true">Are you an LLM? You can read better optimized documentation at /guides/settings_in_database.md for this page in Markdown format</div>

Settings in database

Create/Move settings.

1. Create a patch in application/controllers/Patch.php

naming: Group names and setting keys must be typed in uppercase and delimited with an underscore.

When you are moving an existing settings in config to database, you should consider using the old keys to migrate the previous values.

To execute the function in terminal, use php cli.php patch/productSettings

php
protected function productSettings()
    {
        $settingsGroupName = 'PRODUCT';
        $settings = [
            [
                "key" => "DISCOUNT_IS_ENABLED",
                "old_key" => "productDiscounts"
            ],
            [
                "key" => "BADGE_TEXT",
                "old_key" => "productBadgeDefaultText"
            ],
        ];

        foreach ($settings as $setting) {
            $this->registry->set_regval($setting["key"], $settingsGroupName, '', config_item($setting["old_key"]));
        }

        echo $settingsGroup . " settings added to registry \n";
    }.

saving array element from existing array

php
$this->registry->setArray("% REGISTRY_KEY %", $settingsGroup, '', config_item('arrayName')["arrayElementName"]);

saving an array value of a nested array

php
$this->registry->setArray("% REGISTRY_KEY %", $settingsGroup, '', config_item('agoraSettings')['arrayElement']['arrayChildElement']);

1.1 Create new setting

When creating a setting use default_value instead an old_key

php
protected function productSettings()
    {
        $settingsGroupName = 'PRODUCT';
        $settings = [
            [
                "key" => "DISCOUNT_IS_ENABLED",
                "default_value" => "productDiscounts"
            ],
        ];

        foreach ($settings as $setting) {
            $this->registry->set_regval($setting["key"], $settingsGroupName, '', config_item($setting["default_value"]));
        }

        echo $settingsGroup . " settings added to registry \n";
    }.

2. Register values in ecommercen/settings/controllers/Adv_settings.php

naming: lowercase group name + value connected with an underscore.

Create or use an existing function that corresponds to your settings group.

Each function usually consist of render, validate and save blocks.

render

in render block we register variables for the frontend.

'registry_group_name_registry_value' => $this->registry->get_regval(REGISTRY_VALUE, REGISTRY_GROUP_NAME)

validate

in validation block we validation incoming post request values, usually only trim.

$this->form_validation->set_rules('registry_group_name_registry_value', '', 'trim')

save

in saving block we save to database.

$this->registry->set_regval('REGISTRY_VALUE', 'REGISTRY_GROUP_NAME', '', $this->input->post('registry_group_name_registry_value', true));

when saving a boolean value from a post request consider adding the type ( int ) type

$this->registry->set_regval('REGISTRY_VALUE', 'REGISTRY_GROUP_NAME', '', (int) $this->input->post('registry_group_name_registry_value', true));

php
public function third_party_providers()
    {

        if ($this->input->post('submit')) {

            $this->thirdPartyProvidersValidation();

            if ($this->form_validation->run()) {

								{% Save %}

                $this->registry->set_regval('DISCOUNT_IS_ENABLED', 'PRODUCT', '', (int) $this->input->post('product_discount_is_enabled', true));
                $this->registry->set_regval('BADGE_TEXT', 'PRODUCT', '', $this->input->post('product_badge_text', true));

                redirect('settings/third_party_providers');
            }
        }

        $this->render = array_merge($this->render, [

						{% Render %}

            'product_discount_is_enabled' => $this->registry->get_regval('DISCOUNT_IS_ENABLED', 'PRODUCT'),
            'product_badge_text' => $this->registry->get_regval('BADGE_TEXT', 'PRODUCT'),

            'view_content' => "{$this->classView}/third_party_providers"
        ]);

        $this->defaultRender();
        $this->load->view($this->template_view_admin, $this->render);
    }

    protected function thirdPartyProvidersValidation()
    {

				{% Validate %}

        $this->form_validation
            ->set_rules('product_discount_is_enabled', '', 'trim')
            ->set_rules('product_badge_text', '', 'trim');
    }

3. UI form for settings in application/views/admin/settings

Create or use an existing form that corresponds to your settings group.

php
<?= form_open(); ?>

// Boolean
<input type="checkbox" name="product_discount_is_enabled" value="1" <?= set_checkbox('product_discount_is_enabled', '1', (bool)$product_discount_is_enabled); ?>>

// Text
<input class="form-control" type="text" name="product_badge_text" value="<?= set_value('product_badge_text', $product_badge_text);?>">

<button type="submit" name="submit" value="true"> save all </button>
<?= form_close(); ?>

after creating a form or the fields, it is good to perform a save check, and see if values are saved.

4. Set settings in application/views/admin/settings

naming: camelCase group name + value

we register our settings group in front controller.

php
$productSettings = $this->registry->getGroupAsArray('PRODUCT');

$this->settings = [
	'productDiscountIsEnabled' => (bool) $criteoSettings['DISCOUNT_IS_ENABLED'] ?? false,
	'productBadgeText' => $criteoSettings['BADGE_TEXT'] ?? '',
];

5. Replace/Insert settings

Replace or insert settings depending on file scopes.

php
If view file: $settings['productBadgeText']
If controller: $this->settings['productBadgeText']

If admin view : $this->registry->get_regval('BADGE_TEXT', 'PRODUCT')
If admin controller : $this->registry->get_regval('BADGE_TEXT', 'PRODUCT')
If adv front controller : $this->registry->get_regval('BADGE_TEXT', 'PRODUCT')
If model : $this->registry->get_regval('BADGE_TEXT', 'PRODUCT')

If helper: 
$ci =& get_instance();
$ci->registry->get_regval('BADGE_TEXT', 'PRODUCT');