CGI::Wiki::Plugin::Categoriser - Category management for CGI::Wiki.


CGI-Wiki-Plugin-Categoriser documentation  | view source Contained in the CGI-Wiki-Plugin-Categoriser distribution.

Index


NAME

Top

CGI::Wiki::Plugin::Categoriser - Category management for CGI::Wiki.

DESCRIPTION

Top

Uses node metadata to build a model of how nodes are related to each other in terms of categories.

SYNOPSIS

Top

  use CGI::Wiki;
  use CGI::Wiki::Plugin::Categoriser;

  my $wiki = CGI::Wiki->new( ... );
  $wiki->write_node( "Red Lion", "nice beer", $checksum,
                     { category => [ "Pubs", "Pub Food" ] } );
  $wiki->write_node( "Holborn Station", "busy at peak times", $checksum,
                     { category => "Tube Station" } );

  my $categoriser = CGI::Wiki::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" );

METHODS

Top

new
  my $categoriser = CGI::Wiki::Plugin::Categoriser->new;
  $wiki->register_plugin( plugin => $categoriser );

in_category
  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.

subcategories
  $wiki->write_node( "Category Pub Food",
                     "pubs that serve food",
                     $checksum,
                     { category => [ "Pubs", "Food", "Category" ] } );
  my @subcategories = $categoriser->subcategories( category => "Pubs" );
  # will return ( "Pub Food" )

  # Or if you prefer CamelCase node names:
  $wiki->write_node( "CategoryPubFood",
                     "pubs that serve food",
                     $checksum,
                     { category => [ "Pubs", "Food", "Category" ] } );
  my @subcategories = $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.

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.

categories
  my @categories = $categoriser->categories( node => "Holborn Station" );

Returns an array of category names in no particular order.

SEE ALSO

Top

AUTHOR

Top

Kake Pugh (kake@earth.li).

COPYRIGHT

Top

TODO

Top

Improve subcategories, do category hierarchy.


CGI-Wiki-Plugin-Categoriser documentation  | view source Contained in the CGI-Wiki-Plugin-Categoriser distribution.