Release status: stable | |
|---|---|
| Implementation | Tag,Parser function,Special page |
| Description | Provides a dynamic view of the wiki's category structure as a tree. |
| Author(s) | Daniel Kinzler (Duesentriebtalk) |
| Latest version | continuous updates |
| Compatibility policy | Snapshots releases along with MediaWiki. Master is not backward compatible. |
| MediaWiki | 1.25+ |
| License | GNU General Public License 2.0 or later |
| Download | README |
| |
| Translate the CategoryTree extension if it is available at translatewiki.net | |
| Issues | Open tasks ·Report a bug |
TheCategoryTree extension provides a dynamic view of the wiki's category structure as a tree. It usesAJAX to load parts of the tree on demand. CategoryTree was originally written by Daniel Kinzler as an external tool, but was later integrated into the MediaWiki software with the help of Tim Starling.
CategoryTree folder to yourextensions/ directory.cdextensions/gitclonehttps://gerrit.wikimedia.org/r/mediawiki/extensions/CategoryTreewfLoadExtension('CategoryTree');
CategoryTree can be used in three ways:
The CategoryTree extension adds► "expand" widgets to the subcategories listed on category pages.
Example. The result can be seen in the box below and on the right:
<categorytreemode="pages">Manual</categorytree>
The custom tag is called<categorytree>.For example, if you put <categorytree>Foo</categorytree> on a wiki page, it will show the contents of category Foo as a dynamic tree on that page (see example to the right).The tag accepts the following attributes, using a HTML-like syntax:
namespaces option. Possible values:0)10), limited to 200 pages20)100). This puts CategoryTree into "inverse" operation (supported sincer36892, July 2008).$wgCategoryTreeMaxDepth option. (Introduced betweenr20410 andr20840, Mar 30 2007; fully functional even with$wgCategoryTreeDynamicTag sincer36864, July 2008.)depth="0".(Introduced inr20385, March 13 2007.)depth="0" instead.hideroot=on. For example, it will not display the category name Foo.10).0).mode="categories" (configuration constant30). This is equivalent to the old default behavior (before Jun 2008).20). This is the new default behavior (sincer36864, July 2008).showcount="on" (sincer36864, July 2008). This is disabled per default for category trees inlined on pages, but enabled per default in category listings and on Special:CategoryTree.notranslations="on" (sinceGerrit change 526234, November 2019). This is disabled by default. If this option is set to "on", instead of the different translations (e.g. Page, Page/en, Page/fr, Page/de) only the standard translation "Page" is displayed and all translations are suppressed.<categorytree> tag supports all standard HTML attributes for block elements (sincer36864, July 2008; before that, onlystyle was supported).Category is a namespace.Categories are shown in all modes by default, but specifying thenamespaces parameter hides them just like any other namespace not present on the list.If you want to list pages in a given namespace, including pages in subcategories, simply add Category to the namespace list.
Example:
<categorytreemode="pages"namespaces="Main">Manual</categorytree>
<categorytreemode="pages"namespaces="Main Category">Manual</categorytree>
Themode parameter is overridden bynamespaces:
mode=categories;mode=all;mode=pages will be used. It means that if the site configuration hasn't been changed, the following are equivalent (the first two are always equivalent, the third only if$wgCategoryTreeDefaultMode is the defaultCategoryTreeMode::CATEGORIES):<categorytreemode="categories">Manual</categorytree><categorytreenamespaces="Category">Manual</categorytree><categorytree>Manual</categorytree>
Sincer25825 (Sep 13, 2007), you can also useparser function syntax to place a category tree on a page. This works just like the <categorytree> tag, using a different syntax, e.g.{{#categorytree:Foo}}; options can be specified using the syntax for named template parameters, e.g.{{#categorytree:Foo|hideroot|mode=pages}}.
Using the parser function syntax has the advantage that it allows you to use magic words, templates and template parameters when specifying the category to show. Some examples:
{{#categorytree:{{PAGENAME}}}}.{{#categorytree:{{root category}}}} - the name of the root category would be defined by the contents of Template:Root_category.{{#categorytree:{{{1}}}}} in Template:Baz can be called using {{Baz|Foo}}.The special page is called Special:CategoryTree; there you can enter the name of a category and then browse its content.
There are some options you can specify in yourLocalSettings.php file.
0 for category mode,10 for pages,20 for all,100 for parents.$wgCategoryTreeDefaultOptions['hideprefix'] instead.$wgCategoryTreeMaxDepth=[10=>2,20=>2,0=>3,100=>2];.0 (the default - categories),10 (pages), or20 (all).$wgCategoryTreeCategoryPageOptions['mode'] instead.$wgCategoryTreeDefaultOptions['mode']='pages';.By default, when listing subcategories on a category page, each subcategory is followed by an integer, indicating how many subcategories lie beneath it, how many pages it contains, and how many files are in the category (if applicable):
You can change this behavior by overriding the system messageMediaWiki:Categorytree-member-num. It takes five parameters:
| Parameter | Meaning |
|---|---|
| $1 | Number of subcategories |
| $2 | Number of articles (not including category pages or file pages) |
| $3 | Number of uploaded files |
| $4 | Total number of member pages, including category pages and file pages |
| $5 | Something close to ($1 C, $2 P, $3 F) but with anything that is 0 omitted. More precisely, a comma separated list of the number of pages (mediawiki:categorytree-num-pages), subcategories (mediawiki:categorytree-num-categories), and files (mediawiki:categorytree-num-files) in the category, or empty (mediawiki:categorytree-num-empty) in the case the category has no members. In versions prior to those around 1.19 this value was different. Seeolder version of these docs. |
The default value is($5).
Tip: Use theParserFunctions extension to provide if/then/else logic to display different parts conditionally. For example:
{{#ifeq:$1|0||$1 categories}}A configuration to manage commas and spaces when outputting all info:
Abbreviation version:
({{#ifeq:$4|0|empty|{{#ifeq:$1|0||$1 C{{#ifeq:{{#expr:$3+$2}}|0||,}}}} {{#ifeq:$2|0||$2 P{{#ifeq:$3|0||,}}}} {{#ifeq:$3|0||$3 F}}}})Full name version:
({{#ifeq:$4|0|empty|{{#ifeq:$1|0||$1 categories{{#ifeq:{{#expr:$3+$2}}|0||,}}}} {{#ifeq:$2|0||$2 pages{{#ifeq:$3|0||,}}}} {{#ifeq:$3|0||$3 files}}}})$wgUseAjax=true; in your LocalSettings.phpbefore including the extension.$wgCategoryTreeDefaultOptions['namespaces']=[0,NS_CATEGORY,NS_FILE];Since MediaWiki 1.13, CategoryTree can show the number of members of a category, and can show a grey arrow► for tree nodes that do not have any children based on that number. This information is based on the newcategory table. However, populating that table with the current values does not always work when upgrading to 1.13. In that case, run thepopulateCategory.php maintenance script, if necessary with the--force option.
In case you get only one level depth while visualing the tree, try to set in modules/ext.categoryTree.styles.css filedisplay:none; todisplay:inline!important;.
The JavaScript intended to switch the tag style is somehow buggy.
Bots and scripts that parse the HTML of category pages can use thenotree URL parameter to force the traditional output. However, HTML output is generally not stable, so it is recommended to change your script to use theAPI to fetch category listings and similar.
After you implement the CategoryTree plugin and add the code to show the tree, if you see a message that saysCategory Not Found, you need to add some content in your category pages. The category pages can't be red pages, basically. Click your category names, add some text in the category page, and then your tree should work fine.
Make sure the right version of this extension is installed, relative to the version of MediaWiki you have installed. In particular, versions of this extension made for versions of MediaWiki prior to 1.17 are not compatible with MediaWiki 1.17 and greater, and will cause issues where all the paging links on category pages are broken.
Seeabove.
In older versions of CategoryTree, you have to modify the code to make this work: find theefCategoryTreeParserOutput function in the file CategoryTree.php, and remove the condition; i.e. it should then look like this:
functionefCategoryTreeParserOutput(&$outputPage,&$parserOutput){CategoryTree::setHeaders($outputPage);returntrue;}
Sincer36920 (July 2008) with MediaWiki 1.13 (r36917), you can integrate a CategoryTree in the sidebar simply by setting$wgCategoryTreeSidebarRoot to the category you want to use as a root. This only works with skins based upon SkinTemplate however, that is, Modern, Monobook, Chick, Simple, and MySkin, but not Standard, Nostalgia or CologneBlue.
If you want the CategoryTree on a different position in the sidebar, you can reference it onMediaWiki:Sidebar as "categorytree-portlet".
For earlier versions of CategoryTree and/or MediaWiki, you'll need to install a mod to MonoBook.php to enable normal wikitext in the sidebar, seeWikitext in side bar --DJ 19:26, 24 January 2008 (UTC)
To append a link "CategoryTree" to your toolbox (sidebar) add following code to the JavaScript page (e.g.monobook.js) of yourskin and customize the URL "w:Special:CategoryTree".
functionAppendCategoryTreeToSidebar(){try{varnode=document.getElementById("p-tb").getElementsByTagName('div')[0].getElementsByTagName('ul')[0];varaNode=document.createElement('a');varliNode=document.createElement('li');aNode.appendChild(document.createTextNode('CategoryTree'));aNode.setAttribute('href','[[w:Special:CategoryTree]]');liNode.appendChild(aNode);liNode.className='plainlinks';node.appendChild(liNode);}catch(e){// lets just ignore what's happenedreturn;}}addOnloadHook(AppendCategoryTreeToSidebar);
A more generic version of this code can be found atManual:Interface/Sidebar#content of sidebar and toolbox (javascript).
Step by step if works easy:
$wgCategoryTreeSidebarRoot='Category:article_name';
If you want to create a link that goes to the generic categorytree (displayed asCategory tree) when you're on a non-category page, and to a particular categorytree (displayed asView as category tree, with foo being the name of the category you're viewing) when you're on a category page:
** sidebarcategorytree-url|sidebarcategorytree{{#ifeq: {{NAMESPACE}}|Category|View as category tree|Category tree}}{{#ifeq: {{NAMESPACE}}|Category|Special:CategoryTree/{{BASEPAGENAME}}|Special:CategoryTree/Categories}}| This extension is being used on one or moreWikimedia projects. This probably means that the extension is stable and works well enough to be used by such high-traffic websites. Look for this extension's name in Wikimedia'sCommonSettings.php andInitialiseSettings.php configuration files to see where it's installed. A full list of the extensions installed on a particular wiki can be seen on the wiki'sSpecial:Version page. |
| This extension is included in the following wiki farms/hosts and/or packages: |