Coder Social home page Coder Social logo

bainternet / php-hooks Goto Github PK

View Code? Open in Web Editor NEW
273.0 273.0 106.0 274 KB

The PHP Hooks Class is a fork of the WordPress filters hook system rolled in to a class to be ported into any php based system .

Home Page: http://bainternet.github.com/PHP-Hooks/

License: GNU General Public License v3.0

PHP 100.00%

php-hooks's Introduction

PHP-Hooks

The PHP Hooks Class is a fork of the WordPress filters hook system rolled in to a class to be ported into any php based system

  • This class is heavily based on the WordPress plugin API and most (if not all) of the code comes from there.

Head Over to http://bainternet.github.io/PHP-Hooks/ For more info


How to Use?

Simple, Include the class file in your application bootstrap (setup/load/configuration or whatever you call it) and start hooking your filter and action hooks using the global $hooks. Ex:

include_once('php-hooks.php');
global $hooks;
$hooks->add_action('header_action','echo_this_in_header');

function echo_this_in_header(){
   echo 'this came from a hooked function';
}

then all that is left for you is to call the hooked function when you want anywhere in your aplication, EX:

echo '<div id="extra_header">';
global $hooks;
$hooks->do_action('header_action');
echo '</div>';

and you output will be:

<div id="extra_header">this came from a hooked function</div>

Methods

ACTIONS:

add_action Hooks a function on to a specific action.

 - @access public
 - @since 0.1
 - @param string $tag The name of the action to which the $function_to_add is hooked.
 - @param callback $function_to_add The name of the function you wish to be called.
 - @param int $priority optional. Used to specify the order in which the functions associated with a particular action are executed (default: 10). Lower numbers correspond with earlier execution, and functions with the same priority are executed in the order in which they were added to the action.
 - @param int $accepted_args optional. The number of arguments the function accept (default 1).

do_action Execute functions hooked on a specific action hook.

 - @access public
 - @since 0.1
 - @param string $tag The name of the action to be executed.
 - @param mixed $arg,... Optional additional arguments which are passed on to the functions hooked to the action.
 - @return null Will return null if $tag does not exist

remove_action Removes a function from a specified action hook.

 - @access public
 - @since 0.1
 - @param string $tag The action hook to which the function to be removed is hooked.
 - @param callback $function_to_remove The name of the function which should be removed.
 - @param int $priority optional The priority of the function (default: 10).
 - @return boolean Whether the function is removed.

has_action Check if any action has been registered for a hook.

 -  @access public
 -  @since 0.1
 -  @param string $tag The name of the action hook.
 -  @param callback $function_to_check optional.
 -  @return mixed If $function_to_check is omitted, returns boolean for whether the hook has anything registered.
  When checking a specific function, the priority of that hook is returned, or false if the function is not attached.
  When using the $function_to_check argument, this function may return a non-boolean value that evaluates to false (e.g.) 0, so use the === operator for testing the return value.

did_action Retrieve the number of times an action is fired.

 -  @access public
 -  @since 0.1
 -  @param string $tag The name of the action hook.
 -  @return int The number of times action hook <tt>$tag</tt> is fired

FILTERS:

add_filter Hooks a function or method to a specific filter action.

 - @access public
 -  @since 0.1
 -  @param string $tag The name of the filter to hook the $function_to_add to.
 -  @param callback $function_to_add The name of the function to be called when the filter is applied.
 -  @param int $priority optional. Used to specify the order in which the functions associated with a particular action are executed (default: 10). Lower numbers correspond with earlier execution, and functions with the same priority are executed in the order in which they were added to the action.
 -  @param int $accepted_args optional. The number of arguments the function accept (default 1).
 -  @return boolean true

remove_filter Removes a function from a specified filter hook.

 -  @access public
 -  @since 0.1
 -  @param string $tag The filter hook to which the function to be removed is hooked.
 -  @param callback $function_to_remove The name of the function which should be removed.
 -  @param int $priority optional. The priority of the function (default: 10).
 -  @param int $accepted_args optional. The number of arguments the function accepts (default: 1).
 -  @return boolean Whether the function existed before it was removed.

has_filter Check if any filter has been registered for a hook.

 -   @access public
 -   @since 0.1
 -   @param string $tag The name of the filter hook.
 -   @param callback $function_to_check optional.
 -   @return mixed If $function_to_check is omitted, returns boolean for whether the hook has anything registered.
   When checking a specific function, the priority of that hook is  returned, or false if the function is not attached.
   When using the $function_to_check argument, this function may return a non-boolean value that evaluates to false (e.g.) 0, so use the === operator for testing the return value.

