Skip to content

Instantly share code, notes, and snippets.

@somatonic
Created March 11, 2014 20:04
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save somatonic/9493877 to your computer and use it in GitHub Desktop.
Save somatonic/9493877 to your computer and use it in GitHub Desktop.
PageListActionHook example module to hook into page list actions
<?php
/**
* ProcessWire example demonstration module
*
* PageListActionHook autoload module once installed will remove "new" action from second level pages
* using the template "basic-page"
*
*/
class PageListActionHook extends WireData implements Module, ConfigurableModule {
/**
* getModuleInfo is a module required by all modules to tell ProcessWire about them
*
* @return array
*
*/
public static function getModuleInfo() {
return array(
'title' => 'PageListActionHook',
'version' => 1,
'summary' => 'An example module on how to hook into Page List Actions.',
'href' => 'http://www.processwire.com',
'singular' => true,
'autoload' => true,
);
}
/**
* Initialize the module
*
* ProcessWire calls this when the module is loaded. For 'autoload' modules, this will be called
* when ProcessWire's API is ready. As a result, this is a good place to attach hooks.
*
*/
public function init() {
// important here is to hook into ProcessPageListRender and not ProcessPageList
$this->addHookAfter("ProcessPageListRender::getPageActions", $this, "hookPageActions");
}
public function hookPageActions($event) {
// get the argument named
$page = $event->arguments("page");
// only for pages that use the basic-page template
if($page->template == "basic-page") {
// only allow 2 levels of basic-page
// we count the parents of the current child
if($page->parents->count() > 1){
// catch the actions array returned by the hooked method
// ProcessPageListRender::getPageActions
$actions = $event->return;
// find new action to remove it from array
foreach($actions as $key => $action){
if($action['cn'] == 'New') {
// remove action from actions array
array_splice($actions, $key, 1);
}
}
// send back the modified $actions array back to the event object
$event->return = $actions;
}
}
}
}
@alanfluff
Copy link

FAB! Thanks for the code to learn from Soma, gonna try this ^_^

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment