Understanding Omeka_Plugin_AbstractPlugin

Omeka_Plugin_AbstractPlugin is designed to streamline common tasks for a plugin, such as defining hook and filter callbacks and setting options when the plugin is installed.

To use it, simply create a class for your plugin as its own file in the plugins directory:

// In plugins/YourPlugin/YourPluginPlugin.php
class YourPluginPlugin extends Omeka_Plugin_AbstractPlugin

Hook and filter callbacks are defined with an array. One change introduced in Omeka 2.0 is arbitrary hook and filter callback names. Before, all callback names followed a predetermined format. While this format remains an option, now a corresponding key in $_hooks and $_filters will be interpreted as the name of the callback method.

protected $_filters = array('admin_navigation_main',
  'changeSomething' => 'display_setting_site_title',
  'displayItemDublinCoreTitle' => array(
      'Dublin Core',

  protected $_hooks = array('install', 'uninstall');

When installing your plugin, there might be options that need to be set. You can do this easily within the install callback by adding an $_options array and calling Omeka_Plugin_AbstractPlugin::_installOptions from the install callback, and Omeka_Plugin_AbstractPlugin::_uninstallOptions in the uninstall callback. The array is name-value pairs for the name of the option and initial value.

protected $_hooks = array('install', 'uninstall');

protected $_options = array('my_plugin_option'=>'option_value');

public function install() {

public function uninstall() {

When creating tables for your plugin in the install hook, use the _db property. Omeka will convert your model names into the appropriate table names.

public function hookInstall() {
    $db = $this->_db;
    $sql = "
    CREATE TABLE IF NOT EXISTS `$db->MyPluginModel` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `modified_by_user_id` int(10) unsigned NOT NULL,
      . . .
      ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";