Book Image

concrete5 Cookbook

Book Image

concrete5 Cookbook

Overview of this book

concrete5 is an increasingly popular open source content management system because of its incredible and easy-to-use interface. But, it also comes complete with a robust PHP framework, allowing web developers to create custom websites and applications with ease. "concrete5 Cookbook" is a practical collection of solutions to tasks that both novice and experienced concrete5 developers face on a regular basis. Readers will learn multiple subjects, including full blueprints for developing an event calendar add-on and an image gallery block. Developers new to concrete5 will quickly learn how to customize concrete5 to their needs, and seasoned pros will find it an excellent quick reference for performing specific tasks. "concrete5 Cookbook" will transform ordinary PHP developers into concrete5 experts capable of bending concrete5 to their will and unleashing the true power of this up-and-coming content management system. Throughout the course of over 140 recipes and 3 bonus project blueprint chapters, PHP developers will learn how to create custom blocks and dashboard interfaces as well as programmatically work with pages, files, users, permissions, and more. Discover the built-in Active Record support that makes working with databases simple and maintainable. Readers will also learn how to take advantage of the numerous helper classes included in concrete5, and will dive deep into the concrete5 MVC framework to create powerful custom websites and applications. Tie together all of the concepts learned in the recipes with 3 bonus chapters featuring complete blueprints to create a calendar add-on, an image gallery block type, and tips on how to sell your themes and add-ons for money! "concrete5 Cookbook" is a complete collection of recipes to solve the most common (and some not-so-common) tasks that concrete5 developers will face on a regular basis.
Table of Contents (19 chapters)
concrete5 Cookbook
Credits
About the Author
About the Reviewers
www.PacktPub.com
Preface
Index

Creating the package controller


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.