Configuration

Configuration of Altis is done the composer.json file in the root of your project. To configure specific modules, feature and settings for Altis, add an extra.altis section to your composer.json.

{
    "name": "example/my-site",
    "require": {
        "altis/altis": "*",
    },
    ...
    "extra": {
        "altis": {

        }
    }
}

When documentation refers to the configuration file, its referring to this section of the composer.json file.

By convention, most module's settings reside in the path altis.modules.$module.$setting. For example, to require all users be logged in to view the website, you'd set the modules.security.require-login setting to true.

{
    "name": "example/my-site",
    "require": {
        "altis/altis": "*",
    },
    ...
    "extra": {
        "altis": {
            "modules": {
                "security": {
                    "require-login": true
                }
            }
        }
    }
}

Environment Specific Configuration

It's not unusual to want different configuration options for difference environments. For example, you may want to have the require-login feature enabled for all environments, except the local environment. Environment specific configuration is provided in the form altis.environments.$environment.

{
    "name": "example/my-site",
    "require": {
        "altis/altis": "*",
    },
    ...
    "extra": {
        "altis": {
            "modules": {
                "security": {
                    "require-login": true
                }
            },
            "environments": {
                "local": {
                    "modules": {
                        "security": {
                            "require-login": false
                        }
                    }
                }
            }
        }
    }
}

Environment configuration is merged with the global altis configuration, with the matching environment options overriding anything specific in the global configuration. The environment type is matched against the value return by the function Altis\get_environment_type(). The environment type will typically be any of local, development, staging or production.

Custom Configuration

When developing custom code and features, it's recommended to make use of the configuration file and APIs so all configuration can be centrally located and machine readable. By convention it's also recommended to use a namespace in the extra.altis object to ensure your custom configuration settings don't collide with Altis current or future settings.

Suppose you have built a feature that published stories to Twitter on publish. You can make use of the configuration file to provide the Twitter OAuth 2 credentials that should be used. It's quite likely you'd want to make use of environment specific overrides so the staging site publishes to a different Twitter account.

{
    "name": "example/my-site",
    "require": {
        "altis/altis": "*",
    },
    ...
    "extra": {
        "altis": {
            "environments": {
                "staging": {
                    "my-project": {
                        "twitter-oauth2-token": "xxxxxxxxx"
                    }
                },
                "production": {
                    "my-project": {
                        "twitter-oauth2-token": "yyyyyyyyy"
                    }
                }
            }
        }
    }
}

To get the value of your custom configuration at runtime, use the Altis\get_config() function. This function will automatically handle the environment specific overrides.

$token = Altis\get_config()['my-project']['twitter-oauth2-token'];

new TwitterClient( $token );

Configuration in PHP

While it is preferred to use the JSON configuration wherever possible in some cases you may need an escape hatch or some further processing of the JSON config such as defining constants.

Altis will automatically load a file located at .config/load.php in the root directory of your project if present. This is designed to be an entry point for loading files with more appropriate names. In addition the Core Module functions will be available to you. For example:

<?php
// Configure post revision behaviour.
require_once __DIR__ . '/revisions.php';

// Load custom local config.
if ( get_environment_type() === 'local' ) {
    require_once __DIR__ . '/local-config.php';
}

Next Steps

With your site configured, you can begin developing custom modules for your project.