Skip to content

Mustash plugin development

Mark Croxton edited this page Jun 25, 2013 · 25 revisions

Mustash plugins are classes that extend the Mustash_plugin class. Plugin class names must start with Stash_ and end with _pi, and the file named accordingly.

Plugin files should be placed in ./system/expressionengine/third_party/mustash/plugins/

Required properties

$name

(string) The name of the plugin.

$version

(string) The plugin version.

$hooks

(array) An array of hooks that the plugin acts on, and, optionally, the markers available to each hook. Can be either an indexed array or, if there are markers, an associative array:

protected $hooks = array(
    'hook_1' => array(
        'marker_1',
        'marker_2',
        'marker_3',
    ),
    'hook_2' => array(
        'marker_1',
        'marker_2',
        'marker_3',
    ),
);

protected $hooks = array('hook_1', 'hook_2', 'hook_3');

Required methods

get_groups()

An array of groups associated with the object that the plugin is modelling. Return an empty array if the plugin does not operate on groups.

hooks

Each hook defined in the $hooks array must have an associated method implementing that hook.

Inherited methods

$this->flush_cache($hook, $group_id, $markers);

This method triggers any rules associated with the plugin hook (identified by $hook), which are assigned to the passed group ID ($group_id), and parses any markers in the pattern defined for each rule.

$hook

(string) The hook that was triggered.

$group_id

(integer) The parent group ID of the content that was edited. Pass FALSE or 0 if the group is ot known or not relevant.

$markers

(array) An associative array of markers and their values.

Sample plugin

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Mustash cache-breaking plugin
 *
 * @package	Mustash
 * @author  	Mark Croxton
 */

class Stash_my_plugin_pi extends Mustash_plugin {

	/**
	 * Name
	 *
	 * @var 	string
	 * @access 	public
	 */
	public $name = 'My Plugin';

	/**
	 * Version
	 *
	 * @var 	string
	 * @access 	public
	 */
	public $version = '1.0.0';

	/**
	 * Extension hook priority
	 *
	 * @var 	integer
	 * @access 	public
	 */
	public $priority = '10';

	/**
	 * Extension hooks and associated markers
	 *
	 * @var 	array
	 * @access 	protected
	 */
	protected $hooks = array(
		'hook_1' => array(
			'marker_1',
			'marker_2',
			'marker_3',
		)
	);

	/**
	 * Constructor
	 * 
	 * @return void
	 */
	public function __construct()
	{
		parent::__construct();	
	}

	/**
	 * Get groups for this object
	 *
	 * @access	public
	 * @return	array
	 */
	public function get_groups()
	{
		return array(
		 '1' => 'Group 1',
		 '2' => 'Group 2',
		 '3' => 'Group 3',
		);
	}

	/*
	================================================================
	Hooks
	================================================================
	*/

	/**
	 * Hook: hook_1
	 *
	 * @access	public
	 * @param	integer $group_id the group ID of item that was edited
	 * @return	void
	 */
	public function hook_1($group_id)
	{
		// prep marker data
		$markers = array(
			'marker_1' 	=> $group_id,
			'marker_2'	=> '',
			'marker_3'	=> '', 
		);

		// flush cache
		$this->flush_cache(__FUNCTION__, $group_id, $markers);
	}
}

Clone this wiki locally