apply_filters Call the functions added to a filter hook.

 -  @access public
 -  @since 0.1
 -  @param string $tag The name of the filter hook.
 -  @param mixed $value The value on which the filters hooked to <tt>$tag</tt> are applied on.
 -  @param mixed $var,... Additional variables passed to the functions hooked to <tt>$tag</tt>.
 -  @return mixed The filtered value after all hooked functions are applied to it.

There are a few more methods but these are the main Ones you'll use :).

Download

You can download this project in either zip or tar formats

You can also clone the project with Git by running:

$ git clone git://github.com/bainternet/PHP-Hooks.git

License

Since this class is derived from the WordPress Plugin API so are the license and they are GPL http://www.gnu.org/licenses/gpl.html

Analytics

php-hooks's People

Contributors

bainternet avatar garyjones avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

php-hooks's Issues

1 do_action for 3 action ?

I have :
$hooks->do_action('notif_collection_action');

And

$classes_actions = array( 
"notif_collection_action"   => array("Notif\NotifListener"),
"notif_collection_action"   => array("User\NotifListener"),
"notif_collection_action"   => array("Ent\NotifListener"));

foreach ($this->classes_actions as $action => $classes) {foreach ($classes as $class) {
$hooks->add_action($action, array( $class, 'action_method' ));
}}

My problem is that only the last action is done.

Unable to pass variables using apply_filters

i am unable to pass more than 1 values using apply_filters .
function test(){
return $hook->apply_filters('myeelas', 'tet',31,414);
}
$hook->add_filter('myeelas','te',10,3);
function te(){
var_dump(func_get_args());
}

test();

typo: $$ -> $


count((array)$$this->filters[$tag][$priority])

count((array)$this->filters[$tag][$priority])

Suggestion ...

Hi -- just stumbled upon that class I didn't know about. Very nice job!

One question / suggestion now: where is the PHP-HTTP class based off WordPress' Wp_Http class? ;-)

Action & Filter Not Wokring With flexible menu builder

Sir,

I have downloaded your php hooks script and flexible menu builder from github https://github.com/lavary/fleximenu and i have the below code with the filter

$menu = new Menu;
$menu->add('Home', '');
$menu_user = $menu->add('Users', '');
$about = $menu->add('About', 'about');
$about->link->append(' <span class="caret"></span>');
$about->link->attributes(array('class' => 'link-item', 'target' => '_blank'));
$about->attributes('data-model', 'nice');
$about->add('Who we are?', array('url' => 'who-we-are',  'class' => 'navbar-item whoweare','display' => false));
$about->add('What we do?', array('url' => 'what-we-do',  'class' => 'navbar-item whatwedo'));
$menu->add('Portfolio', 'portfolio');
$menu->add('Contact',   'contact');
$hooks->do_action_ref_array( 'menuusers', array( &$menu ) );

$hooks->add_action('menuusers','showusernmenu');
function showusernmenu($menu) {      
    var_dump($menu);
    echo $menu->asUl( array('class' => 'awesome-ul') );
}

its not calling the action function i have vardump do_action_ref_array & add_action and got the return value as true and also debugged and its highlighting at both line [do_action_ref_array & add_action] but my function is not calling

possible to return variables?

is it possible to return a variable in one of the hook functions that run for all the rest of the functions on the same hook?

Composer support

Great work on this project.

Not an issue I know but can we get composer support on this?

Alternatively, I can add composer support and create a pull request?

Richard

PSR-2

Since this class is to be used outside of WP, and since a lot of the code already doesn't follow the WP code standards, it would make sense to format is using the PSR-2 guidelines.

A few bracket changes here and there, spaces insteads of tabs and so on. To be compatible with PSR-1 (which is a requirement of PSR-2), the methods must be named as camelcase, which would be a BC break. camelCase methods is what all of native PHP classes though (it's WP itself which does things differently.)

I can do a PR, but wanted to see if you'd be interested in moving the project in that direction?

Different result on multiple hooks

Please tell me how can I perform like this,

if (!function_exists('app_hooks')) {

    function app_hooks() {
        require_once("php-hooks.php");
        global $hooks;
        return $hooks;
    }

}

app_hooks()->add_filter('my_filter', function ($value) {
    echo $value; //output: some value to be passed
    return "x";
});
app_hooks()->add_filter('my_filter', function ($value) {
    echo $value; //output: xy (but should be 'some value to be passed')
    return "y";
});

$my_tabs = array();
$my_tabs[] = app_hooks()->apply_filters('my_filter', 'some value to be passed');

echo "<pre>";
print_r($my_tabs);
exit;

The $my_tabs is giving this output:

Array
(
    [0] => y
)

But I need both values like this:

Array
(
    [0] => x,
    [1] => y
)

Can you please inform me where am I wrong or if this is possible.
Thanks in advance.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.