Skip to content
Snippets Groups Projects
structure.md 3.31 KiB
Newer Older
  • Learn to ignore specific revisions
  • The [civix](/extensions/civix.md) command line tool will generate the following structure
    
    dvhirst's avatar
    dvhirst committed
    -   ***info.xml*** is a manifest that describes your extension – the name, license, version number, etc. You should edit most information in this file. The information contained in this file will also be used if published on civicrm.org.
    -   ***myextension.php*** stores source code for all your hooks. It includes a few default hook implementations which will make     development easier. You can add and remove hooks as you wish. (Note: This file name is different in each module – it is based the module's *[short-name](/extensions/index.md#extension-names)*.)
    -   ***myextension.civix.php*** contains auto-generated helper functions. These deal with common problems like registering your
        module in the template include-path. `civix` may automatically overwrite this file, so generally do not edit it.
    
    dvhirst's avatar
    dvhirst committed
    In addition, civix creates some empty directories. These directories are reminiscent of the directory structure in CiviCRM core:
    
    dvhirst's avatar
    dvhirst committed
    -   ***CRM/Myextension/*** stores PHP class files. Classes in this folder should be prefixed with "CRM\_Myextension\_".
    
    -   ***templates/*** stores Smarty templates.
    
    dvhirst's avatar
    dvhirst committed
    -   ***xml/*** stores XML configuration files (such as URL routes and schema xml).
    -   ***build/*** stores exportable .zip files.
    
    dvhirst's avatar
    dvhirst committed
    When adding files into these directories it is advisable to follow similar patterns to that in CiviCRM Core e.g. BAO files should go in "CRM\_Myextension\BAO\", likewise with Form and Page. This ensures that for developers that seek to modify or improve the extension files can be found in standard locations.
    
    dvhirst's avatar
    dvhirst committed
    There are many times when you need to reference something from the extension -- e.g.  its name, its file-path, or its translated messages.
    
    dvhirst's avatar
    dvhirst committed
    For example, this code displays a translated message (using the translation data for this extension):
    
    
    ```php
    if ($welcoming) {
      CRM_Core_Session::setStatus(ts('Hello world!', array(
        'domain' => 'org.civicrm.myextension',
      )));
    } else {
      CRM_Core_Session::setStatus(ts('Goodbye cruel world!', array(
        'domain' => 'org.civicrm.myextension',
      )));
    }
    ```
    
    Repeatedly entering the name of the extension is a bit tiresome.
    
    
    dvhirst's avatar
    dvhirst committed
    For code generated by `civix` v17.08.0+ (or suitably [upgraded](https://github.com/totten/civix/blob/master/UPGRADE.md)), `civix` includes the `E` helper which provides easier access:
    
    
    ```php
    use CRM_Mymodule_ExtensionUtil as E;
    
    if ($welcoming) {
      CRM_Core_Session::setStatus(E::ts('Hello world!'));
    } else {
      CRM_Core_Session::setStatus(E::ts('Goodbye cruel world!'));
    }
    ```
    
    
    dvhirst's avatar
    dvhirst committed
    Note that `E` is an alias.  It stands for "extension" -- as in "the current extension that I'm writing".  It's a very thin class that provides small helpers for looking up your extension's resources, e.g.
    
    
     * `E::ts($text)` -- Translate a string (using the extensions' translation file)
     * `E::path($file)` -- Get the path to a resource file (within this extension)
     * `E::url($file)` -- Get the URL to a resource file (within this extension)
     * `E::findClass($suffix)` -- Get the full name of a class (within this extension)
     * `E::LONG_NAME` -- The full length key for this extension (eg `org.example.myextension`)
     * `E::SHORT_NAME` -- The abbreviated key for this extension (eg `myextension`)