diff options
author | friendica <info@friendica.com> | 2013-11-28 20:17:07 -0800 |
---|---|---|
committer | friendica <info@friendica.com> | 2013-11-28 20:17:07 -0800 |
commit | 7536ed6e449e0d405394155b50f5e1ce96fd7776 (patch) | |
tree | 31ca9f31003d049df3be83c367fe3f4f257bf5bb | |
parent | 8cd9a2c3a944e804c72ef461df801116c6b44ac7 (diff) | |
download | volse-hubzilla-7536ed6e449e0d405394155b50f5e1ce96fd7776.tar.gz volse-hubzilla-7536ed6e449e0d405394155b50f5e1ce96fd7776.tar.bz2 volse-hubzilla-7536ed6e449e0d405394155b50f5e1ce96fd7776.zip |
allow themes to mess with the navbar contents without a custom template. It's done as a callback using a transient plugin hook.
For instance to get rid of the notifications link:
insert_hook('nav','strip_notify');
function strip_notify($a,&$b) {
unset($b['nav']['notifications']);
}
-rwxr-xr-x | boot.php | 3 | ||||
-rw-r--r-- | include/nav.php | 7 | ||||
-rwxr-xr-x | include/plugin.php | 37 |
3 files changed, 42 insertions, 5 deletions
@@ -2459,6 +2459,8 @@ function construct_page(&$a) { * Build the page - now that we have all the components */ + require_once(theme_include('theme_init.php')); + $installing = false; if($a->module == 'setup') @@ -2473,7 +2475,6 @@ function construct_page(&$a) { } } - require_once(theme_include('theme_init.php')); if(($p = theme_include(current_theme() . '.js')) != '') head_add_js($p); diff --git a/include/nav.php b/include/nav.php index 51c1cc583..56644f6fd 100644 --- a/include/nav.php +++ b/include/nav.php @@ -201,16 +201,19 @@ EOT; if($banner === false) $banner = 'red'; + $x = array('nav' => $nav, 'usermenu' => $userinfo ); + call_hooks('nav', $x); + $tpl = get_markup_template('nav.tpl'); $a->page['nav'] .= replace_macros($tpl, array( '$baseurl' => $a->get_baseurl(), '$langselector' => ((get_config('system','select_language')) ? lang_selector() : ''), '$sitelocation' => $sitelocation, - '$nav' => $nav, + '$nav' => $x['nav'], '$banner' => $banner, '$emptynotifications' => t('Nothing new here'), - '$userinfo' => $userinfo, + '$userinfo' => $x['usermenu'], '$localuser' => local_user(), '$sel' => $a->nav_sel, '$apps' => $a->get_apps(), diff --git a/include/plugin.php b/include/plugin.php index d90434b3a..fd58fb7dd 100755 --- a/include/plugin.php +++ b/include/plugin.php @@ -181,12 +181,14 @@ function unregister_hook($hook,$file,$function) { // // It might not be obvious but themes can manually add hooks to the $a->hooks // array in their theme_init() and use this to customise the app behaviour. +// UPDATE: use insert_hook($hookname,$function_name) to do this // function load_hooks() { $a = get_app(); - $a->hooks = array(); + if(! is_array($a->hooks)) + $a->hooks = array(); $r = q("SELECT * FROM hook WHERE true ORDER BY priority DESC"); if($r) { foreach($r as $rr) { @@ -197,6 +199,36 @@ function load_hooks() { } } +/** + * + * @function insert_hook($hook,$fn) + * + * Insert a short-lived hook into the running page request. + * Hooks are normally persistent so that they can be called + * across asynchronous processes such as delivery and poll + * processes. + * + * insert_hook lets you attach a hook callback immediately + * which will not persist beyond the life of this page request + * or the current process. + * + * @param string $hook; + * name of hook to attach callback + * @param string $fn; + * function name of callback handler + * + */ + +function insert_hook($hook,$fn) { + $a = get_app(); + if(! is_array($a->hooks)) + $a->hooks = array(); + if(! array_key_exists($hook,$a->hooks)) + $a->hooks[$hook] = array(); + $a->hooks[$hook][] = array('',$fn); +} + + function call_hooks($name, &$data = null) { @@ -204,7 +236,8 @@ function call_hooks($name, &$data = null) { if((is_array($a->hooks)) && (array_key_exists($name,$a->hooks))) { foreach($a->hooks[$name] as $hook) { - @include_once($hook[0]); + if($hook[0]) + @include_once($hook[0]); if(function_exists($hook[1])) { $func = $hook[1]; $func($a,$data); |