| AxKit-App-TABOO documentation | Contained in the AxKit-App-TABOO distribution. |
AxKit::App::TABOO::Data::Plurals::Categories - Data objects to handle multiple Categories in TABOO
Often, you want to retrieve many different categories from the data store, for example all of a certain type. This is a typical situation where this class shoule be used.
new(@dbconnectargs)The constructor. Nothing special.
load(what => fields, limit => {key => value, [...]}, orderby => fields, entries => number, withcontent => boolean)This load method can be used to retrieve a number of entries from a
data store. It uses named parameters, the first what is used to
determine which fields to retrieve. It is a string consisting of a
commaseparated list of fields, as specified in the data store. The
limit argument is to be used to determine which records to
retrieve, these will be combined by logical AND. You may also supply a
orderby argument, which is an expression used to determine the
order of entries returned. Finally, you may supply a entries
argument, which is the maximum number of entries to retrieve. If a
boolean onlycontent is set to true, it will check if there are
articles or stories in the categ category types, and return only
those.
It will retrieve the data, and then call populate() for each of the
records retrieved to ensure that the plural data objects actually
consists of an array of AxKit::App::TABOO::Data::Categorys. But it
calls the internal _load()-method to do the hard work (and that's
in the parent class).
If there is no data that corresponds to the given arguments, this
method will return undef.
Not anything particular at the moment...
See AxKit::App::TABOO.
| AxKit-App-TABOO documentation | Contained in the AxKit-App-TABOO distribution. |
package AxKit::App::TABOO::Data::Plurals::Categories; use strict; use warnings; use Carp; use Data::Dumper; use AxKit::App::TABOO::Data; use AxKit::App::TABOO::Data::Category; use AxKit::App::TABOO::Data::Plurals; use vars qw/@ISA/; @ISA = qw(AxKit::App::TABOO::Data::Plurals); use DBI; use Exception::Class::DBI; our $VERSION = '0.21'; AxKit::App::TABOO::Data::Plurals::Categories->dbtable("categories"); AxKit::App::TABOO::Data::Plurals::Categories->dbfrom("categories");
sub new { my $that = shift; my $class = ref($that) || $that; my $self = { ENTRIES => [], # Internally, some methods finds it useful that the entries are stored in a array of this name. DBCONNECTARGS => \@_, XMLPREFIX => undef, XMLELEMENT => undef, XMLNS => undef, }; bless($self, $class); return $self; }
sub load { my ($self, %args) = @_; my $data = $self->_load(%args); # Does the hard work return undef unless (@{$data}); my $dbh = DBI->connect($self->dbconnectargs()); my @hassomething; if ($args{'onlycontent'}) { my $tmp = $dbh->selectcol_arrayref("SELECT catname FROM categories JOIN articlecats ON (categories.id =articlecats.cat_id) WHERE type='categ' UNION SELECT primcat FROM stories WHERE NOT sectionid='subqueue'"); if (ref($tmp) eq 'ARRAY') { @hassomething = @{$tmp}; } else { return undef; } } my $anything = 0; foreach my $entry (@{$data}) { next if (($args{'onlycontent'}) && (! grep(/^${$entry}{'catname'}$/, @hassomething))); my $cat = AxKit::App::TABOO::Data::Category->new($self->dbconnectargs()); $cat->populate($entry); $cat->onfile; $self->Push($cat); $anything = 1; } return undef unless $anything; return $self; }
1;