This module is provided as a template for creating a custom Tripal Extension Module for Drupal 7 and Tripal 2.x. Drupal does provide quite a bit of documentation on its website at http://www.drupal.org but the easiest way to learn to program a Drupal module is to purchase the following book: Tomlinson, VanDyk. Pro Drupal Development. 2010. ISBN-13: 978-1430228387 But this quick link can help get you started: https://drupal.org/developing/modules/7 Briefly, to create a Drupal module you must 1) Create a directory to house all of your module's files 2) Create a .info inside of the directory which provides information about your module to Drupal 3) Create a .module file which contains the functions used by your module 4) Create a .install file which contains the functions used for installation, enabling, disabling and uninstallation of your module. Examine the example functions and documentation in each of the files in this example module to learn how Tripal uses the Drupal API. ------------------------- DIRECTORY AND FILE NAMING ------------------------- When creating your Tripal Extension module, the following directory structure and file naming is suggested: For the required files: [module dir]/[module name].info [module dir]/[module name].module [module dir]/[module name].install If you want to include Drush commands for your module [module dir]/[module name].drush.inc If you want to integrate with Drupal Views 3.x: [module dir]/[module name].views.inc [module dir]/[module name].views_default.inc Include Files ------------- To limit the size of files, some functionality can be placed inside of "include" files. Include files are placed inside of an 'includes' directory. [module dir]/includes If your module creates a node type that uses data housed in Chado, you should place all of the Drupal hooks for nodes inside of an include named: [module dir]/includes/[module name].chado_node.inc If your module has an administrative interface, all of the functions related to administration should go in an include file named: [module dir]/includes/[module name].admin.inc All other include files should be named in the following way: [module dir]/includes/[module name].[function].inc where [function] is a brief description of the functionality provided by the include file. Please only use underscores inside of the [function] (no dashes or periods). Theme Files ------------- Tripal primarily uses template files for displaying content from Chado. This allows anyone to easily change the way data is displayed without needing to delve into the module's source code. A template typically provides data for a single data type (e.g. feature) or association (e.g. properties associated to features, or publications associated with featurmaps, etc.). These template files and any JavaScript, CSS or images needed to support them are all housed inside of a 'theme' directory with the following structure: [module dir]/theme [module dir]/theme/css (for CSS files) [module dir]/theme/js (for JS files) [module dir]/theme/images (for images) [module dir]/theme/templates (for all Drupal template files) All Drupal hooks and functions related to theming of content should go in the file named: [module dir]/theme/[module name].theme.inc The functions in that file will typically be functions which directly generate content for a page or "preprocess" hooks that prepare variables that are passed to templates. Template files are named in the following way [module dir]/theme/templates/[module name]_[function].tpl.php. Notice that templates have an underscore separating the [module name] from the [function]. Typically a period is used (as with include files) but for backwards compatibility the underscores are kept. API Files --------- If your module will provide a set of functions that can be used as an Application Programming Interface (API), then those functions should be placed in files housed in the 'api' directory: [module dir]/api When creating API functions try to organize them into groups of related function and separate them into files by function with the following naming: [module dir]/api/[module name].[function].api.inc