├── README.md ├── lang └── en │ └── tool_sitenavdemo.php ├── version.php ├── db └── hooks.php ├── index.php └── classes └── local └── hook_callbacks.php /README.md: -------------------------------------------------------------------------------- 1 | Demonstrating hook callback for adding items to site primary navigation 2 | 3 | https://tracker.moodle.org/browse/MDL-79088 -------------------------------------------------------------------------------- /lang/en/tool_sitenavdemo.php: -------------------------------------------------------------------------------- 1 | . 16 | 17 | /** 18 | * English language pack for plugin tool_sitenavdemo 19 | * 20 | * @package tool_sitenavdemo 21 | * @category string 22 | * @copyright 2023 Marina Glancy 23 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 24 | */ 25 | 26 | defined('MOODLE_INTERNAL') || die(); 27 | 28 | $string['pluginname'] = 'Site navigation demo'; 29 | -------------------------------------------------------------------------------- /version.php: -------------------------------------------------------------------------------- 1 | . 16 | 17 | /** 18 | * Version information for plugin tool_sitenavdemo 19 | * 20 | * @package tool_sitenavdemo 21 | * @copyright 2023 Marina Glancy 22 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 | */ 24 | 25 | defined('MOODLE_INTERNAL') || die(); 26 | 27 | $plugin->component = 'tool_sitenavdemo'; 28 | $plugin->release = '1.0'; 29 | $plugin->version = 2023082102; 30 | $plugin->requires = 2023081800.00; 31 | $plugin->maturity = MATURITY_STABLE; 32 | -------------------------------------------------------------------------------- /db/hooks.php: -------------------------------------------------------------------------------- 1 | . 16 | 17 | /** 18 | * Hook callbacks for plugin tool_sitenavdemo 19 | * 20 | * @package tool_sitenavdemo 21 | * @copyright 2023 Marina Glancy 22 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 | */ 24 | 25 | defined('MOODLE_INTERNAL') || die(); 26 | 27 | $callbacks = [ 28 | 29 | [ 30 | 'hook' => core\hook\navigation\primary_extend::class, 31 | 'callback' => 'tool_sitenavdemo\local\hook_callbacks::extend_primary_navigation', 32 | 'priority' => '0', 33 | ], 34 | ]; 35 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | . 16 | 17 | /** 18 | * TODO describe file index 19 | * 20 | * @package tool_sitenavdemo 21 | * @copyright 2023 Marina Glancy 22 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 | */ 24 | 25 | require_once(__DIR__ . '/../../../config.php'); 26 | 27 | $view = optional_param('view', '', PARAM_TEXT); 28 | 29 | $baseurl = new moodle_url('/admin/tool/sitenavdemo/index.php', ['view' => $view]); 30 | $PAGE->set_url($baseurl); 31 | $PAGE->set_context(context_system::instance()); 32 | 33 | $title = get_string('pluginname', 'tool_sitenavdemo'); 34 | $PAGE->set_title($title); 35 | $PAGE->set_heading($SITE->fullname); 36 | 37 | echo $OUTPUT->header(); 38 | echo $OUTPUT->heading($title); 39 | echo "Welcome to sitenavdemo!. This is page: " . s($view); 40 | echo $OUTPUT->footer(); -------------------------------------------------------------------------------- /classes/local/hook_callbacks.php: -------------------------------------------------------------------------------- 1 | . 16 | 17 | namespace tool_sitenavdemo\local; 18 | 19 | /** 20 | * Hook callbacks for tool_sitenavdemo 21 | * 22 | * @package tool_sitenavdemo 23 | * @copyright 2023 Marina Glancy 24 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 25 | */ 26 | class hook_callbacks { 27 | 28 | /** 29 | * Extends primary navigation 30 | * 31 | * @param \core\hook\navigation\extend_primary_navigation $hook 32 | */ 33 | public static function extend_primary_navigation(\core\hook\navigation\primary_extend $hook): void { 34 | $primarynav = $hook->get_primaryview(); 35 | 36 | $primarynav->add( 37 | 'Custom item 1', 38 | new \moodle_url('/admin/tool/sitenavdemo/index.php', ['view' => 'Custom item 1']), 39 | \navigation_node::TYPE_ROOTNODE, 40 | null, 41 | 'custom-1' 42 | ); 43 | 44 | $node = $primarynav->add( 45 | 'Custom menu', 46 | null, 47 | \navigation_node::NODETYPE_BRANCH, 48 | null, 49 | 'custom-0' 50 | ); 51 | 52 | $node->add( 53 | 'Custom item 2', 54 | new \moodle_url('/admin/tool/sitenavdemo/index.php', ['view' => 'Custom item 2']), 55 | \navigation_node::TYPE_ROOTNODE, 56 | null, 57 | 'custom-2' 58 | ); 59 | 60 | $node->add( 61 | 'Custom item 3', 62 | new \moodle_url('/admin/tool/sitenavdemo/index.php', ['view' => 'Custom item 3']), 63 | \navigation_node::TYPE_ROOTNODE, 64 | null, 65 | 'custom-3' 66 | ); 67 | 68 | $node4 = $node->add( 69 | 'Custom item 4', 70 | new \moodle_url('/admin/tool/sitenavdemo/index.php', ['view' => 'Custom item 4']), 71 | \navigation_node::TYPE_ROOTNODE, 72 | null, 73 | 'custom-4' 74 | ); 75 | 76 | $node4->preceedwithhr = true; 77 | 78 | } 79 | } 80 | --------------------------------------------------------------------------------