The first step in creating our add-on is to create the directories and files.
Create a new directory in /packages
called cookbook_gallery
. The first file we will need is controller.php
.
Enter the following code in controller.php
to define the add-on:
<?php defined('C5_EXECUTE') or die(_("Access Denied.")); class CookbookGalleryPackage extends Package { protected $pkgHandle = 'cookbook_gallery'; protected $appVersionRequired = '5.6.0'; protected $pkgVersion = '0.9.0'; public function getPackageName() { return t('Cookbook Gallery'); } public function getPackageDescription() { return t('An image gallery that ties into the file manager.'); } }
You may recall from Chapter 8, Working with Themes and Add-Ons, that packages only require one file, the controller
. The controller
file contains methods that tell concrete5 what the package's name is, and a text description of the package.
There are a few things we need to make note of here. First, notice the class name of the controller. Since our package handle is cookbook_gallery
, we need to camel case that handle and append the package to the end, to create the class name that concrete5 can predict and load correctly.
The next thing we need is the defined
or die
statement at the top of the file. This is a special security requirement of concrete5 to ensure that scripts cannot be executed arbitrarily. Everything has to get run through the concrete5 dispatcher. This statement is required at the top of every .php
(excluding third-party libraries that exist in libraries/3rd_party
) file in your package if you plan on submitting the package to the concrete5 marketplace.
Another thing that we need to pay attention to is that all public facing strings are encased in the t()
function (see the package name and description). The t()
function, as discussed in Chapter 9, System Events and Advanced Configuration allows translators to supply alternate translations for the given string. This is another requirement for add-ons to be submitted into the concrete5 marketplace.
We aren't done with the controller yet; we will need to come back and add the installation function once our block is created.