Need a Developer?

Taking work, any size or scope, and your imagination is the only limit. Contact me for a free consultation at [email protected].

Recent News

ERROR: TESTING The special HTML tag 'theme section="whats_new.tpl"' is not supported.

Mailing List

Subscribe to the low traffic mailing list to stay updated on Apex.

Admin Screenshot

Apex Training - Getting Started

First thing is first, visit the Installation Guide and get an install of Apex up and running. Once done, install a few base packages we will need with:

./apex install webapp users transaction support devkit

Create Package

Next, we need to create our new package which we will call "training". You can do this in terminal with:

./apex create_package training

When prompted to select a repository, enter 2 to specify the local repository that was installed with the devkit package. This will create our new package including two directories at:

  • /src/training -- Will hold the bulk of PHP code for this package.
  • /etc/training -- The configuration of this package.

Package Configuration

The new file located at /etc/training/package.php is the main configuration file for our package, and is explained in full on the Package Configuration page of the documentation. The __construct() method is the main method within this file, and can contain various arrays as summarized below.

Array Description
$this->config Key-value pair of all configuration values used by the package, and their default value upon installation.
$this->hash An array with the key being the name of the hash, and the value being an associative array of key-value pairs of all variables / options within the hash. Define any sets of options for select / radio / checkbox lists in this array.
$this->menus An array of arrays, and defines all menus that are included in the package within the administration panel, member's area, and public web site.
$this->ext_files Any external files included in this package, which are not components.
$this->placeholders Allows you to place <a:placeholder> tags within member area / public templates, which then are replaced with the contents defined by the administrator via the CMS->Placeholders menu of the admin panel.
$this->boxlists Used to add entries / define lists of settings. For example, Settings->Users and Financial menus of the admin panel are examples of boxlists.
$this->notifications Allows you to have default e-mail notifications created upon package installation, which are managed via the Settings->Notifiations menu of the administration panel.
$this->dashboard_teism Defines the various dashboard items / widegts that are available within this package.

Now that we have the basic gist of this method, open up the /etc/training/package.php file, and change the __construct() method to:

public function __construct() { // Config variables $this->config = array( 'daily_award' => 50 ); // Hash $this->hash = array(); $this->hash['status'] = array( 'pending' => 'Pending', 'complete' => 'Competed', 'rollover' => 'Rolled Over' ); // Menus -- Admin Panel -- Lottery menu $this->menus = array(); $this->menus[] = array( 'area' => 'admin', 'type' => 'parent', 'position' => 'after financial', 'icon' => 'fa fa-fw fa-card', 'alias' => 'lottery', 'name' => 'Lottery', 'menus' => array( 'manage' => 'Manage Lotteries' ) ); // Menus -- Admin Settings $this->menus[] = array( 'area' => 'admin', 'parent' => 'settings', 'position' => 'bottom', 'alias' => 'lottery', 'name' => 'Lottery' ); // Menus -- Member Area $this->menus[] = array( 'area' => 'members', 'parent' => 'financial', 'position' => 'top', 'alias' => 'lottery', 'name' => 'View Lotteries' ); }

Scan Package

We will explain the above code in detail just below, but every time you modify a package.php file, you must scan the package to update the database as necessary. In terminal, simply type:

./apex scan training

Once done, if you login to either the administration panel or member's area, you will see the new menus we added.

__construct() Code Explained

The rest of this page explains the above code in detail, but for full information on the __construct() function within the package.php file, please visit the Package Configuration page of the documentation.


We added one configuration variable, which can be accessed anywhere within the software with:

$amount = app::_config('training:daily_award');

You may also update the value of the configuration variables anywhere within the software by using the
app::<a href="" target="_blank">update_config_var()</a> method such as:

$award = 50;
app::update_config_var('training:daily_award', $award);

We added one hash for the lottery status, which will be used later to easily populate select lists.


As stated in the documentation, this is an array of associative arrays that defines the various menus to add for this package, and should be quite straight forward. In the above code, we added one sub-menu under the Settings menu within the administration panel, plus adding one parent menu with one sub-menu in the administration panel, plus one sub-menu into the member's area for users to view lotteries.


Now that our new package is created with some base configuration, let's move to the next step, Create Database Tables.