MDL-11699 - Further, backwards-compatible, improvement to the build navigation API to simplify a common case. Also, further improvements to the doc comment, so it is easy to use.

This commit is contained in:
tjhunt
2007-10-12 10:35:55 +00:00
parent a1d04b878b
commit 36f4fa0c2d
+35 -11
View File
@@ -3375,31 +3375,55 @@ function print_navigation ($navigation, $separator=0, $return=false) {
* This function will build the navigation string to be used by print_header
* and others.
*
* It will automatically add the site (and course level if appropriate) links.
* It automatically generates the site and course level (if appropriate) links.
*
* If you pass in a $cm object, the method will also generate the activity (e.g. Forums)
* and activityinstances (e.g. General Developer Forum) navigation levels.
* If you pass in a $cm object, the method will also generate the activity (e.g. 'Forums')
* and activityinstances (e.g. 'General Developer Forum') navigation levels.
*
* The fields used are $cm->modname, $cm->name and $cm->course. If you get the $cm object
* using the function get_coursemodule_from_instance or get_coursemodule_from_id (as recommended)
* then this will be done for you automatically. If you don't have $cm->modname or $cm->name,
* this fuction will attempt to find them using the $cm->module and $cm->instance fields, but
* this takes extra database queries, so a warning is printed in developer debug mode.
* If you want to add any further navigation links after the ones this function generates,
* the pass an array of extra link arrays like this:
* array(
* array('name' => $linktext1, 'link' => $url1, 'type' => $linktype1),
* array('name' => $linktext2, 'link' => $url2, 'type' => $linktype2)
* )
* The normal case is to just add one further link, for example 'Editing forum' after
* 'General Developer Forum', with no link.
* To do that, you need to pass
* array(array('name' => $linktext, 'link' => '', 'type' => 'title'))
* However, becuase this is a very common case, you can use a shortcut syntax, and just
* pass the string 'Editing forum', instead of an array as $extranavlinks.
*
* At the moment, the link types only have limited significance. Type 'activity' is
* recognised in order to implement the $CFG->hideactivitytypenavlink feature. Types
* that are known to appear are 'home', 'course', 'activity', 'activityinstance' and 'title'.
* This really needs to be documented better. In the mean time, try to be consistent, it will
* enable people to customise the navigation more in future.
*
* When passing a $cm object, the fields used are $cm->modname, $cm->name and $cm->course.
* If you get the $cm object using the function get_coursemodule_from_instance or
* get_coursemodule_from_id (as recommended) then this will be done for you automatically.
* If you don't have $cm->modname or $cm->name, this fuction will attempt to find them using
* the $cm->module and $cm->instance fields, but this takes extra database queries, so a
* warning is printed in developer debug mode.
*
* @uses $CFG
* @uses $THEME
*
* @param array $extranavlinks - array of associative arrays, keys: name, link, type
* @param mixed $extranavlinks - Normally an array of arrays, keys: name, link, type. If you
* only want one extra item with no link, you can pass a string instead.
* @param mixed $cm - optionally the $cm object, if you want this function to generate the
* activity and activityinstance levels of navigation too.
*
* @return $navigation as an object so it can be differentiated from old style
* navigation strings.
* navigation strings.
*/
function build_navigation($extranavlinks, $cm = null) {
global $CFG, $COURSE;
$navigation = '';
if (is_string($extranavlinks)) {
$extranavlinks = array(array('name' => $extranavlinks, 'link' => '', 'type' => 'title'));
}
$navlinks = array();
//Site name