Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Example Configurable ProcessWire Process Module
//Example by Ryan Cramer @ProcessWire -
class YourModule extends WireData implements Module, ConfigurableModule {
public static function getModuleInfo() {
return array('title' => 'Your Module', 'version' => 1);
const defaultValue = 'smith';
public function __construct() {
$this->set('yourname', self::defaultValue); // set default value in construct
public function init() {
// while you need this function here, you don't have to do anything with it
// note that $this->yourname will already be populated with the configured
// value (if different from default) and ready to use if you want it
public function execute() {
// will return configured value, or 'smith' if not yet configured
return $this->yourname;
public static function getModuleConfigInputfields(array $data) {
// if yourname isn't yet in $data, put our default value in there
if(!isset($data['yourname'])) $data['yourname'] = self::defaultValue;
$form = new InputfieldWrapper();
$f = wire('modules')->get('InputfieldText');
$f->name = 'yourname';
$f->label = 'Enter your name';
$f->value = $data['yourname'];
return $form;
If you have the need to manage several configuration values, then you can save yourself some time by using a static array of default values
/*Also this:
foreach(self::$configDefaults as $key => $value) {
if(!isset($data[$key]) || $data[$key]=='') $data[$key] = $value;
could also be written as this:
$data = array_merge($data, self::$configDefaults);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment