Distribution

Improvements?

Let us know by posting here.

PHP Composer Installation for Concrete Packages

Composer Setup for Packages

  • Create composer.json in your package root with package_handle and set type to concrete5-package.
  • Register your package on Packagist or add it to the composer.json in your Concrete installation under repositories.

Including Third-Party Libraries

  • Add third-party libraries in composer.json under require, like "khill/lavacharts": "2.5.*".
  • Use composerpkg to avoid duplicating libraries.
  • Specify Concrete and PHP versions for compatibility.

Autoloading Code

  • Use getPackageAutoloaderRegistries() in controller.php or the autoload key in composer.json.

Example composer.json

{
    "name": "your_name/package_handle",
    "type": "concrete5-package",
    "require": {
        "concrete5/core": ">=8.5.0",
        "khill/lavacharts": "2.5.*"
    },
    "autoload": {
        "psr-4": {
            "CustomNamespace\\": "src/"
        }
    },
    "config": {
        "platform": {
            "php": "5.5.9"
        }
    }
}

Example controller.php

<?php
namespace Concrete\Package\PackageHandle;
use Concrete\Core\Package\Package;
defined('C5_EXECUTE') or die('Access Denied.');

class Controller extends Package
{
    protected $appVersionRequired = '8.5.0';
    protected $pkgHandle = 'package_handle';

    public function install()
    {
        $this->setupAutoloader();
        parent::install();
    }

    public function on_start()
    {
        $this->setupAutoloader();
    }

    private function setupAutoloader()
    {
        if (file_exists($this->getPackagePath() . '/vendor')) {
            require_once $this->getPackagePath() . '/vendor/autoload.php';
        }
    }
}

Composer Install in Concrete

cd path/to/the/concrete5/root/directory
composer require your_name/package_handle

Prepare for Non-Composer Concrete

cd path/to/the/package/directory
composerpkg install

Publishing Packages in Concrete Marketplace

Manual Publishing

Submit your add-on or theme to the Concrete Marketplace here: https://marketplace.concretecms.com/marketplace/manage_item/.