Wiki::Toolkit::Plugin::Categoriser - Category management for Wiki::Toolkit.
Uses node metadata to build a model of how nodes are related to each other in terms of categories.
use Wiki::Toolkit; use Wiki::Toolkit::Plugin::Categoriser; my $wiki = Wiki::Toolkit->new( ... ); $wiki->write_node( "Red Lion", "nice beer", $checksum, { category => [ "Pubs", "Pub Food" ] } ) or die "Can't write node"; $wiki->write_node( "Holborn Station", "busy at peak times", $checksum, { category => "Tube Station" } ) or die "Can't write node"; my $categoriser = Wiki::Toolkit::Plugin::Categoriser->new; $wiki->register_plugin( plugin => $categoriser ); my $isa_pub = $categoriser->in_category( category => "Pubs", node => "Red Lion" ); my @categories = $categoriser->categories( node => "Holborn Station" );
my $categoriser = Wiki::Toolkit::Plugin::Categoriser->new; $wiki->register_plugin( plugin => $categoriser );
my $isa_pub = $categoriser->in_category( category => "Pubs", node => "Red Lion" );
Returns true if the node is in the category, and false otherwise. Note that this is case-insensitive, so Pubs is the same category as pubs. I might do something to make it plural-insensitive at some point too.
Pubs
pubs
$wiki->write_node( "Category Pub Food", "mmm food", $checksum, { category => [ "Pubs", "Food", "Category" ] } ) or die "Can't write node"; my @subcats = $categoriser->subcategories( category => "Pubs" ); # will return ( "Pub Food" ) # Or if you prefer CamelCase node names: $wiki->write_node( "CategoryPubFood", "mmm food", $checksum, { category => [ "Pubs", "Food", "Category" ] } ) or die "Can't write node"; my @subcats = $categoriser->subcategories( category => "Pubs" ); # will return ( "PubFood" )
To add a subcategory Foo to a given category Bar, write a node called any one of Foo, Category Foo, or CategoryFoo with metadata indicating that it's in categories Bar and Category.
Foo
Bar
Category Foo
CategoryFoo
Category
Yes, this pays specific attention to the Wiki convention of defining categories by prefacing the category name with Category and creating a node by that name. If different behaviour is required we should probably implement it using an optional argument in the constructor.
my @cats = $categoriser->categories( node => "Holborn Station" );
Returns an array of category names in no particular order.
Wiki::Toolkit
Wiki::Toolkit::Plugin
Kake Pugh (kake@earth.li). The Wiki::Toolkit team (http://www.wiki-toolkit.org/)
Copyright (C) 2003-4 Kake Pugh. All Rights Reserved. Copyright (C) 2006-2009 the Wiki::Toolkit team. All Rights Reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Wiki::Toolkit::Plugin::Categoriser, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Wiki::Toolkit::Plugin::Categoriser
CPAN shell
perl -MCPAN -e shell install Wiki::Toolkit::Plugin::Categoriser
For more information on module installation, please visit the detailed CPAN module installation guide.