MDL-51698 navigationlib: Add crumb trail meta data
This commit is contained in:
committed by
Eloy Lafuente (stronk7)
parent
c3c5e30930
commit
d7238be174
+60
-21
@@ -3084,13 +3084,15 @@ class navbar extends navigation_node {
|
||||
public $children = array();
|
||||
/** @var bool A switch for whether we want to include the root node in the navbar */
|
||||
public $includesettingsbase = false;
|
||||
/** @var navigation_node[] $prependchildren */
|
||||
/** @var breadcrumb_navigation_node[] $prependchildren */
|
||||
protected $prependchildren = array();
|
||||
/**
|
||||
* The almighty constructor
|
||||
*
|
||||
* @param moodle_page $page
|
||||
*/
|
||||
|
||||
|
||||
public function __construct(moodle_page $page) {
|
||||
global $CFG;
|
||||
if (during_initial_install()) {
|
||||
@@ -3141,8 +3143,8 @@ class navbar extends navigation_node {
|
||||
* Gets a navigation node
|
||||
*
|
||||
* @param string|int $key for referencing the navbar nodes
|
||||
* @param int $type navigation_node::TYPE_*
|
||||
* @return navigation_node|bool
|
||||
* @param int $type breadcrumb_navigation_node::TYPE_*
|
||||
* @return breadcrumb_navigation_node|bool
|
||||
*/
|
||||
public function get($key, $type = null) {
|
||||
foreach ($this->children as &$child) {
|
||||
@@ -3158,7 +3160,7 @@ class navbar extends navigation_node {
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Returns an array of navigation_node's that make up the navbar.
|
||||
* Returns an array of breadcrumb_navigation_nodes that make up the navbar.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
@@ -3190,7 +3192,7 @@ class navbar extends navigation_node {
|
||||
// Parse a combined navigation tree
|
||||
while ($settingsactivenode && $settingsactivenode->parent !== null) {
|
||||
if (!$settingsactivenode->mainnavonly) {
|
||||
$items[] = $settingsactivenode;
|
||||
$items[] = new breadcrumb_navigation_node($settingsactivenode);
|
||||
}
|
||||
$settingsactivenode = $settingsactivenode->parent;
|
||||
}
|
||||
@@ -3200,12 +3202,14 @@ class navbar extends navigation_node {
|
||||
}
|
||||
while ($navigationactivenode && $navigationactivenode->parent !== null) {
|
||||
if (!$navigationactivenode->mainnavonly) {
|
||||
$items[] = $navigationactivenode;
|
||||
$items[] = new breadcrumb_navigation_node($navigationactivenode);
|
||||
}
|
||||
if (!empty($CFG->navshowcategories) &&
|
||||
$navigationactivenode->type === self::TYPE_COURSE &&
|
||||
$navigationactivenode->parent->key === 'currentcourse') {
|
||||
$items = array_merge($items, $this->get_course_categories());
|
||||
foreach ($this->get_course_categories() as $item) {
|
||||
$items[] = new breadcrumb_navigation_node($item);
|
||||
}
|
||||
}
|
||||
$navigationactivenode = $navigationactivenode->parent;
|
||||
}
|
||||
@@ -3213,12 +3217,14 @@ class navbar extends navigation_node {
|
||||
// Parse the navigation tree to get the active node
|
||||
while ($navigationactivenode && $navigationactivenode->parent !== null) {
|
||||
if (!$navigationactivenode->mainnavonly) {
|
||||
$items[] = $navigationactivenode;
|
||||
$items[] = new breadcrumb_navigation_node($navigationactivenode);
|
||||
}
|
||||
if (!empty($CFG->navshowcategories) &&
|
||||
$navigationactivenode->type === self::TYPE_COURSE &&
|
||||
$navigationactivenode->parent->key === 'currentcourse') {
|
||||
$items = array_merge($items, $this->get_course_categories());
|
||||
foreach ($this->get_course_categories() as $item) {
|
||||
$items[] = new breadcrumb_navigation_node($item);
|
||||
}
|
||||
}
|
||||
$navigationactivenode = $navigationactivenode->parent;
|
||||
}
|
||||
@@ -3226,18 +3232,18 @@ class navbar extends navigation_node {
|
||||
// Parse the settings navigation to get the active node
|
||||
while ($settingsactivenode && $settingsactivenode->parent !== null) {
|
||||
if (!$settingsactivenode->mainnavonly) {
|
||||
$items[] = $settingsactivenode;
|
||||
$items[] = new breadcrumb_navigation_node($settingsactivenode);
|
||||
}
|
||||
$settingsactivenode = $settingsactivenode->parent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$items[] = new navigation_node(array(
|
||||
'text'=>$this->page->navigation->text,
|
||||
'shorttext'=>$this->page->navigation->shorttext,
|
||||
'key'=>$this->page->navigation->key,
|
||||
'action'=>$this->page->navigation->action
|
||||
$items[] = new breadcrumb_navigation_node(array(
|
||||
'text' => $this->page->navigation->text,
|
||||
'shorttext' => $this->page->navigation->shorttext,
|
||||
'key' => $this->page->navigation->key,
|
||||
'action' => $this->page->navigation->action
|
||||
));
|
||||
|
||||
if (count($this->prependchildren) > 0) {
|
||||
@@ -3274,7 +3280,7 @@ class navbar extends navigation_node {
|
||||
}
|
||||
$url = new moodle_url('/course/index.php', array('categoryid' => $category->id));
|
||||
$name = format_string($category->name, true, array('context' => context_coursecat::instance($category->id)));
|
||||
$categorynode = navigation_node::create($name, $url, self::TYPE_CATEGORY, null, $category->id);
|
||||
$categorynode = breadcrumb_navigation_node::create($name, $url, self::TYPE_CATEGORY, null, $category->id);
|
||||
if (!$category->visible) {
|
||||
$categorynode->hidden = true;
|
||||
}
|
||||
@@ -3287,7 +3293,7 @@ class navbar extends navigation_node {
|
||||
$courses = $this->page->navigation->get('courses');
|
||||
if (!$courses) {
|
||||
// Courses node may not be present.
|
||||
$courses = navigation_node::create(
|
||||
$courses = breadcrumb_navigation_node::create(
|
||||
get_string('courses'),
|
||||
new moodle_url('/course/index.php'),
|
||||
self::TYPE_CONTAINER
|
||||
@@ -3300,9 +3306,9 @@ class navbar extends navigation_node {
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new navigation_node to the navbar, overrides parent::add
|
||||
* Add a new breadcrumb_navigation_node to the navbar, overrides parent::add
|
||||
*
|
||||
* This function overrides {@link navigation_node::add()} so that we can change
|
||||
* This function overrides {@link breadcrumb_navigation_node::add()} so that we can change
|
||||
* the way nodes get added to allow us to simply call add and have the node added to the
|
||||
* end of the navbar
|
||||
*
|
||||
@@ -3345,7 +3351,7 @@ class navbar extends navigation_node {
|
||||
// Set the parent to this node
|
||||
$itemarray['parent'] = $this;
|
||||
// Add the child using the navigation_node_collections add method
|
||||
$this->children[] = new navigation_node($itemarray);
|
||||
$this->children[] = new breadcrumb_navigation_node($itemarray);
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -3390,11 +3396,44 @@ class navbar extends navigation_node {
|
||||
// Set the parent to this node.
|
||||
$itemarray['parent'] = $this;
|
||||
// Add the child node to the prepend list.
|
||||
$this->prependchildren[] = new navigation_node($itemarray);
|
||||
$this->prependchildren[] = new breadcrumb_navigation_node($itemarray);
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Subclass of navigation_node allowing different rendering for the breadcrumbs
|
||||
* in particular adding extra metadata for search engine robots to leverage.
|
||||
*
|
||||
* @package core
|
||||
* @category navigation
|
||||
* @copyright 2015 Brendan Heywood
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class breadcrumb_navigation_node extends navigation_node {
|
||||
|
||||
/**
|
||||
* A proxy constructor
|
||||
*
|
||||
* @param mixed $navnode A navigation_node or an array
|
||||
*/
|
||||
public function __construct($navnode) {
|
||||
if (is_array($navnode)) {
|
||||
parent::__construct($navnode);
|
||||
} else if ($navnode instanceof navigation_node) {
|
||||
|
||||
// Just clone everything.
|
||||
$objvalues = get_object_vars($navnode);
|
||||
foreach ($objvalues as $key => $value) {
|
||||
$this->$key = $value;
|
||||
}
|
||||
} else {
|
||||
throw coding_exception('Not a valid breadcrumb_navigation_node');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Class used to manage the settings option for the current page
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user