App-Chronicle
view release on metacpan or search on metacpan
lib/Chronicle/Plugin/TruncatedBody.pm view on Meta::CPAN
=head1 NAME
Chronicle::Plugin::TruncatedBody - Support for Truncating longer blog posts.
=head1 DESCRIPTION
The module allows you to truncate longer blog posts.
To use this you need to add C<__CUT__> within the post body to
the start of its own separate line.
=cut
=head1 METHODS
Now follows documentation on the available methods.
=cut
package Chronicle::Plugin::TruncatedBody;
use strict;
use warnings;
our $VERSION = "5.1.7";
=head2 on_insert
The C<on_insert> method is automatically invoked when a new blog post
must be inserted into the SQLite database, that might be because a post
is new, or because it has been updated.
The method is designed to return an updated blog-post structure,
after performing any massaging required. If the method returns undef
then the post is not inserted.
If the new entry has a C<__CUT__> on its own line, the text before the
cut is marked as part of the truncated body and a link pointing the
reader to the rest of the article.
The body text is then cleaned by removing C<__CUT__>.
:B<NOTE> If there are multiple __CUT__'s within a file, only the first
correctly placed __CUT__ will be used. Other __CUTS__ will be ignored
and will remain within the body and or in the truncated body in the case of a
incorrectly placed __CUT__ prior to a correctly placed __CUT__.
=cut
sub on_insert
{
my ( $self, %args ) = (@_);
#
# Get access to the post-data, and configuration-object.
#
my $config = $args{ 'config' };
my $data = $args{ 'data' };
#
# Get the body of the post, and the link
#
my $body = $data->{ 'body' };
my $link = defined $data->{ 'link' } ? $data->{ 'link' }->as_string : '';
#
# The link needs to be qualified.
#
my $top = $config->{ 'top' } || "";
$link = $top . $link;
# we are only concerned with first correct cut
if ( $body =~ /^(.+?)\n^__CUT__/ms )
{
# assign the text before the cut to cut and add a link to read more
$data->{ 'truncatedbody' } = $1 . "\n\n<a href=\"$link\">Read More</a>";
# remove the cut from the main body
$data->{ 'body' } =~ s/^(.+?)\n^__CUT__/$1/ms;
}
return ($data);
}
# The order is important as we need to run this before any formatting is
# applied to the post
sub _order
{
1;
( run in 0.524 second using v1.01-cache-2.11-cpan-39bf76dae61 )