Getting Started

Addon Locations

This section will go over where addons can be loaded from and the difference between core and application addons.

Core Addons

All addons listed in the composer.json file will be installed by composer in the /core directory similar to the /vendor directory.

Only addons required by the root composer.json file will resolve dependencies required by the addon's composer.json file.

Application Addons

All non-core addons are considered application addons and are located in the /addons directory.

Application addons should be committed to the project's repository.

Application addons are split into private addons and shared addons.

Private Addons

Private addons are located within /addons/{APP_REF} directory and are organized by vendor just like the /core and /vendor directories.

Private addons are only available to the application designated by the {APP_REF} directory in which they reside.

Shared Addons

Shared addons are located within /addons/shared directory and are organized by vendor just like the /core and /vendor directories.

Shared addons are available to all applications within the PyroCMS installation.

Packaged Addons

Addons can include their own addons. While it is not common the Grid and Repeater field types are good examples of an addon that come packaged with it's own dependent addons.

Addons can be registered anywhere but when using this technique they are usually found within the /addons directory within the addon itself.

Addon Object

All addon types extend the base Anomaly\Streams\Platform\Addon\Addon class and inherit some basic functionality.

isCore

The isCore method returns whether the addon is core or not.

if ($addon->isCore()) {
    echo 'Yep!';
}
{% is addon.isCore() %}
    Yep!
{% endif %}

isShared

The isShared method returns if the addon is shared or not.

if ($addon->isShared()) {
    echo 'Yep!';
}
{% addon.isShared() %}
    Yep!
{% endif %}

getName

The getName method returns the translatable name of the addon.

echo trans($addon->getName());
{{ trans(addon.getName()) }}

getTitle

The getTitle method returns the title which generally similar to the name but does not include the addon type.

echo trans($addon->getTitle());
{{ trans(addon.getTitle()) }}

getDescription

The getDescription method returns the addon description.

echo trans($addon->getDescription());
{{ trans(addon.getDescription()) }}

getNamespace

The getNamespace method returns the addon's dot namespace with an optional key.

This is helpful for creating config keys, language keys, hinted view paths, and anything else prefixed by the addon's dot namespace.

An optional key can be provided to create a dot-namespace config key for example.

echo $addon->getNamespace();
// anomaly.module.pages

echo $addon->getNamespace('config.limit')
// anomaly.module.pages::config.limit
{{ addon.getNamespace() }}
// anomaly.module.pages

{{ addon.getNamespace('config.limit') }}
// anomaly.module.pages::config.limit

You can see how this could be used to generate a config dot-namespace key.

{{ config(addon.getNamespace('config.limit'), 100) }}

getPath

The getPath method returns the addon's installed path.

require_once $addon->getPath() . '/some/old-timer/file.php';

getAppPath

The getAppPath returns the relative application path of the addon.

require_once base_path($addon->getAppPath() . '/some/old-timer/file.php');

getType

The getType returns the addon type in singular form.

if ($addon->getType() == 'field_type') {
    echo "I'm a field type!";
}
{% if addon.getType() == "field_type" %}
    I'm a field type!
{% endif %}

getSlug

The getSlug method returns the slug of the addon.

echo $addon->getSlug();
// pages
{{ addon.getSlug() }}
// pages

getVendor

The getVendor method returns the vendor string of the addon.

echo $addon->getVendor();
// anomaly
{{ addon.getVendor() }}
// anomaly